summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk35
-rw-r--r--AndroidManifest.xml644
-rw-r--r--assets/licenses.html247
-rw-r--r--proguard.flags110
-rw-r--r--res-aosp/xml/shortcuts.xml29
-rw-r--r--res/anim/slide_and_fade_in.xml26
-rw-r--r--res/anim/slide_and_fade_in_layout_animation.xml18
-rw-r--r--res/anim/slide_and_fade_out.xml26
-rw-r--r--res/color/contact_list_name_text_color.xml19
-rw-r--r--res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.pngbin153 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.pngbin146 -> 0 bytes
-rw-r--r--res/drawable-hdpi/accounts_empty.pngbin0 -> 2266 bytes
-rw-r--r--res/drawable-hdpi/aggregation_suggestions_bg.9.pngbin573 -> 0 bytes
-rw-r--r--res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.pngbin903 -> 0 bytes
-rw-r--r--res/drawable-hdpi/btn_star_off_normal_holo_light.pngbin1736 -> 0 bytes
-rw-r--r--res/drawable-hdpi/btn_star_on_normal_holo_light.pngbin1467 -> 0 bytes
-rw-r--r--res/drawable-hdpi/contacts_no_account_empty.pngbin0 -> 11716 bytes
-rw-r--r--res/drawable-hdpi/expanding_entry_card_expand_white_24.pngbin589 -> 0 bytes
-rw-r--r--res/drawable-hdpi/fab_blue.pngbin2805 -> 0 bytes
-rw-r--r--res/drawable-hdpi/fab_pink.pngbin0 -> 2317 bytes
-rw-r--r--res/drawable-hdpi/googlelogo_dark20_color_132x44.pngbin0 -> 1714 bytes
-rw-r--r--res/drawable-hdpi/googlelogo_dark20_color_184x60.pngbin0 -> 2155 bytes
-rw-r--r--res/drawable-hdpi/home_empty.pngbin0 -> 11716 bytes
-rw-r--r--res/drawable-hdpi/ic_account_circle_black_24dp.pngbin495 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_add_contact_holo_light.pngbin1228 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_add_group_holo_dark.pngbin2230 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_add_to_circles_black_24.pngbin1043 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_business_black_24dp.pngbin248 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_business_white_120dp.pngbin0 -> 2477 bytes
-rw-r--r--res/drawable-hdpi/ic_camera_alt_black_24dp.pngbin448 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.pngbin1129 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_circles_extended_black_24dp.pngbin448 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_contacts_holo_dark.pngbin1490 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_dialer_sip_black_24dp.pngbin476 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_directions_24dp.pngbin380 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_done_wht_24dp.pngbin341 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_email_24dp.pngbin399 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_event_24dp.pngbin260 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_google_plus_24dp.pngbin726 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_hangout_24dp.pngbin474 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_hangout_video_24dp.pngbin266 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_insert_comment_black_24dp.pngbin242 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_link_grey600_drawable_24dp.pngbin340 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_expander_maximized_holo_light.pngbin501 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_expander_minimized_holo_light.pngbin497 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_people_black_24dp.pngbin378 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_person_avatar.pngbin0 -> 427 bytes
-rw-r--r--res/drawable-hdpi/ic_person_black_128dp.pngbin2383 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_person_black_24dp.pngbin369 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_phone_24dp.pngbin444 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_photo_camera_white_24dp.pngbin364 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_photos_white_24.pngbin291 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_place_24dp.pngbin459 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_public_black_24dp.pngbin609 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_star_24dp.pngbin468 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_star_black_128dp.pngbin3181 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_star_outline_24dp.pngbin596 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_voicemail_avatar.pngbin0 -> 1930 bytes
-rw-r--r--res/drawable-hdpi/label_empty.pngbin0 -> 7979 bytes
-rw-r--r--res/drawable-hdpi/panel_content.9.pngbin207 -> 0 bytes
-rw-r--r--res/drawable-hdpi/product_logo_contacts_color_144.pngbin0 -> 12887 bytes
-rw-r--r--res/drawable-hdpi/product_logo_contacts_color_192.pngbin0 -> 18330 bytes
-rw-r--r--res/drawable-hdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.pngbin462 -> 0 bytes
-rw-r--r--res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.pngbin3161 -> 0 bytes
-rw-r--r--res/drawable-hdpi/spinner_default_holo_dark.9.pngbin327 -> 0 bytes
-rw-r--r--res/drawable-hdpi/sym_action_audiochat_holo_light.pngbin748 -> 0 bytes
-rw-r--r--res/drawable-hdpi/sym_action_videochat_holo_light.pngbin460 -> 0 bytes
-rw-r--r--res/drawable-hdpi/unknown_source.pngbin0 -> 4333 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.pngbin5731 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.pngbin6870 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_contacts_holo_dark.pngbin5773 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/panel_content.9.pngbin197 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.pngbin438 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.pngbin536 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/spinner_default_holo_dark.9.pngbin387 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.pngbin5118 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.pngbin5697 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_contacts_holo_dark.pngbin5123 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/panel_content.9.pngbin166 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.pngbin270 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.pngbin328 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/spinner_default_holo_dark.9.pngbin296 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.pngbin6320 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.pngbin8294 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_contacts_holo_dark.pngbin6637 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/panel_content.9.pngbin218 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.pngbin456 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.pngbin489 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/spinner_default_holo_dark.9.pngbin485 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.pngbin139 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.pngbin133 -> 0 bytes
-rw-r--r--res/drawable-mdpi/accounts_empty.pngbin0 -> 1441 bytes
-rw-r--r--res/drawable-mdpi/aggregation_suggestions_bg.9.pngbin409 -> 0 bytes
-rw-r--r--res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.pngbin585 -> 0 bytes
-rw-r--r--res/drawable-mdpi/btn_star_off_normal_holo_light.pngbin1169 -> 0 bytes
-rw-r--r--res/drawable-mdpi/btn_star_on_normal_holo_light.pngbin1053 -> 0 bytes
-rw-r--r--res/drawable-mdpi/contacts_no_account_empty.pngbin0 -> 6429 bytes
-rw-r--r--res/drawable-mdpi/expanding_entry_card_expand_white_24.pngbin512 -> 0 bytes
-rw-r--r--res/drawable-mdpi/fab_blue.pngbin1841 -> 0 bytes
-rw-r--r--res/drawable-mdpi/fab_pink.pngbin0 -> 1470 bytes
-rw-r--r--res/drawable-mdpi/googlelogo_dark20_color_132x44.pngbin0 -> 1002 bytes
-rw-r--r--res/drawable-mdpi/googlelogo_dark20_color_184x60.pngbin0 -> 1345 bytes
-rw-r--r--res/drawable-mdpi/home_empty.pngbin0 -> 6429 bytes
-rw-r--r--res/drawable-mdpi/ic_account_circle_black_24dp.pngbin331 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_add_contact_holo_light.pngbin875 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_add_group_holo_dark.pngbin1441 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_add_to_circles_black_24.pngbin696 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_business_black_24dp.pngbin184 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_business_white_120dp.pngbin0 -> 2040 bytes
-rw-r--r--res/drawable-mdpi/ic_camera_alt_black_24dp.pngbin326 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.pngbin866 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_circles_extended_black_24dp.pngbin307 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_contacts_holo_dark.pngbin1059 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_dialer_sip_black_24dp.pngbin352 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_directions_24dp.pngbin274 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_done_wht_24dp.pngbin295 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_email_24dp.pngbin302 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_event_24dp.pngbin205 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_google_plus_24dp.pngbin502 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_hangout_24dp.pngbin313 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_hangout_video_24dp.pngbin220 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_insert_comment_black_24dp.pngbin223 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_link_grey600_drawable_24dp.pngbin217 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_expander_maximized_holo_light.pngbin409 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_expander_minimized_holo_light.pngbin407 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_people_black_24dp.pngbin285 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_person_avatar.pngbin0 -> 356 bytes
-rw-r--r--res/drawable-mdpi/ic_person_black_128dp.pngbin1459 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_person_black_24dp.pngbin278 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_phone_24dp.pngbin333 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_photo_camera_white_24dp.pngbin240 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_photos_white_24.pngbin208 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_place_24dp.pngbin318 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_public_black_24dp.pngbin434 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_star_24dp.pngbin351 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_star_black_128dp.pngbin1876 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_star_outline_24dp.pngbin420 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_voicemail_avatar.pngbin0 -> 1314 bytes
-rw-r--r--res/drawable-mdpi/label_empty.pngbin0 -> 5349 bytes
-rw-r--r--res/drawable-mdpi/panel_content.9.pngbin177 -> 0 bytes
-rw-r--r--res/drawable-mdpi/product_logo_contacts_color_144.pngbin0 -> 7963 bytes
-rw-r--r--res/drawable-mdpi/product_logo_contacts_color_192.pngbin0 -> 11363 bytes
-rw-r--r--res/drawable-mdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.pngbin289 -> 0 bytes
-rw-r--r--res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.pngbin2967 -> 0 bytes
-rw-r--r--res/drawable-mdpi/spinner_default_holo_dark.9.pngbin273 -> 0 bytes
-rw-r--r--res/drawable-mdpi/sym_action_audiochat_holo_light.pngbin550 -> 0 bytes
-rw-r--r--res/drawable-mdpi/sym_action_videochat_holo_light.pngbin399 -> 0 bytes
-rw-r--r--res/drawable-mdpi/unknown_source.pngbin0 -> 2059 bytes
-rwxr-xr-xres/drawable-sw600dp/quantum_launchscreen_contacts.xml34
-rw-r--r--res/drawable-v21/floating_action_button.xml25
-rw-r--r--res/drawable-v21/view_pager_tab_background.xml22
-rw-r--r--res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.pngbin172 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.pngbin163 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/accounts_empty.pngbin0 -> 3008 bytes
-rw-r--r--res/drawable-xhdpi/aggregation_suggestions_bg.9.pngbin815 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.pngbin1574 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/btn_star_off_normal_holo_light.pngbin2380 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/btn_star_on_normal_holo_light.pngbin1911 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/contacts_no_account_empty.pngbin0 -> 18638 bytes
-rw-r--r--res/drawable-xhdpi/expanding_entry_card_expand_white_24.pngbin779 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/fab_blue.pngbin4085 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/fab_pink.pngbin0 -> 3184 bytes
-rw-r--r--res/drawable-xhdpi/googlelogo_dark20_color_132x44.pngbin0 -> 2151 bytes
-rw-r--r--res/drawable-xhdpi/googlelogo_dark20_color_184x60.pngbin0 -> 2706 bytes
-rw-r--r--res/drawable-xhdpi/home_empty.pngbin0 -> 18638 bytes
-rw-r--r--res/drawable-xhdpi/ic_account_circle_black_24dp.pngbin633 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_add_contact_holo_light.pngbin1553 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_add_group_holo_dark.pngbin3181 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_add_to_circles_black_24.pngbin1409 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_business_black_24dp.pngbin217 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_business_white_120dp.pngbin0 -> 2916 bytes
-rw-r--r--res/drawable-xhdpi/ic_camera_alt_black_24dp.pngbin533 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.pngbin1451 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_circles_extended_black_24dp.pngbin483 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_contacts_holo_dark.pngbin2070 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_dialer_sip_black_24dp.pngbin539 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_directions_24dp.pngbin380 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_done_wht_24dp.pngbin402 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_email_24dp.pngbin453 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_event_24dp.pngbin264 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_google_plus_24dp.pngbin904 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_hangout_24dp.pngbin499 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_hangout_video_24dp.pngbin326 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_insert_comment_black_24dp.pngbin284 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_link_grey600_drawable_24dp.pngbin388 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.pngbin601 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.pngbin593 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_people_black_24dp.pngbin450 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_person_avatar.pngbin0 -> 593 bytes
-rw-r--r--res/drawable-xhdpi/ic_person_black_128dp.pngbin3645 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_person_black_24dp.pngbin409 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_phone_24dp.pngbin530 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_photo_camera_white_24dp.pngbin446 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_photos_white_24.pngbin341 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_place_24dp.pngbin536 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_public_black_24dp.pngbin773 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_star_24dp.pngbin584 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_star_black_128dp.pngbin4871 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_star_outline_24dp.pngbin791 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_voicemail_avatar.pngbin0 -> 2648 bytes
-rw-r--r--res/drawable-xhdpi/label_empty.pngbin0 -> 10688 bytes
-rw-r--r--res/drawable-xhdpi/panel_content.9.pngbin224 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/product_logo_contacts_color_144.pngbin0 -> 18330 bytes
-rw-r--r--res/drawable-xhdpi/product_logo_contacts_color_192.pngbin0 -> 26284 bytes
-rw-r--r--res/drawable-xhdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.pngbin457 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.pngbin3098 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/spinner_default_holo_dark.9.pngbin408 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/sym_action_audiochat_holo_light.pngbin974 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/sym_action_videochat_holo_light.pngbin544 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/unknown_source.pngbin0 -> 6486 bytes
-rw-r--r--res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.pngbin1166 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/accounts_empty.pngbin0 -> 4693 bytes
-rw-r--r--res/drawable-xxhdpi/btn_star_off_normal_holo_light.pngbin2871 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/btn_star_on_normal_holo_light.pngbin2267 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/contacts_no_account_empty.pngbin0 -> 38965 bytes
-rw-r--r--res/drawable-xxhdpi/expanding_entry_card_expand_white_24.pngbin1652 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/fab_blue.pngbin7009 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/fab_pink.pngbin0 -> 5171 bytes
-rw-r--r--res/drawable-xxhdpi/googlelogo_dark20_color_132x44.pngbin0 -> 2954 bytes
-rw-r--r--res/drawable-xxhdpi/googlelogo_dark20_color_184x60.pngbin0 -> 4215 bytes
-rw-r--r--res/drawable-xxhdpi/home_empty.pngbin0 -> 38965 bytes
-rw-r--r--res/drawable-xxhdpi/ic_account_circle_black_24dp.pngbin906 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_add_contact_holo_light.pngbin2249 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_add_group_holo_dark.pngbin4993 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_add_to_circles_black_24.pngbin2139 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_business_black_24dp.pngbin249 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_business_white_120dp.pngbin0 -> 2541 bytes
-rw-r--r--res/drawable-xxhdpi/ic_camera_alt_black_24dp.pngbin787 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.pngbin1957 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_circles_extended_black_24dp.pngbin676 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_contacts_holo_dark.pngbin3681 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_dialer_sip_black_24dp.pngbin732 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_directions_24dp.pngbin516 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_done_wht_24dp.pngbin449 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_email_24dp.pngbin596 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_event_24dp.pngbin364 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_google_plus_24dp.pngbin1294 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_hangout_24dp.pngbin753 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_hangout_video_24dp.pngbin443 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_insert_comment_black_24dp.pngbin360 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.pngbin562 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.pngbin1454 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.pngbin1475 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_people_black_24dp.pngbin571 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_person_avatar.pngbin0 -> 867 bytes
-rw-r--r--res/drawable-xxhdpi/ic_person_black_128dp.pngbin6469 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_person_black_24dp.pngbin548 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_phone_24dp.pngbin729 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_photo_camera_white_24dp.pngbin666 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_photos_white_24.pngbin429 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_place_24dp.pngbin821 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_public_black_24dp.pngbin1133 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_star_24dp.pngbin834 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_star_black_128dp.pngbin8842 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_star_outline_24dp.pngbin1159 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_voicemail_avatar.pngbin0 -> 3607 bytes
-rw-r--r--res/drawable-xxhdpi/label_empty.pngbin0 -> 16992 bytes
-rw-r--r--res/drawable-xxhdpi/product_logo_contacts_color_144.pngbin0 -> 29839 bytes
-rw-r--r--res/drawable-xxhdpi/product_logo_contacts_color_192.pngbin0 -> 42620 bytes
-rw-r--r--res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.pngbin3109 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/sym_action_audiochat_holo_light.pngbin2094 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/sym_action_videochat_holo_light.pngbin1630 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/accounts_empty.pngbin0 -> 6472 bytes
-rw-r--r--res/drawable-xxxhdpi/contacts_no_account_empty.pngbin0 -> 62021 bytes
-rw-r--r--res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.pngbin1820 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/fab_blue.pngbin9807 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/fab_pink.pngbin0 -> 7206 bytes
-rw-r--r--res/drawable-xxxhdpi/googlelogo_dark20_color_132x44.pngbin0 -> 4201 bytes
-rw-r--r--res/drawable-xxxhdpi/googlelogo_dark20_color_184x60.pngbin0 -> 5942 bytes
-rw-r--r--res/drawable-xxxhdpi/home_empty.pngbin0 -> 62021 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_account_circle_black_24dp.pngbin1191 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_business_black_24dp.pngbin278 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_business_white_120dp.pngbin0 -> 2915 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_camera_alt_black_24dp.pngbin1020 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.pngbin1933 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_circles_extended_black_24dp.pngbin914 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.pngbin975 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_directions_24dp.pngbin634 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_done_wht_24dp.pngbin636 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_email_24dp.pngbin654 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_event_24dp.pngbin454 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_google_plus_24dp.pngbin1691 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_hangout_24dp.pngbin965 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_hangout_video_24dp.pngbin557 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_insert_comment_black_24dp.pngbin448 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.pngbin732 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_people_black_24dp.pngbin722 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_person_avatar.pngbin0 -> 1385 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_person_black_128dp.pngbin10197 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_person_black_24dp.pngbin712 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_phone_24dp.pngbin913 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_photo_camera_white_24dp.pngbin894 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_photos_white_24.pngbin631 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_place_24dp.pngbin1048 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_public_black_24dp.pngbin1475 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_star_24dp.pngbin1071 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_star_black_128dp.pngbin13414 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_star_outline_24dp.pngbin1536 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/product_logo_contacts_color_144.pngbin0 -> 42620 bytes
-rw-r--r--res/drawable-xxxhdpi/product_logo_contacts_color_192.pngbin0 -> 59752 bytes
-rw-r--r--res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.pngbin356 -> 0 bytes
-rw-r--r--res/drawable/ab_dropdown_navigation_item_background.xml23
-rw-r--r--res/drawable/ab_dropdown_navigation_item_background_focused.xml21
-rw-r--r--res/drawable/ab_dropdown_navigation_item_background_pressed.xml21
-rw-r--r--res/drawable/action_bar_item_background.xml25
-rw-r--r--res/drawable/action_bar_item_focused.xml24
-rw-r--r--res/drawable/action_bar_item_pressed.xml24
-rw-r--r--res/drawable/dialog_background_material.xml23
-rw-r--r--res/drawable/drawer_item_background.xml22
-rw-r--r--res/drawable/floating_action_button.xml12
-rw-r--r--res/drawable/gray_action_bar_background.xml22
-rw-r--r--res/drawable/group_list_item_background.xml21
-rw-r--r--res/drawable/ic_close_lt.xml20
-rw-r--r--res/drawable/ic_work_profile.xml17
-rw-r--r--res/drawable/item_background_material_borderless_dark.xml19
-rw-r--r--res/drawable/item_background_material_dark.xml23
-rw-r--r--res/drawable/new_badge_background.xml20
-rw-r--r--res/drawable/quantum_ic_account_circle_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_add_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_arrow_back_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_assistant_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_business_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_call_received_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_camera_alt_vd_theme_24.xml29
-rw-r--r--res/drawable/quantum_ic_cancel_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_circles_ext_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_close_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_content_copy_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_create_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_delete_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_directions_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_done_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_email_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_error_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_event_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_expand_less_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_expand_more_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_hangout_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_hangout_video_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_help_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_history_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_insert_comment_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_label_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_link_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_menu_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_message_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_mic_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_more_vert_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_person_add_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_person_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_phone_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_place_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_public_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_search_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_settings_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_share_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_sim_card_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_smartphone_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_star_border_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_star_vd_theme_24.xml26
-rw-r--r--res/drawable/quantum_ic_videocam_vd_theme_24.xml26
-rwxr-xr-xres/drawable/quantum_launchscreen_contacts.xml34
-rw-r--r--res/drawable/ripple_background.xml19
-rw-r--r--res/drawable/searchedittext_custom_cursor.xml20
-rw-r--r--res/drawable/view_pager_tab_background.xml21
-rw-r--r--res/layout-land/compact_contact_editor_fragment.xml56
-rw-r--r--res/layout-land/contact_editor_fragment.xml55
-rw-r--r--res/layout-land/contacts_unavailable_fragment_content.xml104
-rw-r--r--res/layout-land/empty_group_view.xml59
-rw-r--r--res/layout-land/group_editor_view.xml63
-rw-r--r--res/layout-land/group_source_button.xml57
-rw-r--r--res/layout-land/people_activity_toolbar.xml10
-rw-r--r--res/layout-sw600dp-land/contact_detail_updates_fragment.xml30
-rw-r--r--res/layout-sw600dp-land/contact_editor_activity.xml50
-rw-r--r--res/layout-sw600dp-land/group_browse_list_account_header.xml31
-rw-r--r--res/layout-sw600dp/aggregation_suggestions.xml32
-rw-r--r--res/layout-sw600dp/contact_editor_activity.xml28
-rw-r--r--res/layout-sw600dp/contact_editor_fragment.xml38
-rw-r--r--res/layout-sw600dp/external_group_editor_view.xml72
-rw-r--r--res/layout-sw600dp/group_browse_list_account_header.xml31
-rw-r--r--res/layout-sw600dp/group_detail_fragment.xml89
-rw-r--r--res/layout-sw600dp/group_editor_activity.xml37
-rw-r--r--res/layout-sw600dp/group_editor_view.xml76
-rw-r--r--res/layout-sw600dp/group_source_button.xml49
-rw-r--r--res/layout-sw720dp-land/contact_detail_updates_fragment.xml30
-rw-r--r--res/layout-sw720dp/contact_editor_activity.xml50
-rw-r--r--res/layout-sw720dp/group_browse_list_account_header.xml31
-rw-r--r--res/layout-v23/edit_spinner.xml3
-rw-r--r--res/layout-v23/item_group_membership.xml2
-rw-r--r--res/layout/account_filter_header.xml47
-rw-r--r--res/layout/account_selector_list_item_condensed.xml56
-rw-r--r--res/layout/aggregation_suggestions.xml31
-rw-r--r--res/layout/all_photos_button.xml28
-rw-r--r--res/layout/call_subject_history_list_item.xml29
-rw-r--r--res/layout/compact_account_info.xml70
-rw-r--r--res/layout/compact_contact_editor_activity.xml22
-rw-r--r--res/layout/compact_contact_editor_fields.xml51
-rw-r--r--res/layout/compact_contact_editor_fragment.xml50
-rw-r--r--res/layout/compact_item_kind_section.xml36
-rw-r--r--res/layout/compact_photo_editor_view.xml56
-rw-r--r--res/layout/compact_photo_selection_fragment.xml28
-rw-r--r--res/layout/compact_photo_selection_item.xml49
-rw-r--r--res/layout/confirm_add_detail_activity.xml162
-rw-r--r--res/layout/contact_detail_add_connection_entry_view.xml58
-rw-r--r--res/layout/contact_detail_network_title_entry_view.xml59
-rw-r--r--res/layout/contact_detail_separator_entry_view.xml26
-rw-r--r--res/layout/contact_detail_updates_fragment.xml22
-rw-r--r--res/layout/contact_detail_updates_fragment_container.xml26
-rw-r--r--res/layout/contact_editor_accounts_changed_activity_with_picker.xml19
-rw-r--r--res/layout/contact_editor_accounts_changed_activity_with_text.xml28
-rw-r--r--res/layout/contact_editor_activity.xml45
-rw-r--r--res/layout/contact_editor_fields.xml51
-rw-r--r--res/layout/contact_editor_fragment.xml41
-rw-r--r--res/layout/contact_editor_label_name_dialog.xml19
-rw-r--r--res/layout/contact_list_card.xml27
-rw-r--r--res/layout/contact_list_content.xml105
-rw-r--r--res/layout/contact_list_filter.xml35
-rw-r--r--res/layout/contact_list_filter_custom.xml39
-rw-r--r--res/layout/contact_list_filter_item.xml70
-rw-r--r--res/layout/contact_picker.xml13
-rw-r--r--res/layout/contact_picker_content.xml2
-rw-r--r--res/layout/contact_tile_list.xml49
-rw-r--r--res/layout/contact_tile_list_frequent.xml51
-rw-r--r--res/layout/contacts_drawer_activity.xml51
-rw-r--r--res/layout/contacts_unavailable_fragment.xml2
-rw-r--r--res/layout/contacts_unavailable_fragment_content.xml84
-rw-r--r--res/layout/create_new_contact.xml49
-rw-r--r--res/layout/custom_action_bar.xml39
-rw-r--r--res/layout/custom_contact_list_filter_account.xml60
-rw-r--r--res/layout/custom_contact_list_filter_group.xml90
-rw-r--r--res/layout/default_account_checkbox.xml36
-rw-r--r--res/layout/dialog_call_subject.xml159
-rw-r--r--res/layout/dialog_title.xml29
-rw-r--r--res/layout/directory_header.xml54
-rw-r--r--res/layout/drawer_fragment.xml33
-rw-r--r--res/layout/drawer_header.xml40
-rw-r--r--res/layout/drawer_horizontal_divider.xml31
-rw-r--r--res/layout/drawer_item.xml30
-rw-r--r--res/layout/drawer_primary_item.xml45
-rw-r--r--res/layout/edit_add_field.xml35
-rw-r--r--res/layout/edit_delete_button.xml3
-rw-r--r--res/layout/edit_expansion_view.xml38
-rw-r--r--res/layout/edit_kind_title.xml32
-rw-r--r--res/layout/edit_spinner.xml3
-rw-r--r--res/layout/editor_account_header.xml100
-rw-r--r--res/layout/editor_account_header_expandable.xml86
-rw-r--r--res/layout/editor_account_selector.xml81
-rw-r--r--res/layout/editor_all_rawcontacts_accounts_selector.xml58
-rw-r--r--res/layout/editor_custom_action_bar.xml45
-rw-r--r--res/layout/editor_save_button.xml24
-rw-r--r--res/layout/empty_account_view.xml35
-rw-r--r--res/layout/empty_group_view.xml50
-rw-r--r--res/layout/empty_home_view.xml35
-rw-r--r--res/layout/external_group_editor_view.xml53
-rw-r--r--res/layout/external_group_member_item.xml48
-rw-r--r--res/layout/floating_action_button.xml18
-rw-r--r--res/layout/fragment_sim_import.xml133
-rw-r--r--res/layout/group_account_header_horizontal.xml53
-rw-r--r--res/layout/group_account_header_vertical.xml52
-rw-r--r--res/layout/group_browse_list_account_header.xml31
-rw-r--r--res/layout/group_browse_list_fragment.xml76
-rw-r--r--res/layout/group_browse_list_item.xml80
-rw-r--r--res/layout/group_detail_activity.xml27
-rw-r--r--res/layout/group_detail_fragment.xml60
-rw-r--r--res/layout/group_detail_fragment_empty_view.xml41
-rw-r--r--res/layout/group_editor_activity.xml25
-rw-r--r--res/layout/group_editor_autocomplete_view.xml29
-rw-r--r--res/layout/group_editor_existing_member_list.xml28
-rw-r--r--res/layout/group_editor_fragment.xml25
-rw-r--r--res/layout/group_editor_view.xml56
-rw-r--r--res/layout/group_member_item.xml53
-rw-r--r--res/layout/group_member_suggestion.xml64
-rw-r--r--res/layout/group_name_dialog.xml31
-rw-r--r--res/layout/group_name_edit_dialog.xml42
-rw-r--r--res/layout/group_source_button.xml58
-rw-r--r--res/layout/item_group_membership.xml2
-rw-r--r--res/layout/item_kind_section.xml25
-rw-r--r--res/layout/item_photo_editor.xml84
-rw-r--r--res/layout/item_photo_editor_readonly.xml58
-rw-r--r--res/layout/item_read_only_field.xml12
-rw-r--r--res/layout/join_contact_picker_list_content.xml2
-rw-r--r--res/layout/join_contact_picker_section_header.xml9
-rw-r--r--res/layout/licenses.xml9
-rw-r--r--res/layout/list_section.xml35
-rw-r--r--res/layout/list_separator.xml27
-rw-r--r--res/layout/menu_item_action_view.xml27
-rw-r--r--res/layout/multi_select_send_button.xml24
-rw-r--r--res/layout/name_edit_expansion_view.xml2
-rw-r--r--res/layout/nav_drawer_spacer.xml23
-rw-r--r--res/layout/nav_header_main.xml25
-rw-r--r--res/layout/nick_name_editor_view.xml44
-rw-r--r--res/layout/people_activity.xml42
-rw-r--r--res/layout/people_activity_tabs_lands.xml27
-rw-r--r--res/layout/people_activity_toolbar.xml22
-rw-r--r--res/layout/people_navigation_item.xml32
-rw-r--r--res/layout/phonetic_name_edit_expansion_view.xml40
-rw-r--r--res/layout/phonetic_name_editor_view.xml48
-rw-r--r--res/layout/photo_editor_view.xml57
-rw-r--r--res/layout/pinned_header_list_demo.xml35
-rw-r--r--res/layout/quickcontact_collapsed_suggestion_card.xml5
-rw-r--r--res/layout/quickcontact_content.xml6
-rw-r--r--res/layout/quickcontact_expanding_entry_card_button.xml17
-rw-r--r--res/layout/quickcontact_suggestion_contact_item.xml70
-rw-r--r--res/layout/raw_contact_editor_view.xml76
-rw-r--r--res/layout/raw_contact_list_item.xml76
-rw-r--r--res/layout/raw_contact_readonly_editor_view.xml88
-rw-r--r--res/layout/search_bar_expanded.xml62
-rw-r--r--res/layout/select_account_list_item.xml52
-rw-r--r--res/layout/select_dialog_item.xml53
-rw-r--r--res/layout/selection_bar.xml36
-rw-r--r--res/layout/sim_import_activity.xml21
-rw-r--r--res/layout/sim_import_list_item.xml11
-rw-r--r--res/layout/sim_import_list_item_disabled.xml14
-rw-r--r--res/layout/structured_name_editor_view.xml2
-rw-r--r--res/layout/take_a_photo_button.xml28
-rw-r--r--res/layout/text_fields_editor_view.xml2
-rw-r--r--res/layout/user_profile_header.xml52
-rw-r--r--res/menu/edit_contact.xml16
-rw-r--r--res/menu/edit_contact_photo.xml24
-rw-r--r--res/menu/edit_group.xml23
-rw-r--r--res/menu/group_member_picker.xml25
-rw-r--r--res/menu/group_source.xml21
-rw-r--r--res/menu/items_multi_select.xml24
-rw-r--r--res/menu/people_options.xml53
-rw-r--r--res/menu/quickcontact.xml16
-rw-r--r--res/menu/search_menu.xml9
-rw-r--r--res/menu/star.xml21
-rw-r--r--res/menu/view_contact.xml44
-rw-r--r--res/menu/view_group.xml30
-rw-r--r--res/mipmap-anydpi-v26/ic_contacts_launcher.xml19
-rw-r--r--res/mipmap-hdpi/ic_contacts_launcher.pngbin0 -> 3904 bytes
-rw-r--r--res/mipmap-hdpi/ic_contacts_launcher_foreground.pngbin0 -> 9120 bytes
-rw-r--r--res/mipmap-mdpi/ic_contacts_launcher.pngbin0 -> 2317 bytes
-rw-r--r--res/mipmap-mdpi/ic_contacts_launcher_foreground.pngbin0 -> 5391 bytes
-rw-r--r--res/mipmap-xhdpi/ic_contacts_launcher.pngbin0 -> 5547 bytes
-rw-r--r--res/mipmap-xhdpi/ic_contacts_launcher_foreground.pngbin0 -> 13037 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_contacts_launcher.pngbin0 -> 9316 bytes
-rw-r--r--res/mipmap-xxhdpi/ic_contacts_launcher_foreground.pngbin0 -> 21701 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_contacts_launcher.pngbin0 -> 13284 bytes
-rw-r--r--res/mipmap-xxxhdpi/ic_contacts_launcher_foreground.pngbin0 -> 31101 bytes
-rw-r--r--res/values-af/strings.xml573
-rw-r--r--res/values-am/strings.xml573
-rw-r--r--res/values-ar/strings.xml637
-rw-r--r--res/values-az-rAZ/strings.xml331
-rw-r--r--res/values-az/strings.xml532
-rw-r--r--res/values-b+sr+Latn/strings.xml591
-rw-r--r--res/values-be-rBY/strings.xml353
-rw-r--r--res/values-be/strings.xml546
-rw-r--r--res/values-bg/strings.xml575
-rw-r--r--res/values-bn-rBD/strings.xml331
-rw-r--r--res/values-bn/strings.xml532
-rw-r--r--res/values-bs-rBA/strings.xml342
-rw-r--r--res/values-bs/strings.xml539
-rw-r--r--res/values-ca/strings.xml573
-rw-r--r--res/values-cs/strings.xml605
-rw-r--r--res/values-da/strings.xml573
-rw-r--r--res/values-de/strings.xml573
-rw-r--r--res/values-el/strings.xml573
-rw-r--r--res/values-en-rAU/strings.xml573
-rw-r--r--res/values-en-rGB/strings.xml573
-rw-r--r--res/values-en-rIN/strings.xml573
-rw-r--r--res/values-es-rUS/strings.xml573
-rw-r--r--res/values-es/strings.xml573
-rw-r--r--res/values-et-rEE/strings.xml331
-rw-r--r--res/values-et/strings.xml532
-rw-r--r--res/values-eu-rES/strings.xml331
-rw-r--r--res/values-eu/strings.xml532
-rw-r--r--res/values-fa/strings.xml573
-rw-r--r--res/values-fi/strings.xml573
-rw-r--r--res/values-fr-rCA/strings.xml573
-rw-r--r--res/values-fr/strings.xml573
-rw-r--r--res/values-gl-rES/strings.xml331
-rw-r--r--res/values-gl/strings.xml532
-rw-r--r--res/values-gu-rIN/strings.xml331
-rw-r--r--res/values-gu/strings.xml532
-rw-r--r--res/values-hi/strings.xml573
-rw-r--r--res/values-hr/strings.xml589
-rw-r--r--res/values-hu/strings.xml573
-rw-r--r--res/values-hy-rAM/strings.xml331
-rw-r--r--res/values-hy/strings.xml532
-rw-r--r--res/values-in/strings.xml573
-rw-r--r--res/values-is-rIS/strings.xml331
-rw-r--r--res/values-is/strings.xml532
-rw-r--r--res/values-it/strings.xml573
-rw-r--r--res/values-iw/strings.xml615
-rw-r--r--res/values-ja/donottranslate_config.xml38
-rw-r--r--res/values-ja/strings.xml573
-rw-r--r--res/values-ka-rGE/strings.xml331
-rw-r--r--res/values-ka/strings.xml532
-rw-r--r--res/values-kk-rKZ/strings.xml331
-rw-r--r--res/values-kk/strings.xml532
-rw-r--r--res/values-km-rKH/strings.xml331
-rw-r--r--res/values-km/strings.xml532
-rw-r--r--res/values-kn-rIN/strings.xml331
-rw-r--r--res/values-kn/strings.xml532
-rw-r--r--res/values-ko/donottranslate_config.xml35
-rw-r--r--res/values-ko/strings.xml573
-rw-r--r--res/values-ky-rKG/strings.xml331
-rw-r--r--res/values-ky/strings.xml532
-rw-r--r--res/values-land/dimens.xml34
-rw-r--r--res/values-land/donottranslate_config.xml22
-rw-r--r--res/values-land/integers.xml14
-rw-r--r--res/values-land/styles.xml28
-rw-r--r--res/values-lo-rLA/strings.xml331
-rw-r--r--res/values-lo/strings.xml532
-rw-r--r--res/values-lt/strings.xml605
-rw-r--r--res/values-lv/strings.xml589
-rw-r--r--res/values-mk-rMK/strings.xml331
-rw-r--r--res/values-mk/strings.xml532
-rw-r--r--res/values-ml-rIN/strings.xml331
-rw-r--r--res/values-ml/strings.xml532
-rw-r--r--res/values-mn-rMN/strings.xml331
-rw-r--r--res/values-mn/strings.xml532
-rw-r--r--res/values-mr-rIN/strings.xml331
-rw-r--r--res/values-mr/strings.xml532
-rw-r--r--res/values-ms-rMY/strings.xml331
-rw-r--r--res/values-ms/strings.xml532
-rw-r--r--res/values-my-rMM/strings.xml331
-rw-r--r--res/values-my/strings.xml532
-rw-r--r--res/values-nb/strings.xml577
-rw-r--r--res/values-ne-rNP/strings.xml331
-rw-r--r--res/values-ne/strings.xml532
-rw-r--r--res/values-nl/strings.xml573
-rw-r--r--res/values-pa-rIN/strings.xml331
-rw-r--r--res/values-pa/strings.xml532
-rw-r--r--res/values-pl/strings.xml605
-rw-r--r--res/values-pt-rBR/strings.xml573
-rw-r--r--res/values-pt-rPT/strings.xml573
-rw-r--r--res/values-pt/strings.xml573
-rw-r--r--res/values-ro/strings.xml589
-rw-r--r--res/values-ru/strings.xml609
-rw-r--r--res/values-si-rLK/strings.xml331
-rw-r--r--res/values-si/strings.xml532
-rw-r--r--res/values-sk/strings.xml605
-rw-r--r--res/values-sl/strings.xml605
-rw-r--r--res/values-sq-rAL/strings.xml331
-rw-r--r--res/values-sq/strings.xml532
-rw-r--r--res/values-sr/strings.xml591
-rw-r--r--res/values-sv/strings.xml573
-rw-r--r--res/values-sw/strings.xml573
-rw-r--r--res/values-sw600dp-land/colors.xml19
-rw-r--r--res/values-sw600dp-land/dimens.xml24
-rw-r--r--res/values-sw600dp-land/integers.xml14
-rw-r--r--res/values-sw600dp/dimens.xml72
-rw-r--r--res/values-sw600dp/integers.xml23
-rw-r--r--res/values-sw600dp/styles.xml43
-rw-r--r--res/values-sw720dp-land/dimens.xml26
-rw-r--r--res/values-sw720dp-land/integers.xml28
-rw-r--r--res/values-sw720dp-land/styles.xml18
-rw-r--r--res/values-sw720dp/colors.xml19
-rw-r--r--res/values-sw720dp/dimens.xml6
-rw-r--r--res/values-sw720dp/integers.xml8
-rw-r--r--res/values-ta-rIN/strings.xml331
-rw-r--r--res/values-ta/strings.xml532
-rw-r--r--res/values-te-rIN/strings.xml331
-rw-r--r--res/values-te/strings.xml532
-rw-r--r--res/values-th/strings.xml577
-rw-r--r--res/values-tl/strings.xml573
-rw-r--r--res/values-tr/strings.xml573
-rw-r--r--res/values-uk/strings.xml605
-rw-r--r--res/values-ur-rPK/strings.xml331
-rw-r--r--res/values-ur/strings.xml532
-rw-r--r--res/values-uz-rUZ/strings.xml331
-rw-r--r--res/values-uz/strings.xml532
-rw-r--r--res/values-vi/strings.xml575
-rw-r--r--res/values-w470dp/dimens.xml28
-rw-r--r--res/values-w590dp/dimens.xml28
-rw-r--r--res/values-zh-rCN/donottranslate_config.xml35
-rw-r--r--res/values-zh-rCN/strings.xml573
-rw-r--r--res/values-zh-rHK/strings.xml573
-rw-r--r--res/values-zh-rTW/donottranslate_config.xml35
-rw-r--r--res/values-zh-rTW/strings.xml573
-rw-r--r--res/values-zu/strings.xml573
-rw-r--r--res/values/animation_constants.xml19
-rw-r--r--res/values/attrs.xml69
-rw-r--r--res/values/bools.xml1
-rw-r--r--res/values/colors.xml213
-rw-r--r--res/values/dimens.xml343
-rw-r--r--res/values/donottranslate_config.xml67
-rw-r--r--res/values/ids.xml55
-rw-r--r--res/values/integers.xml39
-rw-r--r--res/values/strings.xml1526
-rw-r--r--res/values/styles.xml513
-rw-r--r--res/xml/preference_about.xml40
-rw-r--r--res/xml/preference_display_options.xml78
-rw-r--r--res/xml/shortcuts.xml29
-rw-r--r--src-bind/com/android/contactsbind/FeatureHighlightHelper.java33
-rw-r--r--src-bind/com/android/contactsbind/FeedbackHelper.java27
-rw-r--r--src-bind/com/android/contactsbind/HelpUtils.java (renamed from src/com/android/contactsbind/HelpUtils.java)0
-rw-r--r--src-bind/com/android/contactsbind/ObjectFactory.java43
-rw-r--r--src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java25
-rw-r--r--src-bind/com/android/contactsbind/experiments/Flags.java49
-rw-r--r--src-bind/com/android/contactsbind/util/UserAgentGenerator.java34
-rw-r--r--src/com/android/contacts/AppCompatContactsActivity.java130
-rw-r--r--src/com/android/contacts/CallUtil.java202
-rw-r--r--src/com/android/contacts/ClipboardUtils.java52
-rw-r--r--src/com/android/contacts/Collapser.java96
-rw-r--r--src/com/android/contacts/ContactPhotoManager.java1749
-rw-r--r--src/com/android/contacts/ContactPresenceIconUtil.java48
-rwxr-xr-xsrc/com/android/contacts/ContactSaveService.java708
-rw-r--r--src/com/android/contacts/ContactStatusUtil.java47
-rw-r--r--src/com/android/contacts/ContactTileLoaderFactory.java108
-rw-r--r--src/com/android/contacts/ContactsActivity.java4
-rw-r--r--src/com/android/contacts/ContactsApplication.java8
-rw-r--r--src/com/android/contacts/ContactsJobService.java44
-rw-r--r--src/com/android/contacts/ContactsUtils.java269
-rw-r--r--src/com/android/contacts/DynamicShortcuts.java599
-rw-r--r--src/com/android/contacts/Experiments.java49
-rw-r--r--src/com/android/contacts/GeoUtil.java60
-rw-r--r--src/com/android/contacts/GroupListLoader.java18
-rw-r--r--src/com/android/contacts/GroupMemberLoader.java124
-rw-r--r--src/com/android/contacts/GroupMetaDataLoader.java15
-rw-r--r--src/com/android/contacts/MoreContactUtils.java243
-rw-r--r--src/com/android/contacts/NonPhoneActivity.java10
-rw-r--r--src/com/android/contacts/ShortcutIntentBuilder.java442
-rw-r--r--src/com/android/contacts/SimImportFragment.java502
-rw-r--r--src/com/android/contacts/SimImportService.java346
-rw-r--r--src/com/android/contacts/SplitAggregateView.java4
-rw-r--r--src/com/android/contacts/TypePrecedence.java2
-rw-r--r--src/com/android/contacts/ViewNotificationService.java4
-rw-r--r--src/com/android/contacts/activities/ActionBarAdapter.java283
-rw-r--r--src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java66
-rw-r--r--src/com/android/contacts/activities/AttachPhotoActivity.java59
-rw-r--r--src/com/android/contacts/activities/CompactContactEditorActivity.java280
-rw-r--r--src/com/android/contacts/activities/ConfirmAddDetailActivity.java909
-rw-r--r--src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java113
-rw-r--r--src/com/android/contacts/activities/ContactEditorActivity.java482
-rw-r--r--src/com/android/contacts/activities/ContactEditorBaseActivity.java385
-rw-r--r--src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java292
-rw-r--r--src/com/android/contacts/activities/ContactSelectionActivity.java416
-rw-r--r--src/com/android/contacts/activities/GroupDetailActivity.java175
-rw-r--r--src/com/android/contacts/activities/GroupEditorActivity.java162
-rw-r--r--src/com/android/contacts/activities/LicenseActivity.java59
-rw-r--r--src/com/android/contacts/activities/PeopleActivity.java1955
-rw-r--r--src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java88
-rw-r--r--src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java53
-rw-r--r--src/com/android/contacts/activities/RequestPermissionsActivity.java102
-rw-r--r--src/com/android/contacts/activities/RequestPermissionsActivityBase.java160
-rwxr-xr-xsrc/com/android/contacts/activities/ShowOrCreateActivity.java7
-rw-r--r--src/com/android/contacts/activities/SimImportActivity.java49
-rw-r--r--src/com/android/contacts/activities/TransactionSafeActivity.java65
-rw-r--r--src/com/android/contacts/compat/CallSdkCompat.java57
-rw-r--r--src/com/android/contacts/compat/CallableCompat.java36
-rw-r--r--src/com/android/contacts/compat/CompatUtils.java286
-rw-r--r--src/com/android/contacts/compat/ContactsCompat.java61
-rw-r--r--src/com/android/contacts/compat/DirectoryCompat.java53
-rw-r--r--src/com/android/contacts/compat/DirectorySdkCompat.java37
-rw-r--r--src/com/android/contacts/compat/EdgeEffectCompat.java1
-rw-r--r--src/com/android/contacts/compat/EventCompat.java58
-rw-r--r--src/com/android/contacts/compat/MultiWindowCompat.java28
-rw-r--r--src/com/android/contacts/compat/PhoneAccountCompat.java101
-rw-r--r--src/com/android/contacts/compat/PhoneAccountSdkCompat.java37
-rw-r--r--src/com/android/contacts/compat/PhoneCompat.java36
-rw-r--r--src/com/android/contacts/compat/PhoneLookupSdkCompat.java23
-rw-r--r--src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java27
-rw-r--r--src/com/android/contacts/compat/PhoneNumberUtilsCompat.java188
-rw-r--r--src/com/android/contacts/compat/PinnedPositionsCompat.java2
-rw-r--r--src/com/android/contacts/compat/ProviderStatusCompat.java5
-rw-r--r--src/com/android/contacts/compat/SdkVersionOverride.java45
-rw-r--r--src/com/android/contacts/compat/TelecomManagerUtil.java31
-rw-r--r--src/com/android/contacts/compat/TelephonyManagerCompat.java171
-rw-r--r--src/com/android/contacts/compat/TelephonyManagerSdkCompat.java38
-rw-r--r--src/com/android/contacts/compat/TelephonyThreadsCompat.java168
-rw-r--r--src/com/android/contacts/compat/telecom/TelecomManagerCompat.java48
-rw-r--r--src/com/android/contacts/database/ContactUpdateUtils.java47
-rw-r--r--src/com/android/contacts/database/EmptyCursor.java84
-rw-r--r--src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java69
-rw-r--r--src/com/android/contacts/database/SimContactDao.java110
-rw-r--r--src/com/android/contacts/database/SimContactDaoImpl.java485
-rw-r--r--src/com/android/contacts/datepicker/DatePickerDialog.java2
-rw-r--r--src/com/android/contacts/detail/ContactDisplayUtils.java72
-rw-r--r--src/com/android/contacts/detail/PhotoSelectionHandler.java25
-rw-r--r--src/com/android/contacts/dialog/CallSubjectDialog.java623
-rw-r--r--src/com/android/contacts/dialog/ClearFrequentsDialog.java81
-rw-r--r--src/com/android/contacts/dialog/IndeterminateProgressDialog.java208
-rw-r--r--src/com/android/contacts/drawer/DrawerAdapter.java447
-rw-r--r--src/com/android/contacts/drawer/DrawerFragment.java313
-rw-r--r--src/com/android/contacts/drawer/ScrimDrawable.java54
-rw-r--r--src/com/android/contacts/editor/AccountHeaderPresenter.java218
-rw-r--r--src/com/android/contacts/editor/AggregationSuggestionEngine.java223
-rw-r--r--src/com/android/contacts/editor/AggregationSuggestionView.java101
-rw-r--r--src/com/android/contacts/editor/BaseRawContactEditorView.java217
-rw-r--r--src/com/android/contacts/editor/CancelEditDialogFragment.java10
-rw-r--r--src/com/android/contacts/editor/CompactContactEditorFragment.java317
-rw-r--r--src/com/android/contacts/editor/CompactKindSectionView.java601
-rw-r--r--src/com/android/contacts/editor/CompactPhotoEditorView.java233
-rw-r--r--src/com/android/contacts/editor/CompactPhotoSelectionFragment.java360
-rw-r--r--src/com/android/contacts/editor/CompactRawContactsEditorView.java1108
-rw-r--r--src/com/android/contacts/editor/ContactEditorBaseFragment.java1725
-rw-r--r--src/com/android/contacts/editor/ContactEditorFragment.java1983
-rw-r--r--src/com/android/contacts/editor/ContactEditorUtils.java265
-rw-r--r--src/com/android/contacts/editor/Editor.java6
-rw-r--r--src/com/android/contacts/editor/EditorAnimator.java1
-rw-r--r--src/com/android/contacts/editor/EditorIntents.java130
-rw-r--r--src/com/android/contacts/editor/EditorUiUtils.java140
-rw-r--r--src/com/android/contacts/editor/EventFieldEditorView.java41
-rw-r--r--src/com/android/contacts/editor/GroupMembershipView.java79
-rw-r--r--src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java2
-rw-r--r--src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java61
-rw-r--r--src/com/android/contacts/editor/KindSectionData.java16
-rw-r--r--src/com/android/contacts/editor/KindSectionDataList.java205
-rw-r--r--src/com/android/contacts/editor/KindSectionView.java612
-rw-r--r--src/com/android/contacts/editor/LabeledEditorView.java45
-rw-r--r--src/com/android/contacts/editor/PhoneticNameEditorView.java154
-rw-r--r--src/com/android/contacts/editor/PhotoEditorView.java333
-rw-r--r--src/com/android/contacts/editor/PhotoSourceDialogFragment.java14
-rw-r--r--src/com/android/contacts/editor/PickRawContactDialogFragment.java246
-rw-r--r--src/com/android/contacts/editor/PickRawContactLoader.java310
-rw-r--r--src/com/android/contacts/editor/RawContactDeltaComparator.java10
-rw-r--r--src/com/android/contacts/editor/RawContactEditorView.java1094
-rw-r--r--src/com/android/contacts/editor/RawContactReadOnlyEditorView.java266
-rw-r--r--src/com/android/contacts/editor/SelectAccountDialogFragment.java162
-rw-r--r--src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java33
-rw-r--r--src/com/android/contacts/editor/StructuredNameEditorView.java196
-rw-r--r--src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java18
-rw-r--r--src/com/android/contacts/editor/TextFieldsEditorView.java49
-rw-r--r--src/com/android/contacts/editor/ViewIdGenerator.java8
-rw-r--r--src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java26
-rw-r--r--src/com/android/contacts/extensions/ExtensionsFactory.java95
-rw-r--r--src/com/android/contacts/format/FormatUtils.java184
-rw-r--r--src/com/android/contacts/format/TextHighlighter.java94
-rw-r--r--src/com/android/contacts/group/GroupBrowseListAdapter.java240
-rw-r--r--src/com/android/contacts/group/GroupBrowseListFragment.java315
-rw-r--r--src/com/android/contacts/group/GroupDetailDisplayUtils.java60
-rw-r--r--src/com/android/contacts/group/GroupDetailFragment.java482
-rw-r--r--src/com/android/contacts/group/GroupEditorFragment.java985
-rw-r--r--src/com/android/contacts/group/GroupListItem.java15
-rw-r--r--src/com/android/contacts/group/GroupMembersAdapter.java179
-rw-r--r--src/com/android/contacts/group/GroupMembersFragment.java908
-rw-r--r--src/com/android/contacts/group/GroupMetaData.java143
-rw-r--r--src/com/android/contacts/group/GroupNameEditDialogFragment.java357
-rw-r--r--src/com/android/contacts/group/GroupUtil.java364
-rw-r--r--src/com/android/contacts/group/SuggestedMemberListAdapter.java379
-rw-r--r--src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java130
-rw-r--r--src/com/android/contacts/interactions/CalendarInteraction.java11
-rw-r--r--src/com/android/contacts/interactions/CalendarInteractionUtils.java4
-rw-r--r--src/com/android/contacts/interactions/CalendarInteractionsLoader.java28
-rw-r--r--src/com/android/contacts/interactions/CallLogInteraction.java40
-rw-r--r--src/com/android/contacts/interactions/CallLogInteractionsLoader.java51
-rw-r--r--src/com/android/contacts/interactions/ContactDeletionInteraction.java29
-rw-r--r--src/com/android/contacts/interactions/ContactInteraction.java1
-rw-r--r--src/com/android/contacts/interactions/ContactInteractionUtil.java50
-rw-r--r--src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java63
-rw-r--r--src/com/android/contacts/interactions/ExportDialogFragment.java234
-rw-r--r--src/com/android/contacts/interactions/GroupCreationDialogFragment.java100
-rw-r--r--src/com/android/contacts/interactions/GroupDeletionDialogFragment.java21
-rw-r--r--src/com/android/contacts/interactions/GroupNameDialogFragment.java95
-rw-r--r--src/com/android/contacts/interactions/ImportDialogFragment.java308
-rw-r--r--src/com/android/contacts/interactions/JoinContactsDialogFragment.java107
-rw-r--r--src/com/android/contacts/interactions/OnBootOrUpgradeReceiver.java35
-rw-r--r--src/com/android/contacts/interactions/SmsInteraction.java8
-rw-r--r--src/com/android/contacts/interactions/SmsInteractionsLoader.java10
-rw-r--r--src/com/android/contacts/interactions/TestLoaderManagerBase.java4
-rw-r--r--src/com/android/contacts/interactions/TouchPointManager.java46
-rw-r--r--src/com/android/contacts/lettertiles/LetterTileDrawable.java287
-rw-r--r--src/com/android/contacts/list/AccountFilterActivity.java199
-rw-r--r--src/com/android/contacts/list/AutoScrollListView.java129
-rw-r--r--src/com/android/contacts/list/ContactBrowseListFragment.java40
-rw-r--r--src/com/android/contacts/list/ContactEntryListAdapter.java786
-rw-r--r--src/com/android/contacts/list/ContactEntryListFragment.java987
-rw-r--r--src/com/android/contacts/list/ContactListAdapter.java444
-rw-r--r--src/com/android/contacts/list/ContactListFilter.java464
-rw-r--r--src/com/android/contacts/list/ContactListFilterController.java199
-rw-r--r--src/com/android/contacts/list/ContactListFilterView.java164
-rw-r--r--src/com/android/contacts/list/ContactListItemView.java1896
-rw-r--r--src/com/android/contacts/list/ContactListPinnedHeaderView.java79
-rw-r--r--src/com/android/contacts/list/ContactPickerFragment.java43
-rw-r--r--src/com/android/contacts/list/ContactTileListFragment.java246
-rw-r--r--src/com/android/contacts/list/ContactsIntentResolver.java32
-rw-r--r--src/com/android/contacts/list/ContactsRequest.java57
-rw-r--r--src/com/android/contacts/list/ContactsSectionIndexer.java128
-rw-r--r--src/com/android/contacts/list/ContactsUnavailableFragment.java110
-rw-r--r--src/com/android/contacts/list/CustomContactListFilterActivity.java991
-rw-r--r--src/com/android/contacts/list/DefaultContactBrowseListFragment.java1214
-rw-r--r--src/com/android/contacts/list/DefaultContactListAdapter.java300
-rw-r--r--src/com/android/contacts/list/DirectoryListLoader.java217
-rw-r--r--src/com/android/contacts/list/DirectoryPartition.java179
-rw-r--r--src/com/android/contacts/list/EmailAddressListAdapter.java6
-rw-r--r--src/com/android/contacts/list/EmailAddressPickerFragment.java3
-rw-r--r--src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java84
-rw-r--r--src/com/android/contacts/list/FavoritesAndContactsLoader.java96
-rw-r--r--src/com/android/contacts/list/GroupMemberPickerFragment.java319
-rw-r--r--src/com/android/contacts/list/GroupMemberTileAdapter.java85
-rw-r--r--src/com/android/contacts/list/HeaderEntryContactListAdapter.java8
-rw-r--r--src/com/android/contacts/list/IndexerListAdapter.java246
-rw-r--r--src/com/android/contacts/list/JoinContactListAdapter.java5
-rw-r--r--src/com/android/contacts/list/JoinContactListFragment.java8
-rw-r--r--src/com/android/contacts/list/LegacyContactListAdapter.java3
-rw-r--r--src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java3
-rw-r--r--src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java6
-rw-r--r--src/com/android/contacts/list/LegacyPostalAddressListAdapter.java3
-rw-r--r--src/com/android/contacts/list/MultiSelectContactsListFragment.java334
-rw-r--r--src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java191
-rw-r--r--src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java140
-rw-r--r--src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java123
-rw-r--r--src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java191
-rw-r--r--src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java125
-rw-r--r--src/com/android/contacts/list/OnContactBrowserActionListener.java5
-rw-r--r--src/com/android/contacts/list/OnContactsUnavailableActionListener.java37
-rw-r--r--src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java48
-rw-r--r--src/com/android/contacts/list/PhoneNumberListAdapter.java657
-rw-r--r--src/com/android/contacts/list/PhoneNumberPickerFragment.java298
-rw-r--r--src/com/android/contacts/list/PinnedHeaderListAdapter.java169
-rw-r--r--src/com/android/contacts/list/PinnedHeaderListView.java581
-rw-r--r--src/com/android/contacts/list/PostalAddressListAdapter.java6
-rw-r--r--src/com/android/contacts/list/PostalAddressPickerFragment.java3
-rw-r--r--src/com/android/contacts/list/ProviderStatusWatcher.java6
-rw-r--r--src/com/android/contacts/list/UiIntentActions.java63
-rw-r--r--src/com/android/contacts/location/CountryDetector.java126
-rw-r--r--src/com/android/contacts/logging/EditorEvent.java40
-rw-r--r--src/com/android/contacts/logging/ListEvent.java94
-rw-r--r--src/com/android/contacts/logging/Logger.java114
-rw-r--r--src/com/android/contacts/logging/QuickContactEvent.java89
-rw-r--r--src/com/android/contacts/logging/ScreenEvent.java38
-rw-r--r--src/com/android/contacts/logging/SearchState.java109
-rw-r--r--src/com/android/contacts/model/AccountTypeManager.java710
-rw-r--r--src/com/android/contacts/model/BuilderWrapper.java52
-rw-r--r--src/com/android/contacts/model/CPOWrapper.java49
-rw-r--r--src/com/android/contacts/model/Contact.java496
-rw-r--r--src/com/android/contacts/model/ContactLoader.java960
-rw-r--r--src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java139
-rw-r--r--src/com/android/contacts/model/DeviceLocalAccountLocator.java105
-rw-r--r--src/com/android/contacts/model/RawContact.java368
-rw-r--r--src/com/android/contacts/model/RawContactDelta.java660
-rw-r--r--src/com/android/contacts/model/RawContactDeltaList.java463
-rw-r--r--src/com/android/contacts/model/RawContactModifier.java1356
-rw-r--r--src/com/android/contacts/model/SimCard.java257
-rw-r--r--src/com/android/contacts/model/SimContact.java260
-rw-r--r--src/com/android/contacts/model/ValuesDelta.java599
-rw-r--r--src/com/android/contacts/model/account/AccountComparator.java71
-rw-r--r--src/com/android/contacts/model/account/AccountDisplayInfo.java100
-rw-r--r--src/com/android/contacts/model/account/AccountDisplayInfoFactory.java110
-rw-r--r--src/com/android/contacts/model/account/AccountInfo.java156
-rw-r--r--src/com/android/contacts/model/account/AccountType.java529
-rw-r--r--src/com/android/contacts/model/account/AccountTypeProvider.java276
-rw-r--r--src/com/android/contacts/model/account/AccountTypeWithDataSet.java99
-rw-r--r--src/com/android/contacts/model/account/AccountWithDataSet.java258
-rw-r--r--src/com/android/contacts/model/account/AccountsLoader.java111
-rw-r--r--src/com/android/contacts/model/account/BaseAccountType.java1469
-rw-r--r--src/com/android/contacts/model/account/DeviceLocalAccountType.java46
-rw-r--r--src/com/android/contacts/model/account/ExchangeAccountType.java318
-rw-r--r--src/com/android/contacts/model/account/ExternalAccountType.java450
-rw-r--r--src/com/android/contacts/model/account/FallbackAccountType.java110
-rw-r--r--src/com/android/contacts/model/account/GoogleAccountType.java206
-rw-r--r--src/com/android/contacts/model/account/SamsungAccountType.java239
-rw-r--r--src/com/android/contacts/model/account/SimAccountType.java124
-rw-r--r--src/com/android/contacts/model/dataitem/CustomDataItem.java42
-rw-r--r--src/com/android/contacts/model/dataitem/DataItem.java248
-rw-r--r--src/com/android/contacts/model/dataitem/DataKind.java140
-rw-r--r--src/com/android/contacts/model/dataitem/EmailDataItem.java48
-rw-r--r--src/com/android/contacts/model/dataitem/EventDataItem.java63
-rw-r--r--src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java40
-rw-r--r--src/com/android/contacts/model/dataitem/IdentityDataItem.java40
-rw-r--r--src/com/android/contacts/model/dataitem/ImDataItem.java113
-rw-r--r--src/com/android/contacts/model/dataitem/NicknameDataItem.java40
-rw-r--r--src/com/android/contacts/model/dataitem/NoteDataItem.java36
-rw-r--r--src/com/android/contacts/model/dataitem/OrganizationDataItem.java64
-rw-r--r--src/com/android/contacts/model/dataitem/PhoneDataItem.java79
-rw-r--r--src/com/android/contacts/model/dataitem/PhotoDataItem.java40
-rw-r--r--src/com/android/contacts/model/dataitem/RelationDataItem.java63
-rw-r--r--src/com/android/contacts/model/dataitem/SipAddressDataItem.java40
-rw-r--r--src/com/android/contacts/model/dataitem/StructuredNameDataItem.java100
-rw-r--r--src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java68
-rw-r--r--src/com/android/contacts/model/dataitem/WebsiteDataItem.java40
-rw-r--r--src/com/android/contacts/preference/AboutPreferenceFragment.java104
-rw-r--r--src/com/android/contacts/preference/ContactsPreferenceActivity.java227
-rw-r--r--src/com/android/contacts/preference/ContactsPreferences.java395
-rw-r--r--src/com/android/contacts/preference/DefaultAccountPreference.java112
-rw-r--r--src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java431
-rw-r--r--src/com/android/contacts/preference/DisplayOrderPreference.java90
-rw-r--r--src/com/android/contacts/preference/PhoneticNameDisplayPreference.java93
-rw-r--r--src/com/android/contacts/preference/SortOrderPreference.java90
-rw-r--r--src/com/android/contacts/quickcontact/Action.java2
-rw-r--r--src/com/android/contacts/quickcontact/DataAction.java28
-rw-r--r--src/com/android/contacts/quickcontact/DirectoryContactUtil.java10
-rw-r--r--src/com/android/contacts/quickcontact/ExpandingEntryCardView.java156
-rw-r--r--src/com/android/contacts/quickcontact/InvisibleContactUtil.java68
-rw-r--r--src/com/android/contacts/quickcontact/QuickContactActivity.java1500
-rw-r--r--src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java4
-rw-r--r--src/com/android/contacts/quickcontact/ResolveCache.java2
-rw-r--r--src/com/android/contacts/quickcontact/WebAddress.java6
-rw-r--r--src/com/android/contacts/testing/InjectedServices.java67
-rw-r--r--src/com/android/contacts/util/AccountFilterUtil.java245
-rw-r--r--src/com/android/contacts/util/AccountSelectionUtil.java196
-rw-r--r--src/com/android/contacts/util/AccountsListAdapter.java119
-rw-r--r--src/com/android/contacts/util/BitmapUtil.java181
-rw-r--r--src/com/android/contacts/util/CommonDateUtils.java41
-rw-r--r--src/com/android/contacts/util/Constants.java29
-rw-r--r--src/com/android/contacts/util/ContactDisplayUtils.java297
-rw-r--r--src/com/android/contacts/util/ContactLoaderUtils.java78
-rw-r--r--src/com/android/contacts/util/ContactPhotoUtils.java6
-rw-r--r--src/com/android/contacts/util/ContactsNotificationChannelsUtil.java44
-rw-r--r--src/com/android/contacts/util/DataStatus.java165
-rw-r--r--src/com/android/contacts/util/DateUtils.java270
-rw-r--r--src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java79
-rw-r--r--src/com/android/contacts/util/EmptyService.java33
-rw-r--r--src/com/android/contacts/util/ImageViewDrawableSetter.java8
-rw-r--r--src/com/android/contacts/util/ImplicitIntentsUtil.java231
-rw-r--r--src/com/android/contacts/util/LocalizedNameResolver.java145
-rw-r--r--src/com/android/contacts/util/MaterialColorMapUtils.java205
-rw-r--r--src/com/android/contacts/util/NameConverter.java158
-rw-r--r--src/com/android/contacts/util/PermissionsUtil.java108
-rw-r--r--src/com/android/contacts/util/PhoneCapabilityTester.java4
-rw-r--r--src/com/android/contacts/util/PhoneNumberFormatter.java89
-rw-r--r--src/com/android/contacts/util/PhoneNumberHelper.java98
-rw-r--r--src/com/android/contacts/util/SchedulingUtils.java1
-rw-r--r--src/com/android/contacts/util/SearchUtil.java204
-rw-r--r--src/com/android/contacts/util/SharedPreferenceUtil.java263
-rw-r--r--src/com/android/contacts/util/StopWatch.java110
-rw-r--r--src/com/android/contacts/util/SyncUtil.java121
-rw-r--r--src/com/android/contacts/util/TelephonyManagerUtils.java71
-rw-r--r--src/com/android/contacts/util/TrafficStatsTags.java21
-rw-r--r--src/com/android/contacts/util/UriUtils.java94
-rw-r--r--src/com/android/contacts/util/ViewUtil.java127
-rw-r--r--src/com/android/contacts/util/WeakAsyncTask.java69
-rw-r--r--src/com/android/contacts/util/concurrent/ContactsExecutors.java242
-rw-r--r--src/com/android/contacts/util/concurrent/FuturesUtil.java59
-rw-r--r--src/com/android/contacts/util/concurrent/ListenableFutureLoader.java156
-rw-r--r--src/com/android/contacts/vcard/CancelActivity.java130
-rw-r--r--src/com/android/contacts/vcard/CancelRequest.java32
-rw-r--r--src/com/android/contacts/vcard/ExportProcessor.java339
-rw-r--r--src/com/android/contacts/vcard/ExportRequest.java35
-rw-r--r--src/com/android/contacts/vcard/ExportVCardActivity.java246
-rw-r--r--src/com/android/contacts/vcard/ImportProcessor.java303
-rw-r--r--src/com/android/contacts/vcard/ImportRequest.java111
-rw-r--r--src/com/android/contacts/vcard/ImportVCardActivity.java811
-rw-r--r--src/com/android/contacts/vcard/ImportVCardDialogFragment.java91
-rw-r--r--src/com/android/contacts/vcard/NfcImportVCardActivity.java305
-rw-r--r--src/com/android/contacts/vcard/NotificationImportExportListener.java320
-rw-r--r--src/com/android/contacts/vcard/ProcessorBase.java75
-rw-r--r--src/com/android/contacts/vcard/SelectAccountActivity.java112
-rw-r--r--src/com/android/contacts/vcard/ShareVCardActivity.java93
-rw-r--r--src/com/android/contacts/vcard/VCardCommonArguments.java27
-rw-r--r--src/com/android/contacts/vcard/VCardImportExportListener.java36
-rw-r--r--src/com/android/contacts/vcard/VCardService.java396
-rw-r--r--src/com/android/contacts/widget/ActivityTouchLinearLayout.java44
-rw-r--r--src/com/android/contacts/widget/CompositeListAdapter.java5
-rw-r--r--src/com/android/contacts/widget/FloatingActionButtonController.java229
-rw-r--r--src/com/android/contacts/widget/LayoutSuppressingImageView.java39
-rw-r--r--src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java39
-rw-r--r--src/com/android/contacts/widget/MultiShrinkScroller.java53
-rw-r--r--src/com/android/contacts/widget/ProportionalLayout.java146
-rw-r--r--src/com/android/contacts/widget/QuickContactImageView.java3
-rw-r--r--src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java280
-rw-r--r--tests/Android.mk20
-rw-r--r--tests/AndroidManifest.xml32
-rw-r--r--tests/res/drawable/ic_contact_picture.pngbin589 -> 0 bytes
-rw-r--r--tests/res/mipmap-hdpi/ic_contacts_launcher.pngbin0 -> 3904 bytes
-rw-r--r--tests/res/mipmap-mdpi/ic_contacts_launcher.pngbin0 -> 2317 bytes
-rw-r--r--tests/res/mipmap-xhdpi/ic_contacts_launcher.pngbin0 -> 5547 bytes
-rw-r--r--tests/res/mipmap-xxhdpi/ic_contacts_launcher.pngbin0 -> 9316 bytes
-rw-r--r--tests/res/mipmap-xxxhdpi/ic_contacts_launcher.pngbin0 -> 13284 bytes
-rw-r--r--tests/res/values/donottranslate_strings.xml22
-rw-r--r--tests/res/xml/contacts_contactsdatakind.xml103
-rw-r--r--tests/res/xml/contacts_fallback.xml96
-rw-r--r--tests/res/xml/contacts_readonly.xml51
-rw-r--r--tests/res/xml/iconset.xml33
-rw-r--r--tests/res/xml/missing_contacts_base.xml38
-rw-r--r--tests/res/xml/missing_contacts_name.xml28
-rw-r--r--tests/res/xml/missing_contacts_name_attr2.xml36
-rw-r--r--tests/res/xml/missing_contacts_name_attr3.xml36
-rw-r--r--tests/res/xml/missing_contacts_name_attr4.xml36
-rw-r--r--tests/res/xml/missing_contacts_name_attr5.xml36
-rw-r--r--tests/res/xml/missing_contacts_name_attr6.xml36
-rw-r--r--tests/res/xml/missing_contacts_name_attr7.xml36
-rw-r--r--tests/res/xml/missing_contacts_photo.xml37
-rw-r--r--tests/res/xml/test_basic_authenticator.xml8
-rw-r--r--tests/res/xml/test_basic_contacts.xml281
-rw-r--r--tests/res/xml/test_basic_syncadapter.xml25
-rw-r--r--tests/src/com/android/contacts/ContactsLaunchPerformance.java2
-rw-r--r--tests/src/com/android/contacts/ContactsUtilsTests.java187
-rw-r--r--tests/src/com/android/contacts/DynamicShortcutsTests.java374
-rw-r--r--tests/src/com/android/contacts/GroupsDaoIntegrationTests.java306
-rw-r--r--tests/src/com/android/contacts/MoreContactUtilsTest.java176
-rw-r--r--tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java99
-rw-r--r--tests/src/com/android/contacts/RunMethodInstrumentation.java151
-rw-r--r--tests/src/com/android/contacts/activities/PeopleActivityTest.java33
-rw-r--r--tests/src/com/android/contacts/activities/SimImportActivityTest.java357
-rw-r--r--tests/src/com/android/contacts/compat/CompatUtilsTest.java139
-rw-r--r--tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java154
-rw-r--r--tests/src/com/android/contacts/database/SimContactDaoTests.java788
-rw-r--r--tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java293
-rw-r--r--tests/src/com/android/contacts/editor/EditorUiUtilsTest.java130
-rw-r--r--tests/src/com/android/contacts/format/FormatUtilsTests.java114
-rw-r--r--tests/src/com/android/contacts/format/SpannedTestUtils.java86
-rw-r--r--tests/src/com/android/contacts/format/TextHighlighterTest.java106
-rw-r--r--tests/src/com/android/contacts/group/GroupUtilTest.java120
-rw-r--r--tests/src/com/android/contacts/interactions/CallLogInteractionsLoaderTest.java2
-rw-r--r--tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java38
-rw-r--r--tests/src/com/android/contacts/interactions/ContactInteractionUtilTest.java65
-rw-r--r--tests/src/com/android/contacts/list/ContactListItemViewTest.java132
-rw-r--r--tests/src/com/android/contacts/model/AccountTypeManagerTest.java140
-rw-r--r--tests/src/com/android/contacts/model/AccountWithDataSetTest.java132
-rw-r--r--tests/src/com/android/contacts/model/ContactLoaderTest.java431
-rw-r--r--tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java218
-rw-r--r--tests/src/com/android/contacts/model/RawContactDeltaListTests.java599
-rw-r--r--tests/src/com/android/contacts/model/RawContactDeltaTests.java379
-rw-r--r--tests/src/com/android/contacts/model/RawContactModifierTests.java1200
-rw-r--r--tests/src/com/android/contacts/model/RawContactTest.java119
-rw-r--r--tests/src/com/android/contacts/model/SimContactTests.java54
-rw-r--r--tests/src/com/android/contacts/model/ValuesDeltaTests.java89
-rw-r--r--tests/src/com/android/contacts/model/account/AccountTypeTest.java133
-rw-r--r--tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java249
-rw-r--r--tests/src/com/android/contacts/model/dataitem/DataItemTests.java457
-rw-r--r--tests/src/com/android/contacts/preference/ContactsPreferencesTest.java239
-rw-r--r--tests/src/com/android/contacts/test/FragmentTestActivity.java47
-rw-r--r--tests/src/com/android/contacts/test/IntegrationTestUtils.java192
-rw-r--r--tests/src/com/android/contacts/test/LaunchPerformanceBase.java50
-rw-r--r--tests/src/com/android/contacts/test/mocks/ContactsMockContext.java95
-rw-r--r--tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java45
-rw-r--r--tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java206
-rw-r--r--tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java89
-rw-r--r--tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java72
-rw-r--r--tests/src/com/android/contacts/test/mocks/MockContentProvider.java699
-rw-r--r--tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java149
-rw-r--r--tests/src/com/android/contacts/tests/AccountsTestHelper.java139
-rw-r--r--tests/src/com/android/contacts/tests/AdbHelpers.java100
-rw-r--r--tests/src/com/android/contacts/tests/ContactsMatchers.java147
-rw-r--r--tests/src/com/android/contacts/tests/FakeAccountType.java98
-rw-r--r--tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java73
-rw-r--r--tests/src/com/android/contacts/tests/FakeSimContactDao.java114
-rw-r--r--tests/src/com/android/contacts/tests/PhoneNumberTestService.java4
-rw-r--r--tests/src/com/android/contacts/tests/SimContactsTestHelper.java179
-rw-r--r--tests/src/com/android/contacts/tests/StringableCursor.java42
-rw-r--r--tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java107
-rw-r--r--tests/src/com/android/contacts/tests/allintents/SelectAccountDialogFragment.java2
-rw-r--r--tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java53
-rw-r--r--tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java145
-rw-r--r--tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java110
-rw-r--r--tests/src/com/android/contacts/tests/testauth/TestSyncService.java40
-rw-r--r--tests/src/com/android/contacts/tests/testauth/TestauthConstants.java21
-rw-r--r--tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java204
-rw-r--r--tests/src/com/android/contacts/util/BitmapUtilTests.java121
-rw-r--r--tests/src/com/android/contacts/util/ContactDisplayUtilTests.java202
-rw-r--r--tests/src/com/android/contacts/util/SearchUtilTest.java114
-rw-r--r--tests/src/com/android/contacts/util/SyncUtilTests.java48
-rw-r--r--tests/src/com/android/contacts/widget/CompositeListAdapterTest.java2
1147 files changed, 112755 insertions, 41501 deletions
diff --git a/Android.mk b/Android.mk
index f0fdce291..57d521ed0 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,7 +3,6 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
-contacts_common_dir := ../ContactsCommon
phone_common_dir := ../PhoneCommon
ifeq ($(TARGET_BUILD_APPS),)
@@ -12,41 +11,57 @@ else
support_library_root_dir := prebuilts/sdk/current/support
endif
-src_dirs := src $(contacts_common_dir)/src $(phone_common_dir)/src
-res_dirs := res res-aosp $(contacts_common_dir)/res $(contacts_common_dir)/icons/res $(phone_common_dir)/res
-asset_dirs := $(contacts_common_dir)/assets
+src_dirs := src src-bind $(phone_common_dir)/src
+res_dirs := res $(phone_common_dir)/res
+asset_dirs := assets
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs)) \
- $(support_library_root_dir)/v7/cardview/res
+ $(support_library_root_dir)/design/res \
+ $(support_library_root_dir)/transition/res \
+ $(support_library_root_dir)/v7/appcompat/res \
+ $(support_library_root_dir)/v7/cardview/res \
+ $(support_library_root_dir)/v7/recyclerview/res
LOCAL_ASSET_DIR := $(addprefix $(LOCAL_PATH)/, $(asset_dirs))
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common \
--extra-packages com.android.phone.common \
- --extra-packages android.support.v7.cardview
+ --extra-packages android.support.design \
+ --extra-packages android.support.transition \
+ --extra-packages android.support.v7.appcompat \
+ --extra-packages android.support.v7.cardview \
+ --extra-packages android.support.v7.recyclerview
LOCAL_STATIC_JAVA_LIBRARIES := \
- com.android.vcard \
android-common \
- guava \
+ android-support-design \
+ android-support-transition \
android-support-v13 \
+ android-support-v7-appcompat \
android-support-v7-cardview \
+ android-support-v7-recyclerview \
android-support-v7-palette \
android-support-v4 \
+ com.android.vcard \
+ guava \
libphonenumber
LOCAL_PACKAGE_NAME := Contacts
LOCAL_CERTIFICATE := shared
LOCAL_PRIVILEGED_MODULE := true
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+LOCAL_PROGUARD_FLAG_FILES := \
+ proguard.flags \
+ ../../../frameworks/support/core-ui/proguard-rules.pro \
+ ../../../frameworks/support/design/proguard-rules.pro \
+ ../../../frameworks/support/v7/recyclerview/proguard-rules.pro
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 21
include $(BUILD_PACKAGE)
-# Use the folloing include to make our test apk.
+# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 54e83167a..58209ae1f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -15,467 +15,517 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.contacts"
- android:versionCode="10422"
- android:versionName="1.4.22">
-
- <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
- <original-package android:name="com.android.contacts" />
-
- <uses-permission android:name="android.permission.CALL_PHONE" />
- <uses-permission android:name="android.permission.READ_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_CONTACTS" />
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.READ_PROFILE" />
- <uses-permission android:name="android.permission.WRITE_PROFILE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.NFC" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.WAKE_LOCK" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.USE_CREDENTIALS" />
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ package="com.android.contacts"
+ android:versionCode="10710"
+ android:versionName="1.7.10">
+
+ <uses-sdk
+ android:minSdkVersion="21"
+ android:targetSdkVersion="25"/>
+
+ <original-package android:name="com.android.contacts"/>
+
+ <!-- Contacts permission listed first because order determines
+ order that permissions are requested with some OEMs -->
+ <uses-permission android:name="android.permission.READ_CONTACTS"/>
+ <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+ <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+ <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
+ <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <uses-permission android:name="android.permission.CALL_PHONE"/>
+ <uses-permission android:name="android.permission.READ_PROFILE"/>
+ <uses-permission android:name="android.permission.WRITE_PROFILE"/>
+ <uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.NFC"/>
+ <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+ <uses-permission android:name="android.permission.WAKE_LOCK"/>
+ <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+ <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+ <uses-permission android:name="android.permission.VIBRATE"/>
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<!-- Following used for QuickContacts -->
- <uses-permission android:name="android.permission.READ_CALL_LOG" />
- <uses-permission android:name="android.permission.READ_SMS" />
- <uses-permission android:name="android.permission.READ_CALENDAR" />
- <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL" />
+ <uses-permission android:name="android.permission.READ_CALL_LOG"/>
+ <uses-permission android:name="android.permission.READ_SMS"/>
+ <uses-permission android:name="android.permission.READ_CALENDAR"/>
+ <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"/>
<!-- Following used for Contact metadata syncing -->
- <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
+ <!-- Following used for getting the status of the contacts sync adapter -->
+ <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+
+ <uses-feature
+ android:name="android.hardware.telephony"
+ android:required="false"/>
<application
android:name="com.android.contacts.ContactsApplication"
- android:label="@string/applicationLabel"
- android:icon="@mipmap/ic_contacts_launcher"
- android:roundIcon="@mipmap/ic_contacts_launcher"
- android:taskAffinity="android.task.contacts"
android:hardwareAccelerated="true"
+ android:icon="@mipmap/ic_contacts_launcher"
+ android:label="@string/applicationLabel"
android:supportsRtl="true"
- android:usesCleartextTraffic="false"
- >
-
+ android:taskAffinity="android.task.contacts"
+ android:usesCleartextTraffic="false">
<!-- The main Contacts activity with the contact list, favorites, and groups. -->
- <activity android:name=".activities.PeopleActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/PeopleTheme"
- android:clearTaskOnLaunch="true"
+ <activity
+ android:name=".activities.PeopleActivity"
+ android:alwaysRetainTaskState="true"
android:launchMode="singleTop"
android:resizeableActivity="true"
- >
+ android:theme="@style/LaunchScreenTheme"
+ android:visibleToInstantApps="true"
+ >
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="android.intent.category.BROWSABLE" />
- <category android:name="android.intent.category.APP_CONTACTS" />
+ <action android:name="android.intent.action.MAIN"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ <category android:name="android.intent.category.BROWSABLE"/>
+ <category android:name="android.intent.category.APP_CONTACTS"/>
+ </intent-filter>
+ <intent-filter>
+ <action android:name="com.android.contacts.action.LIST_DEFAULT"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
+
<intent-filter>
- <action android:name="com.android.contacts.action.LIST_DEFAULT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <action android:name="com.android.contacts.action.LIST_CONTACTS"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
<intent-filter>
- <action android:name="com.android.contacts.action.LIST_CONTACTS" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
<intent-filter>
- <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
<intent-filter>
- <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <action android:name="com.android.contacts.action.LIST_STARRED"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
- <intent-filter android:label="@string/starredList">
- <action android:name="com.android.contacts.action.LIST_STARRED" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <intent-filter>
+ <action android:name="com.android.contacts.action.LIST_FREQUENT"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
- <intent-filter android:label="@string/frequentList">
- <action android:name="com.android.contacts.action.LIST_FREQUENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <intent-filter>
+ <action android:name="com.android.contacts.action.LIST_STREQUENT"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.TAB"/>
</intent-filter>
- <intent-filter android:label="@string/strequentList">
- <action android:name="com.android.contacts.action.LIST_STREQUENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.TAB" />
+ <intent-filter>
+ <action android:name="android.intent.action.SEARCH"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="vnd.android.cursor.dir/contact"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.SEARCH" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
+ <action android:name="android.intent.action.SEARCH"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.SEARCH" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.dir/person"/>
+ <data android:mimeType="vnd.android.cursor.dir/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/group"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/person" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
+ <action android:name="android.intent.action.EDIT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="vnd.android.cursor.item/group"/>
</intent-filter>
- <meta-data android:name="android.app.searchable"
+ <intent-filter>
+ <action android:name="android.intent.action.INSERT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="vnd.android.cursor.dir/group"/>
+ </intent-filter>
+
+ <meta-data
+ android:name="android.app.searchable"
android:resource="@xml/searchable"
- />
+ />
- <meta-data android:name="android.app.shortcuts"
+ <meta-data
+ android:name="android.app.shortcuts"
android:resource="@xml/shortcuts"
- />
+ />
</activity>
- <activity android:name=".activities.ContactSelectionActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/ContactPickerTheme"
- android:launchMode="singleTop"
+ <activity
+ android:name=".activities.ContactSelectionActivity"
android:clearTaskOnLaunch="true"
+ android:launchMode="singleTop"
+ android:theme="@style/ContactPickerTheme"
android:uiOptions="splitActionBarWhenNarrow"
- android:windowSoftInputMode="adjustResize">
+ android:windowSoftInputMode="adjustResize"
+ android:visibleToInstantApps="true">
+ <meta-data android:name="android.app.shortcuts.new_config"
+ android:value="true" />
<intent-filter>
- <action android:name="android.intent.action.INSERT_OR_EDIT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/raw_contact" />
+ <action android:name="android.intent.action.INSERT_OR_EDIT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.item/person"/>
+ <data android:mimeType="vnd.android.cursor.item/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.PICK" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
- <data android:mimeType="vnd.android.cursor.dir/person" />
- <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
- <data android:mimeType="vnd.android.cursor.dir/phone" />
- <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
- <data android:mimeType="vnd.android.cursor.dir/postal-address" />
- <data android:mimeType="vnd.android.cursor.dir/email_v2" />
+ <action android:name="android.intent.action.PICK"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.dir/contact"/>
+ <data android:mimeType="vnd.android.cursor.dir/person"/>
+ <data android:mimeType="vnd.android.cursor.dir/phone_v2"/>
+ <data android:mimeType="vnd.android.cursor.dir/phone"/>
+ <data android:mimeType="vnd.android.cursor.dir/postal-address_v2"/>
+ <data android:mimeType="vnd.android.cursor.dir/postal-address"/>
+ <data android:mimeType="vnd.android.cursor.dir/email_v2"/>
+ <data android:mimeType="vnd.android.cursor.dir/group"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.GET_CONTENT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/phone_v2" />
- <data android:mimeType="vnd.android.cursor.item/phone" />
- <data android:mimeType="vnd.android.cursor.item/postal-address_v2" />
- <data android:mimeType="vnd.android.cursor.item/postal-address" />
+ <action android:name="android.intent.action.GET_CONTENT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.item/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/person"/>
+ <data android:mimeType="vnd.android.cursor.item/phone_v2"/>
+ <data android:mimeType="vnd.android.cursor.item/phone"/>
+ <data android:mimeType="vnd.android.cursor.item/postal-address_v2"/>
+ <data android:mimeType="vnd.android.cursor.item/postal-address"/>
</intent-filter>
<intent-filter>
- <action android:name="com.android.contacts.action.JOIN_CONTACT" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="com.android.contacts.action.JOIN_CONTACT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Backwards compatibility: somebody may have hard coded this activity name -->
- <activity-alias android:name="ContactsListActivity"
+ <activity-alias
+ android:name="ContactsListActivity"
android:targetActivity=".activities.PeopleActivity"
- />
+ />
<!-- Backwards compatibility: "Contacts" from Honeycomb -->
- <activity-alias android:name=".activities.ContactsFrontDoor"
- android:targetActivity=".activities.PeopleActivity"
+ <activity-alias
+ android:name=".activities.ContactsFrontDoor"
android:exported="true"
- />
+ android:targetActivity=".activities.PeopleActivity"
+ />
<!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
- <activity-alias android:name="DialtactsContactsEntryActivity"
- android:targetActivity=".activities.PeopleActivity"
+ <activity-alias
+ android:name="DialtactsContactsEntryActivity"
android:exported="true"
- />
+ android:targetActivity=".activities.PeopleActivity"
+ />
<!-- Used to set options -->
<activity
- android:name=".common.preference.ContactsPreferenceActivity"
+ android:name=".preference.ContactsPreferenceActivity"
+ android:exported="false"
android:label="@string/activity_title_settings"
- android:theme="@style/ContactsPreferencesTheme"
- android:exported="false"/>
+ android:launchMode="singleTop"
+ android:theme="@style/ContactsPreferencesTheme"/>
- <activity android:name=".common.activity.LicenseActivity"
+ <activity
+ android:name=".activities.LicenseActivity"
+ android:exported="true"
android:label="@string/activity_title_licenses"
- android:theme="@style/ContactsPreferencesTheme"
- android:exported="false" />
+ android:theme="@style/ContactsPreferencesTheme"/>
<!-- Used to filter contacts list by account -->
<activity
- android:name=".common.list.AccountFilterActivity"
+ android:name=".list.AccountFilterActivity"
android:label="@string/activity_title_contacts_filter"
- android:theme="@style/ContactListFilterTheme" />
+ android:theme="@style/ContactListFilterTheme"/>
<!-- Used to select display and sync groups -->
<activity
- android:name=".common.list.CustomContactListFilterActivity"
+ android:name=".list.CustomContactListFilterActivity"
android:label="@string/custom_list_filter"
- android:theme="@style/ContactListFilterTheme" />
+ android:theme="@style/ContactListFilterTheme"/>
<activity
- android:name=".common.activity.RequestPermissionsActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/PeopleTheme"
- android:exported="false"/>
+ android:name=".activities.RequestPermissionsActivity"
+ android:exported="false"
+ android:theme="@style/PeopleTheme"/>
<activity
- android:name=".common.activity.RequestDesiredPermissionsActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/PeopleTheme"
- android:exported="false"/>
+ android:name=".activities.RequestDesiredPermissionsActivity"
+ android:exported="false"
+ android:theme="@style/PeopleTheme"/>
<activity
- android:name=".common.activity.RequestImportVCardPermissionsActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/PeopleTheme"
- android:exported="false"/>
+ android:name=".activities.RequestImportVCardPermissionsActivity"
+ android:exported="false"
+ android:theme="@style/PeopleTheme"/>
<activity
android:name=".activities.ShowOrCreateActivity"
- android:label="@string/launcherActivityLabel"
android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
<intent-filter>
- <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="mailto" />
- <data android:scheme="tel" />
+ <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:scheme="mailto"/>
+ <data android:scheme="tel"/>
</intent-filter>
</activity>
- <!-- Views the details of a single group -->
- <activity android:name=".activities.GroupDetailActivity"
- android:label=""
- android:theme="@style/DetailActivityTheme"/>
-
- <!-- Create a new or edit an existing group -->
- <activity
- android:name=".activities.GroupEditorActivity"
- android:theme="@style/EditorActivityTheme"
- android:windowSoftInputMode="adjustResize" />
-
<activity
android:name=".quickcontact.QuickContactActivity"
- android:label="@string/quickContactActivityLabel"
- android:theme="@style/Theme.QuickContact"
- android:launchMode="singleTop"
android:excludeFromRecents="true"
+ android:launchMode="singleTop"
android:taskAffinity=""
+ android:theme="@style/Theme.QuickContact"
android:windowSoftInputMode="stateUnchanged">
<intent-filter>
- <action android:name="com.android.contacts.action.QUICK_CONTACT" />
- <action android:name="android.provider.action.QUICK_CONTACT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/person" />
+ <action android:name="com.android.contacts.action.QUICK_CONTACT"/>
+ <action android:name="android.provider.action.QUICK_CONTACT"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.item/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/person"/>
</intent-filter>
<intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/raw_contact" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.item/person"/>
+ <data android:mimeType="vnd.android.cursor.item/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
</intent-filter>
</activity>
<receiver
android:name=".quickcontact.QuickContactBroadcastReceiver"
- android:exported="false" />
+ android:exported="false"/>
+
+ <!-- Responsible for creating notification channels when boot is completed or when app is
+ re-installed -->
+ <receiver android:name=".interactions.OnBootOrUpgradeReceiver">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
+ <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
+ </intent-filter>
+ </receiver>
- <activity-alias android:name="ContactShortcut"
- android:targetActivity=".activities.ContactSelectionActivity"
+ <activity-alias
+ android:name="ContactShortcut"
+ android:icon="@drawable/logo_quick_contacts_color_44in48dp"
android:label="@string/shortcutContact"
- android:icon="@drawable/logo_quick_contacts_color_44in48dp">
+ android:targetActivity=".activities.ContactSelectionActivity">
<intent-filter>
- <action android:name="android.intent.action.CREATE_SHORTCUT" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity-alias>
- <activity-alias android:name="alias.DialShortcut"
- android:targetActivity=".activities.ContactSelectionActivity"
+ <activity-alias
+ android:name="alias.DialShortcut"
+ android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp"
android:label="@string/shortcutDialContact"
- android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp">
+ android:targetActivity=".activities.ContactSelectionActivity">
<intent-filter>
- <action android:name="android.intent.action.CREATE_SHORTCUT" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.CAR_MODE" />
+ <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.CAR_MODE"/>
</intent-filter>
</activity-alias>
- <activity-alias android:name="alias.MessageShortcut"
- android:targetActivity=".activities.ContactSelectionActivity"
+ <activity-alias
+ android:name="alias.MessageShortcut"
+ android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp"
android:label="@string/shortcutMessageContact"
- android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp">
+ android:targetActivity=".activities.ContactSelectionActivity">
<intent-filter>
- <action android:name="android.intent.action.CREATE_SHORTCUT" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity-alias>
- <!-- Confirm that a single detail will be added to an existing contact -->
- <activity
- android:name=".activities.ConfirmAddDetailActivity"
- android:label="@string/activity_title_confirm_add_detail"
- android:theme="@style/ConfirmAddDetailDialogTheme"
- android:windowSoftInputMode="adjustResize"
- android:exported="false"/>
-
<!-- Accounts changed prompt that can appear when creating a new contact. -->
<activity
android:name=".activities.ContactEditorAccountsChangedActivity"
+ android:exported="false"
android:theme="@style/ContactEditorAccountsChangedActivityTheme"
- android:windowSoftInputMode="adjustResize"
- android:exported="false"/>
+ android:windowSoftInputMode="adjustResize"/>
<!-- Edit or create a contact with only the most important fields displayed initially. -->
<activity
- android:name=".activities.CompactContactEditorActivity"
- android:label="@string/editContactActivityLabel"
- android:theme="@style/EditorActivityTheme"
- android:windowSoftInputMode="stateHidden|adjustResize">
-
- <intent-filter android:label="@string/editContactDescription">
- <action android:name="android.intent.action.EDIT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/raw_contact" />
- </intent-filter>
- <intent-filter android:label="@string/insertContactDescription">
- <action android:name="android.intent.action.INSERT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/person" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
- <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
+ android:name=".activities.ContactEditorActivity"
+ android:theme="@style/EditorActivityTheme">
+
+ <intent-filter>
+ <action android:name="android.intent.action.INSERT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.dir/person"/>
+ <data android:mimeType="vnd.android.cursor.dir/contact"/>
+ <data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
</intent-filter>
</activity>
- <!-- Edit or create a contact with all fields displayed. -->
+ <!-- Keep support for apps that expect the Compact editor -->
+ <activity-alias
+ android:name="com.android.contacts.activities.CompactContactEditorActivity"
+ android:exported="true"
+ android:targetActivity=".activities.ContactEditorActivity">
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.INSERT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.dir/person"/>
+ <data android:mimeType="vnd.android.cursor.dir/contact"/>
+ <data android:mimeType="vnd.android.cursor.dir/raw_contact"/>
+ </intent-filter>
+ </activity-alias>
+
<activity
- android:name=".activities.ContactEditorActivity"
- android:label="@string/editContactActivityLabel"
- android:theme="@style/EditorActivityTheme"
- android:windowSoftInputMode="stateHidden|adjustResize"
- android:exported="false">
-
- <intent-filter android:label="@string/editContactDescription">
- <action android:name="com.android.contacts.action.FULL_EDIT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/raw_contact" />
- </intent-filter>
- <intent-filter android:label="@string/insertContactDescription">
- <action android:name="com.android.contacts.action.FULL_INSERT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/person" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
- <data android:mimeType="vnd.android.cursor.dir/raw_contact" />
+ android:name=".activities.ContactEditorSpringBoardActivity"
+ android:theme="@style/TransparentThemeAppCompat">
+
+ <intent-filter>
+ <action android:name="android.intent.action.EDIT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+
+ <data android:mimeType="vnd.android.cursor.item/person"/>
+ <data android:mimeType="vnd.android.cursor.item/contact"/>
+ <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
</intent-filter>
</activity>
- <activity android:name=".common.test.FragmentTestActivity">
+ <activity android:name=".test.FragmentTestActivity">
<intent-filter>
- <category android:name="android.intent.category.TEST" />
+ <category android:name="android.intent.category.TEST"/>
</intent-filter>
</activity>
<!-- Stub service used to keep our process alive long enough for
background threads to finish their operations. -->
<service
- android:name=".common.util.EmptyService"
- android:exported="false" />
+ android:name=".util.EmptyService"
+ android:exported="false"/>
<!-- Service to save a contact -->
<service
android:name=".ContactSaveService"
- android:exported="false" />
+ android:exported="false"/>
+
+ <!-- Service to import contacts from the SIM card -->
+ <service
+ android:name=".SimImportService"
+ android:exported="false"/>
<!-- Attaches a photo to a contact. Started from external applications -->
- <activity android:name=".activities.AttachPhotoActivity"
+ <activity
+ android:name=".activities.AttachPhotoActivity"
android:label="@string/attach_photo_dialog_title"
android:taskAffinity="">
<intent-filter>
- <action android:name="android.intent.action.ATTACH_DATA" />
- <data android:mimeType="image/*" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.ATTACH_DATA"/>
+ <data android:mimeType="image/*"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- vCard related -->
- <activity android:name=".common.vcard.ImportVCardActivity"
- android:label="@string/launcherActivityLabel"
+ <activity
+ android:name=".vcard.ImportVCardActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/BackgroundOnlyTheme">
<intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <data android:mimeType="text/directory" />
- <data android:mimeType="text/vcard" />
- <data android:mimeType="text/x-vcard" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.VIEW"/>
+
+ <data android:mimeType="text/directory"/>
+ <data android:mimeType="text/vcard"/>
+ <data android:mimeType="text/x-vcard"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
- <activity android:name=".common.vcard.NfcImportVCardActivity"
- android:label="@string/launcherActivityLabel"
+ <activity
+ android:name=".vcard.NfcImportVCardActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:theme="@style/BackgroundOnlyTheme">
<intent-filter>
- <action android:name="android.nfc.action.NDEF_DISCOVERED" />
- <data android:mimeType="text/vcard" />
- <data android:mimeType="text/x-vcard" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+
+ <data android:mimeType="text/vcard"/>
+ <data android:mimeType="text/x-vcard"/>
+
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
- <activity android:name=".common.vcard.CancelActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/BackgroundOnlyTheme" />
+ <activity
+ android:name=".vcard.CancelActivity"
+ android:theme="@style/BackgroundOnlyTheme"/>
- <activity android:name=".common.vcard.SelectAccountActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/BackgroundOnlyTheme" />
+ <activity
+ android:name=".vcard.SelectAccountActivity"
+ android:theme="@style/BackgroundOnlyTheme"/>
+
+ <activity
+ android:name=".vcard.ExportVCardActivity"
+ android:theme="@style/BackgroundOnlyTheme"/>
+
+ <activity
+ android:name=".vcard.ShareVCardActivity"
+ android:theme="@style/BackgroundOnlyTheme"/>
- <activity android:name=".common.vcard.ExportVCardActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/BackgroundOnlyTheme" />
+ <activity
+ android:name=".activities.SimImportActivity"
+ android:label="@string/sim_import_title"
+ android:theme="@style/PeopleThemeAppCompat.FullScreenDialog.SimImportActivity"/>
- <activity android:name=".common.vcard.ShareVCardActivity"
- android:label="@string/launcherActivityLabel"
- android:theme="@style/BackgroundOnlyTheme" />
<service
- android:name=".common.vcard.VCardService"
- android:exported="false" />
+ android:name=".vcard.VCardService"
+ android:exported="false"/>
<!-- end vCard related -->
<!-- Intercept Dialer Intents for devices without a phone.
@@ -485,31 +535,35 @@
are set lower, so that the user does not see a disambig dialog -->
<activity
android:name="com.android.contacts.NonPhoneActivity"
- android:theme="@style/NonPhoneActivityTheme"
- android:label="@string/launcherActivityLabel"
- >
+ android:theme="@style/NonPhoneActivityTheme">
<intent-filter android:priority="-1">
<action android:name="android.intent.action.MAIN"/>
+
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
<intent-filter android:priority="-1">
<action android:name="android.intent.action.VIEW"/>
+
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
+
<data android:scheme="tel"/>
</intent-filter>
<intent-filter android:priority="-1">
<action android:name="android.intent.action.VIEW"/>
+
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
+
<data android:mimeType="vnd.android.cursor.dir/calls"/>
</intent-filter>
</activity>
- <activity android:name="com.android.contacts.common.dialog.CallSubjectDialog"
- android:theme="@style/Theme.CallSubjectDialogTheme"
- android:windowSoftInputMode="stateVisible|adjustResize">
+ <activity
+ android:name="com.android.contacts.dialog.CallSubjectDialog"
+ android:theme="@style/Theme.CallSubjectDialogTheme"
+ android:windowSoftInputMode="stateVisible|adjustResize">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
</intent-filter>
@@ -522,32 +576,34 @@
(PhoneUtils.sendViewNotificationAsync()). If this service moves, then phone
needs to be changed as well.
-->
- <service android:name=".ViewNotificationService"
- android:permission="android.permission.WRITE_CONTACTS"
- android:exported="true">
+ <service
+ android:name=".ViewNotificationService"
+ android:exported="true"
+ android:permission="android.permission.WRITE_CONTACTS">
<intent-filter>
<action android:name="com.android.contacts.VIEW_NOTIFICATION"/>
<data android:mimeType="vnd.android.cursor.item/contact"/>
</intent-filter>
</service>
- <!-- Broadcast receiver that passively listens to location updates -->
- <receiver android:name="com.android.contacts.common.location.CountryDetector$LocationChangedReceiver"/>
-
- <!-- IntentService to update the user's current country -->
- <service android:name="com.android.contacts.common.location.UpdateCountryService"
- android:exported="false"/>
+ <!-- Service used to run JobScheduler jobs -->
+ <service
+ android:name="com.android.contacts.ContactsJobService"
+ android:permission="android.permission.BIND_JOB_SERVICE"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="@string/contacts_file_provider_authority"
- android:grantUriPermissions="true"
- android:exported="false">
+ android:exported="false"
+ android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
- android:resource="@xml/file_paths" />
+ android:resource="@xml/file_paths"/>
</provider>
- <meta-data android:name="android.nfc.disable_beam_default" android:value="true" />
+ <meta-data
+ android:name="android.nfc.disable_beam_default"
+ android:value="true"/>
+
</application>
</manifest>
diff --git a/assets/licenses.html b/assets/licenses.html
new file mode 100644
index 000000000..c24ed6306
--- /dev/null
+++ b/assets/licenses.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta name="viewport" content="width=device-width">
+ <style> body { font-family: sans-serif; } pre { background-color: #eeeeee; padding: 1em; white-space: pre-wrap; word-wrap: break-word; } </style>
+</head>
+<body>
+
+<h3>Notices for: guava, libphonenumber, and libprotobuf-java-nano</h3>
+<pre>
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
+</pre>
+
+<h3>Notices for JSR305</h3>
+<pre>
+Copyright (c) 2007-2009, JSR305 expert group
+All rights reserved.
+
+http://www.opensource.org/licenses/bsd-license.php
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the JSR305 expert group nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+</pre>
+
+</body>
+</html>
diff --git a/proguard.flags b/proguard.flags
index bad57a9db..75fbfd702 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -9,27 +9,109 @@
public void *(android.view.MenuItem);
}
--keep class com.android.contacts.common.** { *;}
-# For test:
--keep class com.android.contacts.commonbind.analytics.AnalyticsUtil { *;}
--keep class com.android.contacts.interactions.** { *;}
--keep class com.google.common.base.Objects { *;}
--keep class com.google.common.base.Preconditions { *;}
--keep class com.google.common.collect.Lists { *;}
--keep class com.google.common.collect.Maps { *;}
--keep class com.google.common.collect.Sets { *;}
+# Needed for tests
+-keep class com.android.contacts.compat.CompatUtils { *; }
+-keep class com.android.contacts.Collapser { *; }
+-keep class com.android.contacts.ContactPhotoManager { *; }
+-keep class com.android.contacts.ContactsApplication { *; }
+-keep class com.android.contacts.ContactsUtils { *; }
+-keep class com.android.contacts.ContactSaveService { *; }
+-keep class com.android.contacts.ContactSaveService$* { *; }
+-keep class com.android.contacts.database.NoNullCursorAsyncQueryHandler { *; }
+-keep class com.android.contacts.database.SimContactDao { *; }
+-keep class com.android.contacts.database.SimContactDao$* { *; }
+-keep class com.android.contacts.database.SimContactDaoImpl { *; }
+-keep class com.android.contacts.DynamicShortcuts { *; }
+-keep class com.android.contacts.editor.ContactEditorUtils { *; }
+-keep class com.android.contacts.editor.EditorUiUtils { *; }
+-keep class com.android.contacts.format.FormatUtils { *; }
+-keep class com.android.contacts.format.TextHighlighter { *; }
+-keep class com.android.contacts.group.GroupUtil { *; }
+-keep class com.android.contacts.interactions.CallLogInteraction { *; }
+-keep class com.android.contacts.interactions.CallLogInteractionsLoader { *; }
+-keep class com.android.contacts.interactions.ContactDeletionInteraction { *; }
+-keep class com.android.contacts.interactions.ContactInteractionUtil { *; }
+-keep class com.android.contacts.list.ContactListItemView { *; }
+-keep class com.android.contacts.list.ContactsSectionIndexer { *; }
+-keep class com.android.contacts.location.CountryDetector { *; }
+-keep class com.android.contacts.model.account.AccountDisplayInfo { *; }
+-keep class com.android.contacts.model.account.AccountDisplayInfoFactory { *; }
+-keep class com.android.contacts.model.account.AccountInfo { *; }
+-keep class com.android.contacts.model.account.AccountType { *; }
+-keep class com.android.contacts.model.account.AccountType$* { *; }
+-keep class com.android.contacts.model.account.AccountTypeWithDataSet { *; }
+-keep class com.android.contacts.model.account.AccountWithDataSet { *; }
+-keep class com.android.contacts.model.account.BaseAccountType { *; }
+-keep class com.android.contacts.model.account.BaseAccountType$* { *; }
+-keep class com.android.contacts.model.account.DeviceLocalAccountType { *; }
+-keep class com.android.contacts.model.account.ExchangeAccountType { *; }
+-keep class com.android.contacts.model.account.ExternalAccountType { *; }
+-keep class com.android.contacts.model.account.FallbackAccountType { *; }
+-keep class com.android.contacts.model.account.GoogleAccountType { *; }
+-keep class com.android.contacts.model.account.SimAccountType { *; }
+-keep class com.android.contacts.model.AccountTypeManager { *; }
+-keep class com.android.contacts.model.AccountTypeManagerImpl { *; }
+-keep class com.android.contacts.model.BuilderWrapper { *; }
+-keep class com.android.contacts.model.Contact { *; }
+-keep class com.android.contacts.model.ContactLoader { *; }
+-keep class com.android.contacts.model.Cp2DeviceLocalAccountLocator { *; }
+-keep class com.android.contacts.model.CPOWrapper { *; }
+-keep class com.android.contacts.model.dataitem.DataItem { *; }
+-keep class com.android.contacts.model.dataitem.DataKind { *; }
+-keep class com.android.contacts.model.dataitem.EmailDataItem { *; }
+-keep class com.android.contacts.model.dataitem.EventDataItem { *; }
+-keep class com.android.contacts.model.dataitem.ImDataItem { *; }
+-keep class com.android.contacts.model.dataitem.NicknameDataItem { *; }
+-keep class com.android.contacts.model.dataitem.NoteDataItem { *; }
+-keep class com.android.contacts.model.dataitem.OrganizationDataItem { *; }
+-keep class com.android.contacts.model.dataitem.PhoneDataItem { *; }
+-keep class com.android.contacts.model.dataitem.RelationDataItem { *; }
+-keep class com.android.contacts.model.dataitem.SipAddressDataItem { *; }
+-keep class com.android.contacts.model.dataitem.StructuredNameDataItem { *; }
+-keep class com.android.contacts.model.dataitem.StructuredPostalDataItem { *; }
+-keep class com.android.contacts.model.dataitem.WebsiteDataItem { *; }
+-keep class com.android.contacts.model.DeviceLocalAccountLocator { *; }
+-keep class com.android.contacts.model.RawContact { *; }
+-keep class com.android.contacts.model.RawContactDelta { *; }
+-keep class com.android.contacts.model.RawContactDeltaList { *; }
+-keep class com.android.contacts.model.RawContactModifier { *; }
+-keep class com.android.contacts.model.SimCard { *; }
+-keep class com.android.contacts.model.SimContact { *; }
+-keep class com.android.contacts.model.ValuesDelta { *; }
+-keep class com.android.contacts.MoreContactUtils { *; }
+-keep class com.android.contacts.preference.ContactsPreferences { *; }
+-keep class com.android.contacts.SimImportService { *; }
+-keep class com.android.contacts.SimImportService$* { *; }
+-keep class com.android.contacts.test.mocks.MockContactPhotoManager { *; }
+-keep class com.android.contacts.testing.InjectedServices { *; }
+-keep class com.android.contacts.util.BitmapUtil { *; }
+-keep class com.android.contacts.util.ContactDisplayUtils { *; }
+-keep class com.android.contacts.util.DateUtils { *; }
+-keep class com.android.contacts.util.DeviceLocalAccountTypeFactory { *; }
+-keep class com.android.contacts.util.DeviceLocalAccountTypeFactory$* { *; }
+-keep class com.android.contacts.util.NameConverter { *; }
+-keep class com.android.contacts.util.PermissionsUtil { *; }
+-keep class com.android.contacts.util.SearchUtil { *; }
+-keep class com.android.contacts.util.SearchUtil$* { *; }
+-keep class com.android.contacts.util.SyncUtil { *; }
+-keep class com.android.contacts.widget.CompositeListAdapter { *; }
+-keep class com.google.common.base.Function { *; }
+-keep class com.google.common.base.Functions { *; }
+-keep class com.google.common.base.Objects { *; }
+-keep class com.google.common.base.Preconditions { *; }
+-keep class com.google.common.collect.** { *; }
+-keep class com.google.common.util.concurrent.** { *; }
-# Any class or method annotated with NeededForTesting or NeededForReflection.
--keep @com.android.contacts.common.testing.NeededForTesting class *
+-keep class com.android.common.widget.CompositeCursorAdapter { *; }
+
+# Any class or method annotated with NeededForReflection.
-keep @com.android.contacts.test.NeededForReflection class *
-keepclassmembers class * {
-@com.android.contacts.common.testing.NeededForTesting *;
@com.android.contacts.test.NeededForReflection *;
}
+
# Keep classes and methods that have the guava @VisibleForTesting annotation
-keep @com.google.common.annotations.VisibleForTesting class *
-keepclassmembers class * {
@com.google.common.annotations.VisibleForTesting *;
}
-
--verbose
diff --git a/res-aosp/xml/shortcuts.xml b/res-aosp/xml/shortcuts.xml
deleted file mode 100644
index 35d15e7d2..000000000
--- a/res-aosp/xml/shortcuts.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
- <shortcut
- android:enabled="true"
- android:icon="@drawable/ic_add_circle_24dp"
- android:shortcutId="shortcut-add-contact"
- android:shortcutShortLabel="@string/menu_new_contact_action_bar">
- <intent
- android:action="android.intent.action.INSERT"
- android:data="content://com.android.contacts/contacts"
- android:targetPackage="com.android.contacts"
- android:targetClass="com.android.contacts.activities.CompactContactEditorActivity"/>
- </shortcut>
-</shortcuts>
diff --git a/res/anim/slide_and_fade_in.xml b/res/anim/slide_and_fade_in.xml
new file mode 100644
index 000000000..c362da63e
--- /dev/null
+++ b/res/anim/slide_and_fade_in.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:interpolator/linear_out_slow_in">
+ <alpha
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"/>
+ <translate
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromYDelta="5%"
+ android:toYDelta="0"/>
+</set>
diff --git a/res/anim/slide_and_fade_in_layout_animation.xml b/res/anim/slide_and_fade_in_layout_animation.xml
new file mode 100644
index 000000000..7f7e558a7
--- /dev/null
+++ b/res/anim/slide_and_fade_in_layout_animation.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
+ android:animation="@anim/slide_and_fade_in"
+ android:delay="10%"/>
diff --git a/res/anim/slide_and_fade_out.xml b/res/anim/slide_and_fade_out.xml
new file mode 100644
index 000000000..7bb65d7dc
--- /dev/null
+++ b/res/anim/slide_and_fade_out.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:interpolator/linear_out_slow_in">
+ <alpha
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromAlpha="1.0"
+ android:toAlpha="0"/>
+ <translate
+ android:duration="@integer/lists_on_load_animation_duration"
+ android:fromYDelta="0%"
+ android:toYDelta="5%"/>
+</set>
diff --git a/res/color/contact_list_name_text_color.xml b/res/color/contact_list_name_text_color.xml
new file mode 100644
index 000000000..2327e2ae1
--- /dev/null
+++ b/res/color/contact_list_name_text_color.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@color/disabled_contact_list_name_text" android:state_enabled="false" />
+ <item android:color="@color/primary_text_color" />
+</selector> \ No newline at end of file
diff --git a/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 956d61b46..000000000
--- a/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index 42528b157..000000000
--- a/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/accounts_empty.png b/res/drawable-hdpi/accounts_empty.png
new file mode 100644
index 000000000..808690141
--- /dev/null
+++ b/res/drawable-hdpi/accounts_empty.png
Binary files differ
diff --git a/res/drawable-hdpi/aggregation_suggestions_bg.9.png b/res/drawable-hdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index d279fb1fe..000000000
--- a/res/drawable-hdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index da1fe94ec..000000000
--- a/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/res/drawable-hdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index e285c6639..000000000
--- a/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/res/drawable-hdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 4b34e57e9..000000000
--- a/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/contacts_no_account_empty.png b/res/drawable-hdpi/contacts_no_account_empty.png
new file mode 100644
index 000000000..b957bd4e7
--- /dev/null
+++ b/res/drawable-hdpi/contacts_no_account_empty.png
Binary files differ
diff --git a/res/drawable-hdpi/expanding_entry_card_expand_white_24.png b/res/drawable-hdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index 50ebbc597..000000000
--- a/res/drawable-hdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/fab_blue.png b/res/drawable-hdpi/fab_blue.png
deleted file mode 100644
index 8ff3d2918..000000000
--- a/res/drawable-hdpi/fab_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/fab_pink.png b/res/drawable-hdpi/fab_pink.png
new file mode 100644
index 000000000..98b26d5fb
--- /dev/null
+++ b/res/drawable-hdpi/fab_pink.png
Binary files differ
diff --git a/res/drawable-hdpi/googlelogo_dark20_color_132x44.png b/res/drawable-hdpi/googlelogo_dark20_color_132x44.png
new file mode 100644
index 000000000..078c8a84c
--- /dev/null
+++ b/res/drawable-hdpi/googlelogo_dark20_color_132x44.png
Binary files differ
diff --git a/res/drawable-hdpi/googlelogo_dark20_color_184x60.png b/res/drawable-hdpi/googlelogo_dark20_color_184x60.png
new file mode 100644
index 000000000..9d25e3dc6
--- /dev/null
+++ b/res/drawable-hdpi/googlelogo_dark20_color_184x60.png
Binary files differ
diff --git a/res/drawable-hdpi/home_empty.png b/res/drawable-hdpi/home_empty.png
new file mode 100644
index 000000000..b957bd4e7
--- /dev/null
+++ b/res/drawable-hdpi/home_empty.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_account_circle_black_24dp.png b/res/drawable-hdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index ba5a509bf..000000000
--- a/res/drawable-hdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_contact_holo_light.png b/res/drawable-hdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 522962395..000000000
--- a/res/drawable-hdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_group_holo_dark.png b/res/drawable-hdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 6d46ccffb..000000000
--- a/res/drawable-hdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_to_circles_black_24.png b/res/drawable-hdpi/ic_add_to_circles_black_24.png
deleted file mode 100644
index 6eb1fcca1..000000000
--- a/res/drawable-hdpi/ic_add_to_circles_black_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_business_black_24dp.png b/res/drawable-hdpi/ic_business_black_24dp.png
deleted file mode 100644
index fa069abd9..000000000
--- a/res/drawable-hdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_business_white_120dp.png b/res/drawable-hdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..d5942dcad
--- /dev/null
+++ b/res/drawable-hdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_camera_alt_black_24dp.png b/res/drawable-hdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 4978a3a56..000000000
--- a/res/drawable-hdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index da6561d81..000000000
--- a/res/drawable-hdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_circles_extended_black_24dp.png b/res/drawable-hdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index 8973e89b4..000000000
--- a/res/drawable-hdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_contacts_holo_dark.png b/res/drawable-hdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index e5deb0112..000000000
--- a/res/drawable-hdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialer_sip_black_24dp.png b/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 37dabfcc4..000000000
--- a/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_directions_24dp.png b/res/drawable-hdpi/ic_directions_24dp.png
deleted file mode 100644
index c378972fb..000000000
--- a/res/drawable-hdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_done_wht_24dp.png b/res/drawable-hdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 12ce8e0de..000000000
--- a/res/drawable-hdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_email_24dp.png b/res/drawable-hdpi/ic_email_24dp.png
deleted file mode 100644
index 231b141cc..000000000
--- a/res/drawable-hdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_event_24dp.png b/res/drawable-hdpi/ic_event_24dp.png
deleted file mode 100644
index 023695a5c..000000000
--- a/res/drawable-hdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_google_plus_24dp.png b/res/drawable-hdpi/ic_google_plus_24dp.png
deleted file mode 100644
index af17f2b00..000000000
--- a/res/drawable-hdpi/ic_google_plus_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hangout_24dp.png b/res/drawable-hdpi/ic_hangout_24dp.png
deleted file mode 100644
index 496a2a0d7..000000000
--- a/res/drawable-hdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hangout_video_24dp.png b/res/drawable-hdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 0825a1573..000000000
--- a/res/drawable-hdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_insert_comment_black_24dp.png b/res/drawable-hdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index d47265842..000000000
--- a/res/drawable-hdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 31fcce260..000000000
--- a/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 41c6eda8c..000000000
--- a/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index a3b22bc55..000000000
--- a/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_people_black_24dp.png b/res/drawable-hdpi/ic_people_black_24dp.png
deleted file mode 100644
index 10c46a98b..000000000
--- a/res/drawable-hdpi/ic_people_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_avatar.png b/res/drawable-hdpi/ic_person_avatar.png
new file mode 100644
index 000000000..2da477ef6
--- /dev/null
+++ b/res/drawable-hdpi/ic_person_avatar.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_black_128dp.png b/res/drawable-hdpi/ic_person_black_128dp.png
deleted file mode 100644
index 93b7886c1..000000000
--- a/res/drawable-hdpi/ic_person_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_black_24dp.png b/res/drawable-hdpi/ic_person_black_24dp.png
deleted file mode 100644
index 2eeb7c653..000000000
--- a/res/drawable-hdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_phone_24dp.png b/res/drawable-hdpi/ic_phone_24dp.png
deleted file mode 100644
index a6a644888..000000000
--- a/res/drawable-hdpi/ic_phone_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_photo_camera_white_24dp.png b/res/drawable-hdpi/ic_photo_camera_white_24dp.png
deleted file mode 100644
index 497c88ca8..000000000
--- a/res/drawable-hdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_photos_white_24.png b/res/drawable-hdpi/ic_photos_white_24.png
deleted file mode 100644
index a5180a144..000000000
--- a/res/drawable-hdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_place_24dp.png b/res/drawable-hdpi/ic_place_24dp.png
deleted file mode 100644
index 8e213200f..000000000
--- a/res/drawable-hdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_public_black_24dp.png b/res/drawable-hdpi/ic_public_black_24dp.png
deleted file mode 100644
index e3cdeb42c..000000000
--- a/res/drawable-hdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_24dp.png b/res/drawable-hdpi/ic_star_24dp.png
deleted file mode 100644
index b3d2f44d8..000000000
--- a/res/drawable-hdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_black_128dp.png b/res/drawable-hdpi/ic_star_black_128dp.png
deleted file mode 100644
index a0cb1c1a5..000000000
--- a/res/drawable-hdpi/ic_star_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_outline_24dp.png b/res/drawable-hdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 4d4b7c1a5..000000000
--- a/res/drawable-hdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_voicemail_avatar.png b/res/drawable-hdpi/ic_voicemail_avatar.png
new file mode 100644
index 000000000..2fb78261e
--- /dev/null
+++ b/res/drawable-hdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/res/drawable-hdpi/label_empty.png b/res/drawable-hdpi/label_empty.png
new file mode 100644
index 000000000..e400f0476
--- /dev/null
+++ b/res/drawable-hdpi/label_empty.png
Binary files differ
diff --git a/res/drawable-hdpi/panel_content.9.png b/res/drawable-hdpi/panel_content.9.png
deleted file mode 100644
index 5c3090d02..000000000
--- a/res/drawable-hdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/product_logo_contacts_color_144.png b/res/drawable-hdpi/product_logo_contacts_color_144.png
new file mode 100644
index 000000000..d26a36381
--- /dev/null
+++ b/res/drawable-hdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-hdpi/product_logo_contacts_color_192.png b/res/drawable-hdpi/product_logo_contacts_color_192.png
new file mode 100644
index 000000000..ebd8a8ba1
--- /dev/null
+++ b/res/drawable-hdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index db4ce8003..000000000
--- a/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 169cd4e31..000000000
--- a/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/spinner_default_holo_dark.9.png b/res/drawable-hdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index 34a88dfa8..000000000
--- a/res/drawable-hdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_audiochat_holo_light.png b/res/drawable-hdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 8bea3ec9a..000000000
--- a/res/drawable-hdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_videochat_holo_light.png b/res/drawable-hdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index b86c43569..000000000
--- a/res/drawable-hdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/unknown_source.png b/res/drawable-hdpi/unknown_source.png
new file mode 100644
index 000000000..0a8f37d7a
--- /dev/null
+++ b/res/drawable-hdpi/unknown_source.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 4cf24e274..000000000
--- a/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 54f247ad1..000000000
--- a/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_contacts_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index ee4d09f08..000000000
--- a/res/drawable-ldrtl-hdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/panel_content.9.png b/res/drawable-ldrtl-hdpi/panel_content.9.png
deleted file mode 100644
index 1ab1f122c..000000000
--- a/res/drawable-ldrtl-hdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 1f833d3d6..000000000
--- a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 3adbc847d..000000000
--- a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/spinner_default_holo_dark.9.png b/res/drawable-ldrtl-hdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index 0b28e926d..000000000
--- a/res/drawable-ldrtl-hdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 5c0f756c9..000000000
--- a/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index a984b568b..000000000
--- a/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_contacts_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index 13ddb2b09..000000000
--- a/res/drawable-ldrtl-mdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/panel_content.9.png b/res/drawable-ldrtl-mdpi/panel_content.9.png
deleted file mode 100644
index b15750277..000000000
--- a/res/drawable-ldrtl-mdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 1b0905af4..000000000
--- a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 179644cbf..000000000
--- a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/spinner_default_holo_dark.9.png b/res/drawable-ldrtl-mdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index 770a8653a..000000000
--- a/res/drawable-ldrtl-mdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 2bd27c7d7..000000000
--- a/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 3688e466b..000000000
--- a/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_contacts_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index 7aed2ed2d..000000000
--- a/res/drawable-ldrtl-xhdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/panel_content.9.png b/res/drawable-ldrtl-xhdpi/panel_content.9.png
deleted file mode 100644
index eb0e2d770..000000000
--- a/res/drawable-ldrtl-xhdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 6b22d44cb..000000000
--- a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 2a1d508d3..000000000
--- a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/spinner_default_holo_dark.9.png b/res/drawable-ldrtl-xhdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index afc72b221..000000000
--- a/res/drawable-ldrtl-xhdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 3e9f16747..000000000
--- a/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index a823841c5..000000000
--- a/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/accounts_empty.png b/res/drawable-mdpi/accounts_empty.png
new file mode 100644
index 000000000..76cb54305
--- /dev/null
+++ b/res/drawable-mdpi/accounts_empty.png
Binary files differ
diff --git a/res/drawable-mdpi/aggregation_suggestions_bg.9.png b/res/drawable-mdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index 6cce2746e..000000000
--- a/res/drawable-mdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index 03e24c672..000000000
--- a/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/res/drawable-mdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index 3bb4154b0..000000000
--- a/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/res/drawable-mdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 4da97e268..000000000
--- a/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/contacts_no_account_empty.png b/res/drawable-mdpi/contacts_no_account_empty.png
new file mode 100644
index 000000000..84334a93a
--- /dev/null
+++ b/res/drawable-mdpi/contacts_no_account_empty.png
Binary files differ
diff --git a/res/drawable-mdpi/expanding_entry_card_expand_white_24.png b/res/drawable-mdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index a0d4063b8..000000000
--- a/res/drawable-mdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/fab_blue.png b/res/drawable-mdpi/fab_blue.png
deleted file mode 100644
index 2ca6b4bdf..000000000
--- a/res/drawable-mdpi/fab_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/fab_pink.png b/res/drawable-mdpi/fab_pink.png
new file mode 100644
index 000000000..46df9f85c
--- /dev/null
+++ b/res/drawable-mdpi/fab_pink.png
Binary files differ
diff --git a/res/drawable-mdpi/googlelogo_dark20_color_132x44.png b/res/drawable-mdpi/googlelogo_dark20_color_132x44.png
new file mode 100644
index 000000000..a045daba6
--- /dev/null
+++ b/res/drawable-mdpi/googlelogo_dark20_color_132x44.png
Binary files differ
diff --git a/res/drawable-mdpi/googlelogo_dark20_color_184x60.png b/res/drawable-mdpi/googlelogo_dark20_color_184x60.png
new file mode 100644
index 000000000..d1181a995
--- /dev/null
+++ b/res/drawable-mdpi/googlelogo_dark20_color_184x60.png
Binary files differ
diff --git a/res/drawable-mdpi/home_empty.png b/res/drawable-mdpi/home_empty.png
new file mode 100644
index 000000000..84334a93a
--- /dev/null
+++ b/res/drawable-mdpi/home_empty.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_account_circle_black_24dp.png b/res/drawable-mdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index 0c1202de4..000000000
--- a/res/drawable-mdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_contact_holo_light.png b/res/drawable-mdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 06a43a220..000000000
--- a/res/drawable-mdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_group_holo_dark.png b/res/drawable-mdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index a676ab886..000000000
--- a/res/drawable-mdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_to_circles_black_24.png b/res/drawable-mdpi/ic_add_to_circles_black_24.png
deleted file mode 100644
index fbffc97fe..000000000
--- a/res/drawable-mdpi/ic_add_to_circles_black_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_business_black_24dp.png b/res/drawable-mdpi/ic_business_black_24dp.png
deleted file mode 100644
index 1c54f8b4c..000000000
--- a/res/drawable-mdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_business_white_120dp.png b/res/drawable-mdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..3dddca516
--- /dev/null
+++ b/res/drawable-mdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_camera_alt_black_24dp.png b/res/drawable-mdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 90dd073be..000000000
--- a/res/drawable-mdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index efa2fdf0f..000000000
--- a/res/drawable-mdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_circles_extended_black_24dp.png b/res/drawable-mdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index e851532fc..000000000
--- a/res/drawable-mdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_contacts_holo_dark.png b/res/drawable-mdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index d08b94a4b..000000000
--- a/res/drawable-mdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialer_sip_black_24dp.png b/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 51d5e13bb..000000000
--- a/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_directions_24dp.png b/res/drawable-mdpi/ic_directions_24dp.png
deleted file mode 100644
index bd171d26a..000000000
--- a/res/drawable-mdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_done_wht_24dp.png b/res/drawable-mdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 103271163..000000000
--- a/res/drawable-mdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_email_24dp.png b/res/drawable-mdpi/ic_email_24dp.png
deleted file mode 100644
index c32d03a6b..000000000
--- a/res/drawable-mdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_event_24dp.png b/res/drawable-mdpi/ic_event_24dp.png
deleted file mode 100644
index f5abeb718..000000000
--- a/res/drawable-mdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_google_plus_24dp.png b/res/drawable-mdpi/ic_google_plus_24dp.png
deleted file mode 100644
index d8eacf0f9..000000000
--- a/res/drawable-mdpi/ic_google_plus_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hangout_24dp.png b/res/drawable-mdpi/ic_hangout_24dp.png
deleted file mode 100644
index 1b0acfd09..000000000
--- a/res/drawable-mdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hangout_video_24dp.png b/res/drawable-mdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index b54b1cb49..000000000
--- a/res/drawable-mdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_insert_comment_black_24dp.png b/res/drawable-mdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3a2bda799..000000000
--- a/res/drawable-mdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 65997ebf2..000000000
--- a/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 342867cb0..000000000
--- a/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index f4470696a..000000000
--- a/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_people_black_24dp.png b/res/drawable-mdpi/ic_people_black_24dp.png
deleted file mode 100644
index 807f17481..000000000
--- a/res/drawable-mdpi/ic_people_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_avatar.png b/res/drawable-mdpi/ic_person_avatar.png
new file mode 100644
index 000000000..31a40fbec
--- /dev/null
+++ b/res/drawable-mdpi/ic_person_avatar.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_black_128dp.png b/res/drawable-mdpi/ic_person_black_128dp.png
deleted file mode 100644
index 4da71188c..000000000
--- a/res/drawable-mdpi/ic_person_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_black_24dp.png b/res/drawable-mdpi/ic_person_black_24dp.png
deleted file mode 100644
index 8c415b914..000000000
--- a/res/drawable-mdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_phone_24dp.png b/res/drawable-mdpi/ic_phone_24dp.png
deleted file mode 100644
index 2286bb4cf..000000000
--- a/res/drawable-mdpi/ic_phone_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_photo_camera_white_24dp.png b/res/drawable-mdpi/ic_photo_camera_white_24dp.png
deleted file mode 100644
index e83052200..000000000
--- a/res/drawable-mdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_photos_white_24.png b/res/drawable-mdpi/ic_photos_white_24.png
deleted file mode 100644
index e0e5854a7..000000000
--- a/res/drawable-mdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_place_24dp.png b/res/drawable-mdpi/ic_place_24dp.png
deleted file mode 100644
index 2ef138189..000000000
--- a/res/drawable-mdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_public_black_24dp.png b/res/drawable-mdpi/ic_public_black_24dp.png
deleted file mode 100644
index b18b4ec7a..000000000
--- a/res/drawable-mdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_24dp.png b/res/drawable-mdpi/ic_star_24dp.png
deleted file mode 100644
index b8f32f80e..000000000
--- a/res/drawable-mdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_black_128dp.png b/res/drawable-mdpi/ic_star_black_128dp.png
deleted file mode 100644
index 1ba279255..000000000
--- a/res/drawable-mdpi/ic_star_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_outline_24dp.png b/res/drawable-mdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 22b4fb8f4..000000000
--- a/res/drawable-mdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_voicemail_avatar.png b/res/drawable-mdpi/ic_voicemail_avatar.png
new file mode 100644
index 000000000..4005f24fd
--- /dev/null
+++ b/res/drawable-mdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/res/drawable-mdpi/label_empty.png b/res/drawable-mdpi/label_empty.png
new file mode 100644
index 000000000..360cbd2ed
--- /dev/null
+++ b/res/drawable-mdpi/label_empty.png
Binary files differ
diff --git a/res/drawable-mdpi/panel_content.9.png b/res/drawable-mdpi/panel_content.9.png
deleted file mode 100644
index c5d254578..000000000
--- a/res/drawable-mdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/product_logo_contacts_color_144.png b/res/drawable-mdpi/product_logo_contacts_color_144.png
new file mode 100644
index 000000000..e28097c2b
--- /dev/null
+++ b/res/drawable-mdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-mdpi/product_logo_contacts_color_192.png b/res/drawable-mdpi/product_logo_contacts_color_192.png
new file mode 100644
index 000000000..a8fcbf050
--- /dev/null
+++ b/res/drawable-mdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 886b044b2..000000000
--- a/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index c714a3b81..000000000
--- a/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/spinner_default_holo_dark.9.png b/res/drawable-mdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index 48af19222..000000000
--- a/res/drawable-mdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_audiochat_holo_light.png b/res/drawable-mdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 9e6e32898..000000000
--- a/res/drawable-mdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_videochat_holo_light.png b/res/drawable-mdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index 0ef40f890..000000000
--- a/res/drawable-mdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/unknown_source.png b/res/drawable-mdpi/unknown_source.png
new file mode 100644
index 000000000..356748f08
--- /dev/null
+++ b/res/drawable-mdpi/unknown_source.png
Binary files differ
diff --git a/res/drawable-sw600dp/quantum_launchscreen_contacts.xml b/res/drawable-sw600dp/quantum_launchscreen_contacts.xml
new file mode 100755
index 000000000..5cc35d55d
--- /dev/null
+++ b/res/drawable-sw600dp/quantum_launchscreen_contacts.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:opacity="opaque">
+ <item android:drawable="@android:color/white" />
+ <item
+ android:id="@+id/launchscreens_product_logo"
+ android:bottom="@dimen/launchscreens_product_logo_bottom">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/product_logo_contacts_color_192" />
+ </item>
+ <item
+ android:id="@+id/launchscreens_logo_text"
+ android:bottom="@dimen/launchscreens_google_logo_bottom">
+ <bitmap
+ android:gravity="center_horizontal|bottom"
+ android:src="@drawable/googlelogo_dark20_color_184x60" />
+ </item>
+</layer-list>
diff --git a/res/drawable-v21/floating_action_button.xml b/res/drawable-v21/floating_action_button.xml
deleted file mode 100644
index 9a90112b3..000000000
--- a/res/drawable-v21/floating_action_button.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/contacts_accent_color">
- <item android:id="@android:id/mask">
- <shape android:shape="oval">
- <solid android:color="@android:color/white" />
- </shape>
- </item>
-</ripple> \ No newline at end of file
diff --git a/res/drawable-v21/view_pager_tab_background.xml b/res/drawable-v21/view_pager_tab_background.xml
deleted file mode 100644
index 00c6db79a..000000000
--- a/res/drawable-v21/view_pager_tab_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ 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
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@color/tab_ripple_color">
- <item android:id="@android:id/mask">
- <color android:color="@android:color/white" />
- </item>
-</ripple> \ No newline at end of file
diff --git a/res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 31fea59c2..000000000
--- a/res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index 16b9bef12..000000000
--- a/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/accounts_empty.png b/res/drawable-xhdpi/accounts_empty.png
new file mode 100644
index 000000000..40f867216
--- /dev/null
+++ b/res/drawable-xhdpi/accounts_empty.png
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index 816cc0b39..000000000
--- a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index 94ae50a3e..000000000
--- a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_star_off_normal_holo_light.png b/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index e6048d9f6..000000000
--- a/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_star_on_normal_holo_light.png b/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 5588118d9..000000000
--- a/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/contacts_no_account_empty.png b/res/drawable-xhdpi/contacts_no_account_empty.png
new file mode 100644
index 000000000..188ebdf02
--- /dev/null
+++ b/res/drawable-xhdpi/contacts_no_account_empty.png
Binary files differ
diff --git a/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index 42e9f2cb5..000000000
--- a/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/fab_blue.png b/res/drawable-xhdpi/fab_blue.png
deleted file mode 100644
index 300b07eb4..000000000
--- a/res/drawable-xhdpi/fab_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/fab_pink.png b/res/drawable-xhdpi/fab_pink.png
new file mode 100644
index 000000000..5f214d631
--- /dev/null
+++ b/res/drawable-xhdpi/fab_pink.png
Binary files differ
diff --git a/res/drawable-xhdpi/googlelogo_dark20_color_132x44.png b/res/drawable-xhdpi/googlelogo_dark20_color_132x44.png
new file mode 100644
index 000000000..437f083a0
--- /dev/null
+++ b/res/drawable-xhdpi/googlelogo_dark20_color_132x44.png
Binary files differ
diff --git a/res/drawable-xhdpi/googlelogo_dark20_color_184x60.png b/res/drawable-xhdpi/googlelogo_dark20_color_184x60.png
new file mode 100644
index 000000000..2bd813fc0
--- /dev/null
+++ b/res/drawable-xhdpi/googlelogo_dark20_color_184x60.png
Binary files differ
diff --git a/res/drawable-xhdpi/home_empty.png b/res/drawable-xhdpi/home_empty.png
new file mode 100644
index 000000000..188ebdf02
--- /dev/null
+++ b/res/drawable-xhdpi/home_empty.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_account_circle_black_24dp.png b/res/drawable-xhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index f26b201a6..000000000
--- a/res/drawable-xhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_contact_holo_light.png b/res/drawable-xhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 4fa8b9482..000000000
--- a/res/drawable-xhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_group_holo_dark.png b/res/drawable-xhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 85924aba4..000000000
--- a/res/drawable-xhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_to_circles_black_24.png b/res/drawable-xhdpi/ic_add_to_circles_black_24.png
deleted file mode 100644
index 79116b510..000000000
--- a/res/drawable-xhdpi/ic_add_to_circles_black_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_business_black_24dp.png b/res/drawable-xhdpi/ic_business_black_24dp.png
deleted file mode 100644
index 9e3b9b88f..000000000
--- a/res/drawable-xhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_business_white_120dp.png b/res/drawable-xhdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..6256300b4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 852225124..000000000
--- a/res/drawable-xhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index 70a22c920..000000000
--- a/res/drawable-xhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index e87e928f2..000000000
--- a/res/drawable-xhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contacts_holo_dark.png b/res/drawable-xhdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index dc4c390f0..000000000
--- a/res/drawable-xhdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 619a79f0a..000000000
--- a/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_directions_24dp.png b/res/drawable-xhdpi/ic_directions_24dp.png
deleted file mode 100644
index 99cde4a2f..000000000
--- a/res/drawable-xhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_done_wht_24dp.png b/res/drawable-xhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index e34b73e55..000000000
--- a/res/drawable-xhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_email_24dp.png b/res/drawable-xhdpi/ic_email_24dp.png
deleted file mode 100644
index adf14ef84..000000000
--- a/res/drawable-xhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_event_24dp.png b/res/drawable-xhdpi/ic_event_24dp.png
deleted file mode 100644
index a2bd4b216..000000000
--- a/res/drawable-xhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_google_plus_24dp.png b/res/drawable-xhdpi/ic_google_plus_24dp.png
deleted file mode 100644
index ea352d31c..000000000
--- a/res/drawable-xhdpi/ic_google_plus_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hangout_24dp.png b/res/drawable-xhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 0cd779546..000000000
--- a/res/drawable-xhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hangout_video_24dp.png b/res/drawable-xhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 97b984c28..000000000
--- a/res/drawable-xhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3ddd56b37..000000000
--- a/res/drawable-xhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 9f37410ec..000000000
--- a/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 6a5ef9b83..000000000
--- a/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index cb53db8d4..000000000
--- a/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_people_black_24dp.png b/res/drawable-xhdpi/ic_people_black_24dp.png
deleted file mode 100644
index 1b90bed40..000000000
--- a/res/drawable-xhdpi/ic_people_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_avatar.png b/res/drawable-xhdpi/ic_person_avatar.png
new file mode 100644
index 000000000..aecc9afc0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_person_avatar.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_black_128dp.png b/res/drawable-xhdpi/ic_person_black_128dp.png
deleted file mode 100644
index 04445b60d..000000000
--- a/res/drawable-xhdpi/ic_person_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_black_24dp.png b/res/drawable-xhdpi/ic_person_black_24dp.png
deleted file mode 100644
index ec56af979..000000000
--- a/res/drawable-xhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_phone_24dp.png b/res/drawable-xhdpi/ic_phone_24dp.png
deleted file mode 100644
index cd9ff60b4..000000000
--- a/res/drawable-xhdpi/ic_phone_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xhdpi/ic_photo_camera_white_24dp.png
deleted file mode 100644
index be9fb226a..000000000
--- a/res/drawable-xhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photos_white_24.png b/res/drawable-xhdpi/ic_photos_white_24.png
deleted file mode 100644
index bc64bb05e..000000000
--- a/res/drawable-xhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_place_24dp.png b/res/drawable-xhdpi/ic_place_24dp.png
deleted file mode 100644
index 0f8bc5bd6..000000000
--- a/res/drawable-xhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_public_black_24dp.png b/res/drawable-xhdpi/ic_public_black_24dp.png
deleted file mode 100644
index a3ab24c6a..000000000
--- a/res/drawable-xhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_24dp.png b/res/drawable-xhdpi/ic_star_24dp.png
deleted file mode 100644
index e1ae2460d..000000000
--- a/res/drawable-xhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_black_128dp.png b/res/drawable-xhdpi/ic_star_black_128dp.png
deleted file mode 100644
index 842ce10ac..000000000
--- a/res/drawable-xhdpi/ic_star_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_outline_24dp.png b/res/drawable-xhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index f7dacfd5e..000000000
--- a/res/drawable-xhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_voicemail_avatar.png b/res/drawable-xhdpi/ic_voicemail_avatar.png
new file mode 100644
index 000000000..f24505d38
--- /dev/null
+++ b/res/drawable-xhdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/res/drawable-xhdpi/label_empty.png b/res/drawable-xhdpi/label_empty.png
new file mode 100644
index 000000000..a38178c09
--- /dev/null
+++ b/res/drawable-xhdpi/label_empty.png
Binary files differ
diff --git a/res/drawable-xhdpi/panel_content.9.png b/res/drawable-xhdpi/panel_content.9.png
deleted file mode 100644
index 6acbbb1fd..000000000
--- a/res/drawable-xhdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/product_logo_contacts_color_144.png b/res/drawable-xhdpi/product_logo_contacts_color_144.png
new file mode 100644
index 000000000..ebd8a8ba1
--- /dev/null
+++ b/res/drawable-xhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xhdpi/product_logo_contacts_color_192.png b/res/drawable-xhdpi/product_logo_contacts_color_192.png
new file mode 100644
index 000000000..690bbd027
--- /dev/null
+++ b/res/drawable-xhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 2d3e5c878..000000000
--- a/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index b03862151..000000000
--- a/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/spinner_default_holo_dark.9.png b/res/drawable-xhdpi/spinner_default_holo_dark.9.png
deleted file mode 100644
index e94ce80c9..000000000
--- a/res/drawable-xhdpi/spinner_default_holo_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_audiochat_holo_light.png b/res/drawable-xhdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 163e632bc..000000000
--- a/res/drawable-xhdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_videochat_holo_light.png b/res/drawable-xhdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index 1ec2f6369..000000000
--- a/res/drawable-xhdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/unknown_source.png b/res/drawable-xhdpi/unknown_source.png
new file mode 100644
index 000000000..35e8fb4a1
--- /dev/null
+++ b/res/drawable-xhdpi/unknown_source.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 24c267f85..000000000
--- a/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/accounts_empty.png b/res/drawable-xxhdpi/accounts_empty.png
new file mode 100644
index 000000000..1174a132c
--- /dev/null
+++ b/res/drawable-xxhdpi/accounts_empty.png
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png b/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index 4ebf2f612..000000000
--- a/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png b/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 9f07084fd..000000000
--- a/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/contacts_no_account_empty.png b/res/drawable-xxhdpi/contacts_no_account_empty.png
new file mode 100644
index 000000000..b3286e15c
--- /dev/null
+++ b/res/drawable-xxhdpi/contacts_no_account_empty.png
Binary files differ
diff --git a/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index af4d7114b..000000000
--- a/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_blue.png b/res/drawable-xxhdpi/fab_blue.png
deleted file mode 100644
index 76d68ac6a..000000000
--- a/res/drawable-xxhdpi/fab_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_pink.png b/res/drawable-xxhdpi/fab_pink.png
new file mode 100644
index 000000000..6fbe669ca
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_pink.png
Binary files differ
diff --git a/res/drawable-xxhdpi/googlelogo_dark20_color_132x44.png b/res/drawable-xxhdpi/googlelogo_dark20_color_132x44.png
new file mode 100644
index 000000000..b22fba6f1
--- /dev/null
+++ b/res/drawable-xxhdpi/googlelogo_dark20_color_132x44.png
Binary files differ
diff --git a/res/drawable-xxhdpi/googlelogo_dark20_color_184x60.png b/res/drawable-xxhdpi/googlelogo_dark20_color_184x60.png
new file mode 100644
index 000000000..6e4193e6d
--- /dev/null
+++ b/res/drawable-xxhdpi/googlelogo_dark20_color_184x60.png
Binary files differ
diff --git a/res/drawable-xxhdpi/home_empty.png b/res/drawable-xxhdpi/home_empty.png
new file mode 100644
index 000000000..b3286e15c
--- /dev/null
+++ b/res/drawable-xxhdpi/home_empty.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_account_circle_black_24dp.png b/res/drawable-xxhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index 3cc0a63e3..000000000
--- a/res/drawable-xxhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_contact_holo_light.png b/res/drawable-xxhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index b6d756d83..000000000
--- a/res/drawable-xxhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_group_holo_dark.png b/res/drawable-xxhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 44d8fe9f7..000000000
--- a/res/drawable-xxhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_to_circles_black_24.png b/res/drawable-xxhdpi/ic_add_to_circles_black_24.png
deleted file mode 100644
index 23a2084a7..000000000
--- a/res/drawable-xxhdpi/ic_add_to_circles_black_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_business_black_24dp.png b/res/drawable-xxhdpi/ic_business_black_24dp.png
deleted file mode 100644
index 85ddede1c..000000000
--- a/res/drawable-xxhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_business_white_120dp.png b/res/drawable-xxhdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..8d67e448f
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index fe8974e6a..000000000
--- a/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index 7ac3497f5..000000000
--- a/res/drawable-xxhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index ec09d5738..000000000
--- a/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_contacts_holo_dark.png b/res/drawable-xxhdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index 9328a6adb..000000000
--- a/res/drawable-xxhdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index f1466a167..000000000
--- a/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_directions_24dp.png b/res/drawable-xxhdpi/ic_directions_24dp.png
deleted file mode 100644
index e0d53a35c..000000000
--- a/res/drawable-xxhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_done_wht_24dp.png b/res/drawable-xxhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 4c6a653ff..000000000
--- a/res/drawable-xxhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_email_24dp.png b/res/drawable-xxhdpi/ic_email_24dp.png
deleted file mode 100644
index d1fc5fc11..000000000
--- a/res/drawable-xxhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_event_24dp.png b/res/drawable-xxhdpi/ic_event_24dp.png
deleted file mode 100644
index f27a42491..000000000
--- a/res/drawable-xxhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_google_plus_24dp.png b/res/drawable-xxhdpi/ic_google_plus_24dp.png
deleted file mode 100644
index 933cd627b..000000000
--- a/res/drawable-xxhdpi/ic_google_plus_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hangout_24dp.png b/res/drawable-xxhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 16858d1a8..000000000
--- a/res/drawable-xxhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hangout_video_24dp.png b/res/drawable-xxhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 4183c76d4..000000000
--- a/res/drawable-xxhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3039cc1be..000000000
--- a/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 140daef2d..000000000
--- a/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index a42aec229..000000000
--- a/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index 1ca2e46d3..000000000
--- a/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_people_black_24dp.png b/res/drawable-xxhdpi/ic_people_black_24dp.png
deleted file mode 100644
index e4ccc7513..000000000
--- a/res/drawable-xxhdpi/ic_people_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_avatar.png b/res/drawable-xxhdpi/ic_person_avatar.png
new file mode 100644
index 000000000..2cfc0041b
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_person_avatar.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_black_128dp.png b/res/drawable-xxhdpi/ic_person_black_128dp.png
deleted file mode 100644
index 3c40711b5..000000000
--- a/res/drawable-xxhdpi/ic_person_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_black_24dp.png b/res/drawable-xxhdpi/ic_person_black_24dp.png
deleted file mode 100644
index 89e82641f..000000000
--- a/res/drawable-xxhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_phone_24dp.png b/res/drawable-xxhdpi/ic_phone_24dp.png
deleted file mode 100644
index ab538ff3b..000000000
--- a/res/drawable-xxhdpi/ic_phone_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png
deleted file mode 100644
index c8e69dceb..000000000
--- a/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photos_white_24.png b/res/drawable-xxhdpi/ic_photos_white_24.png
deleted file mode 100644
index 2cb5dbc74..000000000
--- a/res/drawable-xxhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_place_24dp.png b/res/drawable-xxhdpi/ic_place_24dp.png
deleted file mode 100644
index 8a37614b9..000000000
--- a/res/drawable-xxhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_public_black_24dp.png b/res/drawable-xxhdpi/ic_public_black_24dp.png
deleted file mode 100644
index c7d17e3ab..000000000
--- a/res/drawable-xxhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_24dp.png b/res/drawable-xxhdpi/ic_star_24dp.png
deleted file mode 100644
index 34e7c5645..000000000
--- a/res/drawable-xxhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_black_128dp.png b/res/drawable-xxhdpi/ic_star_black_128dp.png
deleted file mode 100644
index f7d0eb036..000000000
--- a/res/drawable-xxhdpi/ic_star_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_outline_24dp.png b/res/drawable-xxhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 2afcf04a3..000000000
--- a/res/drawable-xxhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_voicemail_avatar.png b/res/drawable-xxhdpi/ic_voicemail_avatar.png
new file mode 100644
index 000000000..182def8de
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/res/drawable-xxhdpi/label_empty.png b/res/drawable-xxhdpi/label_empty.png
new file mode 100644
index 000000000..158fa67a1
--- /dev/null
+++ b/res/drawable-xxhdpi/label_empty.png
Binary files differ
diff --git a/res/drawable-xxhdpi/product_logo_contacts_color_144.png b/res/drawable-xxhdpi/product_logo_contacts_color_144.png
new file mode 100644
index 000000000..8ff6a1478
--- /dev/null
+++ b/res/drawable-xxhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xxhdpi/product_logo_contacts_color_192.png b/res/drawable-xxhdpi/product_logo_contacts_color_192.png
new file mode 100644
index 000000000..c32d9cd2a
--- /dev/null
+++ b/res/drawable-xxhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index a0446978c..000000000
--- a/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png b/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index ee1775234..000000000
--- a/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/sym_action_videochat_holo_light.png b/res/drawable-xxhdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index ac3507cec..000000000
--- a/res/drawable-xxhdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/accounts_empty.png b/res/drawable-xxxhdpi/accounts_empty.png
new file mode 100644
index 000000000..29e3653bc
--- /dev/null
+++ b/res/drawable-xxxhdpi/accounts_empty.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/contacts_no_account_empty.png b/res/drawable-xxxhdpi/contacts_no_account_empty.png
new file mode 100644
index 000000000..3d877a99d
--- /dev/null
+++ b/res/drawable-xxxhdpi/contacts_no_account_empty.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index b97219069..000000000
--- a/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/fab_blue.png b/res/drawable-xxxhdpi/fab_blue.png
deleted file mode 100644
index 1dd8a9260..000000000
--- a/res/drawable-xxxhdpi/fab_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/fab_pink.png b/res/drawable-xxxhdpi/fab_pink.png
new file mode 100644
index 000000000..5513227e9
--- /dev/null
+++ b/res/drawable-xxxhdpi/fab_pink.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/googlelogo_dark20_color_132x44.png b/res/drawable-xxxhdpi/googlelogo_dark20_color_132x44.png
new file mode 100644
index 000000000..7372b472f
--- /dev/null
+++ b/res/drawable-xxxhdpi/googlelogo_dark20_color_132x44.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/googlelogo_dark20_color_184x60.png b/res/drawable-xxxhdpi/googlelogo_dark20_color_184x60.png
new file mode 100644
index 000000000..60de38b4c
--- /dev/null
+++ b/res/drawable-xxxhdpi/googlelogo_dark20_color_184x60.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/home_empty.png b/res/drawable-xxxhdpi/home_empty.png
new file mode 100644
index 000000000..3d877a99d
--- /dev/null
+++ b/res/drawable-xxxhdpi/home_empty.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png b/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index c6b56c344..000000000
--- a/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_business_black_24dp.png b/res/drawable-xxxhdpi/ic_business_black_24dp.png
deleted file mode 100644
index bc3b7bcdb..000000000
--- a/res/drawable-xxxhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_business_white_120dp.png b/res/drawable-xxxhdpi/ic_business_white_120dp.png
new file mode 100644
index 000000000..1741675de
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_business_white_120dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index bda927d75..000000000
--- a/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png b/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png
deleted file mode 100644
index c077752c9..000000000
--- a/res/drawable-xxxhdpi/ic_check_circle_googblue_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index d994a326b..000000000
--- a/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index f81281075..000000000
--- a/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_directions_24dp.png b/res/drawable-xxxhdpi/ic_directions_24dp.png
deleted file mode 100644
index b7e337789..000000000
--- a/res/drawable-xxxhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_done_wht_24dp.png b/res/drawable-xxxhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 2e366842a..000000000
--- a/res/drawable-xxxhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_email_24dp.png b/res/drawable-xxxhdpi/ic_email_24dp.png
deleted file mode 100644
index 29ed46aa2..000000000
--- a/res/drawable-xxxhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_event_24dp.png b/res/drawable-xxxhdpi/ic_event_24dp.png
deleted file mode 100644
index 07f2d8237..000000000
--- a/res/drawable-xxxhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_google_plus_24dp.png b/res/drawable-xxxhdpi/ic_google_plus_24dp.png
deleted file mode 100644
index dcd6c9711..000000000
--- a/res/drawable-xxxhdpi/ic_google_plus_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_hangout_24dp.png b/res/drawable-xxxhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 4bfdb0df5..000000000
--- a/res/drawable-xxxhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_hangout_video_24dp.png b/res/drawable-xxxhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index f1be2e73b..000000000
--- a/res/drawable-xxxhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 7e795f89e..000000000
--- a/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 6fe9b8c5b..000000000
--- a/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_people_black_24dp.png b/res/drawable-xxxhdpi/ic_people_black_24dp.png
deleted file mode 100644
index b72b2f577..000000000
--- a/res/drawable-xxxhdpi/ic_people_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_avatar.png b/res/drawable-xxxhdpi/ic_person_avatar.png
new file mode 100644
index 000000000..3233252e2
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_person_avatar.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_black_128dp.png b/res/drawable-xxxhdpi/ic_person_black_128dp.png
deleted file mode 100644
index 1d94d5f04..000000000
--- a/res/drawable-xxxhdpi/ic_person_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_black_24dp.png b/res/drawable-xxxhdpi/ic_person_black_24dp.png
deleted file mode 100644
index 3b55aa12b..000000000
--- a/res/drawable-xxxhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_phone_24dp.png b/res/drawable-xxxhdpi/ic_phone_24dp.png
deleted file mode 100644
index 1f12d8df7..000000000
--- a/res/drawable-xxxhdpi/ic_phone_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png b/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png
deleted file mode 100644
index 777658e95..000000000
--- a/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_photos_white_24.png b/res/drawable-xxxhdpi/ic_photos_white_24.png
deleted file mode 100644
index 5722b4a7d..000000000
--- a/res/drawable-xxxhdpi/ic_photos_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_place_24dp.png b/res/drawable-xxxhdpi/ic_place_24dp.png
deleted file mode 100644
index e3efd0c4f..000000000
--- a/res/drawable-xxxhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_public_black_24dp.png b/res/drawable-xxxhdpi/ic_public_black_24dp.png
deleted file mode 100644
index 67aaffda4..000000000
--- a/res/drawable-xxxhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_star_24dp.png b/res/drawable-xxxhdpi/ic_star_24dp.png
deleted file mode 100644
index 7e6c8a991..000000000
--- a/res/drawable-xxxhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_star_black_128dp.png b/res/drawable-xxxhdpi/ic_star_black_128dp.png
deleted file mode 100644
index 49f9e8baf..000000000
--- a/res/drawable-xxxhdpi/ic_star_black_128dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_star_outline_24dp.png b/res/drawable-xxxhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index e3a436200..000000000
--- a/res/drawable-xxxhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/product_logo_contacts_color_144.png b/res/drawable-xxxhdpi/product_logo_contacts_color_144.png
new file mode 100644
index 000000000..c32d9cd2a
--- /dev/null
+++ b/res/drawable-xxxhdpi/product_logo_contacts_color_144.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/product_logo_contacts_color_192.png b/res/drawable-xxxhdpi/product_logo_contacts_color_192.png
new file mode 100644
index 000000000..1346cbccf
--- /dev/null
+++ b/res/drawable-xxxhdpi/product_logo_contacts_color_192.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f5d..000000000
--- a/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ab_dropdown_navigation_item_background.xml b/res/drawable/ab_dropdown_navigation_item_background.xml
deleted file mode 100644
index 05fa704f0..000000000
--- a/res/drawable/ab_dropdown_navigation_item_background.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:drawable="@drawable/ab_dropdown_navigation_item_background_pressed"/>
- <item android:state_focused="true"
- android:drawable="@drawable/ab_dropdown_navigation_item_background_focused"/>
- <item android:drawable="@drawable/spinner_default_holo_dark" />
-</selector>
diff --git a/res/drawable/ab_dropdown_navigation_item_background_focused.xml b/res/drawable/ab_dropdown_navigation_item_background_focused.xml
deleted file mode 100644
index a1dad593c..000000000
--- a/res/drawable/ab_dropdown_navigation_item_background_focused.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list
- xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:drawable="@drawable/action_bar_item_focused" />
- <item android:drawable="@drawable/spinner_default_holo_dark" />
-</layer-list>
diff --git a/res/drawable/ab_dropdown_navigation_item_background_pressed.xml b/res/drawable/ab_dropdown_navigation_item_background_pressed.xml
deleted file mode 100644
index a09be90ca..000000000
--- a/res/drawable/ab_dropdown_navigation_item_background_pressed.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list
- xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:drawable="@drawable/action_bar_item_pressed" />
- <item android:drawable="@drawable/spinner_default_holo_dark" />
-</layer-list>
diff --git a/res/drawable/action_bar_item_background.xml b/res/drawable/action_bar_item_background.xml
deleted file mode 100644
index 2d964368a..000000000
--- a/res/drawable/action_bar_item_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true" android:drawable="@drawable/action_bar_item_pressed"/>
- <item android:state_focused="true" android:drawable="@drawable/action_bar_item_focused"/>
- <item>
- <shape android:shape="rectangle" >
- <solid android:color="@color/action_bar_background" />
- </shape>
- </item>
-</selector>
diff --git a/res/drawable/action_bar_item_focused.xml b/res/drawable/action_bar_item_focused.xml
deleted file mode 100644
index 13aeb4ced..000000000
--- a/res/drawable/action_bar_item_focused.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <item>
- <shape android:shape="rectangle" >
- <solid android:color="@color/action_bar_background_highlight" />
- </shape>
- </item>
-</layer-list> \ No newline at end of file
diff --git a/res/drawable/action_bar_item_pressed.xml b/res/drawable/action_bar_item_pressed.xml
deleted file mode 100644
index 13aeb4ced..000000000
--- a/res/drawable/action_bar_item_pressed.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <item>
- <shape android:shape="rectangle" >
- <solid android:color="@color/action_bar_background_highlight" />
- </shape>
- </item>
-</layer-list> \ No newline at end of file
diff --git a/res/drawable/dialog_background_material.xml b/res/drawable/dialog_background_material.xml
new file mode 100644
index 000000000..fb586a083
--- /dev/null
+++ b/res/drawable/dialog_background_material.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:inset="16dp">
+ <shape android:shape="rectangle">
+ <corners android:radius="2dp" />
+ <solid android:color="@color/call_subject_history_background" />
+ </shape>
+</inset>
diff --git a/res/drawable/drawer_item_background.xml b/res/drawable/drawer_item_background.xml
new file mode 100644
index 000000000..dc8a9f248
--- /dev/null
+++ b/res/drawable/drawer_item_background.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_activated="true"
+ android:drawable="@color/drawer_selected_color"/>
+ <item android:drawable="@drawable/ripple_background" />
+</selector> \ No newline at end of file
diff --git a/res/drawable/floating_action_button.xml b/res/drawable/floating_action_button.xml
index 2ba237f26..796920e20 100644
--- a/res/drawable/floating_action_button.xml
+++ b/res/drawable/floating_action_button.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The Android Open Source Project
+<!-- 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.
@@ -15,10 +14,11 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true">
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/contacts_accent_color">
+ <item android:id="@android:id/mask">
<shape android:shape="oval">
- <solid android:color="@color/primary_color_dark" />
+ <solid android:color="@android:color/white" />
</shape>
</item>
-</selector> \ No newline at end of file
+</ripple> \ No newline at end of file
diff --git a/res/drawable/gray_action_bar_background.xml b/res/drawable/gray_action_bar_background.xml
deleted file mode 100644
index 41923135f..000000000
--- a/res/drawable/gray_action_bar_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@drawable/ab_solid_custom_blue_inverse_holo"/>
- <item android:drawable="@drawable/ab_stacked_solid_inverse_holo" />
-</selector>
diff --git a/res/drawable/group_list_item_background.xml b/res/drawable/group_list_item_background.xml
deleted file mode 100644
index 2aa266032..000000000
--- a/res/drawable/group_list_item_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_activated="true" android:drawable="@drawable/list_activated_holo" />
- <item android:state_pressed="true" android:drawable="@drawable/list_pressed_holo_light" />
- <item android:state_selected="true" android:drawable="@drawable/list_focused_holo" />
-</selector>
diff --git a/res/drawable/ic_close_lt.xml b/res/drawable/ic_close_lt.xml
deleted file mode 100644
index 178b8a06b..000000000
--- a/res/drawable/ic_close_lt.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2014 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
- -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_close_dk"
- android:autoMirrored="true"
- android:tint="@android:color/black" /> \ No newline at end of file
diff --git a/res/drawable/ic_work_profile.xml b/res/drawable/ic_work_profile.xml
new file mode 100644
index 000000000..bacfe69a4
--- /dev/null
+++ b/res/drawable/ic_work_profile.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="16dp"
+ android:height="16dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <!-- //java/com/google/android/assets/quantum:ic_enterprise_grey600_16 -->
+
+ <path
+ android:fillColor="#757575"
+ android:pathData="M28 33h-8v-3H6v8c0 2.2 1.8 4 4 4h28c2.2 0 4-1.8
+4-4v-8H28v3zm12-21h-7V9l-3-3H18l-3 3.1V12H8c-2.2 0-4 1.8-4 4v8c0 2.2 1.8 4 4
+4h12v-3h8v3h12c2.2 0 4-1.8 4-4v-8c0-2.2-1.8-4-4-4zm-10 0H18V9h12v3z" />
+ <path
+ android:pathData="M0 0h48v48H0z" />
+</vector>
diff --git a/res/drawable/item_background_material_borderless_dark.xml b/res/drawable/item_background_material_borderless_dark.xml
new file mode 100644
index 000000000..693bcaf6a
--- /dev/null
+++ b/res/drawable/item_background_material_borderless_dark.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Based on the Theme.Material's default selectableItemBackgroundBorderless -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/ripple_material_dark" /> \ No newline at end of file
diff --git a/res/drawable/item_background_material_dark.xml b/res/drawable/item_background_material_dark.xml
new file mode 100644
index 000000000..87b1e1747
--- /dev/null
+++ b/res/drawable/item_background_material_dark.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Based on the Theme.Material's default selectableItemBackground -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/ripple_material_dark" >
+ <item android:id="@android:id/mask">
+ <color android:color="@android:color/white" />
+ </item>
+</ripple> \ No newline at end of file
diff --git a/res/drawable/new_badge_background.xml b/res/drawable/new_badge_background.xml
new file mode 100644
index 000000000..be18ade20
--- /dev/null
+++ b/res/drawable/new_badge_background.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/dialtacts_secondary_text_color"/>
+ <corners android:radius="@dimen/nav_new_badge_corners"/>
+</shape> \ No newline at end of file
diff --git a/res/drawable/quantum_ic_account_circle_vd_theme_24.xml b/res/drawable/quantum_ic_account_circle_vd_theme_24.xml
new file mode 100644
index 000000000..df2f6e7a6
--- /dev/null
+++ b/res/drawable/quantum_ic_account_circle_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_add_vd_theme_24.xml b/res/drawable/quantum_ic_add_vd_theme_24.xml
new file mode 100644
index 000000000..167dafee6
--- /dev/null
+++ b/res/drawable/quantum_ic_add_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml b/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml
new file mode 100644
index 000000000..174cf12fb
--- /dev/null
+++ b/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml b/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml
new file mode 100644
index 000000000..87c39de0b
--- /dev/null
+++ b/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M7,10l5,5 5,-5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_assistant_vd_theme_24.xml b/res/drawable/quantum_ic_assistant_vd_theme_24.xml
new file mode 100644
index 000000000..2d5135bda
--- /dev/null
+++ b/res/drawable/quantum_ic_assistant_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M19,2L5,2c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h4l3,3 3,-3h4c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM13.88,12.88L12,17l-1.88,-4.12L6,11l4.12,-1.88L12,5l1.88,4.12L18,11l-4.12,1.88z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_business_vd_theme_24.xml b/res/drawable/quantum_ic_business_vd_theme_24.xml
new file mode 100644
index 000000000..684265b4f
--- /dev/null
+++ b/res/drawable/quantum_ic_business_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,7L12,3L2,3v18h20L22,7L12,7zM6,19L4,19v-2h2v2zM6,15L4,15v-2h2v2zM6,11L4,11L4,9h2v2zM6,7L4,7L4,5h2v2zM10,19L8,19v-2h2v2zM10,15L8,15v-2h2v2zM10,11L8,11L8,9h2v2zM10,7L8,7L8,5h2v2zM20,19h-8v-2h2v-2h-2v-2h2v-2h-2L12,9h8v10zM18,11h-2v2h2v-2zM18,15h-2v2h2v-2z"/>
+</vector> \ No newline at end of file
diff --git a/res/drawable/quantum_ic_call_received_vd_theme_24.xml b/res/drawable/quantum_ic_call_received_vd_theme_24.xml
new file mode 100644
index 000000000..3793f74b7
--- /dev/null
+++ b/res/drawable/quantum_ic_call_received_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,5.41L18.59,4 7,15.59V9H5v10h10v-2H8.41z"/>
+</vector> \ No newline at end of file
diff --git a/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml b/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml
new file mode 100644
index 000000000..07ed76be1
--- /dev/null
+++ b/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_cancel_vd_theme_24.xml b/res/drawable/quantum_ic_cancel_vd_theme_24.xml
new file mode 100644
index 000000000..409ba75eb
--- /dev/null
+++ b/res/drawable/quantum_ic_cancel_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml b/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml
new file mode 100644
index 000000000..73baff268
--- /dev/null
+++ b/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,10c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,4c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2zM6,13c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM6,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM12,11.1c-1.05,0 -1.9,0.85 -1.9,1.9s0.85,1.9 1.9,1.9c1.05,0 1.9,-0.85 1.9,-1.9s-0.85,-1.9 -1.9,-1.9zM18,13c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM18,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_close_vd_theme_24.xml b/res/drawable/quantum_ic_close_vd_theme_24.xml
new file mode 100644
index 000000000..0aafe4b5a
--- /dev/null
+++ b/res/drawable/quantum_ic_close_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_content_copy_vd_theme_24.xml b/res/drawable/quantum_ic_content_copy_vd_theme_24.xml
new file mode 100644
index 000000000..b43eb4aad
--- /dev/null
+++ b/res/drawable/quantum_ic_content_copy_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_create_vd_theme_24.xml b/res/drawable/quantum_ic_create_vd_theme_24.xml
new file mode 100644
index 000000000..8f161bc43
--- /dev/null
+++ b/res/drawable/quantum_ic_create_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_delete_vd_theme_24.xml b/res/drawable/quantum_ic_delete_vd_theme_24.xml
new file mode 100644
index 000000000..698a0bcfe
--- /dev/null
+++ b/res/drawable/quantum_ic_delete_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml b/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml
new file mode 100644
index 000000000..6ef33dbd0
--- /dev/null
+++ b/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M17,3h-1v5h1L17,3zM15,5h-2L13,4h2L15,3h-3v3h2v1h-2v1h3L15,5zM18,3v5h1L19,6h2L21,3h-3zM20,5h-1L19,4h1v1zM20,15.5c-1.25,0 -2.45,-0.2 -3.57,-0.57 -0.35,-0.11 -0.74,-0.03 -1.01,0.24l-2.2,2.2c-2.83,-1.44 -5.15,-3.75 -6.59,-6.59l2.2,-2.21c0.27,-0.26 0.35,-0.65 0.24,-1C8.7,6.45 8.5,5.25 8.5,4c0,-0.55 -0.45,-1 -1,-1L4,3c-0.55,0 -1,0.45 -1,1 0,9.39 7.61,17 17,17 0.55,0 1,-0.45 1,-1v-3.5c0,-0.55 -0.45,-1 -1,-1z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_directions_vd_theme_24.xml b/res/drawable/quantum_ic_directions_vd_theme_24.xml
new file mode 100644
index 000000000..7da99e052
--- /dev/null
+++ b/res/drawable/quantum_ic_directions_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M21.71,11.29l-9,-9c-0.39,-0.39 -1.02,-0.39 -1.41,0l-9,9c-0.39,0.39 -0.39,1.02 0,1.41l9,9c0.39,0.39 1.02,0.39 1.41,0l9,-9c0.39,-0.38 0.39,-1.01 0,-1.41zM14,14.5V12h-4v3H8v-4c0,-0.55 0.45,-1 1,-1h5V7.5l3.5,3.5 -3.5,3.5z"/>
+</vector> \ No newline at end of file
diff --git a/res/drawable/quantum_ic_done_vd_theme_24.xml b/res/drawable/quantum_ic_done_vd_theme_24.xml
new file mode 100644
index 000000000..0c810e80e
--- /dev/null
+++ b/res/drawable/quantum_ic_done_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_email_vd_theme_24.xml b/res/drawable/quantum_ic_email_vd_theme_24.xml
new file mode 100644
index 000000000..724f45a77
--- /dev/null
+++ b/res/drawable/quantum_ic_email_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_error_vd_theme_24.xml b/res/drawable/quantum_ic_error_vd_theme_24.xml
new file mode 100644
index 000000000..b9dbeb41d
--- /dev/null
+++ b/res/drawable/quantum_ic_error_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_event_vd_theme_24.xml b/res/drawable/quantum_ic_event_vd_theme_24.xml
new file mode 100644
index 000000000..e0107b123
--- /dev/null
+++ b/res/drawable/quantum_ic_event_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M17,12h-5v5h5v-5zM16,1v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2h-1L18,1h-2zM19,19L5,19L5,8h14v11z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_expand_less_vd_theme_24.xml b/res/drawable/quantum_ic_expand_less_vd_theme_24.xml
new file mode 100644
index 000000000..2f60a68c0
--- /dev/null
+++ b/res/drawable/quantum_ic_expand_less_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,8l-6,6 1.41,1.41L12,10.83l4.59,4.58L18,14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_expand_more_vd_theme_24.xml b/res/drawable/quantum_ic_expand_more_vd_theme_24.xml
new file mode 100644
index 000000000..9fbfe48ec
--- /dev/null
+++ b/res/drawable/quantum_ic_expand_more_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_hangout_vd_theme_24.xml b/res/drawable/quantum_ic_hangout_vd_theme_24.xml
new file mode 100644
index 000000000..ab07ba8fd
--- /dev/null
+++ b/res/drawable/quantum_ic_hangout_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M11.5,2C6.81,2 3,5.81 3,10.5S6.81,19 11.5,19h0.5v3.5c4.86,-2.34 8,-7.5 8,-12C20,5.81 16.19,2 11.5,2zM11,11l-1,2L8.5,13l1,-2L8,11L8,8h3v3zM15,11l-1,2h-1.5l1,-2L12,11L12,8h3v3z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml b/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml
new file mode 100644
index 000000000..1ce818a97
--- /dev/null
+++ b/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM18,16l-4,-3.2L14,16L6,16L6,8h8v3.2L18,8v8z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_help_vd_theme_24.xml b/res/drawable/quantum_ic_help_vd_theme_24.xml
new file mode 100644
index 000000000..385d7204c
--- /dev/null
+++ b/res/drawable/quantum_ic_help_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_history_vd_theme_24.xml b/res/drawable/quantum_ic_history_vd_theme_24.xml
new file mode 100644
index 000000000..51621fd90
--- /dev/null
+++ b/res/drawable/quantum_ic_history_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml b/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml
new file mode 100644
index 000000000..247cb1bea
--- /dev/null
+++ b/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,2L4,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h14l4,4L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_label_vd_theme_24.xml b/res/drawable/quantum_ic_label_vd_theme_24.xml
new file mode 100644
index 000000000..563080505
--- /dev/null
+++ b/res/drawable/quantum_ic_label_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M17.63,5.84C17.27,5.33 16.67,5 16,5L5,5.01C3.9,5.01 3,5.9 3,7v10c0,1.1 0.9,1.99 2,1.99L16,19c0.67,0 1.27,-0.33 1.63,-0.84L22,12l-4.37,-6.16z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_link_vd_theme_24.xml b/res/drawable/quantum_ic_link_vd_theme_24.xml
new file mode 100644
index 000000000..67a167eba
--- /dev/null
+++ b/res/drawable/quantum_ic_link_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_menu_vd_theme_24.xml b/res/drawable/quantum_ic_menu_vd_theme_24.xml
new file mode 100644
index 000000000..ba6adcbc4
--- /dev/null
+++ b/res/drawable/quantum_ic_menu_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_message_vd_theme_24.xml b/res/drawable/quantum_ic_message_vd_theme_24.xml
new file mode 100644
index 000000000..a06a1da6e
--- /dev/null
+++ b/res/drawable/quantum_ic_message_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_mic_vd_theme_24.xml b/res/drawable/quantum_ic_mic_vd_theme_24.xml
new file mode 100644
index 000000000..ea4bef41b
--- /dev/null
+++ b/res/drawable/quantum_ic_mic_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_more_vert_vd_theme_24.xml b/res/drawable/quantum_ic_more_vert_vd_theme_24.xml
new file mode 100644
index 000000000..442451fe1
--- /dev/null
+++ b/res/drawable/quantum_ic_more_vert_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml b/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml
new file mode 100644
index 000000000..d7e0fb430
--- /dev/null
+++ b/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M20,15.5c-1.25,0 -2.45,-0.2 -3.57,-0.57 -0.35,-0.11 -0.74,-0.03 -1.02,0.24l-2.2,2.2c-2.83,-1.44 -5.15,-3.75 -6.59,-6.58l2.2,-2.21c0.28,-0.27 0.36,-0.66 0.25,-1.01C8.7,6.45 8.5,5.25 8.5,4c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1 0,9.39 7.61,17 17,17 0.55,0 1,-0.45 1,-1v-3.5c0,-0.55 -0.45,-1 -1,-1zM12,3v10l3,-3h6V3h-9z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_person_add_vd_theme_24.xml b/res/drawable/quantum_ic_person_add_vd_theme_24.xml
new file mode 100644
index 000000000..48a017f33
--- /dev/null
+++ b/res/drawable/quantum_ic_person_add_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_person_vd_theme_24.xml b/res/drawable/quantum_ic_person_vd_theme_24.xml
new file mode 100644
index 000000000..a5d9c8c06
--- /dev/null
+++ b/res/drawable/quantum_ic_person_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_phone_vd_theme_24.xml b/res/drawable/quantum_ic_phone_vd_theme_24.xml
new file mode 100644
index 000000000..8d37e2bfe
--- /dev/null
+++ b/res/drawable/quantum_ic_phone_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_place_vd_theme_24.xml b/res/drawable/quantum_ic_place_vd_theme_24.xml
new file mode 100644
index 000000000..4276861aa
--- /dev/null
+++ b/res/drawable/quantum_ic_place_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_public_vd_theme_24.xml b/res/drawable/quantum_ic_public_vd_theme_24.xml
new file mode 100644
index 000000000..6dffe5ce2
--- /dev/null
+++ b/res/drawable/quantum_ic_public_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM11,19.93c-3.95,-0.49 -7,-3.85 -7,-7.93 0,-0.62 0.08,-1.21 0.21,-1.79L9,15v1c0,1.1 0.9,2 2,2v1.93zM17.9,17.39c-0.26,-0.81 -1,-1.39 -1.9,-1.39h-1v-3c0,-0.55 -0.45,-1 -1,-1L8,12v-2h2c0.55,0 1,-0.45 1,-1L11,7h2c1.1,0 2,-0.9 2,-2v-0.41c2.93,1.19 5,4.06 5,7.41 0,2.08 -0.8,3.97 -2.1,5.39z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_search_vd_theme_24.xml b/res/drawable/quantum_ic_search_vd_theme_24.xml
new file mode 100644
index 000000000..5c5632a84
--- /dev/null
+++ b/res/drawable/quantum_ic_search_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_settings_vd_theme_24.xml b/res/drawable/quantum_ic_settings_vd_theme_24.xml
new file mode 100644
index 000000000..1867c7955
--- /dev/null
+++ b/res/drawable/quantum_ic_settings_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_share_vd_theme_24.xml b/res/drawable/quantum_ic_share_vd_theme_24.xml
new file mode 100644
index 000000000..f024a22ef
--- /dev/null
+++ b/res/drawable/quantum_ic_share_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_sim_card_vd_theme_24.xml b/res/drawable/quantum_ic_sim_card_vd_theme_24.xml
new file mode 100644
index 000000000..2bc9387f6
--- /dev/null
+++ b/res/drawable/quantum_ic_sim_card_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M19.99,4c0,-1.1 -0.89,-2 -1.99,-2h-8L4,8v12c0,1.1 0.9,2 2,2h12.01c1.1,0 1.99,-0.9 1.99,-2l-0.01,-16zM9,19L7,19v-2h2v2zM17,19h-2v-2h2v2zM9,15L7,15v-4h2v4zM13,19h-2v-4h2v4zM13,13h-2v-2h2v2zM17,15h-2v-4h2v4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_smartphone_vd_theme_24.xml b/res/drawable/quantum_ic_smartphone_vd_theme_24.xml
new file mode 100644
index 000000000..9f987e75c
--- /dev/null
+++ b/res/drawable/quantum_ic_smartphone_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_star_border_vd_theme_24.xml b/res/drawable/quantum_ic_star_border_vd_theme_24.xml
new file mode 100644
index 000000000..e266072cd
--- /dev/null
+++ b/res/drawable/quantum_ic_star_border_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_star_vd_theme_24.xml b/res/drawable/quantum_ic_star_vd_theme_24.xml
new file mode 100644
index 000000000..f5a93c6f0
--- /dev/null
+++ b/res/drawable/quantum_ic_star_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_videocam_vd_theme_24.xml b/res/drawable/quantum_ic_videocam_vd_theme_24.xml
new file mode 100644
index 000000000..87408576b
--- /dev/null
+++ b/res/drawable/quantum_ic_videocam_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
+</vector>
diff --git a/res/drawable/quantum_launchscreen_contacts.xml b/res/drawable/quantum_launchscreen_contacts.xml
new file mode 100755
index 000000000..199589962
--- /dev/null
+++ b/res/drawable/quantum_launchscreen_contacts.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:opacity="opaque">
+ <item android:drawable="@android:color/white" />
+ <item
+ android:id="@+id/launchscreens_product_logo"
+ android:bottom="@dimen/launchscreens_product_logo_bottom">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/product_logo_contacts_color_144" />
+ </item>
+ <item
+ android:id="@+id/launchscreens_logo_text"
+ android:bottom="@dimen/launchscreens_google_logo_bottom">
+ <bitmap
+ android:gravity="center_horizontal|bottom"
+ android:src="@drawable/googlelogo_dark20_color_132x44" />
+ </item>
+</layer-list>
diff --git a/res/drawable/ripple_background.xml b/res/drawable/ripple_background.xml
new file mode 100644
index 000000000..574dff1c4
--- /dev/null
+++ b/res/drawable/ripple_background.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/control_highlight_color" /> \ No newline at end of file
diff --git a/res/drawable/searchedittext_custom_cursor.xml b/res/drawable/searchedittext_custom_cursor.xml
new file mode 100644
index 000000000..473b94c6f
--- /dev/null
+++ b/res/drawable/searchedittext_custom_cursor.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android" >
+ <size android:width="2dp" android:height="22dp" />
+ <solid android:color="@color/dialtacts_theme_color" />
+</shape> \ No newline at end of file
diff --git a/res/drawable/view_pager_tab_background.xml b/res/drawable/view_pager_tab_background.xml
deleted file mode 100644
index f1ddbe294..000000000
--- a/res/drawable/view_pager_tab_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2014 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
- -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/primary_color_dark"/>
-</selector> \ No newline at end of file
diff --git a/res/layout-land/compact_contact_editor_fragment.xml b/res/layout-land/compact_contact_editor_fragment.xml
deleted file mode 100644
index 09bb5bbb6..000000000
--- a/res/layout-land/compact_contact_editor_fragment.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<com.android.contacts.editor.CompactRawContactsEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/raw_contacts_editor_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@color/background_primary"
- android:orientation="horizontal"
- android:visibility="invisible">
-
- <include layout="@layout/compact_photo_editor_view" />
-
- <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:focusable="true"
- android:focusableInTouchMode="true"/>
-
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fadingEdge="none"
- android:fillViewport="true">
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <include layout="@layout/editor_all_rawcontacts_accounts_selector" />
- <include layout="@layout/compact_account_info" />
- <include layout="@layout/editor_account_selector" />
-
- <include layout="@layout/compact_contact_editor_fields"/>
-
- </LinearLayout>
-
- </ScrollView>
-
-</com.android.contacts.editor.CompactRawContactsEditorView> \ No newline at end of file
diff --git a/res/layout-land/contact_editor_fragment.xml b/res/layout-land/contact_editor_fragment.xml
new file mode 100644
index 000000000..7f987652a
--- /dev/null
+++ b/res/layout-land/contact_editor_fragment.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<com.android.contacts.editor.RawContactEditorView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/raw_contacts_editor_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/background_primary"
+ android:orientation="horizontal"
+ android:visibility="invisible">
+
+ <include layout="@layout/photo_editor_view" />
+
+ <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true"/>
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fadingEdge="none"
+ android:fillViewport="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <include layout="@layout/editor_account_header" />
+
+ <include layout="@layout/contact_editor_fields" />
+
+ </LinearLayout>
+
+ </ScrollView>
+
+</com.android.contacts.editor.RawContactEditorView> \ No newline at end of file
diff --git a/res/layout-land/contacts_unavailable_fragment_content.xml b/res/layout-land/contacts_unavailable_fragment_content.xml
index 4f26db656..6c5c9611b 100644
--- a/res/layout-land/contacts_unavailable_fragment_content.xml
+++ b/res/layout-land/contacts_unavailable_fragment_content.xml
@@ -14,76 +14,62 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
+ android:layout_height="match_parent"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
+
+ <ImageView
+ android:id="@+id/empty_image"
+ android:layout_width="@dimen/contacts_no_account_empty_image_width"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside"
+ android:src="@drawable/contacts_no_account_empty" />
+
+ <TextView
+ android:id="@+id/message"
+ style="@style/EmptyStateTextStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top"
+ android:text="@string/noContacts" />
<LinearLayout
- android:orientation="vertical"
- android:layout_marginLeft="40dp"
- android:layout_marginRight="40dp"
+ android:id="@+id/buttons_container"
android:layout_width="wrap_content"
- android:layout_height="match_parent">
- <ImageView
- android:id="@+id/empty_image"
- android:layout_height="128dp"
- android:layout_width="128dp"
- android:layout_marginTop="60dp"
- android:alpha="0.38"
- android:gravity="center_horizontal"/>
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal">
- <TextView
- android:id="@+id/message"
+ <Button
+ android:id="@+id/add_account_button"
+ style="@style/NoAccountViewButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary"
- android:layout_gravity="center_horizontal"
- android:textIsSelectable="false"/>
+ android:layout_marginEnd="@dimen/contacts_no_account_buttons_margin"
+ android:text="@string/contacts_unavailable_add_account" />
- <ProgressBar
- android:id="@+id/progress"
- android:layout_width="match_parent"
+ <Button
+ android:id="@+id/import_contacts_button"
+ style="@style/NoAccountViewButtonStyle"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal"
- android:indeterminate="true"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="12dp" />
+ android:text="@string/contacts_unavailable_import_contacts" />
</LinearLayout>
- <!-- This buttons_container is landscape exclusive because we want the two buttons to be of
- the same width (wrapping the longer content) and the layout width to be 208dp. -->
- <LinearLayout
- android:id="@+id/buttons_container"
- android:orientation="vertical"
- android:layout_width="208dp"
+ <FrameLayout
+ android:layout_width="match_parent"
android:layout_height="match_parent">
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center_horizontal">
-
- <Button
- android:id="@+id/add_account_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="85dp"
- android:layout_marginBottom="10dp"
- android:textColor="@android:color/white"
- android:text="@string/contacts_unavailable_add_account" />
-
- <Button
- android:id="@+id/import_contacts_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="@android:color/white"
- android:text="@string/contacts_unavailable_import_contacts" />
- </LinearLayout>
- </LinearLayout>
+ <ProgressBar
+ android:id="@+id/progress"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:indeterminate="true"
+ android:visibility="gone" />
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout-land/empty_group_view.xml b/res/layout-land/empty_group_view.xml
new file mode 100644
index 000000000..66f445baf
--- /dev/null
+++ b/res/layout-land/empty_group_view.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/empty_group"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/empty_state_background"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/empty_group_image"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:paddingTop="@dimen/empty_group_view_image_padding_top"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ android:src="@drawable/label_empty"/>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_gravity="center_horizontal"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/empty_group_view_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:paddingTop="@dimen/empty_group_view_text_padding_top"
+ android:text="@string/emptyGroup"
+ style="@style/EmptyStateTextStyle"/>
+
+ <Button
+ android:id="@+id/add_member_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/menu_addContactsToGroup"
+ style="@style/AddContactsButtonStyle"/>
+ </LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout-land/group_editor_view.xml b/res/layout-land/group_editor_view.xml
deleted file mode 100644
index dded4c3fc..000000000
--- a/res/layout-land/group_editor_view.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:paddingStart="8dip"
- android:paddingEnd="8dip"
- android:orientation="horizontal"
- >
-
- <EditText
- android:id="@+id/group_name"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:inputType="textCapWords"
- android:imeOptions="flagNoExtractUi|flagNoFullscreen"
- android:hint="@string/group_name_hint"
- android:minHeight="48dip"
- android:paddingRight="8dip"
- android:paddingEnd="8dip"
- />
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:orientation="vertical"
- >
- <include
- layout="@layout/group_editor_autocomplete_view"
- android:id="@+id/add_member_field"/>
- <include
- layout="@layout/group_editor_existing_member_list"
- android:id="@android:id/list"/>
- </LinearLayout>
- </LinearLayout>
-</LinearLayout>
diff --git a/res/layout-land/group_source_button.xml b/res/layout-land/group_source_button.xml
deleted file mode 100644
index 3bc10e719..000000000
--- a/res/layout-land/group_source_button.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- Layout for the button that will launch the user into the source application
- that the group came from (on a group detail page). This will be used in the
- action bar, so it has a vertical divider.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- style="?android:attr/actionButtonStyle">
-
- <LinearLayout
- android:id="@+id/group_source"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:orientation="horizontal">
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/action_bar_button_text_color"
- style="@android:style/Widget.Holo.ActionBar.TabText"/>
-
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="25dip"
- android:layout_height="25dip"
- android:layout_marginLeft="7dip"
- android:layout_marginRight="7dip"
- android:layout_marginStart="7dip"
- android:layout_marginEnd="7dip"
- android:layout_gravity="center_vertical"/>
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout-land/people_activity_toolbar.xml b/res/layout-land/people_activity_toolbar.xml
index d33a96c9d..8fb0dc1d6 100644
--- a/res/layout-land/people_activity_toolbar.xml
+++ b/res/layout-land/people_activity_toolbar.xml
@@ -28,13 +28,15 @@
<FrameLayout
android:id="@+id/toolbar_frame"
android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="@color/actionbar_background_color">
+ android:layout_height="?attr/actionBarSize"
+ android:background="?attr/colorPrimary">
- <Toolbar
+ <!-- the attribute padding removes the gap between this Toolbar and its parent FrameLayout on tablet -->
+ <android.support.v7.widget.Toolbar
android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
+ android:layout_height="?attr/actionBarSize"
android:id="@+id/toolbar"
+ android:padding="0dp"
style="@style/ContactsToolbarStyle" />
</FrameLayout>
diff --git a/res/layout-sw600dp-land/contact_detail_updates_fragment.xml b/res/layout-sw600dp-land/contact_detail_updates_fragment.xml
deleted file mode 100644
index 40bc9c90f..000000000
--- a/res/layout-sw600dp-land/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/background_social_updates"
- android:fadingEdge="none"
- android:divider="@null"
- android:paddingTop="@dimen/contact_detail_list_top_padding"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
- android:paddingStart="16dip"
- android:paddingEnd="16dip"
- android:scrollbarStyle="outsideOverlay"
- android:clipToPadding="false"/>
diff --git a/res/layout-sw600dp-land/contact_editor_activity.xml b/res/layout-sw600dp-land/contact_editor_activity.xml
deleted file mode 100644
index 4eb2d0c7e..000000000
--- a/res/layout-sw600dp-land/contact_editor_activity.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- This should be kept in sync with layout-sw720dp/contact_editor_activity.xml -->
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <!-- Empty view to represent the left margin -->
- <View
- android:layout_height="match_parent"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_space_layout_weight" />
-
- <fragment class="com.android.contacts.editor.ContactEditorFragment"
- android:id="@+id/contact_editor_fragment"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_card_layout_weight"
- android:layout_height="match_parent"/>
-
- <!-- Empty view to represent the right margin -->
- <View
- android:layout_height="match_parent"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_space_layout_weight" />
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/res/layout-sw600dp-land/group_browse_list_account_header.xml b/res/layout-sw600dp-land/group_browse_list_account_header.xml
deleted file mode 100644
index af60c793b..000000000
--- a/res/layout-sw600dp-land/group_browse_list_account_header.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- Only visible when it is the first element in the list. -->
- <View
- android:id="@+id/header_extra_top_padding"
- android:layout_width="match_parent"
- android:layout_height="@dimen/list_header_extra_top_padding" />
-
- <include layout="@layout/group_account_header_horizontal" />
-
-</LinearLayout>
diff --git a/res/layout-sw600dp/aggregation_suggestions.xml b/res/layout-sw600dp/aggregation_suggestions.xml
deleted file mode 100644
index 3a314b64a..000000000
--- a/res/layout-sw600dp/aggregation_suggestions.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:background="@drawable/aggregation_suggestions_bg_light_holo"
- android:paddingBottom="10dip">
- <LinearLayout
- android:id="@+id/aggregation_suggestions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" />
-</LinearLayout>
diff --git a/res/layout-sw600dp/contact_editor_activity.xml b/res/layout-sw600dp/contact_editor_activity.xml
deleted file mode 100644
index 526fe2b58..000000000
--- a/res/layout-sw600dp/contact_editor_activity.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true">
-
- <fragment class="com.android.contacts.editor.ContactEditorFragment"
- android:id="@+id/contact_editor_fragment"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
-</ScrollView>
diff --git a/res/layout-sw600dp/contact_editor_fragment.xml b/res/layout-sw600dp/contact_editor_fragment.xml
deleted file mode 100644
index be7723d0e..000000000
--- a/res/layout-sw600dp/contact_editor_fragment.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.contacts.widget.InterpolatingLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:ex="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/contact_all_list_background_color"
- android:elevation="@dimen/contact_list_card_elevation">
-
- <LinearLayout
- android:id="@+id/editors"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:fadingEdge="none"
- ex:layout_wideParentWidth="800dip"
- ex:layout_wideMarginLeft="128dip"
- ex:layout_wideMarginRight="128dip"
- ex:layout_narrowParentWidth="600dip"
- ex:layout_narrowMarginLeft="50dip"
- ex:layout_narrowMarginRight="50dip"/>
-
-</com.android.contacts.widget.InterpolatingLayout>
diff --git a/res/layout-sw600dp/external_group_editor_view.xml b/res/layout-sw600dp/external_group_editor_view.xml
deleted file mode 100644
index 9702bc72a..000000000
--- a/res/layout-sw600dp/external_group_editor_view.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="50dip"
- android:paddingLeft="50dip"
- android:paddingRight="100dip"
- android:paddingStart="50dip"
- android:paddingEnd="100dip"
- android:orientation="horizontal"
- android:background="@color/background_primary">
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="3"
- android:layout_marginRight="30dip"
- android:layout_marginEnd="30dip"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/read_only_warning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="10dip"
- android:paddingLeft="10dip"
- android:paddingRight="10dip"
- android:paddingStart="10dip"
- android:paddingEnd="10dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorTertiary"
- android:text="@string/group_read_only" />
-
- <include
- android:id="@+id/account_header"
- layout="@layout/editor_account_header"/>
-
- <TextView
- android:id="@+id/group_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorTertiary"
- android:textStyle="bold"
- android:padding="10dip"/>
-
- </LinearLayout>
-
- <include
- layout="@layout/group_editor_existing_member_list"
- android:id="@android:id/list"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="2"/>
-
-</LinearLayout>
diff --git a/res/layout-sw600dp/group_browse_list_account_header.xml b/res/layout-sw600dp/group_browse_list_account_header.xml
deleted file mode 100644
index cca6ed9ad..000000000
--- a/res/layout-sw600dp/group_browse_list_account_header.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- Only visible when it is the first element in the list. -->
- <View
- android:id="@+id/header_extra_top_padding"
- android:layout_width="match_parent"
- android:layout_height="@dimen/list_header_extra_top_padding" />
-
- <include layout="@layout/group_account_header_vertical" />
-
-</LinearLayout>
diff --git a/res/layout-sw600dp/group_detail_fragment.xml b/res/layout-sw600dp/group_detail_fragment.xml
deleted file mode 100644
index 4afc0ee09..000000000
--- a/res/layout-sw600dp/group_detail_fragment.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/group_detail"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/panel_content"
- android:paddingLeft="@dimen/group_detail_border_padding"
- android:paddingRight="@dimen/group_detail_border_padding"
- android:paddingStart="@dimen/group_detail_border_padding"
- android:paddingEnd="@dimen/group_detail_border_padding">
-
- <!-- Static header containing the group title, size, and group source (if applicable) -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/group_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:paddingTop="12dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textStyle="bold" />
-
- <TextView
- android:id="@+id/group_size"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="end"
- android:paddingBottom="12dip"
- android:textAppearance="@style/GroupMembershipSizeTextAppearance"
- android:textColor="?android:attr/textColorSecondary" />
-
- </LinearLayout>
-
- <FrameLayout
- android:id="@+id/group_source_view_container"
- android:layout_width="wrap_content"
- android:layout_height="match_parent" />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/people_app_theme_color" />
-
- <!-- List of group members -->
- <ListView android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:cacheColorHint="@android:color/black"
- android:fadingEdge="none"
- android:divider="@null" />
-
- <include
- layout="@layout/group_detail_fragment_empty_view"/>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout-sw600dp/group_editor_activity.xml b/res/layout-sw600dp/group_editor_activity.xml
deleted file mode 100644
index f93d24734..000000000
--- a/res/layout-sw600dp/group_editor_activity.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:ex="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <com.android.contacts.widget.InterpolatingLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <fragment class="com.android.contacts.group.GroupEditorFragment"
- android:id="@+id/group_editor_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- ex:layout_wideParentWidth="1280dip"
- ex:layout_wideMarginLeft="160dip"
- ex:layout_wideMarginRight="160dip"
- ex:layout_narrowParentWidth="800dip"
- ex:layout_narrowMarginLeft="0dip"
- ex:layout_narrowMarginRight="0dip"
- />
- </com.android.contacts.widget.InterpolatingLayout>
-</FrameLayout>
diff --git a/res/layout-sw600dp/group_editor_view.xml b/res/layout-sw600dp/group_editor_view.xml
deleted file mode 100644
index 717fc28f4..000000000
--- a/res/layout-sw600dp/group_editor_view.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="32dip"
- android:paddingLeft="@dimen/group_editor_side_padding"
- android:paddingRight="@dimen/group_editor_side_padding"
- android:paddingStart="@dimen/group_editor_side_padding"
- android:paddingEnd="@dimen/group_editor_side_padding"
- android:orientation="horizontal"
- android:background="@color/background_primary">
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="3"
- android:layout_marginRight="30dip"
- android:layout_marginEnd="30dip"
- android:orientation="vertical">
-
- <include
- android:id="@+id/account_header"
- layout="@layout/editor_account_header"/>
-
- <EditText
- android:id="@+id/group_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:inputType="textCapWords"
- android:hint="@string/group_name_hint"
- android:paddingLeft="16dip"
- android:paddingStart="16dip"/>
-
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/group_members"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="2"
- android:orientation="vertical">
-
- <include
- android:id="@+id/spacer"
- layout="@layout/editor_account_header"
- android:visibility="invisible"/>
-
- <include
- layout="@layout/group_editor_autocomplete_view"
- android:id="@+id/add_member_field"/>
-
- <include
- layout="@layout/group_editor_existing_member_list"
- android:id="@android:id/list"/>
-
- </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout-sw600dp/group_source_button.xml b/res/layout-sw600dp/group_source_button.xml
deleted file mode 100644
index aad118f0a..000000000
--- a/res/layout-sw600dp/group_source_button.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- Layout for the button that will launch the user into the source application
- that the group came from (on a group detail page).
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/group_source"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:background="?android:attr/selectableItemBackground"
- android:padding="10dip" >
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:duplicateParentState="true"
- android:textSize="14sp"
- style="@android:style/Widget.Holo.ActionBar.TabText"/>
-
- <ImageView
- android:id="@android:id/icon"
- android:duplicateParentState="true"
- android:layout_width="30dip"
- android:layout_height="30dip"
- android:layout_marginLeft="7dip"
- android:layout_marginStart="7dip"
- android:layout_gravity="center_vertical"/>
-
-</LinearLayout>
diff --git a/res/layout-sw720dp-land/contact_detail_updates_fragment.xml b/res/layout-sw720dp-land/contact_detail_updates_fragment.xml
deleted file mode 100644
index ba9f653fd..000000000
--- a/res/layout-sw720dp-land/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/background_social_updates"
- android:fadingEdge="none"
- android:divider="@null"
- android:paddingTop="@dimen/contact_detail_list_top_padding"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
- android:paddingStart="16dip"
- android:paddingEnd="16dip"
- android:scrollbarStyle="outsideOverlay"
- android:clipToPadding="false"/>
diff --git a/res/layout-sw720dp/contact_editor_activity.xml b/res/layout-sw720dp/contact_editor_activity.xml
deleted file mode 100644
index b31171fc5..000000000
--- a/res/layout-sw720dp/contact_editor_activity.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- This should be kept in sync with layout-sw600dp-land/contact_editor_activity.xml -->
-<ScrollView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <!-- Empty view to represent the left margin -->
- <View
- android:layout_height="match_parent"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_space_layout_weight" />
-
- <fragment class="com.android.contacts.editor.ContactEditorFragment"
- android:id="@+id/contact_editor_fragment"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_card_layout_weight"
- android:layout_height="match_parent"/>
-
- <!-- Empty view to represent the right margin -->
- <View
- android:layout_height="match_parent"
- android:layout_width="0dip"
- android:layout_weight="@integer/contact_list_space_layout_weight" />
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/res/layout-sw720dp/group_browse_list_account_header.xml b/res/layout-sw720dp/group_browse_list_account_header.xml
deleted file mode 100644
index af60c793b..000000000
--- a/res/layout-sw720dp/group_browse_list_account_header.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- Only visible when it is the first element in the list. -->
- <View
- android:id="@+id/header_extra_top_padding"
- android:layout_width="match_parent"
- android:layout_height="@dimen/list_header_extra_top_padding" />
-
- <include layout="@layout/group_account_header_horizontal" />
-
-</LinearLayout>
diff --git a/res/layout-v23/edit_spinner.xml b/res/layout-v23/edit_spinner.xml
index 0c20ab98c..37015f716 100644
--- a/res/layout-v23/edit_spinner.xml
+++ b/res/layout-v23/edit_spinner.xml
@@ -21,8 +21,7 @@
android:id="@+id/spinner"
android:layout_gravity="bottom|start"
style="@android:style/Widget.Material.Spinner.Underlined"
- android:dropDownWidth="@dimen/editor_type_label_dropdown_width"
- android:layout_width="@dimen/editor_type_label_width"
+ android:layout_width="wrap_content"
android:layout_height="@dimen/editor_min_line_item_height"
android:paddingBottom="0dp"
android:paddingTop="0dp"
diff --git a/res/layout-v23/item_group_membership.xml b/res/layout-v23/item_group_membership.xml
index ccf1f7fb5..cf45ab69f 100644
--- a/res/layout-v23/item_group_membership.xml
+++ b/res/layout-v23/item_group_membership.xml
@@ -23,7 +23,7 @@
<ImageView
android:id="@+id/kind_icon"
- android:src="@drawable/ic_people_black_24dp"
+ android:src="@drawable/quantum_ic_label_vd_theme_24"
style="@style/EditKindIconStyle" />
<Button
diff --git a/res/layout/account_filter_header.xml b/res/layout/account_filter_header.xml
new file mode 100644
index 000000000..d348e82f9
--- /dev/null
+++ b/res/layout/account_filter_header.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- Layout showing the type of account filter
+ (e.g. All contacts filter, custom filter, etc.),
+ which is the header of all contact lists. -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/account_filter_header_container"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/contact_browser_list_header_height"
+ android:paddingTop="@dimen/list_header_extra_top_padding"
+ android:visibility="gone"
+ android:orientation="horizontal"
+ android:background="@color/background_primary">
+
+ <ImageView
+ android:id="@+id/account_filter_icon"
+ android:layout_height="@dimen/contact_browser_list_header_icon_size"
+ android:layout_width="@dimen/contact_browser_list_header_icon_size"
+ android:layout_marginStart="@dimen/contact_browser_list_header_icon_left_margin"
+ android:layout_marginEnd="@dimen/contact_browser_list_header_icon_right_margin"
+ android:layout_gravity="center_vertical"/>
+
+ <TextView
+ android:id="@+id/account_filter_header"
+ android:layout_gravity="center_vertical"
+ android:layout_marginStart="@dimen/contact_browser_list_header_text_margin"
+ android:layout_marginEnd="@dimen/contact_browser_list_header_right_margin"
+ style="@style/ContactListSeparatorTextViewStyle"
+ android:textAlignment="viewStart"
+ android:paddingLeft="@dimen/contact_browser_list_item_text_indent"
+ android:paddingStart="@dimen/contact_browser_list_item_text_indent" />
+</LinearLayout>
diff --git a/res/layout/account_selector_list_item_condensed.xml b/res/layout/account_selector_list_item_condensed.xml
new file mode 100644
index 000000000..ae9172603
--- /dev/null
+++ b/res/layout/account_selector_list_item_condensed.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="72dp"
+ android:orientation="horizontal">
+ <ImageView android:id="@android:id/icon"
+ android:layout_width="@dimen/detail_network_icon_size"
+ android:layout_height="@dimen/detail_network_icon_size"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="16dp"
+ android:layout_gravity="center_vertical" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:layout_gravity="center_vertical">
+
+ <TextView android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="8dip"
+ android:layout_marginEnd="8dip"
+ android:textSize="16sp"
+ android:textColor="@color/contacts_text_color"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+
+ <TextView android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="24dp"
+ android:textSize="14sp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/aggregation_suggestions.xml b/res/layout/aggregation_suggestions.xml
deleted file mode 100644
index 3b9d278d1..000000000
--- a/res/layout/aggregation_suggestions.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:background="@drawable/aggregation_suggestions_bg">
- <LinearLayout
- android:id="@+id/aggregation_suggestions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- />
-</LinearLayout>
diff --git a/res/layout/all_photos_button.xml b/res/layout/all_photos_button.xml
deleted file mode 100644
index 83578c3a1..000000000
--- a/res/layout/all_photos_button.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="@dimen/photo_picker_item_ideal_width"
- android:layout_height="@dimen/photo_picker_item_ideal_width"
- android:background="@color/google_grey_600"
- android:orientation="vertical">
-
- <ImageView
- android:id="@+id/image"
- android:paddingTop="48dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_photos_white_24"
- android:layout_gravity="center_horizontal"/>
-
- <TextView
- android:id="@+id/textLabel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:singleLine="true"
- android:text="@string/all_photos_button"
- android:textSize="14sp"
- android:textColor="@color/photo_action_button_color"
- android:paddingTop="9dp"
- android:paddingBottom="35dp"
- android:layout_gravity="center_horizontal"/>
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/call_subject_history_list_item.xml b/res/layout/call_subject_history_list_item.xml
new file mode 100644
index 000000000..b8cce4751
--- /dev/null
+++ b/res/layout/call_subject_history_list_item.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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
+ -->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ android:gravity="center_vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="@dimen/call_subject_dialog_margin"
+ android:paddingEnd="@dimen/call_subject_dialog_margin"
+ android:paddingTop="@dimen/call_subject_history_item_padding"
+ android:paddingBottom="@dimen/call_subject_history_item_padding"
+ android:singleLine="true"
+ android:textColor="@color/dialtacts_primary_text_color"
+ android:textSize="@dimen/call_subject_dialog_primary_text_size" />
diff --git a/res/layout/compact_account_info.xml b/res/layout/compact_account_info.xml
deleted file mode 100644
index dda4fe447..000000000
--- a/res/layout/compact_account_info.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<!-- Copy of editor_account_header_expandable, but w/o the expand account button. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/account_container"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:orientation="horizontal"
- android:background="?android:attr/selectableItemBackground"
- android:layout_marginBottom="@dimen/compact_editor_name_top_margin"
- android:visibility="gone"
- >
-
-
- <ImageView
- android:id="@+id/account_type_icon"
- style="@style/EditSelectorIconStyle"/>
-
- <LinearLayout
- android:layout_height="wrap_content"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_marginTop="@dimen/compact_editor_account_header_top_margin"
- android:layout_marginStart="@dimen/compact_editor_account_left_margin"
- android:layout_gravity="center_vertical"
- android:orientation="vertical"
- >
-
- <TextView
- android:id="@+id/account_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="16sp"
- android:singleLine="true"
- android:textColor="@color/primary_text_color"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- />
-
- <TextView
- android:id="@+id/account_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="14sp"
- android:singleLine="true"
- android:textColor="@color/secondary_text_color"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- />
-
- </LinearLayout>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/compact_contact_editor_activity.xml b/res/layout/compact_contact_editor_activity.xml
deleted file mode 100644
index 595f3811e..000000000
--- a/res/layout/compact_contact_editor_activity.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/fragment_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"/>
diff --git a/res/layout/compact_contact_editor_fields.xml b/res/layout/compact_contact_editor_fields.xml
deleted file mode 100644
index 1d914488c..000000000
--- a/res/layout/compact_contact_editor_fields.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <LinearLayout
- android:id="@+id/kind_section_views"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" />
-
- <LinearLayout
- style="@style/SelectableItem"
- android:id="@+id/more_fields"
- android:focusable="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- See the comment for EditKindIconStyle in styles.xml, we use (16 + 24 + 32) dp of
- padding (start margin + icon width + end margin) for this to line up with the start
- of the edit fields. -->
- <TextView
- android:background="?android:attr/selectableItemBackground"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:paddingStart="72dp"
- android:gravity="center_vertical"
- android:text="@string/compact_editor_more_fields"
- android:textAlignment="viewStart"
- android:textColor="?android:attr/colorAccent"
- android:textSize="@dimen/expanding_entry_card_title_text_size"/>
-
- </LinearLayout>
-
-</merge> \ No newline at end of file
diff --git a/res/layout/compact_contact_editor_fragment.xml b/res/layout/compact_contact_editor_fragment.xml
deleted file mode 100644
index 1e134e0db..000000000
--- a/res/layout/compact_contact_editor_fragment.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/compact_contact_editor_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/background_primary"
- android:fadingEdge="none"
- android:fillViewport="true">
-
- <com.android.contacts.editor.CompactRawContactsEditorView
- android:id="@+id/raw_contacts_editor_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="invisible">
-
- <include layout="@layout/compact_photo_editor_view" />
-
- <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:focusable="true"
- android:focusableInTouchMode="true"/>
-
- <include layout="@layout/editor_all_rawcontacts_accounts_selector" />
- <include layout="@layout/compact_account_info" />
- <include layout="@layout/editor_account_selector" />
-
- <include layout="@layout/compact_contact_editor_fields" />
-
- </com.android.contacts.editor.CompactRawContactsEditorView>
-
-</ScrollView>
diff --git a/res/layout/compact_item_kind_section.xml b/res/layout/compact_item_kind_section.xml
deleted file mode 100644
index 771ccfeb9..000000000
--- a/res/layout/compact_item_kind_section.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<!-- The body surrounding all editors for a specific kind -->
-
-<com.android.contacts.editor.CompactKindSectionView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/kind_icon"
- style="@style/EditKindIconStyle" />
-
- <LinearLayout
- android:id="@+id/kind_editors"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" />
-
-</com.android.contacts.editor.CompactKindSectionView> \ No newline at end of file
diff --git a/res/layout/compact_photo_editor_view.xml b/res/layout/compact_photo_editor_view.xml
deleted file mode 100644
index 8f791ca5f..000000000
--- a/res/layout/compact_photo_editor_view.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<com.android.contacts.editor.CompactPhotoEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/photo_editor"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center_horizontal">
-
- <com.android.contacts.widget.QuickContactImageView
- android:id="@+id/photo"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop"/>
-
- <View
- android:id="@+id/photo_icon_overlay"
- android:layout_height="56dp"
- android:layout_width="match_parent"
- android:layout_alignParentBottom="true" />
-
- <ImageView
- android:id="@+id/photo_icon"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentBottom="true"
- android:layout_alignParentEnd="true"
- android:layout_marginBottom="16dp"
- android:layout_marginEnd="16dp"
- android:background="?android:attr/selectableItemBackground"
- android:src="@drawable/ic_photo_camera_white_24dp" />
-
- <View
- android:id="@+id/photo_touch_intercept_overlay"
- android:focusable="true"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/item_background_material_dark"
- android:contentDescription="@string/compact_editor_change_photo_content_description" />
-
-</com.android.contacts.editor.CompactPhotoEditorView>
diff --git a/res/layout/compact_photo_selection_fragment.xml b/res/layout/compact_photo_selection_fragment.xml
deleted file mode 100644
index 42f5b963a..000000000
--- a/res/layout/compact_photo_selection_fragment.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
- <GridView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/grid_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:numColumns="auto_fit"
- android:verticalSpacing="3dp"
- android:horizontalSpacing="3dp"
- android:stretchMode="columnWidth"
- android:gravity="center"
- android:paddingTop="3dp"
- android:drawSelectorOnTop="true"/>
diff --git a/res/layout/compact_photo_selection_item.xml b/res/layout/compact_photo_selection_item.xml
deleted file mode 100644
index aea8ff611..000000000
--- a/res/layout/compact_photo_selection_item.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/SelectableItem"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <ImageView
- android:id="@+id/image"
- android:layout_width="match_parent"
- android:layout_height="@dimen/photo_picker_item_ideal_width"
- android:adjustViewBounds="true"
- android:layout_centerInParent="true"
- android:scaleType="centerCrop" />
-
- <ImageView
- android:id="@+id/check"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"
- android:layout_margin="8dp"
- android:src="@drawable/ic_check_circle_googblue_drawable_24dp"
- android:visibility="gone"/>
-
- <ImageView
- android:id="@+id/account_type"
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:layout_alignParentBottom="true"
- android:layout_alignParentStart="true"
- android:paddingBottom="8dp"
- android:paddingStart="8dp"/>
-
-</RelativeLayout>
diff --git a/res/layout/confirm_add_detail_activity.xml b/res/layout/confirm_add_detail_activity.xml
deleted file mode 100644
index e26c9175b..000000000
--- a/res/layout/confirm_add_detail_activity.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Layout for confirming the addition of a piece of information to an existing contact. -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/root_view"
- android:orientation="vertical"
- android:visibility="invisible"
- style="@style/ConfirmAddDetailViewStyle">
-
- <!--
- The header contains the contact photo, name, a link to the contact card, and
- possibly an extra data field to disambiguate contacts with the same name.
- -->
- <RelativeLayout
- style="@style/ConfirmAddDetailHeaderViewStyle">
-
- <ImageView
- android:id="@+id/photo"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:scaleType="centerCrop"/>
-
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="0dip"
- android:layout_height="42dip"
- android:layout_alignBottom="@id/photo"
- android:layout_alignLeft="@id/photo"
- android:layout_alignRight="@id/photo"
- android:layout_alignStart="@id/photo"
- android:layout_alignEnd="@id/photo"
- android:background="#7F000000" />
-
- <ImageButton
- android:id="@+id/open_details_button"
- android:src="@drawable/ic_contacts_holo_dark"
- android:background="?android:attr/selectableItemBackground"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_marginRight="16dip"
- android:layout_marginEnd="16dip"
- android:layout_marginBottom="5dip"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignRight="@id/photo_text_bar"
- android:layout_alignEnd="@id/photo_text_bar" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:orientation="vertical"
- android:layout_alignBottom="@id/photo"
- android:layout_alignLeft="@id/photo"
- android:layout_alignStart="@id/photo"
- android:layout_toLeftOf="@id/open_details_button"
- android:layout_toStartOf="@id/open_details_button"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:paddingStart="8dip"
- android:paddingEnd="8dip">
-
- <TextView
- android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:gravity="center_vertical"
- android:textColor="@android:color/white"
- android:textSize="16sp"
- android:singleLine="true" />
-
- <TextView
- android:id="@+id/extra_info"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@android:color/white"
- android:singleLine="true"
- android:paddingBottom="4dip"
- android:visibility="gone" />
-
- </LinearLayout>
-
- <View
- android:id="@+id/open_details_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:attr/selectableItemBackground" />
-
- </RelativeLayout>
-
- <!-- Message that gets displayed if the contact is read-only (instead of showing the editor) -->
- <TextView android:id="@+id/read_only_warning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="60dip"
- android:visibility="gone"
- android:padding="15dip"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
-
- <!-- Container for a single detail field editor when the contact is not read-only -->
- <FrameLayout
- android:id="@+id/editor_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="60dip"
- android:layout_marginTop="4dip"
- android:layout_marginRight="15dip"
- android:layout_marginEnd="15dip"/>
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/secondary_header_separator_color"/>
-
- <!-- Action buttons -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- style="?android:attr/buttonBarStyle">
-
- <Button
- android:id="@+id/btn_cancel"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@android:string/cancel" />
-
- <Button
- android:id="@+id/btn_done"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@android:string/ok" />
-
- </LinearLayout>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/contact_detail_add_connection_entry_view.xml b/res/layout/contact_detail_add_connection_entry_view.xml
deleted file mode 100644
index 6d4971dfa..000000000
--- a/res/layout/contact_detail_add_connection_entry_view.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="@dimen/detail_item_side_margin"
- android:paddingRight="@dimen/detail_item_side_margin"
- android:paddingStart="@dimen/detail_item_side_margin"
- android:paddingEnd="@dimen/detail_item_side_margin">
- <LinearLayout
- android:id="@+id/primary_action_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="@dimen/detail_item_vertical_margin"
- android:paddingBottom="@dimen/detail_item_vertical_margin"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- android:minHeight="@dimen/detail_min_line_item_height"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <ImageView
- android:id="@+id/add_connection_icon"
- android:layout_width="@dimen/detail_network_icon_size"
- android:layout_height="@dimen/detail_network_icon_size"
- android:layout_marginLeft="@dimen/detail_item_icon_margin"
- android:layout_marginRight="@dimen/detail_item_icon_margin"
- android:layout_marginStart="@dimen/detail_item_icon_margin"
- android:layout_marginEnd="@dimen/detail_item_icon_margin"
- android:layout_gravity="center_vertical"
- android:scaleType="centerInside" />
-
- <TextView
- android:id="@+id/add_connection_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
- </LinearLayout>
-</FrameLayout>
diff --git a/res/layout/contact_detail_network_title_entry_view.xml b/res/layout/contact_detail_network_title_entry_view.xml
deleted file mode 100644
index 073dad84d..000000000
--- a/res/layout/contact_detail_network_title_entry_view.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="@dimen/detail_item_side_margin"
- android:paddingRight="@dimen/detail_item_side_margin"
- android:paddingStart="@dimen/detail_item_side_margin"
- android:paddingEnd="@dimen/detail_item_side_margin">
- <LinearLayout
- android:id="@+id/primary_action_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="@dimen/detail_item_vertical_margin"
- android:paddingBottom="@dimen/detail_item_vertical_margin"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- android:minHeight="@dimen/detail_min_line_item_height"
- android:orientation="horizontal"
- android:gravity="center_vertical">
-
- <ImageView
- android:id="@+id/network_icon"
- android:layout_width="@dimen/detail_network_icon_size"
- android:layout_height="@dimen/detail_network_icon_size"
- android:layout_marginLeft="@dimen/detail_item_icon_margin"
- android:layout_marginRight="@dimen/detail_item_icon_margin"
- android:layout_marginStart="@dimen/detail_item_icon_margin"
- android:layout_marginEnd="@dimen/detail_item_icon_margin"
- android:layout_gravity="center_vertical"
- android:scaleType="centerInside" />
-
- <TextView
- android:id="@+id/network_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary" />
- </LinearLayout>
-</FrameLayout>
diff --git a/res/layout/contact_detail_separator_entry_view.xml b/res/layout/contact_detail_separator_entry_view.xml
deleted file mode 100644
index abe1cf85a..000000000
--- a/res/layout/contact_detail_separator_entry_view.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"/>
-
-</FrameLayout> \ No newline at end of file
diff --git a/res/layout/contact_detail_updates_fragment.xml b/res/layout/contact_detail_updates_fragment.xml
deleted file mode 100644
index 02e906cdf..000000000
--- a/res/layout/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<ListView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:divider="@null"/>
diff --git a/res/layout/contact_detail_updates_fragment_container.xml b/res/layout/contact_detail_updates_fragment_container.xml
deleted file mode 100644
index 7414f61c8..000000000
--- a/res/layout/contact_detail_updates_fragment_container.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- Container for the "Updates" page fragment on the contact card for a contact with social updates.
- This view ID must match with a view ID in the layout that is used after an orientation change.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/updates_fragment_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:visibility="gone" />
diff --git a/res/layout/contact_editor_accounts_changed_activity_with_picker.xml b/res/layout/contact_editor_accounts_changed_activity_with_picker.xml
index 172c9c543..0faea20e0 100644
--- a/res/layout/contact_editor_accounts_changed_activity_with_picker.xml
+++ b/res/layout/contact_editor_accounts_changed_activity_with_picker.xml
@@ -24,14 +24,9 @@
android:layout_height="match_parent"
android:orientation="vertical">
- <TextView android:id="@+id/text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="24dip"
- android:layout_marginStart="24dip"
- android:paddingTop="15dip"
- android:paddingBottom="15dip"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
+ <include
+ android:id="@+id/text"
+ layout="@layout/dialog_title"/>
<View
android:layout_width="match_parent"
@@ -42,8 +37,6 @@
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
- android:layout_marginLeft="8dip"
- android:layout_marginStart="8dip"
android:fadingEdge="none"/>
<View
@@ -54,7 +47,9 @@
<Button
android:id="@+id/add_account_button"
style="?android:attr/buttonBarButtonStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingStart="24dp"
+ android:layout_marginBottom="8dp"/>
</LinearLayout>
diff --git a/res/layout/contact_editor_accounts_changed_activity_with_text.xml b/res/layout/contact_editor_accounts_changed_activity_with_text.xml
index 345d9374a..c9d2039e2 100644
--- a/res/layout/contact_editor_accounts_changed_activity_with_text.xml
+++ b/res/layout/contact_editor_accounts_changed_activity_with_text.xml
@@ -27,7 +27,11 @@
<TextView android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:padding="15dip"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"
+ android:layout_marginTop="24dp"
+ android:layout_marginBottom="24dp"
+ android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<View
@@ -35,7 +39,7 @@
android:layout_height="1dip"
android:background="?android:attr/listDivider"/>
- <LinearLayout
+ <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@@ -44,20 +48,24 @@
style="?android:attr/buttonBarStyle">
<Button
- android:id="@+id/left_button"
+ android:id="@+id/right_button"
style="?android:attr/buttonBarButtonStyle"
- android:layout_width="0dip"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:singleLine="false"
- android:layout_weight="1" />
+ android:layout_alignParentEnd="true"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"/>
<Button
- android:id="@+id/right_button"
+ android:id="@+id/left_button"
style="?android:attr/buttonBarButtonStyle"
- android:layout_width="0dip"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_toStartOf="@id/right_button"
+ android:layout_marginTop="8dp"/>
- </LinearLayout>
+ </RelativeLayout>
</LinearLayout>
diff --git a/res/layout/contact_editor_activity.xml b/res/layout/contact_editor_activity.xml
index 8c13629f1..36fc64aa1 100644
--- a/res/layout/contact_editor_activity.xml
+++ b/res/layout/contact_editor_activity.xml
@@ -1,25 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
+<!--
+ 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
+ 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
+ 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.
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/fragment_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:orientation="vertical">
- <fragment class="com.android.contacts.editor.ContactEditorFragment"
- android:id="@+id/contact_editor_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-</FrameLayout>
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ style="@style/EditorActionBarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="?android:attr/actionBarSize"
+ android:background="?android:attr/colorPrimary"
+ android:elevation="4dp"
+ app:navigationContentDescription="@string/cancel_button_content_description"
+ app:navigationIcon="@drawable/quantum_ic_close_vd_theme_24"
+ app:title="@string/contact_editor_title_existing_contact" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/contact_editor_fields.xml b/res/layout/contact_editor_fields.xml
new file mode 100644
index 000000000..b9bda1698
--- /dev/null
+++ b/res/layout/contact_editor_fields.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <LinearLayout
+ android:id="@+id/kind_section_views"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" />
+
+ <LinearLayout
+ style="@style/SelectableItem"
+ android:id="@+id/more_fields"
+ android:focusable="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <!-- See the comment for EditKindIconStyle in styles.xml, we use (16 + 24 + 32) dp of
+ padding (start margin + icon width + end margin) for this to line up with the start
+ of the edit fields. -->
+ <TextView
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/editor_min_line_item_height"
+ android:paddingStart="72dp"
+ android:gravity="center_vertical"
+ android:text="@string/editor_more_fields"
+ android:textAlignment="viewStart"
+ android:textColor="?android:attr/colorAccent"
+ android:textSize="@dimen/expanding_entry_card_title_text_size"/>
+
+ </LinearLayout>
+
+</merge> \ No newline at end of file
diff --git a/res/layout/contact_editor_fragment.xml b/res/layout/contact_editor_fragment.xml
index f174a3d9f..690be8ce6 100644
--- a/res/layout/contact_editor_fragment.xml
+++ b/res/layout/contact_editor_fragment.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
+<!--
+ 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.
@@ -15,17 +16,33 @@
-->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fillViewport="true"
- android:fadingEdge="none"
- android:background="@color/background_primary"
->
-
- <LinearLayout android:id="@+id/editors"
+ android:id="@+id/contact_editor_fragment"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- />
+ android:layout_height="match_parent"
+ android:background="@color/background_primary"
+ android:fadingEdge="none"
+ android:fillViewport="true">
+
+ <com.android.contacts.editor.RawContactEditorView
+ android:id="@+id/raw_contacts_editor_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:visibility="invisible">
+
+ <include layout="@layout/photo_editor_view" />
+
+ <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:focusable="true"
+ android:focusableInTouchMode="true"/>
+
+ <include layout="@layout/editor_account_header" />
+
+ <include layout="@layout/contact_editor_fields" />
+
+ </com.android.contacts.editor.RawContactEditorView>
</ScrollView>
diff --git a/res/layout/contact_editor_label_name_dialog.xml b/res/layout/contact_editor_label_name_dialog.xml
index 162f85daa..61765ceb1 100644
--- a/res/layout/contact_editor_label_name_dialog.xml
+++ b/res/layout/contact_editor_label_name_dialog.xml
@@ -18,14 +18,19 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="25dip"
- android:paddingRight="25dip"
- android:paddingStart="25dip"
- android:paddingEnd="25dip"
- android:paddingTop="25dip"
- android:paddingBottom="25dip">
+ android:paddingStart="@dimen/custom_dialog_layout_padding"
+ android:paddingEnd="@dimen/custom_dialog_layout_padding"
+ android:paddingTop="@dimen/custom_dialog_layout_padding">
+
<EditText
android:id="@+id/custom_dialog_content"
android:layout_width="match_parent"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/custom_dialog_layout"
+ android:layout_marginEnd="@dimen/custom_dialog_layout"
+ android:hint="@string/label_name_dialog_hint"
+ android:minWidth="@dimen/custom_dialog_min_width"
+ android:minHeight="@dimen/dialog_edit_text_min_height"
+ android:lines="1"
+ android:textAlignment="viewStart"/>
</FrameLayout>
diff --git a/res/layout/contact_list_card.xml b/res/layout/contact_list_card.xml
new file mode 100644
index 000000000..c2b66a4d2
--- /dev/null
+++ b/res/layout/contact_list_card.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:id="@+id/list_card"
+ android:visibility="invisible">
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/contact_all_list_background_color"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/contact_list_content.xml b/res/layout/contact_list_content.xml
new file mode 100644
index 000000000..d9b113f52
--- /dev/null
+++ b/res/layout/contact_list_content.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<!-- android:paddingTop is used instead of android:layout_marginTop. It looks
+ android:layout_marginTop is ignored when used with <fragment></fragment>, which
+ only happens in Tablet UI since we rely on ViewPager in Phone UI.
+ Instead, android:layout_marginTop inside <fragment /> is effective. -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/pinned_header_list_layout"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone"
+ android:background="?attr/contact_browser_background" >
+
+ <LinearLayout
+ android:id="@+id/alert_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:background="@color/alert_background"
+ android:paddingStart="20dp"
+ android:visibility="gone">
+
+ <TextView
+ android:id="@+id/alert_text"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:layout_weight="1"
+ android:textColor="@android:color/black"
+ android:textSize="16sp"/>
+
+ <ImageView
+ android:id="@+id/alert_dismiss_icon"
+ android:layout_width="56dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical"
+ android:contentDescription="@string/dismiss_sync_alert"
+ android:background="?android:attr/selectableItemBackground"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_cancel_vd_theme_24" />
+ </LinearLayout>
+
+ <!-- Shown only when an Account filter is set.
+ - paddingTop should be here to show "shade" effect correctly. -->
+ <include layout="@layout/account_filter_header" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:id="@+id/contact_list">
+
+ <include layout="@layout/contact_list_card"/>
+
+ <android.support.v4.widget.SwipeRefreshLayout
+ android:id="@+id/swipe_refresh"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:enabled="false" >
+
+ <view
+ class="com.android.contacts.list.PinnedHeaderListView"
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="?attr/contact_browser_list_padding_left"
+ android:layout_marginRight="?attr/contact_browser_list_padding_right"
+ android:layout_marginStart="?attr/contact_browser_list_padding_left"
+ android:layout_marginEnd="?attr/contact_browser_list_padding_right"
+ android:paddingTop="?attr/list_item_padding_top"
+ android:clipToPadding="false"
+ android:fastScrollEnabled="true"
+ android:visibility="gone"
+ android:fadingEdge="none" />
+ </android.support.v4.widget.SwipeRefreshLayout>
+
+ <ProgressBar
+ android:id="@+id/search_progress"
+ style="?android:attr/progressBarStyleLarge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:visibility="gone" />
+ </FrameLayout>
+
+</LinearLayout>
diff --git a/res/layout/contact_list_filter.xml b/res/layout/contact_list_filter.xml
new file mode 100644
index 000000000..34c713c07
--- /dev/null
+++ b/res/layout/contact_list_filter.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:fillViewport="true">
+
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="?android:attr/dividerHorizontal" />
+</LinearLayout>
diff --git a/res/layout/contact_list_filter_custom.xml b/res/layout/contact_list_filter_custom.xml
new file mode 100644
index 000000000..845d52fcc
--- /dev/null
+++ b/res/layout/contact_list_filter_custom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/CustomContactListFilterView"
+ android:orientation="vertical"
+ android:fillViewport="true">
+
+ <ExpandableListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:overScrollMode="always" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:layout_marginLeft="16dip"
+ android:layout_marginRight="16dip"
+ android:layout_marginStart="16dip"
+ android:layout_marginEnd="16dip"
+ android:background="?android:attr/dividerHorizontal" />
+
+</LinearLayout>
diff --git a/res/layout/contact_list_filter_item.xml b/res/layout/contact_list_filter_item.xml
new file mode 100644
index 000000000..4d1fbca70
--- /dev/null
+++ b/res/layout/contact_list_filter_item.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<view
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ class="com.android.contacts.list.ContactListFilterView"
+ android:descendantFocusability="blocksDescendants"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="@dimen/contact_filter_left_margin"
+ android:paddingEnd="@dimen/contact_filter_right_margin"
+ android:minHeight="@dimen/contact_filter_item_min_height"
+ android:gravity="center_vertical">
+
+ <ImageView
+ android:id="@+id/icon"
+ android:scaleType="fitCenter"
+ android:layout_width="@dimen/contact_filter_icon_size"
+ android:layout_height="@dimen/contact_filter_icon_size"/>
+
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginTop="-1dip"
+ android:orientation="vertical"
+ android:layout_marginLeft="8dip"
+ android:layout_marginStart="8dip">
+
+ <TextView
+ android:id="@+id/accountType"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textColor="@color/account_filter_text_color"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+
+ <TextView
+ android:id="@+id/accountUserName"
+ android:layout_marginTop="-3dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="@color/account_filter_text_color"
+ android:singleLine="true"
+ android:ellipsize="end"/>
+ </LinearLayout>
+
+ <RadioButton
+ android:id="@+id/radioButton"
+ android:clickable="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="end|center_vertical" />
+</view>
+
diff --git a/res/layout/contact_picker.xml b/res/layout/contact_picker.xml
index 2efe47196..faf5563f5 100644
--- a/res/layout/contact_picker.xml
+++ b/res/layout/contact_picker.xml
@@ -14,9 +14,14 @@
limitations under the License.
-->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/ContactPickerLayout"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_container"
+ android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="match_parent" >
+
+ <include
+ layout="@layout/people_activity_toolbar"
+ android:id="@+id/toolbar_parent" />
+
+</LinearLayout>
diff --git a/res/layout/contact_picker_content.xml b/res/layout/contact_picker_content.xml
index 36734c523..382121a47 100644
--- a/res/layout/contact_picker_content.xml
+++ b/res/layout/contact_picker_content.xml
@@ -21,7 +21,7 @@
<include layout="@layout/contact_list_card"/>
<view
- class="com.android.contacts.common.list.PinnedHeaderListView"
+ class="com.android.contacts.list.PinnedHeaderListView"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/layout/contact_tile_list.xml b/res/layout/contact_tile_list.xml
deleted file mode 100644
index 8b172d1fd..000000000
--- a/res/layout/contact_tile_list.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="?attr/favorites_padding_bottom"
- android:background="@color/background_primary">
-
- <include layout="@layout/contact_list_card"/>
-
- <ListView
- android:id="@+id/contact_tile_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingTop="@dimen/contact_tile_list_padding_top"
- android:clipToPadding="false"
- android:fadingEdge="none"
- android:divider="@null"
- android:scrollbarStyle="outsideOverlay"/>
-
- <TextView
- android:id="@+id/contact_tile_list_empty"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center_horizontal"
- android:layout_marginTop="@dimen/empty_message_top_margin"
- android:textColor="@android:color/black"
- android:drawableTop="@drawable/ic_star_black_128dp"
- android:drawablePadding="4dp"
- android:alpha="0.38"
- android:paddingTop="10dp"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
-</FrameLayout>
diff --git a/res/layout/contact_tile_list_frequent.xml b/res/layout/contact_tile_list_frequent.xml
deleted file mode 100644
index 3707f11c4..000000000
--- a/res/layout/contact_tile_list_frequent.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- This is very similar to contact_tile_list.xml (there needs to be a ListView called
- contact_tile_list and an empty view called contact_tile_list_empty). However, this layout also
- contains a container view for the title of the frequently contacted list.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="?attr/favorites_padding_bottom"
- android:orientation="vertical">
-
- <FrameLayout
- android:id="@+id/header_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
- <ListView
- android:id="@+id/contact_tile_list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fadingEdge="none"
- android:divider="@null" />
-
- <TextView
- android:id="@+id/contact_tile_list_empty"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center_horizontal"
- android:layout_marginTop="@dimen/empty_message_top_margin"
- android:textColor="?android:attr/textColorSecondary"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
-</LinearLayout>
diff --git a/res/layout/contacts_drawer_activity.xml b/res/layout/contacts_drawer_activity.xml
new file mode 100644
index 000000000..84e536bef
--- /dev/null
+++ b/res/layout/contacts_drawer_activity.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<android.support.v4.widget.DrawerLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true"
+ tools:openDrawer="start">
+
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/fragment_container"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include
+ layout="@layout/people_activity_toolbar"
+ android:id="@+id/toolbar_parent" />
+
+ <FrameLayout
+ android:id="@+id/content_frame"
+ android:layout_width="match_parent"
+ android:layout_height="fill_parent"
+ android:background="?android:attr/windowBackground" />
+ </LinearLayout>
+
+ <fragment
+ android:id="@+id/drawer"
+ android:name="com.android.contacts.drawer.DrawerFragment"
+ android:layout_gravity="start"
+ android:layout_width="@dimen/drawer_width"
+ android:layout_height="match_parent" />
+
+</android.support.v4.widget.DrawerLayout>
diff --git a/res/layout/contacts_unavailable_fragment.xml b/res/layout/contacts_unavailable_fragment.xml
index 300921f77..01a87875e 100644
--- a/res/layout/contacts_unavailable_fragment.xml
+++ b/res/layout/contacts_unavailable_fragment.xml
@@ -24,7 +24,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
- android:background="@color/background_primary">
+ android:background="@color/empty_state_background">
<include layout="@layout/contacts_unavailable_fragment_content"/>
</ScrollView>
</FrameLayout>
diff --git a/res/layout/contacts_unavailable_fragment_content.xml b/res/layout/contacts_unavailable_fragment_content.xml
index 9482273b7..859112dff 100644
--- a/res/layout/contacts_unavailable_fragment_content.xml
+++ b/res/layout/contacts_unavailable_fragment_content.xml
@@ -14,63 +14,53 @@
limitations under the License.
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal">
+ android:layout_height="match_parent"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
<ImageView
android:id="@+id/empty_image"
- android:layout_height="128dp"
- android:layout_width="128dp"
- android:layout_marginTop="56dp"
- android:alpha="0.38"
- android:gravity="center_horizontal" />
+ android:layout_width="@dimen/contacts_no_account_empty_image_width"
+ android:layout_height="wrap_content"
+ android:adjustViewBounds="true"
+ android:scaleType="centerInside"
+ android:src="@drawable/contacts_no_account_empty" />
- <LinearLayout
- android:orientation="vertical"
+ <TextView
+ android:id="@+id/message"
+ style="@style/EmptyStateTextStyle"
android:layout_width="wrap_content"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_text_padding_top"
+ android:text="@string/noContacts" />
- <TextView
- android:id="@+id/message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary"/>
+ <Button
+ android:id="@+id/add_account_button"
+ style="@style/NoAccountViewButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/contacts_no_account_empty_button_padding_top"
+ android:text="@string/contacts_unavailable_add_account" />
+
+ <Button
+ android:id="@+id/import_contacts_button"
+ style="@style/NoAccountViewButtonStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/contacts_unavailable_import_contacts" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progress"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- style="?android:attr/progressBarStyleHorizontal"
+ android:layout_gravity="center"
android:indeterminate="true"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="12dp" />
- </LinearLayout>
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
- <Button
- android:id="@+id/add_account_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="50dp"
- android:layout_marginBottom="10dp"
- android:textColor="@android:color/white"
- android:text="@string/contacts_unavailable_add_account" />
-
- <Button
- android:id="@+id/import_contacts_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textColor="@android:color/white"
- android:text="@string/contacts_unavailable_import_contacts" />
- </LinearLayout>
+ android:visibility="gone" />
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout/create_new_contact.xml b/res/layout/create_new_contact.xml
deleted file mode 100644
index 3af60d316..000000000
--- a/res/layout/create_new_contact.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:orientation="horizontal"
- android:paddingLeft="6dip"
- android:paddingRight="6dip"
- android:paddingStart="6dip"
- android:paddingEnd="6dip"
- android:paddingTop="5dip"
- android:paddingBottom="5dip"
- android:gravity="center_vertical"
- >
- <ImageView android:id="@+id/addicon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="11dip"
- android:layout_marginStart="5dip"
- android:layout_marginEnd="11dip"
- android:focusable="false"
- android:src="@drawable/ic_add_contact_holo_light"
- android:scaleType="fitCenter"
- />
- <TextView android:id="@+id/title"
- android:text="@string/pickerNewContactHeader"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="2dip"
- />
-</LinearLayout>
diff --git a/res/layout/custom_action_bar.xml b/res/layout/custom_action_bar.xml
deleted file mode 100644
index 5b930ea4d..000000000
--- a/res/layout/custom_action_bar.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Dimensions are set at runtime in ActionBarAdapter -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="0dip"
- android:layout_height="0dip" >
-
- <!-- To prevent the search view from getting the initial focus. -->
- <View
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:layout_width="1px"
- android:layout_height="1px" >
- <requestFocus />
- </View>
- <SearchView
- android:id="@+id/search_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:iconifiedByDefault="false"
- android:inputType="textFilter"
- android:theme="@style/ContactPickerSearchTheme" />
-
-</FrameLayout>
diff --git a/res/layout/custom_contact_list_filter_account.xml b/res/layout/custom_contact_list_filter_account.xml
new file mode 100644
index 000000000..c7a6cb5d0
--- /dev/null
+++ b/res/layout/custom_contact_list_filter_account.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical"
+ android:paddingLeft="@dimen/contact_filter_list_item_padding_start"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:paddingStart="@dimen/contact_filter_list_item_padding_start"
+ android:paddingEnd="?android:attr/scrollbarSize">
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="6dip"
+ android:layout_marginEnd="6dip"
+ android:layout_marginTop="6dip"
+ android:layout_marginBottom="6dip"
+ android:layout_weight="1"
+ android:duplicateParentState="true">
+
+ <TextView
+ android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:duplicateParentState="true" />
+
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/text1"
+ android:layout_alignLeft="@android:id/text1"
+ android:layout_alignStart="@android:id/text1"
+ android:maxLines="1"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="?android:attr/textColorTertiary"
+ android:duplicateParentState="true" />
+
+ </RelativeLayout>
+
+</LinearLayout>
diff --git a/res/layout/custom_contact_list_filter_group.xml b/res/layout/custom_contact_list_filter_group.xml
new file mode 100644
index 000000000..c67ce163c
--- /dev/null
+++ b/res/layout/custom_contact_list_filter_group.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/contact_filter_list_item_height"
+ android:gravity="center_vertical"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/contact_filter_list_item_height"
+ android:gravity="center_vertical"
+ android:paddingLeft="@dimen/contact_filter_list_item_padding_start"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:paddingStart="@dimen/contact_filter_list_item_padding_start"
+ android:paddingEnd="?android:attr/scrollbarSize">
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="6dip"
+ android:layout_marginEnd="6dip"
+ android:layout_marginTop="6dip"
+ android:layout_marginBottom="6dip"
+ android:layout_weight="1"
+ android:duplicateParentState="true"
+ >
+
+ <TextView
+ android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ android:textColor="@color/account_filter_text_color"
+ android:duplicateParentState="true"
+ />
+
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@android:id/text1"
+ android:layout_alignLeft="@android:id/text1"
+ android:layout_alignStart="@android:id/text1"
+ android:maxLines="2"
+ android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+ android:textColor="@color/account_filter_text_color"
+ android:duplicateParentState="true"
+ />
+
+ </RelativeLayout>
+
+ <CheckBox
+ android:id="@android:id/checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:focusable="false"
+ android:clickable="false"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:duplicateParentState="true"
+ />
+
+ </LinearLayout>
+
+ <View
+ android:id="@+id/adapter_divider_bottom"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="@color/custom_filter_divider" />
+
+</LinearLayout>
diff --git a/res/layout/default_account_checkbox.xml b/res/layout/default_account_checkbox.xml
new file mode 100644
index 000000000..9a1a45040
--- /dev/null
+++ b/res/layout/default_account_checkbox.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/default_account_checkbox_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="4dp"
+ android:orientation="vertical">
+ <CheckBox
+ android:id="@+id/default_account_checkbox_view"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="15dip"
+ android:layout_marginLeft="13dip"
+ android:layout_marginBottom="20dip"
+ android:gravity="center"
+ android:textAlignment="viewStart"
+ android:text="@string/set_default_account"
+ android:textColor="@color/dialtacts_secondary_text_color"
+ />
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/dialog_call_subject.xml b/res/layout/dialog_call_subject.xml
new file mode 100644
index 000000000..61513ebe9
--- /dev/null
+++ b/res/layout/dialog_call_subject.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent"
+ android:id="@+id/call_subject_dialog"
+ android:orientation="vertical">
+
+ <RelativeLayout
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_width="match_parent">
+
+ <!-- The call subject dialog will be centered in the space above the subject list. -->
+ <LinearLayout
+ android:id="@+id/dialog_view"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:theme="@android:style/Theme.Material.Light.Dialog"
+ android:elevation="16dp"
+ android:layout_centerInParent="true"
+ android:background="@drawable/dialog_background_material">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginStart="@dimen/call_subject_dialog_margin"
+ android:layout_marginEnd="@dimen/call_subject_dialog_margin"
+ android:layout_marginTop="@dimen/call_subject_dialog_margin">
+
+ <QuickContactBadge
+ android:id="@+id/contact_photo"
+ android:layout_width="@dimen/call_subject_dialog_contact_photo_size"
+ android:layout_height="@dimen/call_subject_dialog_contact_photo_size"
+ android:layout_gravity="top"
+ android:focusable="true"
+ android:layout_marginEnd="@dimen/call_subject_dialog_margin" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center_vertical">
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/dialtacts_primary_text_color"
+ android:textSize="@dimen/call_subject_dialog_secondary_text_size"
+ android:singleLine="true" />
+
+ <TextView
+ android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginTop="@dimen/call_subject_dialog_between_line_margin"
+ android:textColor="@color/dialtacts_secondary_text_color"
+ android:textSize="@dimen/call_subject_dialog_secondary_text_size"
+ android:singleLine="true" />
+ </LinearLayout>
+ </LinearLayout>
+
+ <EditText
+ android:id="@+id/call_subject"
+ android:hint="@string/call_subject_hint"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_gravity="top"
+ android:textColor="@color/dialtacts_secondary_text_color"
+ android:textSize="@dimen/call_subject_dialog_secondary_text_size"
+ android:gravity="top"
+ android:background="@null"
+ android:layout_marginTop="@dimen/call_subject_dialog_edit_spacing"
+ android:layout_marginStart="@dimen/call_subject_dialog_margin"
+ android:layout_marginEnd="@dimen/call_subject_dialog_margin"
+ />
+
+ <TextView
+ android:id="@+id/character_limit"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/dialtacts_secondary_text_color"
+ android:textSize="@dimen/call_subject_dialog_secondary_text_size"
+ android:singleLine="true"
+ android:layout_marginStart="@dimen/call_subject_dialog_margin"
+ android:layout_marginEnd="@dimen/call_subject_dialog_margin"
+ android:layout_marginTop="@dimen/call_subject_dialog_margin"
+ android:layout_marginBottom="@dimen/call_subject_dialog_margin"/>
+
+ <View
+ android:layout_width="fill_parent"
+ android:layout_height="1dp"
+ android:background="@color/call_subject_divider"/>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/call_subject_dialog_margin"
+ android:layout_marginEnd="@dimen/call_subject_dialog_margin"
+ android:layout_marginTop="@dimen/call_subject_dialog_margin"
+ android:layout_marginBottom="@dimen/call_subject_dialog_margin">
+
+ <ImageView
+ android:id="@+id/history_button"
+ android:layout_width="25dp"
+ android:layout_height="25dp"
+ android:src="@drawable/quantum_ic_history_vd_theme_24"
+ android:tint="@color/call_subject_history_icon"
+ android:layout_alignParentStart="true"
+ android:layout_centerVertical="true" />
+
+ <TextView
+ android:id="@+id/send_and_call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/send_and_call_button"
+ android:textColor="@color/call_subject_button"
+ android:textSize="@dimen/call_subject_dialog_secondary_text_size"
+ android:singleLine="true"
+ android:layout_alignParentEnd="true"
+ android:layout_centerVertical="true" />
+
+ </RelativeLayout>
+ </LinearLayout>
+ </RelativeLayout>
+ <!-- The subject list is pinned to the bottom of the screen. -->
+ <ListView
+ android:id="@+id/subject_list"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_below="@id/dialog_view"
+ android:background="@color/call_subject_history_background"
+ android:divider="@null"
+ android:elevation="8dp" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/dialog_title.xml b/res/layout/dialog_title.xml
new file mode 100644
index 000000000..45f5f7367
--- /dev/null
+++ b/res/layout/dialog_title.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="18dp"
+ android:paddingStart="24dp"
+ android:paddingEnd="24dp"
+ android:textSize="20sp"
+ android:textColor="@color/contacts_text_color"
+ android:textAlignment="viewStart"
+ android:fontFamily="sans-serif-medium"
+ android:ellipsize="end"
+/> \ No newline at end of file
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
new file mode 100644
index 000000000..8014672bc
--- /dev/null
+++ b/res/layout/directory_header.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Layout used for list section separators. -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/directory_header"
+ android:background="@android:color/transparent"
+ android:paddingLeft="@dimen/directory_header_left_padding"
+ android:paddingRight="?attr/list_item_padding_right"
+ android:paddingStart="@dimen/directory_header_left_padding"
+ android:paddingEnd="?attr/list_item_padding_right"
+ android:paddingTop="@dimen/directory_header_extra_top_padding"
+ android:paddingBottom="@dimen/directory_header_extra_bottom_padding"
+ android:minHeight="@dimen/list_section_divider_min_height"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <TextView
+ android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@style/DirectoryHeaderStyle"
+ android:singleLine="true"
+ android:textAlignment="viewStart" />
+ <TextView
+ android:id="@+id/display_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="8dp"
+ android:textAppearance="@style/DirectoryHeaderStyle"
+ android:singleLine="true"
+ android:textAlignment="viewStart" />
+ <TextView
+ android:id="@+id/count"
+ android:paddingTop="1dip"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:gravity="end"
+ android:singleLine="true"
+ android:textAppearance="@style/DirectoryHeaderStyle" />
+</LinearLayout>
diff --git a/res/layout/drawer_fragment.xml b/res/layout/drawer_fragment.xml
new file mode 100644
index 000000000..907fb9233
--- /dev/null
+++ b/res/layout/drawer_fragment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- Layout for the navigation drawer. The content view needs to be wrapped in a FrameLayout in
+ order to go full screen with a ScrimDrawable. -->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/drawer_fragment_root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fitsSystemWindows="true">
+
+ <ListView
+ android:id="@+id/list"
+ android:background="@color/navigation_drawer_background_color"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:divider="@null" />
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/drawer_header.xml b/res/layout/drawer_header.xml
new file mode 100644
index 000000000..9810f343a
--- /dev/null
+++ b/res/layout/drawer_header.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:orientation="vertical"
+ android:background="@color/navigation_drawer_background_color">
+
+ <include layout="@layout/drawer_horizontal_divider" />
+
+ <FrameLayout
+ style="@style/DrawerHeaderItemStyle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:clickable="false">
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/DrawerHeaderTextStyle"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"/>
+ </FrameLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/drawer_horizontal_divider.xml b/res/layout/drawer_horizontal_divider.xml
new file mode 100644
index 000000000..6e77ed88c
--- /dev/null
+++ b/res/layout/drawer_horizontal_divider.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="16dp"
+ android:background="@color/navigation_drawer_background_color"
+ android:importantForAccessibility="no">
+
+ <View
+ android:id="@+id/divider_top"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_gravity="center_vertical"
+ android:background="@color/drawer_divider_color"/>
+</FrameLayout> \ No newline at end of file
diff --git a/res/layout/drawer_item.xml b/res/layout/drawer_item.xml
new file mode 100644
index 000000000..f7621a35d
--- /dev/null
+++ b/res/layout/drawer_item.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/DrawerItemStyle">
+
+ <ImageView
+ android:id="@+id/icon"
+ style="@style/DrawerItemIconStyle"/>
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/DrawerItemTextStyle" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/drawer_primary_item.xml b/res/layout/drawer_primary_item.xml
new file mode 100644
index 000000000..cc7bf262c
--- /dev/null
+++ b/res/layout/drawer_primary_item.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/DrawerPrimaryItemStyle">
+
+ <ImageView
+ android:id="@+id/icon"
+ style="@style/DrawerItemIconStyle"/>
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/DrawerItemTextStyle" />
+
+ <TextView
+ android:id="@+id/assistant_new_badge"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical|end"
+ android:paddingLeft="@dimen/nav_new_badge_horizontal_pad"
+ android:paddingTop="@dimen/nav_new_badge_vertical_pad"
+ android:paddingRight="@dimen/nav_new_badge_horizontal_pad"
+ android:paddingBottom="@dimen/nav_new_badge_vertical_pad"
+ android:background="@drawable/new_badge_background"
+ android:textSize="@dimen/nav_new_badge_font_size"
+ android:textStyle="bold"
+ android:textAllCaps="true"
+ android:textColor="@android:color/white"
+ android:text="@string/menu_assistant_new_badge"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/edit_add_field.xml b/res/layout/edit_add_field.xml
deleted file mode 100644
index ac90482ef..000000000
--- a/res/layout/edit_add_field.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<!-- Layout of "add field" row in contact editor -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:paddingLeft="@dimen/editor_add_field_label_left_padding"
- android:paddingStart="@dimen/editor_add_field_label_left_padding"
- android:background="?android:attr/selectableItemBackground"
- android:focusable="true"
- android:clickable="true">
- <TextView
- android:id="@+id/add_text"
- android:layout_gravity="center_vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:duplicateParentState="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorSecondary"
- android:text="@string/add_new_entry_for_section" />
-</FrameLayout> \ No newline at end of file
diff --git a/res/layout/edit_delete_button.xml b/res/layout/edit_delete_button.xml
index d2c7fb91f..2eea95057 100644
--- a/res/layout/edit_delete_button.xml
+++ b/res/layout/edit_delete_button.xml
@@ -29,7 +29,8 @@
android:layout_gravity="center"
android:duplicateParentState="true"
android:background="?android:attr/selectableItemBackground"
- android:src="@drawable/ic_menu_remove_field_holo_light"
+ android:src="@drawable/quantum_ic_close_vd_theme_24"
+ android:tint="@color/quantum_black_hint_text"
android:paddingLeft="@dimen/editor_round_button_padding_left"
android:paddingRight="@dimen/editor_round_button_padding_right"
android:paddingStart="@dimen/editor_round_button_padding_left"
diff --git a/res/layout/edit_expansion_view.xml b/res/layout/edit_expansion_view.xml
deleted file mode 100644
index 0b62f289d..000000000
--- a/res/layout/edit_expansion_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
- -->
-
-<!-- "More" or "less" expansion button in the contact editor. -->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/editor_min_line_item_height"
- android:layout_gravity="top">
- <ImageView
- android:id="@+id/expansion_view"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:duplicateParentState="true"
- android:background="?android:attr/selectableItemBackground"
- android:paddingLeft="@dimen/editor_round_button_padding_left"
- android:paddingRight="@dimen/editor_round_button_padding_right"
- android:paddingStart="@dimen/editor_round_button_padding_left"
- android:paddingEnd="@dimen/editor_round_button_padding_right"
- android:paddingTop="@dimen/editor_round_button_padding_top"
- android:paddingBottom="@dimen/editor_round_button_padding_bottom" />
-</FrameLayout>
diff --git a/res/layout/edit_kind_title.xml b/res/layout/edit_kind_title.xml
deleted file mode 100644
index acdcc075d..000000000
--- a/res/layout/edit_kind_title.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingStart="8dip"
- android:paddingEnd="8dip"
- android:focusable="false">
- <TextView
- android:id="@+id/kind_title"
- style="@style/EditKindSeparatorTextViewStyle"
- android:paddingStart="0dip"
- android:paddingEnd="8dip" />
-</FrameLayout>
diff --git a/res/layout/edit_spinner.xml b/res/layout/edit_spinner.xml
index 9e6b465c9..b1c879cdd 100644
--- a/res/layout/edit_spinner.xml
+++ b/res/layout/edit_spinner.xml
@@ -21,8 +21,7 @@
android:id="@+id/spinner"
android:layout_gravity="bottom|start"
style="@android:style/Widget.Material.Spinner.Underlined"
- android:dropDownWidth="@dimen/editor_type_label_dropdown_width"
- android:layout_width="@dimen/editor_type_label_width"
+ android:layout_width="wrap_content"
android:layout_height="@dimen/editor_min_line_item_height"
android:paddingBottom="0dp"
android:paddingTop="0dp"
diff --git a/res/layout/editor_account_header.xml b/res/layout/editor_account_header.xml
index 59ae3b126..9a4ed803b 100644
--- a/res/layout/editor_account_header.xml
+++ b/res/layout/editor_account_header.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!--
+ 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.
@@ -15,59 +16,66 @@
-->
<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/account_container"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="48dip"
- android:background="#EEEEEE"
- android:orientation="horizontal"
- android:paddingTop="8dip"
- android:paddingBottom="8dip"
- android:gravity="center_vertical"
- android:paddingLeft="@dimen/account_container_left_padding"
- android:paddingRight="28dip"
- android:paddingStart="@dimen/account_container_left_padding"
- android:paddingEnd="28dip">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/account_header_container"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:minHeight="@dimen/editor_min_line_item_height"
+ android:orientation="horizontal"
+ android:paddingBottom="@dimen/editor_name_top_margin"
+ >
+
+
+ <ImageView
+ android:id="@+id/account_type_icon"
+ style="@style/EditSelectorIconStyle"/>
<LinearLayout
- android:id="@+id/account"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:orientation="vertical"
- android:background="?android:attr/selectableItemBackground">
+ android:layout_height="wrap_content"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_marginTop="@dimen/editor_account_header_top_margin"
+ android:layout_marginStart="@dimen/editor_account_left_margin"
+ android:layout_gravity="center_vertical"
+ android:orientation="vertical"
+ >
<TextView
- android:id="@+id/account_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:singleLine="true"
- android:textColor="@color/primary_text_color"
- android:ellipsize="end" />
+ android:id="@+id/account_type"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="16sp"
+ android:singleLine="true"
+ android:textColor="@color/primary_text_color"
+ android:ellipsize="end"
+ android:textAlignment="viewStart"
+ />
<TextView
- android:id="@+id/account_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/primary_text_color"
- android:singleLine="true"
- android:ellipsize="end" />
+ android:id="@+id/account_name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="14sp"
+ android:singleLine="true"
+ android:textColor="@color/secondary_text_color"
+ android:ellipsize="end"
+ android:textAlignment="viewStart"
+ />
</LinearLayout>
- <FrameLayout
+ <ImageView
+ android:id="@+id/account_expander_icon"
+ android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
+ android:tint="@color/quantum_black_secondary_text"
android:layout_width="wrap_content"
- android:layout_height="match_parent">
-
- <ImageView
- android:id="@+id/account_icon"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:layout_gravity="center_vertical" />
-
- </FrameLayout>
-
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical|end"
+ android:layout_alignParentEnd="true"
+ android:contentDescription="@string/show_more_content_description"
+ android:paddingStart="@dimen/editor_round_button_padding_left"
+ android:paddingEnd="@dimen/editor_round_button_padding_right"
+ android:paddingTop="@dimen/editor_round_button_padding_top"
+ android:paddingBottom="@dimen/editor_round_button_padding_bottom"
+ android:visibility="gone"/>
</LinearLayout> \ No newline at end of file
diff --git a/res/layout/editor_account_header_expandable.xml b/res/layout/editor_account_header_expandable.xml
deleted file mode 100644
index c3d9e311b..000000000
--- a/res/layout/editor_account_header_expandable.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Header at the top of a raw contact editor. This is clickable to expand/collapse the editor. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/account_header_container"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:background="?android:attr/selectableItemBackground"
- android:paddingStart="16dp"
- android:focusable="true"
- >
-
- <!-- TODO: consider making this a new style, like EditKindIconStyle -->
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="@dimen/editor_kind_icon_size"
- android:layout_height="@dimen/editor_kind_icon_size"
- android:layout_marginEnd="28dp"
- android:layout_gravity="center_vertical"
- />
-
- <LinearLayout
- android:id="@+id/account_info"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_weight="1"
- android:paddingBottom="@dimen/editor_account_header_expandable_top_bottom_padding"
- android:paddingTop="@dimen/editor_account_header_expandable_top_bottom_padding"
- android:orientation="vertical"
- >
-
- <TextView
- android:id="@+id/account_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="16sp"
- android:singleLine="true"
- android:textColor="@color/primary_text_color"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- />
-
- <TextView
- android:id="@+id/account_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="14sp"
- android:singleLine="true"
- android:textColor="@color/secondary_text_color"
- android:ellipsize="end"
- android:textAlignment="viewStart"
- />
-
- </LinearLayout>
-
- <ImageView
- android:id="@+id/expand_account_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="0"
- android:layout_gravity="center_vertical|end"
- android:clickable="false"
- android:paddingLeft="@dimen/editor_round_button_padding_left"
- android:paddingRight="@dimen/editor_round_button_padding_right"
- android:paddingStart="@dimen/editor_round_button_padding_left"
- android:paddingEnd="@dimen/editor_round_button_padding_right"
- android:paddingTop="@dimen/editor_round_button_padding_top"
- android:paddingBottom="@dimen/editor_round_button_padding_bottom"
- />
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/editor_account_selector.xml b/res/layout/editor_account_selector.xml
deleted file mode 100644
index dcd0e287d..000000000
--- a/res/layout/editor_account_selector.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Header at the top of a raw contact editor. This allows users to change the account that
- the raw contact is saved in. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/account_selector_container"
- android:focusable="true"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:orientation="horizontal"
- android:layout_marginBottom="@dimen/compact_editor_name_top_margin"
- android:visibility="gone">
-
- <ImageView
- android:id="@+id/kind_icon"
- android:src="@drawable/ic_account_circle_black_24dp"
- android:tint="@color/editor_icon_color"
- android:contentDescription="@string/header_account_entry"
- style="@style/EditSelectorIconStyle"/>
-
- <LinearLayout
- android:id="@+id/account"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:orientation="vertical"
- android:layout_marginStart="4dp"
- android:layout_marginEnd="48dp">
-
- <TextView
- android:id="@+id/account_type_selector"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="16sp"
- android:singleLine="true"
- android:textColor="@color/primary_text_color"
- android:textAlignment="viewStart"
- android:ellipsize="end" />
-
- <TextView
- android:id="@+id/account_name_selector"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="14sp"
- android:singleLine="true"
- android:textColor="@color/secondary_text_color"
- android:textAlignment="viewStart"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <ImageView
- android:src="@drawable/ic_menu_expander_minimized_holo_light"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|end"
- android:layout_alignParentEnd="true"
- android:paddingStart="@dimen/editor_round_button_padding_left"
- android:paddingEnd="@dimen/editor_round_button_padding_right"
- android:paddingTop="@dimen/editor_round_button_padding_top"
- android:paddingBottom="@dimen/editor_round_button_padding_bottom"/>
-
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/editor_all_rawcontacts_accounts_selector.xml b/res/layout/editor_all_rawcontacts_accounts_selector.xml
deleted file mode 100644
index c830d383f..000000000
--- a/res/layout/editor_all_rawcontacts_accounts_selector.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Header at the top of a raw contact editor. This allows users to change the account that
- the raw contact is saved in. -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/all_rawcontacts_accounts_container"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:orientation="horizontal"
- android:visibility="gone" >
-
- <ImageView
- android:src="@drawable/ic_link_grey600_drawable_24dp"
- android:tint="@color/editor_icon_color"
- style="@style/EditSelectorIconStyle"/>
-
- <TextView
- android:id="@+id/rawcontacts_accounts_summary"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginStart="@dimen/compact_editor_account_left_margin"
- android:textSize="16sp"
- android:singleLine="true"
- android:layout_weight="1"
- android:textColor="@color/primary_text_color"
- android:textAlignment="viewStart"
- android:layout_gravity="center_vertical"
- android:gravity="center_vertical"
- android:ellipsize="end" />
-
- <ImageView
- android:src="@drawable/ic_menu_expander_minimized_holo_light"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical|end"
- android:layout_alignParentEnd="true"
- android:paddingStart="@dimen/editor_round_button_padding_left"
- android:paddingEnd="@dimen/editor_round_button_padding_right"
- android:paddingTop="@dimen/editor_round_button_padding_top"
- android:paddingBottom="@dimen/editor_round_button_padding_bottom"/>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/editor_custom_action_bar.xml b/res/layout/editor_custom_action_bar.xml
deleted file mode 100644
index 7764674c1..000000000
--- a/res/layout/editor_custom_action_bar.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/save_menu_item"
- android:focusable="true"
- android:clickable="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:layout_marginEnd="8dip"
- android:src="@drawable/ic_done_wht_24dp"
- style="?android:attr/actionButtonStyle"
- android:contentDescription="@string/menu_done" />
-
- <TextView
- android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/actionbar_text_color"
- android:text="@string/menu_done"
- style="@android:style/TextAppearance.Material.Widget.ActionBar.Title" />
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/editor_save_button.xml b/res/layout/editor_save_button.xml
new file mode 100644
index 000000000..024ddcba0
--- /dev/null
+++ b/res/layout/editor_save_button.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/buttonBarButtonStyle"
+ android:id="@+id/editor_menu_save_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/menu_save"
+ android:textColor="@color/action_bar_button_text_color"
+ android:textSize="14sp">
+</Button>
diff --git a/res/layout/empty_account_view.xml b/res/layout/empty_account_view.xml
new file mode 100644
index 000000000..2de0212e2
--- /dev/null
+++ b/res/layout/empty_account_view.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/empty_account"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/empty_state_background"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/empty_account_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ android:src="@drawable/accounts_empty"/>
+
+ <TextView
+ android:id="@+id/empty_account_view_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:paddingTop="@dimen/empty_account_view_text_padding_top"
+ android:text="@string/emptyAccount"
+ style="@style/EmptyStateTextStyle"/>
+
+ <Button
+ android:id="@+id/add_contact_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/menu_addToGroup"
+ style="@style/AddContactsButtonStyle"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/empty_group_view.xml b/res/layout/empty_group_view.xml
new file mode 100644
index 000000000..cf10e7610
--- /dev/null
+++ b/res/layout/empty_group_view.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/empty_group"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/empty_state_background"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/empty_group_image"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/empty_view_image_height"
+ android:paddingTop="@dimen/empty_group_view_image_padding_top"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ android:src="@drawable/label_empty"/>
+
+ <TextView
+ android:id="@+id/empty_group_view_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:paddingTop="@dimen/empty_group_view_text_padding_top"
+ android:text="@string/emptyGroup"
+ style="@style/EmptyStateTextStyle"/>
+
+ <Button
+ android:id="@+id/add_member_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/menu_addContactsToGroup"
+ style="@style/AddContactsButtonStyle"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/empty_home_view.xml b/res/layout/empty_home_view.xml
new file mode 100644
index 000000000..65ac1f20f
--- /dev/null
+++ b/res/layout/empty_home_view.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/empty_home"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/empty_state_background"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/empty_home_image"
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/empty_view_image_height"
+ android:scaleType="centerInside"
+ android:adjustViewBounds="true"
+ android:src="@drawable/home_empty"/>
+
+ <TextView
+ android:id="@+id/empty_home_view_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:paddingTop="@dimen/empty_home_view_text_padding_top"
+ android:text="@string/emptyMainList"
+ style="@style/EmptyStateTextStyle"/>
+
+ <Button
+ android:id="@+id/add_contact_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:text="@string/menu_addToGroup"
+ style="@style/AddContactsButtonStyle"/>
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/external_group_editor_view.xml b/res/layout/external_group_editor_view.xml
deleted file mode 100644
index 47ac2e0df..000000000
--- a/res/layout/external_group_editor_view.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/read_only_warning"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="10dip"
- android:paddingLeft="10dip"
- android:paddingRight="10dip"
- android:paddingStart="10dip"
- android:paddingEnd="10dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorTertiary"
- android:text="@string/group_read_only" />
-
- <include
- android:id="@+id/account_header"
- layout="@layout/editor_account_header"/>
-
- <TextView
- android:id="@+id/group_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorTertiary"
- android:textStyle="bold"
- android:padding="10dip"/>
-
- <include
- layout="@layout/group_editor_existing_member_list"
- android:id="@android:id/list"/>
-
-</LinearLayout>
diff --git a/res/layout/external_group_member_item.xml b/res/layout/external_group_member_item.xml
deleted file mode 100644
index a56d91ddb..000000000
--- a/res/layout/external_group_member_item.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/name"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:gravity="center_vertical"
- android:paddingRight="3dip"
- android:paddingEnd="3dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:focusable="true"
- android:paddingLeft="@dimen/group_member_item_left_padding"
- android:paddingStart="@dimen/group_member_item_left_padding" />
-
- <QuickContactBadge
- android:id="@+id/badge"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="10dip"
- android:layout_marginStart="5dip"
- android:layout_marginEnd="10dip"
- android:layout_gravity="center_vertical"
- android:layout_width="50dip"
- android:layout_height="50dip"
- style="?android:attr/quickContactBadgeStyleWindowMedium" />
-
-</LinearLayout>
diff --git a/res/layout/floating_action_button.xml b/res/layout/floating_action_button.xml
index 294d88b55..a31512f19 100644
--- a/res/layout/floating_action_button.xml
+++ b/res/layout/floating_action_button.xml
@@ -14,24 +14,28 @@
limitations under the License.
-->
-<!-- This expects to be included inside a RelativeLayout -->
+<!-- This expects to be included inside a RelativeLayout or a CoordinatorLayout -->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/floating_action_button_container"
android:layout_width="@dimen/floating_action_button_width"
android:layout_height="@dimen/floating_action_button_height"
- android:layout_marginEnd="@dimen/floating_action_button_margin_right"
- android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
- android:background="@drawable/fab_blue"
+ android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
- android:layout_alignParentBottom="true">
+ android:layout_gravity="bottom|end"
+ android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+ android:layout_marginEnd="@dimen/floating_action_button_margin_right"
+ android:background="@drawable/fab_pink"
+ android:elevation="@dimen/design_fab_elevation"
+ app:layout_dodgeInsetEdges="bottom" >
<ImageButton
android:id="@+id/floating_action_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/floating_action_button"
- android:tint="@color/floating_action_button_icon_color"
android:contentDescription="@string/action_menu_add_new_contact_button"
- android:src="@drawable/ic_person_add_24dp"/>
+ android:src="@drawable/quantum_ic_add_vd_theme_24"
+ android:tint="@color/floating_action_button_icon_color"/>
</FrameLayout> \ No newline at end of file
diff --git a/res/layout/fragment_sim_import.xml b/res/layout/fragment_sim_import.xml
new file mode 100644
index 000000000..09e2c6694
--- /dev/null
+++ b/res/layout/fragment_sim_import.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/toolbar"
+ style="@style/LightToolbarStyle"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize"
+ android:elevation="3dp"
+ android:theme="@style/LightToolbarThemeOverlay"
+ app:navigationContentDescription="@string/sim_import_cancel_content_description"
+ app:navigationIcon="@drawable/quantum_ic_close_vd_theme_24"
+ app:title="@string/sim_import_title_none_selected">
+
+ <Button
+ android:id="@+id/import_button"
+ style="@style/Widget.AppCompat.Button.Borderless"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="end|center_vertical"
+ android:text="@string/sim_import_button_text"
+ />
+ </android.support.v7.widget.Toolbar>
+
+
+ <!-- This is managed by AccountHeaderPresenter so the IDs in this section must
+ match the equivalent views in layout/editor_account_header.xml -->
+ <LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/account_header_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:colorBackground"
+ android:focusable="true"
+ android:minHeight="48dp"
+ android:orientation="horizontal"
+ android:paddingEnd="@dimen/activity_horizontal_margin"
+ android:paddingStart="@dimen/activity_horizontal_margin">
+
+ <ImageView
+ android:id="@+id/account_type_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="start|center_vertical"
+ android:layout_marginEnd="32dp"/>
+
+ <TextView
+ android:id="@+id/account_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:ellipsize="end"
+ android:gravity="start|center_vertical"
+ android:lines="1"
+ android:maxLines="1"
+ android:textAlignment="viewStart"
+ android:textColor="@color/secondary_text_color"
+ android:textSize="16sp"/>
+
+ <ImageView
+ android:id="@+id/account_expander_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginEnd="5dp"
+ android:background="@null"
+ android:clickable="true"
+ android:contentDescription="@string/show_more_content_description"
+ android:focusable="true"
+ android:minHeight="0dp"
+ android:minWidth="0dp"
+ android:scaleType="center"
+ android:src="@drawable/quantum_ic_arrow_drop_down_vd_theme_24"
+ android:tint="?android:textColorSecondary"
+ android:visibility="gone"/>
+ </LinearLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ListView
+ android:id="@+id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipToPadding="false"
+ android:paddingTop="8dp"/>
+
+ <android.support.v4.widget.ContentLoadingProgressBar
+ android:id="@+id/loading_progress"
+ style="@style/Widget.AppCompat.ProgressBar"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:indeterminate="true"/>
+
+ <TextView
+ android:id="@+id/empty_message"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="@string/sim_import_empty_message"
+ android:textAppearance="?android:textAppearanceMedium"
+ android:visibility="gone"/>
+
+ </FrameLayout>
+
+ </LinearLayout>
+</android.support.design.widget.CoordinatorLayout>
diff --git a/res/layout/group_account_header_horizontal.xml b/res/layout/group_account_header_horizontal.xml
deleted file mode 100644
index cbfb555b2..000000000
--- a/res/layout/group_account_header_horizontal.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="?attr/list_item_padding_left"
- android:layout_marginRight="?attr/list_item_padding_right"
- android:layout_marginStart="?attr/list_item_padding_left"
- android:layout_marginEnd="?attr/list_item_padding_right"
- android:background="@drawable/list_section_divider_holo_custom"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/account_type"
- android:layout_width="0px"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:paddingLeft="?attr/list_item_header_text_indent"
- android:paddingStart="?attr/list_item_header_text_indent"
- android:textAppearance="@style/DirectoryHeaderStyle"
- android:singleLine="true"
- android:textAlignment="viewStart" />
-
- <!-- TODO: Should use correct color with a correct name (content should be same).
- can use "?android:attr/textColorTertiary" -->
- <TextView
- android:id="@+id/account_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="@style/DirectoryHeaderStyle"
- android:textAllCaps="false"
- android:textSize="12sp"
- android:singleLine="true"
- android:ellipsize="middle"
- android:textDirection="ltr" />
-</LinearLayout>
diff --git a/res/layout/group_account_header_vertical.xml b/res/layout/group_account_header_vertical.xml
deleted file mode 100644
index c5b9d76b7..000000000
--- a/res/layout/group_account_header_vertical.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="?attr/list_item_padding_left"
- android:layout_marginRight="?attr/list_item_padding_right"
- android:layout_marginStart="?attr/list_item_padding_left"
- android:layout_marginEnd="?attr/list_item_padding_right"
- android:paddingBottom="6dip"
- android:background="@drawable/list_section_divider_holo_custom"
- android:gravity="center_vertical"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/account_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="?attr/list_item_header_text_indent"
- android:paddingStart="?attr/list_item_header_text_indent"
- android:textAppearance="@style/DirectoryHeaderStyle"
- android:singleLine="true"/>
-
- <!-- TODO: Should use correct color with a correct name (content should be same).
- can use "?android:attr/textColorTertiary" -->
- <TextView
- android:id="@+id/account_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="?attr/list_item_header_text_indent"
- android:paddingStart="?attr/list_item_header_text_indent"
- android:textAppearance="@style/DirectoryHeaderStyle"
- android:textAllCaps="false"
- android:textSize="12sp"
- android:singleLine="true"
- android:ellipsize="middle" />
-</LinearLayout>
diff --git a/res/layout/group_browse_list_account_header.xml b/res/layout/group_browse_list_account_header.xml
deleted file mode 100644
index 7bfbd0751..000000000
--- a/res/layout/group_browse_list_account_header.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- Only visible when it is the first element in the list. -->
- <View
- android:id="@+id/header_extra_top_padding"
- android:layout_width="match_parent"
- android:layout_height="@dimen/list_header_extra_top_padding" />
-
- <include layout="@layout/group_account_header_horizontal" />
-
-</LinearLayout>
diff --git a/res/layout/group_browse_list_fragment.xml b/res/layout/group_browse_list_fragment.xml
deleted file mode 100644
index 30c2fec3a..000000000
--- a/res/layout/group_browse_list_fragment.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- See group_browse_list_item.xml for the reason for the transparent android:listSelector -->
- <view
- android:id="@+id/list"
- class="com.android.contacts.common.list.AutoScrollListView"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
- android:paddingStart="16dip"
- android:paddingEnd="16dip"
- android:scrollbarStyle="outsideOverlay"
- android:layout_weight="1"
- android:fadingEdge="none"
- android:cacheColorHint="@android:color/transparent"
- android:divider="@null"
- android:listSelector="@android:color/transparent"/>
-
- <TextView
- android:id="@+id/empty"
- android:layout_marginTop="@dimen/empty_message_top_margin"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="?android:attr/textColorSecondary"
- android:text="@string/noGroups" />
-
- <LinearLayout
- android:id="@+id/add_accounts"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:layout_marginBottom="@dimen/no_accounts_message_margin"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:text="@string/noAccounts" />
-
- <Button
- android:id="@+id/add_account_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:layout_gravity="center_horizontal"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/contacts_unavailable_add_account" />
-
- </LinearLayout>
-</LinearLayout>
diff --git a/res/layout/group_browse_list_item.xml b/res/layout/group_browse_list_item.xml
deleted file mode 100644
index c620d1700..000000000
--- a/res/layout/group_browse_list_item.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- Note: Because this item layout contains the header too, we don't want to highlight the entire
- thing when pressed or set the activated background to it. So we disable the default hilighting
- by setting transparent to android:listSelector for the list view in
- group_browse_list_fragment.xml, and make the body part "duplicateParentState", and then set the
- state list drawable to its background, which has the "activated" background (the drawable with
- the triangular thing on the right side). Because of this structure, the item view can't have
- paddingRight, as the body part should touch the right edge. Instead we make each child have
- either marginRight or paddingRight.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="?attr/list_item_padding_left"
- android:paddingStart="?attr/list_item_padding_left"
- android:minHeight="@dimen/detail_min_line_item_height" >
-
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginRight="?attr/list_item_padding_right"
- android:layout_marginEnd="?attr/list_item_padding_right"
- android:background="@color/secondary_header_separator_color" />
-
- <include
- android:id="@+id/group_list_header"
- layout="@layout/group_browse_list_account_header"
- android:visibility="gone" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingTop="8dip"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:paddingBottom="8dip"
- android:orientation="vertical"
- android:duplicateParentState="true"
- android:background="@drawable/group_list_item_background">
-
- <TextView
- android:id="@+id/label"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:ellipsize="end"
- android:singleLine="true" />
-
- <TextView
- android:id="@+id/count"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:ellipsize="end"
- android:singleLine="true" />
-
- </LinearLayout>
-</LinearLayout>
-
diff --git a/res/layout/group_detail_activity.xml b/res/layout/group_detail_activity.xml
deleted file mode 100644
index 707a65c51..000000000
--- a/res/layout/group_detail_activity.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <fragment
- class="com.android.contacts.group.GroupDetailFragment"
- android:id="@+id/group_detail_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
-</FrameLayout>
diff --git a/res/layout/group_detail_fragment.xml b/res/layout/group_detail_fragment.xml
deleted file mode 100644
index 735b29d59..000000000
--- a/res/layout/group_detail_fragment.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/group_detail"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!--
- This layout can contain the second row of the action bar containing a group source
- button if applicable (this is a fake stacked action bar)
- -->
- <FrameLayout
- android:id="@+id/group_source_view_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"/>
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1">
-
- <ListView
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:fadingEdge="none"
- android:scrollbarStyle="outsideOverlay"
- android:divider="@null"/>
-
- <include
- layout="@layout/group_detail_fragment_empty_view"/>
-
- <!--
- Shadow overlay over the list of group members (since we have a fake stacked
- action bar)
- -->
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="20dip"
- android:background="?android:attr/windowContentOverlay"/>
-
- </FrameLayout>
-
-</LinearLayout>
diff --git a/res/layout/group_detail_fragment_empty_view.xml b/res/layout/group_detail_fragment_empty_view.xml
deleted file mode 100644
index 89a6cf829..000000000
--- a/res/layout/group_detail_fragment_empty_view.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/empty"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingTop="24dip"
- android:visibility="gone">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/emptyGroup"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="?android:attr/textColorSecondary"/>
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/addPeopleToGroup"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"/>
-
-</LinearLayout>
diff --git a/res/layout/group_editor_activity.xml b/res/layout/group_editor_activity.xml
deleted file mode 100644
index 5f8a94827..000000000
--- a/res/layout/group_editor_activity.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <fragment class="com.android.contacts.group.GroupEditorFragment"
- android:id="@+id/group_editor_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-</FrameLayout>
diff --git a/res/layout/group_editor_autocomplete_view.xml b/res/layout/group_editor_autocomplete_view.xml
deleted file mode 100644
index c8e716a38..000000000
--- a/res/layout/group_editor_autocomplete_view.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- Autocomplete text input field for adding new members to a group in the group editor -->
-
-<AutoCompleteTextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorPrimary"
- android:imeOptions="flagNoExtractUi|flagNoFullscreen"
- android:hint="@string/enter_contact_name"
- android:minHeight="48dip"
- android:paddingLeft="@dimen/group_editor_autocomplete_left_padding"
- android:paddingStart="@dimen/group_editor_autocomplete_left_padding"/> \ No newline at end of file
diff --git a/res/layout/group_editor_existing_member_list.xml b/res/layout/group_editor_existing_member_list.xml
deleted file mode 100644
index 78d095396..000000000
--- a/res/layout/group_editor_existing_member_list.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!-- List of existing members for the group editor -->
-
-<ListView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="5dip"
- android:layout_marginLeft="@dimen/group_editor_member_list_left_margin"
- android:layout_marginRight="@dimen/group_editor_member_list_right_margin"
- android:layout_marginStart="@dimen/group_editor_member_list_left_margin"
- android:layout_marginEnd="@dimen/group_editor_member_list_right_margin"
- android:cacheColorHint="@android:color/transparent" /> \ No newline at end of file
diff --git a/res/layout/group_editor_fragment.xml b/res/layout/group_editor_fragment.xml
deleted file mode 100644
index 3a69e05e7..000000000
--- a/res/layout/group_editor_fragment.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- This is the container for either the group editor view for editable groups
- or read-only groups.
--->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/background_primary" />
diff --git a/res/layout/group_editor_view.xml b/res/layout/group_editor_view.xml
deleted file mode 100644
index d94853db7..000000000
--- a/res/layout/group_editor_view.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <include
- android:id="@+id/account_header"
- layout="@layout/editor_account_header"/>
-
- <LinearLayout android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:paddingStart="8dip"
- android:paddingEnd="8dip"
- android:orientation="vertical">
-
- <EditText
- android:id="@+id/group_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:inputType="textCapWords"
- android:imeOptions="flagNoExtractUi|flagNoFullscreen"
- android:hint="@string/group_name_hint"
- android:minHeight="48dip"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"/>
-
- <include
- layout="@layout/group_editor_autocomplete_view"
- android:id="@+id/add_member_field"/>
-
- <include
- layout="@layout/group_editor_existing_member_list"
- android:id="@android:id/list"/>
- </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout/group_member_item.xml b/res/layout/group_member_item.xml
deleted file mode 100644
index 14ed83341..000000000
--- a/res/layout/group_member_item.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
-
- <TextView
- android:id="@+id/name"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:gravity="center_vertical"
- android:paddingRight="3dip"
- android:paddingEnd="3dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:focusable="true"
- android:paddingLeft="@dimen/group_member_item_left_padding"
- android:paddingStart="@dimen/group_member_item_left_padding" />
-
- <QuickContactBadge
- android:id="@+id/badge"
- android:layout_marginLeft="5dip"
- android:layout_marginRight="10dip"
- android:layout_marginStart="5dip"
- android:layout_marginEnd="10dip"
- android:layout_gravity="center_vertical"
- android:layout_width="50dip"
- android:layout_height="50dip"
- style="?android:attr/quickContactBadgeStyleWindowMedium" />
-
- <include
- android:id="@+id/delete_button_container"
- layout="@layout/edit_delete_button"
- android:gravity="center_vertical" />
-
-</LinearLayout>
diff --git a/res/layout/group_member_suggestion.xml b/res/layout/group_member_suggestion.xml
deleted file mode 100644
index 4fe8d2039..000000000
--- a/res/layout/group_member_suggestion.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="48dip"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- android:background="?android:attr/selectableItemBackground">
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:gravity="center_vertical"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/text1"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:singleLine="true"
- android:ellipsize="end"/>
-
- <TextView android:id="@+id/text2"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingLeft="8dip"
- android:paddingStart="8dip"
- android:singleLine="true"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <ImageView
- android:id="@+id/icon"
- android:layout_width="48dip"
- android:layout_height="48dip"
- android:cropToPadding="true"
- android:scaleType="centerCrop" />
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/group_name_dialog.xml b/res/layout/group_name_dialog.xml
deleted file mode 100644
index 03b298f3a..000000000
--- a/res/layout/group_name_dialog.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="25dip"
- android:paddingRight="25dip"
- android:paddingStart="25dip"
- android:paddingEnd="25dip"
- android:paddingTop="25dip"
- android:paddingBottom="25dip">
- <EditText
- android:id="@+id/group_label"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-</FrameLayout>
diff --git a/res/layout/group_name_edit_dialog.xml b/res/layout/group_name_edit_dialog.xml
new file mode 100644
index 000000000..94db3dda8
--- /dev/null
+++ b/res/layout/group_name_edit_dialog.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<android.support.design.widget.TextInputLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/text_input_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/custom_dialog_layout_padding"
+ android:paddingEnd="@dimen/custom_dialog_layout_padding"
+ android:paddingStart="@dimen/custom_dialog_layout_padding"
+ app:errorEnabled="true"
+ app:hintEnabled="false">
+
+ <android.support.design.widget.TextInputEditText
+ android:id="@android:id/text1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/custom_dialog_layout"
+ android:layout_marginEnd="@dimen/custom_dialog_layout"
+ android:hint="@string/group_name_dialog_hint"
+ android:inputType="text"
+ android:maxLength="@integer/group_name_max_length"
+ android:minHeight="@dimen/dialog_edit_text_min_height"
+ android:textAlignment="viewStart"
+ android:singleLine="true"/>
+</android.support.design.widget.TextInputLayout> \ No newline at end of file
diff --git a/res/layout/group_source_button.xml b/res/layout/group_source_button.xml
deleted file mode 100644
index a4709ef34..000000000
--- a/res/layout/group_source_button.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
- Layout for the button that will launch the user into the source application
- that the group came from (on a group detail page).
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/group_source"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="48dip"
- android:background="@drawable/gray_action_bar_background"
- android:paddingLeft="16dip"
- android:paddingRight="16dip"
- android:paddingStart="16dip"
- android:paddingEnd="16dip" >
-
- <TextView
- android:id="@android:id/title"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:duplicateParentState="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/action_bar_button_text_color"
- style="@android:style/Widget.Holo.ActionBar.TabText"/>
-
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent">
-
- <ImageView
- android:id="@android:id/icon"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:duplicateParentState="true"
- android:layout_gravity="center_vertical"/>
-
- </FrameLayout>
-
-</LinearLayout>
diff --git a/res/layout/item_group_membership.xml b/res/layout/item_group_membership.xml
index 078187f54..1b6253900 100644
--- a/res/layout/item_group_membership.xml
+++ b/res/layout/item_group_membership.xml
@@ -23,7 +23,7 @@
<ImageView
android:id="@+id/kind_icon"
- android:src="@drawable/ic_people_black_24dp"
+ android:src="@drawable/quantum_ic_label_vd_theme_24"
style="@style/EditKindIconStyle" />
<Button
diff --git a/res/layout/item_kind_section.xml b/res/layout/item_kind_section.xml
index d62523b0a..9e434d521 100644
--- a/res/layout/item_kind_section.xml
+++ b/res/layout/item_kind_section.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
+<!--
+ 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.
@@ -14,22 +15,22 @@
limitations under the License.
-->
-<!-- the body surrounding all editors for a specific kind -->
+<!-- The body surrounding all editors for a specific kind -->
<com.android.contacts.editor.KindSectionView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
<ImageView
- android:id="@+id/kind_icon"
- style="@style/EditKindIconStyle" />
+ android:id="@+id/kind_icon"
+ style="@style/EditKindIconStyle" />
<LinearLayout
- android:id="@+id/kind_editors"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" />
+ android:id="@+id/kind_editors"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" />
</com.android.contacts.editor.KindSectionView> \ No newline at end of file
diff --git a/res/layout/item_photo_editor.xml b/res/layout/item_photo_editor.xml
deleted file mode 100644
index e3eff4e21..000000000
--- a/res/layout/item_photo_editor.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<view class="com.android.contacts.editor.PhotoEditorView"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <ImageView
- android:id="@+id/kind_icon"
- android:src="@drawable/ic_camera_alt_black_24dp"
- android:layout_marginTop="13dp"
- android:contentDescription="@string/header_photo_entry"
- style="@style/EditKindIconStyle" />
-
- <!-- Needs 10dp of top padding, in order get a total of 32dp of padding between this view
- and the previous DataKindSection. Note that EditTexts in other editor.xml files have this
- padding built in. Similarly, we need to add 4dp of start margin to make up for the padding
- that an EditText would have in this image's place. -->
- <ImageView
- android:id="@+id/photo"
- android:layout_width="72dip"
- android:layout_height="72dip"
- android:cropToPadding="true"
- android:scaleType="centerCrop"
- android:layout_marginTop="15dp"
- android:layout_marginStart="4dp"
- android:contentDescription="@string/description_contact_photo"
- android:layout_marginBottom="@dimen/editor_padding_below_photo"
- android:gravity="start" />
-
- <!-- We want 16dp for the effective marginStart. So we set 12dp, since the private
- @android:dimen/control_inset_material already includes 4dp of padding. -->
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="12dp" >
-
- <!-- The values applied to this button are complicated:
- 1) We want 16dp internal padding in the button. The background drawable is inset
- by private @android:dimen/button_inset_horizontal_material=4dp. Therefore,
- we need paddingStart/End of 20dp.
- 2) In order to leave enough room for the 32dp RadioButton, this can only be 46dp.
- This is 2dp less than the default touch target size.
- 3) This button will appear to be offset by the private
- @android:dimen/button_inset_vertical_material amount. Therefore, in order to achieve
- 15dp of apparent top margin, we only need to apply 9dp. -->
- <Button
- android:id="@+id/change_button"
- android:layout_width="wrap_content"
- android:layout_height="46dp"
- android:textSize="@dimen/editor_form_text_size"
- android:textColor="@color/primary_text_color"
- android:layout_marginTop="9dp"
- android:paddingStart="20dp"
- android:paddingEnd="20dp"
- android:text="@string/change_photo" />
-
- <!-- Don't explicitly set the layout_height in case we need to rely on text wrapping.
- For one line, we can expect the height to be 32dp with 16dp text size. -->
- <RadioButton
- android:id="@+id/primary_checkbox"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="48dp"
- android:textSize="@dimen/editor_form_text_size"
- android:text="@string/primary_photo" />
- </LinearLayout>
-</view>
diff --git a/res/layout/item_photo_editor_readonly.xml b/res/layout/item_photo_editor_readonly.xml
deleted file mode 100644
index edb6f6162..000000000
--- a/res/layout/item_photo_editor_readonly.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- A readonly version of item_photo_editor.xml shown in the readonly raw contact editor. -->
-<view class="com.android.contacts.editor.PhotoEditorView"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
-
- <ImageView
- android:id="@+id/kind_icon"
- android:src="@drawable/ic_camera_alt_black_24dp"
- android:layout_marginTop="0dp"
- android:contentDescription="@string/header_photo_entry"
- style="@style/EditKindIconStyle" />
-
- <!-- We need to add 2dp of start margin to make up for the padding that a TextView would
- have in this image's place. We add 2dp of top margin, so that icon drawable is a little
- below the top of this ImageView. -->
- <ImageView
- android:id="@+id/photo"
- android:layout_width="72dip"
- android:layout_height="72dip"
- android:cropToPadding="true"
- android:scaleType="centerCrop"
- android:layout_marginTop="2dp"
- android:layout_marginStart="2dp"
- android:contentDescription="@string/description_contact_photo"
- android:layout_marginBottom="@dimen/editor_padding_around_read_only_photo_editor"
- android:gravity="start" />
-
-
- <!-- Don't explicitly set the layout_height in case we need to rely on text wrapping.
- For one line, we can expect the height to be 32dp with 16dp text size. -->
- <RadioButton
- android:id="@+id/primary_checkbox"
- android:layout_marginStart="12dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/editor_delete_button_width"
- android:layout_marginTop="2dp"
- android:textSize="@dimen/editor_form_text_size"
- android:text="@string/primary_photo" />
-</view>
diff --git a/res/layout/item_read_only_field.xml b/res/layout/item_read_only_field.xml
index 3195b4cec..8c77eee63 100644
--- a/res/layout/item_read_only_field.xml
+++ b/res/layout/item_read_only_field.xml
@@ -16,9 +16,10 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/read_only_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/editor_delete_button_width"
+ android:focusableInTouchMode="true"
android:layout_marginBottom="@dimen/editor_padding_between_read_only_editor_views"
android:orientation="horizontal">
@@ -31,6 +32,7 @@
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/editor_account_left_margin"
android:orientation="vertical">
<TextView
@@ -40,9 +42,7 @@
android:textSize="@dimen/editor_form_text_size"
android:textColor="?android:attr/textColorSecondary"
android:singleLine="true"
- android:saveEnabled="false"
- android:textAlignment="viewStart"
- android:enabled="false"/>
+ android:textAlignment="viewStart"/>
<TextView
android:id="@+id/type"
@@ -51,9 +51,7 @@
android:textSize="@dimen/editor_form_text_size"
android:textColor="?android:attr/textColorSecondary"
android:singleLine="true"
- android:saveEnabled="false"
- android:textAlignment="viewStart"
- android:enabled="false"/>
+ android:textAlignment="viewStart"/>
</LinearLayout>
diff --git a/res/layout/join_contact_picker_list_content.xml b/res/layout/join_contact_picker_list_content.xml
index 5bde8956a..04b055648 100644
--- a/res/layout/join_contact_picker_list_content.xml
+++ b/res/layout/join_contact_picker_list_content.xml
@@ -42,7 +42,7 @@
android:layout_height="match_parent">
<include layout="@layout/contact_list_card"/>
<view
- class="com.android.contacts.common.list.PinnedHeaderListView"
+ class="com.android.contacts.list.PinnedHeaderListView"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/layout/join_contact_picker_section_header.xml b/res/layout/join_contact_picker_section_header.xml
index 7dafb495b..f39cafd87 100644
--- a/res/layout/join_contact_picker_section_header.xml
+++ b/res/layout/join_contact_picker_section_header.xml
@@ -23,8 +23,9 @@
<TextView
android:id="@+id/text"
style="@style/ContactListSeparatorTextViewStyle"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
- android:paddingStart="8dip"
- android:paddingEnd="8dip" />
+ android:textAlignment="viewStart"
+ android:paddingLeft="24dip"
+ android:paddingRight="24dip"
+ android:paddingStart="24dip"
+ android:paddingEnd="24dip"/>
</LinearLayout>
diff --git a/res/layout/licenses.xml b/res/layout/licenses.xml
new file mode 100644
index 000000000..66d4f4670
--- /dev/null
+++ b/res/layout/licenses.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2015 Google Inc. All Rights Reserved. -->
+
+<WebView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/webview"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+</WebView> \ No newline at end of file
diff --git a/res/layout/list_section.xml b/res/layout/list_section.xml
deleted file mode 100644
index 7361de6ce..000000000
--- a/res/layout/list_section.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Layout used for list section separators. -->
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="@dimen/list_section_height"
- >
- <TextView
- android:id="@+id/header_text"
- android:layout_width="56dip"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:textStyle="bold"
- android:textColor="@color/section_header_text_color"
- android:textSize="14sp"
- android:gravity="center"
- />
-</RelativeLayout>
diff --git a/res/layout/list_separator.xml b/res/layout/list_separator.xml
new file mode 100644
index 000000000..80abacbdb
--- /dev/null
+++ b/res/layout/list_separator.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/title"
+ android:textColor="@color/frequently_contacted_title_color"
+ android:paddingLeft="16dip"
+ android:paddingStart="16dip"
+ android:paddingRight="16dip"
+ android:paddingEnd="16dip"
+ android:paddingBottom="15dip"
+ android:paddingTop="16dip"
+ android:textStyle="bold"
+ android:textSize="@dimen/frequently_contacted_title_text_size"/>
diff --git a/res/layout/menu_item_action_view.xml b/res/layout/menu_item_action_view.xml
new file mode 100644
index 000000000..62eb75860
--- /dev/null
+++ b/res/layout/menu_item_action_view.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!-- A dummy action view to attach extra hidden content description to menuItem for Talkback. -->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone">
+ <View
+ android:layout_width="1dp"
+ android:layout_height= "1dp" />
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/multi_select_send_button.xml b/res/layout/multi_select_send_button.xml
new file mode 100644
index 000000000..50a4d4585
--- /dev/null
+++ b/res/layout/multi_select_send_button.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+ style="?android:attr/buttonBarButtonStyle"
+ android:id="@+id/multi_select_send_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/send_to_selection"
+ android:textColor="@color/action_bar_button_text_color"
+ android:textSize="14sp">
+</Button>
diff --git a/res/layout/name_edit_expansion_view.xml b/res/layout/name_edit_expansion_view.xml
index 13a50a8ca..066850f9a 100644
--- a/res/layout/name_edit_expansion_view.xml
+++ b/res/layout/name_edit_expansion_view.xml
@@ -22,7 +22,6 @@
android:layout_width="wrap_content"
android:layout_height="@dimen/editor_min_line_item_height"
android:layout_gravity="top"
- android:contentDescription="@string/expand_collapse_name_fields_description"
android:importantForAccessibility="yes"
android:focusable="true"
android:clickable="true">
@@ -32,6 +31,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:duplicateParentState="true"
+ android:tint="@color/quantum_black_secondary_text"
android:background="?android:attr/selectableItemBackground"
android:paddingLeft="@dimen/editor_round_button_padding_left"
android:paddingRight="@dimen/editor_round_button_padding_right"
diff --git a/res/layout/nav_drawer_spacer.xml b/res/layout/nav_drawer_spacer.xml
new file mode 100644
index 000000000..e95f6cdcb
--- /dev/null
+++ b/res/layout/nav_drawer_spacer.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<View xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/nav_drawer_spacer"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/nav_drawer_spacer_height"
+ android:background="@color/navigation_drawer_background_color"
+ android:importantForAccessibility="no"/> \ No newline at end of file
diff --git a/res/layout/nav_header_main.xml b/res/layout/nav_header_main.xml
new file mode 100644
index 000000000..7a2e3cb2b
--- /dev/null
+++ b/res/layout/nav_header_main.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<View
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/nav_status_bar_spacer"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/nav_header_height"
+ android:background="@color/contacts_accent_color"
+ android:importantForAccessibility="no"/>
diff --git a/res/layout/nick_name_editor_view.xml b/res/layout/nick_name_editor_view.xml
deleted file mode 100644
index 3b919175c..000000000
--- a/res/layout/nick_name_editor_view.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 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.
- -->
-
-<com.android.contacts.editor.TextFieldsEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:layout_marginStart="@dimen/editor_kind_icon_total_width"
- android:layout_marginEnd="@dimen/editor_delete_button_width">
-
- <!-- This isn't used in the nickname field. It is only included so that
- TextFieldsEditorView's base classes don't need extra null checks. -->
- <include
- android:id="@+id/spinner"
- layout="@layout/edit_spinner"
- android:visibility="gone" />
-
- <include
- android:id="@+id/editors"
- layout="@layout/edit_field_list" />
-
- <!-- This isn't used in the nickname field. It is only included so that
- TextFieldsEditorView doesn't need extra null checks. -->
- <include
- android:id="@+id/delete_button_container"
- layout="@layout/edit_delete_button"
- android:visibility="gone" />
-
-</com.android.contacts.editor.TextFieldsEditorView>
diff --git a/res/layout/people_activity.xml b/res/layout/people_activity.xml
index ce995cb3d..978f47a48 100644
--- a/res/layout/people_activity.xml
+++ b/res/layout/people_activity.xml
@@ -14,40 +14,24 @@
limitations under the License.
-->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/list_container"
+<android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/root"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent" >
- <include
- layout="@layout/people_activity_toolbar"
- android:id="@+id/toolbar_parent" />
-
- <!--
- ViewPager for swiping between tabs. We put StrequentContactListFragment,
- DefaultContactBrowseListFragment and GroupBrowseListFragment at runtime.
-
- (Adding them directly as the children of this view is not recommended. ViewPager should
- be treated like a ListView, which doesn't expect children to be added from the layout.)
- -->
- <android.support.v4.view.ViewPager
- android:id="@+id/tab_pager"
+ <!-- This is kind of a hack. Really we should be able to put the ContactsUnavailableFragment
+ into contacts_list_container but that causes issues with the fragment back stack
+ on older API levels -->
+ <FrameLayout
+ android:id="@+id/contacts_unavailable_container"
android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:layout_below="@id/toolbar_parent"
- />
+ android:layout_width="match_parent" />
<FrameLayout
- android:id="@+id/contacts_unavailable_view"
- android:layout_width="match_parent"
+ android:id="@+id/contacts_list_container"
android:layout_height="match_parent"
- android:layout_below="@id/toolbar_parent"
- android:visibility="gone">
- <FrameLayout
- android:id="@+id/contacts_unavailable_container"
- android:layout_height="match_parent"
- android:layout_width="match_parent" />
- </FrameLayout>
+ android:layout_width="match_parent" />
<include layout="@layout/floating_action_button" />
-</RelativeLayout>
+</android.support.design.widget.CoordinatorLayout>
diff --git a/res/layout/people_activity_tabs_lands.xml b/res/layout/people_activity_tabs_lands.xml
deleted file mode 100644
index 525ac3cec..000000000
--- a/res/layout/people_activity_tabs_lands.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<com.android.contacts.common.list.ViewPagerTabs
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/lists_pager_header"
- android:layout_width="@dimen/people_activity_landscape_tabs_width"
- android:layout_height="match_parent"
- android:textAllCaps="true"
- android:orientation="horizontal"
- android:layout_gravity="top"
- android:layout_weight="0"
- android:textSize="@dimen/people_activity_landscape_tabs_text_size"
- style="@style/ContactsActionBarTabTextStyle" />
diff --git a/res/layout/people_activity_toolbar.xml b/res/layout/people_activity_toolbar.xml
index cbb4d91a1..3599f0c60 100644
--- a/res/layout/people_activity_toolbar.xml
+++ b/res/layout/people_activity_toolbar.xml
@@ -24,26 +24,16 @@
<FrameLayout
android:id="@+id/toolbar_frame"
android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:background="@color/actionbar_background_color">
+ android:layout_height="?attr/actionBarSize"
+ android:background="?attr/colorPrimary">
- <Toolbar
+ <!-- the attribute padding removes the gap between this Toolbar and its parent FrameLayout on tablet -->
+ <android.support.v7.widget.Toolbar
android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
+ android:layout_height="?attr/actionBarSize"
android:id="@+id/toolbar"
+ android:padding="0dp"
style="@style/ContactsToolbarStyle" />
</FrameLayout>
-
- <com.android.contacts.common.list.ViewPagerTabs
- android:id="@+id/lists_pager_header"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/actionBarSize"
- android:textAllCaps="true"
- android:orientation="horizontal"
- android:layout_gravity="top"
- android:layout_weight="0"
- android:layout_below="@id/toolbar"
- style="@style/ContactsActionBarTabTextStyle" />
-
</LinearLayout> \ No newline at end of file
diff --git a/res/layout/people_navigation_item.xml b/res/layout/people_navigation_item.xml
deleted file mode 100644
index 60a7a490c..000000000
--- a/res/layout/people_navigation_item.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- This is the text view layout that is shown in the spinner for the navigation drop down menu on
- tablet devices. The text appearance is governed via two styles:
- PeopleNavigationDropDownHeaderTextAppearance - text appearance of the item in the header part
- of navigation drop down list of the action bar.
- PeopleNavigationDropDownTextAppearance - text appearance of the item in the drop down part of
- the navigation drop down list of the action bar. -->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:paddingLeft="18dip"
- android:paddingRight="18dip"
- android:paddingStart="18dip"
- android:paddingEnd="18dip"
- android:minHeight="?android:attr/listPreferredItemHeightSmall"
-/>
diff --git a/res/layout/phonetic_name_edit_expansion_view.xml b/res/layout/phonetic_name_edit_expansion_view.xml
deleted file mode 100644
index 161339130..000000000
--- a/res/layout/phonetic_name_edit_expansion_view.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
- -->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/editor_min_line_item_height"
- android:layout_gravity="top"
- android:contentDescription="@string/expand_collapse_phonetic_name_fields_description"
- android:importantForAccessibility="yes"
- android:focusable="true"
- android:clickable="true">
- <ImageView
- android:id="@+id/expansion_view"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:duplicateParentState="true"
- android:background="?android:attr/selectableItemBackground"
- android:paddingLeft="@dimen/editor_round_button_padding_left"
- android:paddingRight="@dimen/editor_round_button_padding_right"
- android:paddingStart="@dimen/editor_round_button_padding_left"
- android:paddingEnd="@dimen/editor_round_button_padding_right"
- android:paddingTop="@dimen/editor_round_button_padding_top"
- android:paddingBottom="@dimen/editor_round_button_padding_bottom" />
-</FrameLayout>
diff --git a/res/layout/phonetic_name_editor_view.xml b/res/layout/phonetic_name_editor_view.xml
deleted file mode 100644
index f51d3dfc0..000000000
--- a/res/layout/phonetic_name_editor_view.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
- -->
-
-<com.android.contacts.editor.PhoneticNameEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/editor_min_line_item_height"
- android:layout_marginStart="@dimen/editor_kind_icon_total_width">
-
- <!-- This isn't used in PhoneticNameEditorView. It is only included so that
- StructuredNameEditorView's base classes don't need extra null checks. -->
- <include
- android:id="@+id/spinner"
- layout="@layout/edit_spinner"
- android:visibility="gone" />
-
- <include
- android:id="@+id/editors"
- layout="@layout/edit_field_list" />
-
- <include
- android:id="@+id/expansion_view_container"
- layout="@layout/phonetic_name_edit_expansion_view"
- android:visibility="visible" />
-
- <!-- This isn't used in PhoneticNameEditorView. It is only included so that
- StructuredNameEditorView's base classes don't need extra null checks. -->
- <include
- android:id="@+id/delete_button_container"
- layout="@layout/edit_delete_button"
- android:visibility="gone" />
-
-</com.android.contacts.editor.PhoneticNameEditorView>
diff --git a/res/layout/photo_editor_view.xml b/res/layout/photo_editor_view.xml
new file mode 100644
index 000000000..b9f32a0a2
--- /dev/null
+++ b/res/layout/photo_editor_view.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+-->
+
+<com.android.contacts.editor.PhotoEditorView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/photo_editor"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_horizontal">
+
+ <com.android.contacts.widget.QuickContactImageView
+ android:id="@+id/photo"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="centerCrop"/>
+
+ <View
+ android:id="@+id/photo_icon_overlay"
+ android:layout_height="56dp"
+ android:layout_width="match_parent"
+ android:layout_alignParentBottom="true" />
+
+ <ImageView
+ android:id="@+id/photo_icon"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentEnd="true"
+ android:layout_marginBottom="16dp"
+ android:layout_marginEnd="16dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:tint="@android:color/white"
+ android:src="@drawable/quantum_ic_camera_alt_vd_theme_24" />
+
+ <View
+ android:id="@+id/photo_touch_intercept_overlay"
+ android:focusable="true"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@drawable/item_background_material_dark"
+ android:contentDescription="@string/editor_change_photo_content_description" />
+
+</com.android.contacts.editor.PhotoEditorView>
diff --git a/res/layout/pinned_header_list_demo.xml b/res/layout/pinned_header_list_demo.xml
deleted file mode 100644
index c717b3517..000000000
--- a/res/layout/pinned_header_list_demo.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/pinned_header_list_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- >
-
- <view
- class="com.android.contacts.common.list.PinnedHeaderListView"
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:paddingTop="@dimen/contact_browser_list_item_padding_top_or_bottom"
- android:clipToPadding="false"
- android:fastScrollEnabled="true"
- android:layout_weight="1"
- />
-</LinearLayout>
diff --git a/res/layout/quickcontact_collapsed_suggestion_card.xml b/res/layout/quickcontact_collapsed_suggestion_card.xml
index 45de7f5cf..64bac9987 100644
--- a/res/layout/quickcontact_collapsed_suggestion_card.xml
+++ b/res/layout/quickcontact_collapsed_suggestion_card.xml
@@ -29,7 +29,8 @@
android:id="@+id/collapsed_suggestion_header">
<ImageView
- android:src="@drawable/quantum_ic_assistant_grey600_48"
+ android:src="@drawable/quantum_ic_assistant_vd_theme_24"
+ android:tint="@color/editor_icon_color"
android:layout_width="@dimen/quickcontact_collapse_icon_size"
android:layout_height="@dimen/quickcontact_collapse_icon_size"
android:layout_margin="@dimen/quickcontact_collapse_image_padding"
@@ -49,7 +50,7 @@
android:paddingTop="@dimen/quickcontact_collapse_text_padding"/>
<ImageView
- android:src="@drawable/ic_menu_expander_minimized_holo_light"
+ android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
diff --git a/res/layout/quickcontact_content.xml b/res/layout/quickcontact_content.xml
index a6a8abb79..b6cff4b14 100644
--- a/res/layout/quickcontact_content.xml
+++ b/res/layout/quickcontact_content.xml
@@ -50,6 +50,12 @@
<com.android.contacts.quickcontact.ExpandingEntryCardView
style="@style/ExpandingEntryCardStyle"
+ android:id="@+id/permission_explanation_card"
+ android:visibility="gone"
+ cardview:cardCornerRadius="@dimen/expanding_entry_card_card_corner_radius"/>
+
+ <com.android.contacts.quickcontact.ExpandingEntryCardView
+ style="@style/ExpandingEntryCardStyle"
android:id="@+id/about_card"
android:visibility="gone"
cardview:cardCornerRadius="@dimen/expanding_entry_card_card_corner_radius" />
diff --git a/res/layout/quickcontact_expanding_entry_card_button.xml b/res/layout/quickcontact_expanding_entry_card_button.xml
index b198b060e..c7f95eec2 100644
--- a/res/layout/quickcontact_expanding_entry_card_button.xml
+++ b/res/layout/quickcontact_expanding_entry_card_button.xml
@@ -32,13 +32,12 @@
<ImageView
android:id="@+id/arrow"
- android:src="@drawable/expanding_entry_card_expand_white_24"
+ android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/expanding_entry_card_item_padding_start"
android:paddingBottom="@dimen/expanding_entry_card_button_padding_vertical"
- android:paddingTop="@dimen/expanding_entry_card_button_padding_vertical"
- android:layout_weight="0" />
+ android:paddingTop="@dimen/expanding_entry_card_button_padding_vertical"/>
<TextView
android:id="@+id/text"
@@ -46,22 +45,10 @@
android:layout_height="wrap_content"
android:paddingStart="@dimen/expanding_entry_card_item_image_spacing"
android:gravity="center_vertical"
- android:layout_weight="0"
android:paddingBottom="@dimen/expanding_entry_card_button_padding_vertical"
android:paddingTop="@dimen/expanding_entry_card_button_padding_vertical"
android:textColor="@color/expanding_entry_card_button_text_color"
android:textSize="@dimen/expanding_entry_card_title_text_size" />
-
- <LinearLayout
- android:id="@+id/badge_container"
- android:gravity="end"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="11dp"
- android:layout_marginTop="@dimen/expanding_entry_card_button_padding_vertical"
- android:layout_weight="1"
- android:alpha=".3"
- android:orientation="horizontal" />
</LinearLayout>
</LinearLayout> \ No newline at end of file
diff --git a/res/layout/quickcontact_suggestion_contact_item.xml b/res/layout/quickcontact_suggestion_contact_item.xml
deleted file mode 100644
index 3e7ed497b..000000000
--- a/res/layout/quickcontact_suggestion_contact_item.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="@dimen/quickcontact_expanding_item_height"
- android:paddingTop="@dimen/quickcontact_expanding_item_padding">
-
- <ImageView
- android:id="@+id/aggregation_suggestion_photo"
- android:layout_width="@dimen/quickcontact_suggestion_card_icon_height"
- android:layout_height="@dimen/quickcontact_suggestion_card_icon_width"
- android:layout_marginStart="@dimen/quickcontact_suggestion_card_image_spacing"
- android:scaleType="fitCenter"
- android:layout_gravity="center_vertical" />
-
- <LinearLayout
- android:id="@+id/suggestion_contact_item"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/quickcontact_expanding_item_image_padding"
- android:layout_weight="1"
- android:orientation="vertical"
- android:layout_gravity="center_vertical">
-
- <TextView
- android:id="@+id/aggregation_suggestion_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/quickcontact_suggestion_card_layout_margin"
- android:singleLine="true"
- android:ellipsize="end"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/quickcontact_entry_header_text_color" />
-
- <TextView
- android:id="@+id/aggregation_suggestion_account_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_marginBottom="@dimen/quickcontact_suggestion_card_layout_margin"
- android:singleLine="true"
- android:ellipsize="end" />
-
- </LinearLayout>
-
- <CheckBox
- android:id="@+id/suggestion_checkbox"
- android:layout_gravity="center_vertical|end"
- android:layout_alignParentEnd="true"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:shadowColor="@color/divider_line_color_light"
- android:layout_marginEnd="@dimen/quickcontact_suggestion_card_checkbox_right_margin"/>
-
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/raw_contact_editor_view.xml b/res/layout/raw_contact_editor_view.xml
deleted file mode 100644
index 97c1b495b..000000000
--- a/res/layout/raw_contact_editor_view.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.contacts.editor.RawContactEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/body"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <!-- There are two mutually exclusive account headers that look significantly different.
- The editor_account_selector is used when an account needs to be chosen. -->
- <include
- layout="@layout/editor_account_header_expandable" />
- <include
- layout="@layout/editor_account_selector" />
-
- <LinearLayout
- android:id="@+id/collapsable_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <!-- Dummy view so the first input field is not initially focused. b/21644158 -->
- <View
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:focusable="true"
- android:focusableInTouchMode="true"/>
-
- <include
- android:id="@+id/edit_name"
- layout="@layout/structured_name_editor_view" />
-
- <include
- android:id="@+id/edit_phonetic_name"
- layout="@layout/phonetic_name_editor_view" />
-
- <include
- android:id="@+id/edit_nick_name"
- layout="@layout/nick_name_editor_view" />
-
- <include
- android:id="@+id/edit_photo"
- android:layout_marginRight="8dip"
- android:layout_marginEnd="8dip"
- layout="@layout/item_photo_editor" />
-
- <LinearLayout
- android:id="@+id/sect_fields"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_marginBottom="16dip"/>
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="@dimen/divider_line_height"
- android:background="@color/divider_line_color_light" />
-
-</com.android.contacts.editor.RawContactEditorView>
diff --git a/res/layout/raw_contact_list_item.xml b/res/layout/raw_contact_list_item.xml
new file mode 100644
index 000000000..70bf3941a
--- /dev/null
+++ b/res/layout/raw_contact_list_item.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="24dp"
+ android:paddingRight="24dp"
+ android:paddingTop="12dp"
+ android:paddingBottom="12dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/photo"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginEnd="16dp"
+ android:scaleType="fitCenter"/>
+
+ <LinearLayout
+ android:id="@+id/text_container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/display_name"
+ android:textSize="16sp"
+ android:textColor="@color/quantum_black_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"/>
+
+ <LinearLayout
+ android:id="@+id/account_container"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical">
+
+ <ImageView
+ android:id="@+id/account_icon"
+ android:layout_width="14dp"
+ android:layout_height="14dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginEnd="4dp"
+ android:scaleType="fitCenter"/>
+
+ <TextView
+ android:id="@+id/account_name"
+ android:textSize="13sp"
+ android:textColor="@color/quantum_black_secondary_text"
+ android:maxLines="1"
+ android:ellipsize="middle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"/>
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/raw_contact_readonly_editor_view.xml b/res/layout/raw_contact_readonly_editor_view.xml
deleted file mode 100644
index 25699cece..000000000
--- a/res/layout/raw_contact_readonly_editor_view.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.contacts.editor.RawContactReadOnlyEditorView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <include
- layout="@layout/editor_account_header_expandable" />
-
- <LinearLayout
- android:id="@+id/collapsable_section"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
-
- <!-- Want 16dp of apparent top padding. Since TextView has 4dp of inset/padding built in,
- only set marginTop=12dp. -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/editor_padding_around_read_only_photo_editor"
- android:layout_marginTop="12dp"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/kind_icon"
- android:layout_marginTop="2dp"
- android:src="@drawable/ic_person_black_24dp"
- android:contentDescription="@string/header_name_entry"
- style="@style/EditKindIconStyle" />
-
- <TextView
- android:id="@+id/read_only_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/editor_delete_button_width"
- android:layout_marginEnd="@dimen/editor_delete_button_width"
- android:singleLine="true"
- android:textSize="@dimen/editor_form_text_size"
- android:textColor="?android:attr/textColorSecondary"
- android:textAlignment="viewStart"
- android:enabled="false"/>
-
- </LinearLayout>
-
- <include
- android:id="@+id/edit_photo"
- layout="@layout/item_photo_editor_readonly" />
-
- <Button
- android:id="@+id/button_edit_externally"
- android:text="@string/edit_contact"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dp"
- android:layout_marginBottom="@dimen/editor_padding_below_photo"
- android:layout_marginEnd="13dip"
- android:layout_marginStart="13dip"/>
-
- <LinearLayout android:id="@+id/sect_general"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"/>
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="@dimen/divider_line_height"
- android:background="@color/divider_line_color_light" />
-
-</com.android.contacts.editor.RawContactReadOnlyEditorView>
diff --git a/res/layout/search_bar_expanded.xml b/res/layout/search_bar_expanded.xml
new file mode 100644
index 000000000..9f90bc7d0
--- /dev/null
+++ b/res/layout/search_bar_expanded.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/search_box_expanded"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:visibility="gone" >
+
+ <ImageButton
+ android:id="@+id/search_back_button"
+ android:layout_width="@dimen/search_box_icon_size"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_marginEnd="@dimen/search_box_navigation_icon_margin"
+ android:src="@drawable/quantum_ic_arrow_back_vd_theme_24"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:contentDescription="@string/action_menu_back_from_search"
+ android:tint="@color/actionbar_background_color" />
+
+ <android.widget.AutoCompleteTextView
+ android:id="@+id/search_view"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_weight="1"
+ android:layout_marginLeft="@dimen/search_box_text_left_margin"
+ android:textSize="@dimen/search_text_size"
+ android:fontFamily="@string/search_font_family"
+ android:textColor="@color/searchbox_text_color"
+ android:textColorHint="@color/searchbox_hint_text_color"
+ android:textCursorDrawable="@drawable/searchedittext_custom_cursor"
+ android:background="@null"
+ android:inputType="textFilter"
+ android:singleLine="true"
+ android:imeOptions="flagNoExtractUi" />
+
+ <ImageView
+ android:id="@+id/search_close_button"
+ android:layout_height="@dimen/search_box_close_icon_size"
+ android:layout_width="@dimen/search_box_close_icon_size"
+ android:padding="@dimen/search_box_close_icon_padding"
+ android:src="@drawable/quantum_ic_close_vd_theme_24"
+ android:tint="@color/quantum_black_secondary_text"
+ android:clickable="true"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:contentDescription="@string/description_clear_search" />
+
+</LinearLayout>
diff --git a/res/layout/select_account_list_item.xml b/res/layout/select_account_list_item.xml
new file mode 100644
index 000000000..edfd9049b
--- /dev/null
+++ b/res/layout/select_account_list_item.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Layout of a single item in the InCallUI Account Chooser Dialog. -->
+<view class="com.android.contacts.widget.ActivityTouchLinearLayout"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="8dp" >
+
+ <ImageView android:id="@+id/icon"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:scaleType="center" />
+
+ <LinearLayout
+ android:id="@+id/text"
+ android:gravity="start|center_vertical"
+ android:layout_marginLeft="8dp"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <TextView android:id="@+id/label"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/dialtacts_primary_text_color"
+ android:includeFontPadding="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+ <TextView android:id="@+id/number"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:includeFontPadding="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
+ </LinearLayout>
+
+</view>
diff --git a/res/layout/select_dialog_item.xml b/res/layout/select_dialog_item.xml
new file mode 100644
index 000000000..1215aa923
--- /dev/null
+++ b/res/layout/select_dialog_item.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!--
+ List item in the pop-up window that appears when tapping a contact's photo
+ in the contact editor. This is similar to the framework's select_dialog_item_material.xml layout
+ except the text appearance is medium and the padding is set to match the material spec.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="56dp"
+ android:orientation="vertical"
+ android:paddingBottom="8dp"
+ android:paddingEnd="24dp"
+ android:paddingStart="24dp"
+ android:paddingTop="8dp">
+
+ <TextView
+ android:id="@+id/primary_text"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:ellipsize="marquee"
+ android:gravity="start|center_vertical"
+ android:textAlignment="viewStart"
+ android:textAppearance="?android:textAppearanceListItem"
+ android:textSize="16sp"/>
+
+ <TextView
+ android:id="@+id/secondary_text"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="marquee"
+ android:gravity="center_vertical|start"
+ android:textAlignment="viewStart"
+ android:textAppearance="?android:textAppearanceListItemSecondary"
+ android:textColor="?android:textColorSecondary"
+ />
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/selection_bar.xml b/res/layout/selection_bar.xml
index 34cdd6051..272a2fcf9 100644
--- a/res/layout/selection_bar.xml
+++ b/res/layout/selection_bar.xml
@@ -18,25 +18,41 @@
android:id="@+id/selection_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/contextual_selection_bar_color" >
+ android:background="@color/contextual_selection_bar_color">
<ImageButton
android:id="@+id/selection_close"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:src="@drawable/ic_back_arrow"
- android:background="?android:attr/selectableItemBackgroundBorderless"
- android:contentDescription="@string/action_menu_back_from_search"
+ android:layout_width="@dimen/selection_bar_close_icon_size"
+ android:layout_height="@dimen/selection_bar_close_icon_size"
android:layout_gravity="center_vertical|start"
- android:tint="@android:color/white" />
+ android:tint="@color/quantum_black_secondary_text"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:contentDescription="@string/action_menu_back_from_edit_select"
+ android:src="@drawable/quantum_ic_close_vd_theme_24"/>
<TextView
android:id="@+id/selection_count_text"
- android:layout_marginStart="72dp"
+ style="@style/ContactsActionBarTitleTextBlack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:visibility="gone"
android:layout_gravity="center_vertical|start"
- style="@style/ContactsActionBarTitleText" />
+ android:layout_marginEnd="@dimen/edit_group_end_margin"
+ android:layout_marginStart="72dp"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:visibility="gone"/>
+
+ <TextView
+ android:id="@+id/add_contacts"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_gravity="center_vertical|end"
+ android:gravity="center"
+ android:paddingEnd="16dp"
+ android:paddingStart="16dp"
+ android:text="@string/menu_add_contacts"
+ android:textColor="@color/primary_color"
+ android:textStyle="bold"
+ android:visibility="gone"/>
</FrameLayout>
diff --git a/res/layout/sim_import_activity.xml b/res/layout/sim_import_activity.xml
new file mode 100644
index 000000000..ac8a9c45e
--- /dev/null
+++ b/res/layout/sim_import_activity.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/root"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
diff --git a/res/layout/sim_import_list_item.xml b/res/layout/sim_import_list_item.xml
new file mode 100644
index 000000000..c03957038
--- /dev/null
+++ b/res/layout/sim_import_list_item.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<CheckedTextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/text"
+ android:layout_width="match_parent"
+ android:layout_height="?android:listPreferredItemHeight"
+ android:checkMark="?android:listChoiceIndicatorMultiple"
+ android:gravity="center_vertical"
+ android:paddingEnd="@dimen/activity_horizontal_margin"
+ android:paddingStart="@dimen/activity_horizontal_margin"
+ android:textAppearance="?android:textAppearanceListItem"/>
diff --git a/res/layout/sim_import_list_item_disabled.xml b/res/layout/sim_import_list_item_disabled.xml
new file mode 100644
index 000000000..4647049f7
--- /dev/null
+++ b/res/layout/sim_import_list_item_disabled.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/text"
+ style="?android:checkedTextViewStyle"
+ android:layout_width="match_parent"
+ android:layout_height="?android:listPreferredItemHeight"
+ android:drawableEnd="?android:listChoiceIndicatorMultiple"
+ android:enabled="false"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:paddingEnd="@dimen/activity_horizontal_margin"
+ android:paddingStart="@dimen/activity_horizontal_margin"
+ android:textAppearance="?android:textAppearanceListItem"
+ android:textColor="@color/contact_list_name_text_color"/>
diff --git a/res/layout/structured_name_editor_view.xml b/res/layout/structured_name_editor_view.xml
index 830f4d8af..f5b2a675d 100644
--- a/res/layout/structured_name_editor_view.xml
+++ b/res/layout/structured_name_editor_view.xml
@@ -31,7 +31,7 @@
<ImageView
android:id="@+id/kind_icon"
- android:src="@drawable/ic_person_black_24dp"
+ android:src="@drawable/quantum_ic_person_vd_theme_24"
android:contentDescription="@string/header_name_entry"
style="@style/EditKindIconStyle"/>
diff --git a/res/layout/take_a_photo_button.xml b/res/layout/take_a_photo_button.xml
deleted file mode 100644
index b837e850c..000000000
--- a/res/layout/take_a_photo_button.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="@dimen/photo_picker_item_ideal_width"
- android:layout_height="@dimen/photo_picker_item_ideal_width"
- android:background="@color/google_grey_600"
- android:orientation="vertical">
-
- <ImageView
- android:id="@+id/image"
- android:paddingTop="48dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_photo_camera_white_24dp"
- android:layout_gravity="center_horizontal"/>
-
- <TextView
- android:id="@+id/textLabel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:singleLine="true"
- android:text="@string/take_a_photo_button"
- android:textSize="14sp"
- android:textColor="@color/photo_action_button_color"
- android:paddingTop="9dp"
- android:paddingBottom="35dp"
- android:layout_gravity="center_horizontal"/>
-</LinearLayout> \ No newline at end of file
diff --git a/res/layout/text_fields_editor_view.xml b/res/layout/text_fields_editor_view.xml
index dc3a31204..326977d30 100644
--- a/res/layout/text_fields_editor_view.xml
+++ b/res/layout/text_fields_editor_view.xml
@@ -43,6 +43,6 @@
<include
android:id="@+id/delete_button_container"
layout="@layout/edit_delete_button"
- android:visibility="gone" />
+ android:visibility="invisible" />
</com.android.contacts.editor.TextFieldsEditorView>
diff --git a/res/layout/user_profile_header.xml b/res/layout/user_profile_header.xml
deleted file mode 100644
index 828f08ce9..000000000
--- a/res/layout/user_profile_header.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/user_profile_header"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="?attr/list_item_header_height"
- android:paddingLeft="?attr/list_item_padding_left"
- android:paddingRight="?attr/list_item_padding_right"
- android:paddingStart="?attr/list_item_padding_left"
- android:paddingEnd="?attr/list_item_padding_right"
- android:paddingTop="4dp"
- android:paddingBottom="8dp" >
-
- <TextView android:id="@+id/profile_title"
- android:layout_width="@dimen/contact_list_section_header_width"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:singleLine="true"
- android:text="@string/user_profile_contacts_list_header"
- android:ellipsize="end"
- android:textAppearance="@style/SectionHeaderStyle"
- android:gravity="start|center_vertical" />
-
- <Button android:id="@+id/user_profile_button"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:paddingStart="?attr/list_item_padding_left"
- android:paddingEnd="?attr/list_item_padding_right"
- android:background="?android:attr/selectableItemBackground"
- android:singleLine="true"
- android:text="@string/profile_display_name"
- android:ellipsize="end"
- android:gravity="start|center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium" />
-
-</LinearLayout>
diff --git a/res/menu/edit_contact.xml b/res/menu/edit_contact.xml
index 256edb653..039c6570e 100644
--- a/res/menu/edit_contact.xml
+++ b/res/menu/edit_contact.xml
@@ -14,11 +14,12 @@
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_save"
- android:showAsAction="always"
- android:icon="@drawable/ic_done_wht_24dp"
+ app:showAsAction="always"
+ app:actionLayout="@layout/editor_save_button"
android:title="@string/menu_save" />
<item
@@ -34,15 +35,6 @@
android:title="@string/menu_deleteContact" />
<item
- android:id="@+id/menu_set_ringtone"
- android:title="@string/menu_set_ring_tone" />
-
- <item
- android:id="@+id/menu_send_to_voicemail"
- android:checkable="true"
- android:title="@string/menu_redirect_calls_to_vm" />
-
- <item
android:id="@+id/menu_help"
android:title="@string/menu_help" />
</menu>
diff --git a/res/menu/edit_contact_photo.xml b/res/menu/edit_contact_photo.xml
deleted file mode 100644
index 725ea8b99..000000000
--- a/res/menu/edit_contact_photo.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_photo"
- android:showAsAction="always"
- android:icon="@drawable/ic_photo_camera_white_24dp"
- android:title="@string/menu_change_photo"/>
-</menu>
diff --git a/res/menu/edit_group.xml b/res/menu/edit_group.xml
deleted file mode 100644
index a3387ca29..000000000
--- a/res/menu/edit_group.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_discard"
- android:alphabeticShortcut="q"
- android:title="@string/menu_discard"
- android:showAsAction="withText" />
-</menu>
diff --git a/res/menu/group_member_picker.xml b/res/menu/group_member_picker.xml
new file mode 100644
index 000000000..2dd199017
--- /dev/null
+++ b/res/menu/group_member_picker.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:contacts="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/menu_select"
+ android:title="@string/menu_selectForGroup"
+ contacts:showAsAction="never" />
+
+</menu>
diff --git a/res/menu/group_source.xml b/res/menu/group_source.xml
deleted file mode 100644
index 6d1af2d34..000000000
--- a/res/menu/group_source.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_group_source"
- android:showAsAction="always" />
-</menu>
diff --git a/res/menu/items_multi_select.xml b/res/menu/items_multi_select.xml
new file mode 100644
index 000000000..5bb39d4a0
--- /dev/null
+++ b/res/menu/items_multi_select.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ <item
+ app:actionLayout="@layout/multi_select_send_button"
+ app:showAsAction="always"
+ android:id="@+id/menu_send"
+ android:title="@string/send_to_selection" />
+</menu> \ No newline at end of file
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index dde404c90..5fb0f2eb6 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -13,40 +13,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:contacts="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
- android:icon="@drawable/ic_ab_search"
- android:title="@string/menu_search"
- android:showAsAction="ifRoom" />
-
- <item
- android:id="@+id/menu_contacts_filter"
- android:title="@string/menu_contacts_filter" />
-
- <item
- android:id="@+id/menu_import_export"
- android:title="@string/menu_import_export" />
-
- <item
- android:id="@+id/menu_clear_frequents"
- android:title="@string/menu_clear_frequents" />
-
- <item
- android:id="@+id/menu_blocked_numbers"
- android:title="@string/menu_blocked_numbers"/>
-
- <item
- android:id="@+id/menu_accounts"
- android:title="@string/menu_accounts" />
-
- <item
- android:id="@+id/menu_settings"
- android:title="@string/menu_settings" />
-
- <item
- android:id="@+id/menu_help"
- android:title="@string/menu_help" />
+ android:icon="@drawable/quantum_ic_search_vd_theme_24"
+ android:title="@string/hint_findContacts"
+ contacts:showAsAction="ifRoom" />
<item
android:id="@+id/export_database"
@@ -55,15 +28,21 @@
android:showAsAction="never" />
<item
- android:id="@+id/menu_join"
- android:title="@string/menu_joinAggregate" />
+ android:id="@+id/menu_share"
+ android:icon="@drawable/quantum_ic_share_vd_theme_24"
+ android:title="@string/menu_share"
+ contacts:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_delete"
- android:title="@string/menu_deleteContact" />
+ android:icon="@drawable/quantum_ic_delete_vd_theme_24"
+ android:title="@string/menu_deleteContact"
+ contacts:showAsAction="ifRoom"/>
<item
- android:id="@+id/menu_share"
- android:title="@string/menu_share" />
+ android:id="@+id/menu_join"
+ android:icon="@drawable/quantum_ic_link_vd_theme_24"
+ android:title="@string/menu_joinAggregate"
+ contacts:showAsAction="ifRoom"/>
</menu>
diff --git a/res/menu/quickcontact.xml b/res/menu/quickcontact.xml
index 6cfe05349..7d87708b4 100644
--- a/res/menu/quickcontact.xml
+++ b/res/menu/quickcontact.xml
@@ -26,6 +26,14 @@
android:showAsAction="always" />
<item
+ android:id="@+id/menu_join"
+ android:title="@string/menu_joinAggregate" />
+
+ <item
+ android:id="@+id/menu_linked_contacts"
+ android:title="@string/menu_linkedContacts" />
+
+ <item
android:id="@+id/menu_delete"
android:title="@string/menu_deleteContact" />
@@ -39,6 +47,14 @@
android:title="@string/menu_create_contact_shortcut" />
<item
+ android:id="@+id/menu_set_ringtone"
+ android:title="@string/menu_set_ring_tone" />
+
+ <item
+ android:id="@+id/menu_send_to_voicemail"
+ android:title="@string/menu_redirect_calls_to_vm"/>
+
+ <item
android:id="@+id/menu_help"
android:title="@string/menu_help" />
</menu>
diff --git a/res/menu/search_menu.xml b/res/menu/search_menu.xml
index 355442ed9..bf4b5ddc4 100644
--- a/res/menu/search_menu.xml
+++ b/res/menu/search_menu.xml
@@ -13,10 +13,11 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:contacts="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_search"
- android:icon="@drawable/ic_ab_search"
- android:title="@string/menu_search"
- android:showAsAction="always" />
+ android:icon="@drawable/quantum_ic_search_vd_theme_24"
+ android:title="@string/hint_findContacts"
+ contacts:showAsAction="always" />
</menu>
diff --git a/res/menu/star.xml b/res/menu/star.xml
deleted file mode 100644
index 904adbf0b..000000000
--- a/res/menu/star.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_star"
- android:showAsAction="always" />
-</menu>
diff --git a/res/menu/view_contact.xml b/res/menu/view_contact.xml
deleted file mode 100644
index 8c36924ea..000000000
--- a/res/menu/view_contact.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/menu_edit"
- android:title="@string/menu_editContact"
- android:alphabeticShortcut="e" />
-
- <item
- android:id="@+id/menu_share"
- android:title="@string/menu_share"
- android:alphabeticShortcut="s" />
-
- <item
- android:id="@+id/menu_delete"
- android:title="@string/menu_deleteContact" />
-
- <item
- android:id="@+id/menu_set_ringtone"
- android:title="@string/menu_set_ring_tone" />
-
- <item
- android:id="@+id/menu_send_to_voicemail"
- android:checkable="true"
- android:title="@string/menu_redirect_calls_to_vm" />
-
- <item
- android:id="@+id/menu_create_contact_shortcut"
- android:title="@string/menu_create_contact_shortcut" />
-</menu>
diff --git a/res/menu/view_group.xml b/res/menu/view_group.xml
index 669f401c8..ce49c9294 100644
--- a/res/menu/view_group.xml
+++ b/res/menu/view_group.xml
@@ -14,13 +14,37 @@
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:contacts="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/menu_add"
+ android:icon="@drawable/quantum_ic_person_add_vd_theme_24"
+ android:title="@string/menu_addToGroup"
+ contacts:showAsAction="ifRoom" />
+
+ <item
+ android:id="@+id/menu_multi_send_email"
+ android:title="@string/menu_sendEmailOption" />
+
+ <item
+ android:id="@+id/menu_multi_send_message"
+ android:title="@string/menu_sendMessageOption" />
+
<item
android:id="@+id/menu_edit_group"
- android:title="@string/menu_editGroup"
- android:alphabeticShortcut="e" />
+ android:icon="@drawable/quantum_ic_create_vd_theme_24"
+ android:title="@string/menu_editGroup" />
+
+ <item
+ android:id="@+id/menu_rename_group"
+ android:title="@string/menu_renameGroup"/>
<item
android:id="@+id/menu_delete_group"
android:title="@string/menu_deleteGroup" />
+
+ <item
+ android:id="@+id/menu_remove_from_group"
+ android:title="@string/menu_removeFromGroup" />
</menu>
diff --git a/res/mipmap-anydpi-v26/ic_contacts_launcher.xml b/res/mipmap-anydpi-v26/ic_contacts_launcher.xml
new file mode 100644
index 000000000..784f6e334
--- /dev/null
+++ b/res/mipmap-anydpi-v26/ic_contacts_launcher.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_contacts_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_contacts_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/res/mipmap-hdpi/ic_contacts_launcher.png b/res/mipmap-hdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..0fd1492ba
--- /dev/null
+++ b/res/mipmap-hdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/mipmap-hdpi/ic_contacts_launcher_foreground.png b/res/mipmap-hdpi/ic_contacts_launcher_foreground.png
new file mode 100644
index 000000000..8088777d2
--- /dev/null
+++ b/res/mipmap-hdpi/ic_contacts_launcher_foreground.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_contacts_launcher.png b/res/mipmap-mdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..e23930b82
--- /dev/null
+++ b/res/mipmap-mdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_contacts_launcher_foreground.png b/res/mipmap-mdpi/ic_contacts_launcher_foreground.png
new file mode 100644
index 000000000..abea159d6
--- /dev/null
+++ b/res/mipmap-mdpi/ic_contacts_launcher_foreground.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_contacts_launcher.png b/res/mipmap-xhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..aff0f3166
--- /dev/null
+++ b/res/mipmap-xhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_contacts_launcher_foreground.png b/res/mipmap-xhdpi/ic_contacts_launcher_foreground.png
new file mode 100644
index 000000000..1fb675218
--- /dev/null
+++ b/res/mipmap-xhdpi/ic_contacts_launcher_foreground.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_contacts_launcher.png b/res/mipmap-xxhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..9cd2ebe42
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/mipmap-xxhdpi/ic_contacts_launcher_foreground.png b/res/mipmap-xxhdpi/ic_contacts_launcher_foreground.png
new file mode 100644
index 000000000..f1be7b134
--- /dev/null
+++ b/res/mipmap-xxhdpi/ic_contacts_launcher_foreground.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_contacts_launcher.png b/res/mipmap-xxxhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..74c41792f
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/mipmap-xxxhdpi/ic_contacts_launcher_foreground.png b/res/mipmap-xxxhdpi/ic_contacts_launcher_foreground.png
new file mode 100644
index 000000000..4b1a4b41b
--- /dev/null
+++ b/res/mipmap-xxxhdpi/ic_contacts_launcher_foreground.png
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 8dd970fd8..48ac24b32 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakte"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakte"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Bekyk kontak"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Wysig kontak"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakte"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Voeg kontak by"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontak"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direk skakel"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direkte boodskap"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kies \'n kontakkortpad"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Kies \'n nommer om te bel"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Kies \'n nommer om te stuur"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kies kontak"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Voeg by kontakte"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kies \'n kontak"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Kies"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Skep nuwe kontak"</string>
- <string name="starredList" msgid="4817256136413959463">"Gester"</string>
- <string name="frequentList" msgid="7154768136473953056">"Gereeld"</string>
- <string name="strequentList" msgid="5640192862059373511">"Gunstelinge"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontakbesonderhede"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Redigeer kontak"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Skep kontak"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Redigeer groep"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Skep groep"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Meer oor"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Opdaterings"</string>
<string name="searchHint" msgid="8482945356247760701">"Deursoek kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Bekyk kontak"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Voeg by gunstelinge"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Verwyder van gunstelinge"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Verwyder uit gunstelinge"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Redigeer"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Vee uit"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Verander foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plaas op tuisskerm"</string>
- <string name="menu_call" msgid="3992595586042260618">"Bel kontak"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Teks - kontak"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Skep kortpad"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Verdeel"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Redigeer"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Vee uit"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Voeg kontak by"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Voeg groep by"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Verwyder kontakte"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Hernoem etiket"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Vee etiket uit"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Voeg kontak by"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kies kontakte"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Voeg kontakte by"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Verwyder van etiket"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Skep etiket"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Verdeel hierdie kontak in veelvuldige kontakte?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Verdeel"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Wil jy graag die veranderinge wat jy reeds gemaak het, stoor en hierdie kontak in veelvuldige kontakte verdeel?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Stoor en verdeel"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Wil jy graag die veranderinge wat jy reeds aangebring het, stoor en koppel aan die kontak wat gekies is?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Stoor en koppel"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Koppel tans"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ontkoppel tans"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Koppel"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Bekyk gekoppelde kontakte"</string>
<string name="menu_save" msgid="1727844363591825909">"Stoor"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Koppel kontakte"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Kies die kontak wat jy aan <xliff:g id="NAME">%s</xliff:g> wil skakel:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Wys alle kontakte"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Voorgestelde kontakte"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakte"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> geskakel"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakte is saamgevoeg"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> uitgevee"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> en <xliff:g id="NAME_1">%2$s</xliff:g> uitgevee"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> … uitgevee"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kontakte is uitgevee</item>
<item quantity="one">Kontak is uitgevee</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakte</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Vanaf Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Vanaf <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Stel luitoon op"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepe na stempos"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakte van jou leesalleen-rekeninge af kan nie uitgevee word nie, maar hulle kan versteek word."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Versteek"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Die kontak wat uitgevee gaan word, bevat besonderhede van veelvuldige rekeninge af. Besonderhede van leesalleen-rekeninge af sal versteek word, nie uitgevee word nie."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Jy moet minstens twee kontakte kies om hulle te koppel."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Koppel gekose kontakte?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Koppel"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Roete na stemboodskap"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Onroeteer na stemboodskap"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Hierdie kontak is leesalleen. Dit kan nie uitgevee word nie, maar jy kan dit versteek."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Versteek kontak"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Leesalleen-rekeninge in hierdie kontak sal versteek word, nie uitgevee nie."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vee hierdie kontak uit?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vee gekose kontakte uit?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakte van jou leesalleen-rekeninge af kan nie uitgevee word nie, maar hulle kan versteek word."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"As jy hierdie kontak uitvee, sal dit besonderhede van veelvuldige rekeninge af uitvee."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vee hierdie kontak uit?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Vee uit"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Verwerp wysigings"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Die kontak bestaan ​​nie."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontak is by Tuisskerm gevoeg."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> is by Tuisskerm gevoeg."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Skep nuwe kontak"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Skep nuwe kontak"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisasie"</item>
- <item msgid="7196592230748086755">"Let wel"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Geen prente is op die tablet beskikbaar nie."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Geen prente is beskikbaar op die foon nie."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Geen prente is beskikbaar op die toestel nie."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakfoto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Gepasmaakte etiketnaam"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Stuur oproepe direk na stemboodskap"</string>
<string name="removePhoto" msgid="4898105274130284565">"Verwyder foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Geen kontakte"</string>
- <string name="noGroups" msgid="8614664663561385253">"Geen groepe nie."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Jy het \'n rekening nodig om groepe te skep."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Geen mense in hierdie groep nie."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Om \'n paar by te voeg, wysig die groep."</string>
- <string name="savingContact" msgid="4075751076741924939">"Stoor tans kontak..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Jou kontaktelys is leeg"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Geen kontakte met hierdie etiket nie"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Geen kontakte in hierdie rekening nie"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Jou kontaktelys is leeg"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> is gestoor"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontak gestoor"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakte is ontkoppel"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kon nie kontakveranderinge stoor nie."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kon nie kontak ontkoppel nie."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kon nie kontak skakel nie."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kon nie kontak stoor nie."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kon nie kontakfotoveranderings stoor nie."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Groep gestoor."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kon nie groepsveranderinge stoor nie."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte met foonnommers</item>
- <item quantity="one">1 kontak met foonnommer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Geen kontakte met foonnommers nie"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevind</item>
- <item quantity="one">1 gevind</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kon nie kontakveranderinge stoor nie"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kon nie kontak ontkoppel nie"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kon nie kontak skakel nie"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kon nie kontak stoor nie"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kon nie kontakfotoveranderinge stoor nie"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kon nie etiket laai nie"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiket is uitgevee"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket geskep"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan nie etiket skep nie"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket opgedateer"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Verwyder van etiket"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"By etiket gevoeg"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kon nie etiketveranderinge stoor nie"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Daardie etiket bestaan reeds."</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Sommige kontakte het nie e-pos nie."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Sommige kontakte het nie foonnommers nie."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Stuur e-pos"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Stuur boodskap"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kies kontakte"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Stuur"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Geen kontakte nie"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevind</item>
- <item quantity="one">1 gevind</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alles"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Gunstelinge"</string>
- <string name="callBack" msgid="5498224409038809224">"Bel terug"</string>
- <string name="callAgain" msgid="3197312117049874778">"Bel weer"</string>
- <string name="returnCall" msgid="8171961914203617813">"Bel terug"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" by kontakte?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontakfoto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakte"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Name van jou kontakte"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Geen program is gevind om hierdie aksie te hanteer nie."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik om na die vorige skerm terug te keer"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Voeg foonnommer by"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Voeg e-pos by"</string>
<string name="missing_app" msgid="1466111003546611387">"Geen program is gevind om hierdie handeling te behartig nie."</string>
<string name="menu_share" msgid="943789700636542260">"Deel"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Voeg by kontakte"</string>
- <string name="share_via" msgid="563121028023030093">"Deel kontak met"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Skep groep onder rekening"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Voeg by"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Deel kontakte via</item>
+ <item quantity="one">Deel kontak via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Kies rekening"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Skep etiket"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Hernoem etiket"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiketnaam"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketnaam"</string>
<string name="audio_chat" msgid="2535716629358298691">"Stemklets"</string>
<string name="video_chat" msgid="1872255818640336072">"Videoklets"</string>
- <string name="connections" msgid="8098440723172028350">"Skakelpunte"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Voeg skakelpunt by"</string>
- <string name="recent" msgid="2659189233141493004">"Onlangs"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Onlangse opdaterings"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontak"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-rekening"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nie redigeerbaar vanuit hierdie program nie."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nie redigeerbaar op hierdie toestel nie"</string>
<string name="take_photo" msgid="7496128293167402354">"Neem foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Neem nuwe foto"</string>
<string name="pick_photo" msgid="2129509985223564942">"Kies foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Kies nuwe foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaklys word opgedateer."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Soek tans…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Wys gekose"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Wys alle"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Kies alle"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Ontkies almal"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Voeg nuwe by"</string>
- <string name="add_organization" msgid="7311893231158291197">"Voeg organisasie by"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Groepnaam"</string>
- <string name="change_photo" msgid="8530597935483526383">"Verander"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primêre foto"</string>
- <string name="description_star" msgid="2605854427360036550">"gunsteling"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Redigeer kontak"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Skakel die huidige kontak aan die geselekteerde kontak?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Kanselleer"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Terug"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"maak toe"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wissel na redigering van die gekose kontak? Inligting wat jy tot dusver ingevoer het, sal gekopieer word."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopieer na My kontakte"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Voeg by My kontakte"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Gids <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Gepasmaak"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Instellings"</string>
<string name="menu_settings" msgid="377929915873428211">"Instellings"</string>
<string name="menu_help" msgid="1680178646764069976">"Hulp en terugvoer"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Vertoonopsies"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Foonnommer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Voeg by kontakte"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Voeg by kontakte"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Maak toe"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Sluit jaar in"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontak"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Laai tans…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skep \'n nuwe kontak"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Voeg rekening by"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Voer kontakte in"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Skep nuwe groep"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Skep nuwe groep"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groepe</item>
- <item quantity="one">1 groep</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Verwyder die groep \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakte self sal nie verwyder word nie.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> mense vanaf <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon vanaf <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mense</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Voer in"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Skep nuwe …"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Verwyder die etiket \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakte self sal nie verwyder word nie.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Voer kontaknaam in voordat jy dit aan \'n ander kontak skakel."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopieer na knipbord"</string>
<string name="set_default" msgid="4417505153468300351">"Stel verstek op"</string>
<string name="clear_default" msgid="7193185801596678067">"Vee verstek uit"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teks gekopieer"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Gooi jou veranderings weg en hou op om te wysig?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Ignoreer veranderinge?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Gooi weg"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Hou aan wysig"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Stel my profiel op"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Voer persoon se naam in"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Groep se naam"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Kanselleer"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Gooi pasmakings weg?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Deursoek kontakte"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Verwyder kontakte"</string>
<string name="local_profile_title" msgid="2021416826991393684">"My plaaslike profiel"</string>
<string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>profiel"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Vertoon alle kontakte"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hou jou kontakte veilig, selfs al verloor jy jou selfoon: sinkroniseer met \'n aanlyn diens."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Voeg \'n rekening by"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Jou nuwe kontak sal nie gerugsteun word nie. Voeg \'n rekening by wat kontakte aanlyn rugsteun?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Neem \'n oomblik om \'n rekening by te voeg wat jou kontakte na Google sal rugsteun."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nuwe kontakte sal gestoor word in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Kies \'n verstekrekening vir nuwe kontakte:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Voeg nuwe kontak by"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Skep nuwe kontak"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Wysig kontak"</string>
- <string name="keep_local" msgid="1258761699192993322">"Hou plaaslik"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Slegs kyk"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Kies kontakte om te wysig"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Gekoppelde kontakte"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Voeg by"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ontkoppel"</string>
<string name="add_account" msgid="8201790677994503186">"Voeg rekening by"</string>
<string name="add_new_account" msgid="5748627740680940264">"Voeg nuwe rekening by"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Voer databasislêers uit"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"voeg nuwe kontak by"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Skep nuwe kontak"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Sien meer"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Sien minder"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Sien alles"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Onlangs"</string>
<string name="about_card_title" msgid="2920942314212825637">"Meer oor"</string>
- <string name="send_message" msgid="8938418965550543196">"Stuur boodskap"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Skep tans \'n persoonlike kopie …"</string>
- <string name="yesterday" msgid="6840858548955018569">"Gister"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Skep tans \'n persoonlike kopie..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Môre"</string>
<string name="today" msgid="8041090779381781781">"Vandag"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Vandag om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Môre om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Titellose geleentheid)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Stel"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Kitsboodskappe"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Webwerf"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Geleentheid"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Verwantskap"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Rekening"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-pos"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Foon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om kontakredakteur uit te vou."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om kontakredakteur in te vou."</string>
<string name="content_description_directions" msgid="2686791825798189335">"rigtingaanwysings na ligging"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"onlangse SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om te reageer"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"onlangse SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om te reageer"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"inkomend"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"uitgaande"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"gemis"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"onlangse oproep. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om terug te bel"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"onlangse oproep. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om terug te bel"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Jy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts werk beter as jy die persoon se Hangouts-identifiseerder in die e-posveld of foonveld invoer."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Meer velde"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Verander foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kon nie redigeer oopmaak nie."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Stoor na"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Stoor tans na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om \'n ander rekening te kies."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Geskakelde kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Geskakelde kontak</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> geskakelde kontakte"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Meer velde"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Verander kontakfoto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Voeg kontakfoto by"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontakfoto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Kon nie redigeerder oopmaak nie."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Stoor tans na"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontakinligting vanaf <xliff:g id="ACCOUNT">%s</xliff:g> kan nie gewysig word nie"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KOPPEL KONTAKTE"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KANSELLEER"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> moontlike duplikate</item>
- <item quantity="one">1 moontlike duplikaat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gekoppelde kontakte</item>
- <item quantity="one">1 gekoppelde kontak</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Hierdie kontak"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Moontlike duplikate"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Hierdie kontakte kan dalk dieselfde persoon wees. Jy kan hulle as \'n enkele kontak koppel."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Saamgevoegde kontakte"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Van jou rekeninge af"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Neem \'n foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alle foto\'s"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Kies foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Van <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Vee <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> uit"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Vee <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> uit"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Vee <xliff:g id="DATA_KIND">%s</xliff:g> uit"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> af is nie gemerk nie"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> af is gemerk"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto van onbekende rekening af is nie gemerk nie"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto van onbekende rekening af is gemerk"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaklys word tans opgedateer om die taalverandering te weerspieël.\n\nWag asseblief..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Voorstelle"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuut"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Maak navigasielaai oop"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Maak navigasielaai toe"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g>-etiket"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etikette"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Rekeninge"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Sien jou geskiedenis saam"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Geleenthede en boodskappe"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Geleenthede"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Boodskappe"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Voorstelle"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Hou jou kontakte georganiseerd en nuttig"</string>
+ <string name="undo" msgid="1425165101664071422">"Ontdoen"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Bel <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Bel tuis"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Bel selfoon"</string>
+ <string name="call_work" msgid="5328785911463744028">"Bel werk"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Bel werkfaks"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Bel huisfaks"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Bel roeper"</string>
+ <string name="call_other" msgid="8563753966926932052">"Bel"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Bel - terugbel"</string>
+ <string name="call_car" msgid="3280537320306436445">"Bel motor"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Bel maatskappy, hoof"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Bel ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Bel hoof"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Bel faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Bel radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Bel teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Oproep-TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Bel werkselfoon"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Bel werkroeper"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Bel <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Bel MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Bel)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"SMS <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Teks - tuis"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Teks - selfoon"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Teks - werk"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Teks - werkfaks"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Teks - huisfaks"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Teks - roeper"</string>
+ <string name="sms_other" msgid="806127844607642331">"Teks"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Teks-terugbel"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Teks - motor"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Teks - maatskappy, hoof"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Teks - ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Teks - hoof"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Teksfaks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Teks - radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Teks - teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Teks - TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Teks - werkselfoon"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Teks - werkroeper"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Teks <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Teks - MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Boodskap)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Maak video-oproep"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vee dikwels-gebruikte kontakte uit?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Jy gaan die lys van dikwels gebruikte kontakte in die Kontakte- en Foon-program uitvee en e-posprogramme dwing om jou adresvoorkeure van nuuts af te leer."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Vee tans dikwels-gebruikte kontakte uit..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Beskikbaar"</string>
+ <string name="status_away" msgid="1838861100379804730">"Weg"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Besig"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Ander"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Gids"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Werkgids"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alle kontakte"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Vinnige kontak vir <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Geen naam nie)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gereeld gekontak"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alle kontakte met telefoonnommers"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Werkprofielkontakte"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Sien opdaterings"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Toestel"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Bynaam"</string>
+ <string name="name_given" msgid="4280790853455320619">"Voornaam"</string>
+ <string name="name_family" msgid="7466985689626017037">"Van"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Naamvoorvoegsel"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Middelnaam"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Naamagtervoegsel"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetiese naam"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetiese voornaam"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetiese middelnaam"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetiese van"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Foon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pos"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adres"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisasie"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Verhouding"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Spesiale datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Teksboodskap"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adres"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Maatskappy"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notas"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Gepasmaak"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Webwerf"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etikette"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-postuis"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-pos - mobiel"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-pos - werk"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-pos"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-pos <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-pos"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Straat"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Stad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Deelstaat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poskode"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Sien huisadres"</string>
+ <string name="map_work" msgid="1360474076921878088">"Sien werkadres"</string>
+ <string name="map_other" msgid="3817820803587012641">"Sien adres"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Bekyk <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-adres"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Klets met AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Klets met Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Klets met Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Klets met Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Klets met QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Klets met Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Klets met ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Klets met Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Klets"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"vee uit"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Wys nog naamvelde"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Vou naamvelde in"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Wys nog fonetiese naamvelde"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Vou fonetiese naamvelde in"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Vou uit"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Vou in"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Uitgevou"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ingevou"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontakte"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Gester"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Pasmaak"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontak"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alle ander kontakte"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alle kontakte"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Verwyder sinkroniseergroep"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Voeg sinkroniseergroep by"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Meer groepe..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"As jy \'<xliff:g id="GROUP">%s</xliff:g>\' uit sinkronisering verwyder, sal dit ook enige ongegroepeerde kontakte uit sinkronisering verwyder."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Stoor tans vertoonopsies..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Gepasmaakte aansig"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Stoor ingevoerde kontakte na:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kaart"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakte</item>
+ <item quantity="one">1 kontak</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakte • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontak • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-lêer"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Niks om in te voer nie"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Voer kontakte vanaf vCard in?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kanselleer invoer van <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselleer uitvoer van <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kon nie vCard invoer/uitvoer kanselleer nie"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Onbekende fout"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kon nie \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" open nie: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kon nie die uitvoerder aktiveer nie: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Daar is geen uitvoerbare kontak nie."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Jy het \'n vereiste toestemming gedeaktiveer."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"\'n Fout het voorgekom tydens uitvoer: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"T/A-fout"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nie genoeg geheue nie. Die lêer is dalk te groot."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Die formaat word nie ondersteun nie."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Het <xliff:g id="FILENAME">%s</xliff:g> klaar uitgevoer."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Het kontakte klaar uitgevoer."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakte is klaar uitgevoer; klik die kennisgewing om kontakte te deel."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tik om kontakte te deel."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Uitvoer van <xliff:g id="FILENAME">%s</xliff:g> is gekanselleer."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Voer kontakdata uit"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakdata word tans uitgevoer."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kon nie databasis-inligting kry nie"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Daar is geen uitvoerbare kontakte nie."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Die vCard-opsteller het nie behoorlik begin nie."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kon nie uitvoer nie"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Die kontakdata is nie uitgevoer nie.\nRede: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Voer <xliff:g id="NAME">%s</xliff:g> in"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kon nie vCard-data lees nie"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Klaar met invoer van vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Invoer van <xliff:g id="FILENAME">%s</xliff:g> gekanselleer"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> sal binnekort ingevoer word."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Die lêer sal binnekort ingevoer word."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-invoerversoek is verwerp. Probeer asseblief later weer."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakte sal binnekort uitgevoer word."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-uitvoerversoek is verwerp. Probeer asseblief later."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontak"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Kas van vCard(s) na die die plaaslike tydelike stoor. Die werklike invoer sal binnekort begin."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Kon nie vCard invoer nie."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontak ontvang via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Kas tans..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Voer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> in: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Voer uit na .vcf-lêer"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rangskik volgens"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetiese naam"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Wys altyd"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Versteek indien leeg"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Voornaam"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Van"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Naamformaat"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Voornaam eerste"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Van eerste"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Rekeninge"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Verstekrekening vir nuwe kontakte"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"My inligting"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Stel jou profiel op"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Meer oor Kontakte"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Deel gunstelingkontakte"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Deel alle kontakte"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kon nie kontakte deel nie."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Voer kontakte uit"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Voer kontakte in vanaf"</string>
+ <string name="share_error" msgid="948429331673358107">"Hierdie kontak kan nie gedeel word nie."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Daar is geen kontakte om te deel nie."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte om te wys"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte om te wys"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Pasmaak aansig"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Stoor"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Deursoek kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gunstelinge"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Voer in"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Voer uit"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nommers"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"hou op soek"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Vee soektog uit"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Rekening"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Gebruik dit altyd vir oproepe"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Bel met \'n nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Tik \'n nota om saam met oproep te stuur …"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"STUUR EN BEL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Bouweergawe"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Oopbronlisensies"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lisensiebesonderhede vir oopbronsagteware"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privaatheidsbeleid"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Diensbepalings"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Oopbronlisensies"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Kon nie die URL oopmaak nie."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> is gemerk"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> is nie gemerk nie"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Maak video-oproep"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Vee uit"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> s."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> uur <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Hierdie kortpad is gedeaktiveer."</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontak is verwyder"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Voer in"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kies kontakte"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Geen kontakte op jou SIM-kaart nie"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontak bestaan reeds in jou lys"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-kontakte ingevoer</item>
+ <item quantity="one">1 SIM-kontak ingevoer</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kon nie SIM-kontakte invoer nie"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Voer in vanaf SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Kanselleer"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Outo-sinkronisering is af. Tik om aan te skakel."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Weier"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Rekeningsinkronisering is af. Tik om aan te skakel."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Skakel outosinkronisering aan?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Veranderinge wat jy aan alle programme en rekeninge maak, nie net Google Kontakte nie, sal tussen die web en jou toestelle op datum gehou word."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Skakel aan"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Geen verbinding nie"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Wys meer"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Klaar SIM-kaart ingevoer"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Kon nie invoer nie"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kon nie kontakte vanaf SIM-kaart invoer nie"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Voer tans SIM in"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Kennisgewings"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 7b3a3ed2d..0a29b4fef 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"ዕውቂያዎች"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"ዕውቂያዎች"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"ዕውቂያ ይመልከቱ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"እውቂያን ያርትዑ"</string>
<string name="contactsList" msgid="8661624236494819731">"እውቅያዎች"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"እውቅያ አክል"</string>
<string name="shortcutContact" msgid="749243779392912958">"እውቅያ"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"ቀጥታ ደውል"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"ቀጥታ መልዕክት"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"የዕውቂያ አቋራጭ ምረጥ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ለመደወል ቁጥር ምረጥ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"መልዕክትለመላክ ቁጥር ምረጥ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"እውቂያ ምረጥ"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ወደ ዕውቂያ አክል"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"ዕውቅያ ምረጥ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ይምረጡ"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"አዲስ እውቂያ ይፍጠሩ"</string>
- <string name="starredList" msgid="4817256136413959463">"ኮከብ የተደረገባቸው"</string>
- <string name="frequentList" msgid="7154768136473953056">"ተደጋጋሚ"</string>
- <string name="strequentList" msgid="5640192862059373511">"ተወዳጆች"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"የእውቅያ ዝርዝሮች"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ዕውቅያ አርትዕ"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ዕውቅያ ፍጠር"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ቡድን አርትዕ"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ቡድን ፍጠር"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"ስለ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"ማዘመኛ"</string>
<string name="searchHint" msgid="8482945356247760701">"ዕውቅያዎችን ፈልግ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"ዕውቂያ ዕይ"</string>
<string name="menu_addStar" msgid="2908478235715404876">"ወደ ተወዳጅ አክል"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"ከተወዳጆች አስወግድ"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"ከተወዳጆች ውስጥ ተወግዷል"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"አርትዕ"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"ሰርዝ"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"ፎቶ ለውጥ"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"መነሻ የማያ ገጽ ላይ አስቀምጥ"</string>
- <string name="menu_call" msgid="3992595586042260618">"የጥሪ ዕውቂያ"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ዕውቂያ ፃፍ"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"አቋራጭ ፍጠር"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"ግንኙነት አቋርጥ"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"አርትዕ"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ሰርዝ"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"እውቅያ ያክሉ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ቡድን ያክሉ"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"ዕውቂያዎችን ያስወግዱ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"መሰየሚያውን ዳግም ሰይም"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"መሰየሚያውን ሰርዝ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"እውቂያ ያክሉ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"እውቂያዎች ምረጥ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"እውቂያዎችን አክል"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ከመሰየሚያ አስወግድ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"መሰየሚያ ፍጠር"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"ይህ እውቂያ ከብዙ እውቂያዎች ጋር ያለውን ግንኙነት ይቋረጥ?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ግንኙነት አቋርጥ"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ቀድሞውኑ ያደረጉዋቸውን ለውጦች ማስቀመጥ እና ይህን እውቂያ ከብዙ እውቂያዎች ጋር የነበረውን ግንኙነት ማቋረጥ ይፈልጋሉ?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"አስቀምጥ እና ግንኙነቱን አቋርጥ"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"አስቀድመው ያደረጉዋቸውን ለውጦች ማስቀመጥ እና ከተመረጠው እውቂያ ጋር ማገናኘት ይፈልጋሉ?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"አስቀምጥ እና አገናኝ"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"በማገናኘት ላይ..."</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"በማለያየት ላይ..."</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"አገናኝ"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"የተገናኙ እውቂያዎችን ይመልከቱ"</string>
<string name="menu_save" msgid="1727844363591825909">"አስቀምጥ"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"ዕውቂያዎችን አገናኝ"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ከ<xliff:g id="NAME">%s</xliff:g> ጋር ሊያገናኙት የሚፈለጉት እውቂያ ይምረጡ፦"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ሁሉንም ዕውቂያዎች አሳይ"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"አስተያየት የተሰጠባቸው እውቅያዎች"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ሁሉም እውቅያዎች"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ተገናኝቷል"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"ዕውቂያዎች ተገናኝተዋል"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ተሰርዟል"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> እና<xliff:g id="NAME_1">%2$s</xliff:g> ተሰርዝዋል"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>፣ <xliff:g id="NAME_1">%2$s</xliff:g>፣ <xliff:g id="NAME_2">%3$s</xliff:g>… ተሰርዘዋል"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">እውቂያዎች ተሰርዘዋል</item>
<item quantity="other">እውቂያዎች ተሰርዘዋል</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> እውቂያዎች</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> እውቂያዎች</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"ከGoogle"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"ከ<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"የጥሪ ድምፅ አዘጋጅ"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ሁሉንም ጥሪዎች ወደ ድምፅ መልዕክት"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ከተነባቢ-ብቻ መለያዎች እውቂያዎች ሊሰረዙ አይችሉም ሆኖም ግን ሊደበቁ ይችላሉ።"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ደብቅ"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"የሚሰረዘው እውቂያ ከብዙ መለያዎች ላይ ዝርዝሮች አለው። ከተነባቢ-ብቻ መለያዎች የሆኑ ዝርዝሮች ይደበቃሉ፣ አይሰረዙም።"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ማገናኘትን ለማከናወን ቢያንስ ሁለት እውቂያዎችን መምረጥ አለብዎት።"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"የተመረጡ እውቂያዎች ይገናኙ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"አገናኝ"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ወደ ድምጽ መልዕክት አስተላልፍ"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ወደ ድምጽ መልዕክት መተላለፍን አስቀር"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ይህ እውቂያ ተበባቢ-ብቻ ነው። መሰረዝ አይችልም። ነገር ግን ሊደብቁት ይችላሉ።"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"እውቂያ ደብቅ"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"በዚህ እውቂያ ውስጥ ያሉ ተነባቢ-ብቻ መለያዎች ይደበቃሉ፣ ወይም ይሰረዛሉ።"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"ይህ እውቂያ ይሰረዝ?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"የተመረጡ እውቂያዎች ይሰረዙ?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ከተነባቢ-ብቻ መለያዎች እውቂያዎች ሊሰረዙ አይችሉም ሆኖም ግን ሊደበቁ ይችላሉ።"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ይህን እውቂያ መሰረዝ ከብዙ መለያዎች ውስጥ መረጃ ይሰርዛል።"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"ይህ እውቂያ ይሰረዝ?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ሰርዝ"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ለውጦችን ጣለው"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"ዕውቅያው የለም።"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"እውቂያ ወደ መነሻ ማያ ገጽ ታክሏል።"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ወደ መነሻ ማያ ገጽ ታክሏል።"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"አዲስ ዕውቂያ ፍጠር"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"አዲስ እውቂያ ፍጠር"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"መስርያ ቤት"</item>
- <item msgid="7196592230748086755">"ማስታወሻ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"በጡባዊው ላይ ምንም ምስሎች የሉም።"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"በስልኩ ላይ ምንም ፎቶዎች የሉም።"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"በመሣሪያው ላይ ፎቶዎች የሉም።"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"የዕውቂያ ፎቶ"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"ብጁ መሰየሚያ ስም"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ጥሪዎችን በቀጥታ ወደ ድምፅ መልዕክት ላክ"</string>
<string name="removePhoto" msgid="4898105274130284565">"ፎቶ አስወግድ"</string>
- <string name="noContacts" msgid="4955659076981974652">"እውቅያዎች የሉም"</string>
- <string name="noGroups" msgid="8614664663561385253">"ምንም ቡድኖች የሉም።"</string>
- <string name="noAccounts" msgid="7768267764545265909">"ቡድኖች ለመፍጠር መለያ ያስፈልግሃል፡፡"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ምንም ሰዎች በዚህ ቡድን ውሰጥ፡፡"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"አንዳንድ ለማከል፣ ቡድኑን አርትዕ፡፡"</string>
- <string name="savingContact" msgid="4075751076741924939">"ዕውቂያ በማስቀመጥ ላይ..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"የእውቂያዎች ዝርዝርዎ ባዶ ነው"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ይህ መሰየሚያ ያላቸው ምንም እውቂያዎች የሉም"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"በዚህ መለያ ውስጥ ምንም እውቂያዎች የሉም።"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"የእውቂያዎች ዝርዝርዎ ባዶ ነው"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ተቀምጧል"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"ዕውቂያ ተቀምጧል"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"የእውቂያዎች ግንኙነት ተላቅቋል"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"የእውቂያ ለውጦች ማስቀመጥ አልተቻለም::"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"እውቂያውን ማገናኘት አልተቻለም።"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"እውቂያን ማስቀመጥ ላይ ስህተት።"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"የእውቂያ ፎቶ ለውጦችን ማስቀመጥ አልተቻለም።"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ቡድን ተቀምጧል።"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"የቡድን ለውጦች ማስቀመጥ አልተቻለም::"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ዕውቂያዎች ከስልክ ቁጥሮች ጋር</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ከስልክ ቁጥር ጋር የሚታዩ ዕውቂያዎች የሉም"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"የእውቂያ ለውጦችን ማስቀመጥ አልተቻለም"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"እውቂያን ማላቀቅ አልተቻለም"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"እውቂያውን ማገናኘት አልተቻለም"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"እውቂያን ለማስቀመጥ ችግር አጋጥሟል"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"የእውቂያ ፎቶ ለውጦችን ማስቀመጥ አልተቻለም"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"መሰየሚያ መጫን አልተሳካም"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"መሰየሚያ ተሰርዟል"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"መሰየሚያ ተፈጥሯል"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"መለያ መፍጠር አልቻለም"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"መሰየሚያ ዘምኗል"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ከመሰየሚያ ተወግዷል"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ወደ ስያሜ ታክሏል"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"የመሰየሚያ ለውጦችን ማስቀመጥ አልተቻለም።"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ያ መሰየሚያ ቀድሞ አለ።"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"የተወሰኑ እውቂያዎች ኢሜይል የላቸውም።"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"የተወሰኑ እውቂያዎች የስልክ ቁጥር የላቸውም።"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ኢሜይል ላክ"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"መልዕክት ላክ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"እውቅያዎችን ምረጥ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ላክ"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"እውቅያዎች የሉም"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ተገኝቷል</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ሁሉም"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ተወዳጆች"</string>
- <string name="callBack" msgid="5498224409038809224">"የኋላ ጥሪ"</string>
- <string name="callAgain" msgid="3197312117049874778">"እንደገና ደውል"</string>
- <string name="returnCall" msgid="8171961914203617813">"ጥሪ መልስ"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> ወደ እውቅያዎች ዝርዝር ይታከል"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"የዕውቂያ ፎቶ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ተጨማሪ"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ከ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> እውቂያዎች"</string>
<string name="search_settings_description" msgid="2675223022992445813">"የዕውቂያዎችዎ ስሞች"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ይህን እርምጃ ለማስተናገድ ምንም መተግበሪያ አልተገኘም፡፡"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ወደ ቀዳሚው ማያ ገጽ ለመመለስ ጠቅ ያድርጉ"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"የስልክ ቁጥር ያክሉ"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"ኢሜይል ያክሉ"</string>
<string name="missing_app" msgid="1466111003546611387">"ይህን እርምጃ የሚያከናውን ምንም መተግበሪያ አልተገኘም።"</string>
<string name="menu_share" msgid="943789700636542260">"መጋሪያ"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"ወደ እውቂያዎች ያክሉ"</string>
- <string name="share_via" msgid="563121028023030093">"ዕውቂያበ በኩል አጋራ"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"በመለያ ስር ቡድን ፍጠር"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"አክል"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">ዕውቂያ በማን በኩል ይጋራ</item>
+ <item quantity="other">ዕውቂያ በማን በኩል ይጋራ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"መለያ ይምረጡ"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"መሰየሚያ ይፍጠሩ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"መሰየሚያውን ዳግም ሰይም"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"የመሰየሚያው ስም"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"የመሰየሚያው ስም"</string>
<string name="audio_chat" msgid="2535716629358298691">"የድምፅ ውይይት"</string>
<string name="video_chat" msgid="1872255818640336072">"የቪዲዮ ውይይት"</string>
- <string name="connections" msgid="8098440723172028350">"ተያያዦች"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"ተያያዥ አክል"</string>
- <string name="recent" msgid="2659189233141493004">"የቅርብ ጊዜ"</string>
- <string name="recent_updates" msgid="4267258535615860710">"የቅርብ ጊዜ አዘምን"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> እውቅያ"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"የ<xliff:g id="SOURCE">%1$s</xliff:g> መለያ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ከዚህ መተግበሪያ አርትዕ ሊደረግ አይችልም፡፡"</string>
- <string name="group_read_only" msgid="1061762906115697637">"በዚህ መሣሪያ ላይ አርትዕ መደረግ የሚችል አይደለም።"</string>
<string name="take_photo" msgid="7496128293167402354">"ፎቶ አንሳ"</string>
<string name="take_new_photo" msgid="7341354729436576304">"አዲስ ፎቶ አንሳ"</string>
<string name="pick_photo" msgid="2129509985223564942">"ፎቶ ምረጥ"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"አዲስ ፎቶ ይምረጡ"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"የዕውቂያ ዝርዝር ዘምኗል"</string>
<string name="search_results_searching" msgid="3984833028938569930">"በመፈለግ ላይ…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"የተመረጡትን አሳይ"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"ሁሉንም አሳይ"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ሁሉንም ምረጥ"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ሁሉንም አትምረጥ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"አዲስ አክል"</string>
- <string name="add_organization" msgid="7311893231158291197">"ድርጅት አክል"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"ቀን"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"የቡድን ስም"</string>
- <string name="change_photo" msgid="8530597935483526383">"ቀይር"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ዋና ፎቶ"</string>
- <string name="description_star" msgid="2605854427360036550">"ተወዳጅ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"እውቅያ አርትዕ"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"የአሁኑ ዕውቂያ ከተመረጠው ዕውቂያ ጋር ይገናኝ?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"መሰየሚያ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ይቅር"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ተመለስ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ዝጋ"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"የተመረጠው ዕውቂያ ወደ አርትዕ ይቀየር? እስከ አሁን ያስገቡት መረጃ ይገለበጣል።"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ወደ ዕውቂያዎቼ ቅዳ"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ወደ እኔ ዕውቂያዎች አክል"</string>
<string name="contact_directory_description" msgid="683398073603909119">"ማውጫ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ብጁ"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"ቅንብሮች"</string>
<string name="menu_settings" msgid="377929915873428211">"ቅንብሮች"</string>
<string name="menu_help" msgid="1680178646764069976">"እገዛ እና ግብረመልስ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ማሳያ አማራጮች"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>፣ <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"ስልክ ቁጥር:"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ወደ ዕውቂያዎች አክል"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"ወደ ዕውቂያዎች አክል"</string>
<string name="non_phone_close" msgid="7608506439725515667">"ዝጋ"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"ዓመት ያክሉ"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"እውቅያ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"በመስቀል ላይ…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"አዲስ ዕውቂያ ፍጠር"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"መለያ አክል"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"እውቅያዎችን ከውጭ አስመጣ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"አዲስ ቡድን ፍጠር"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"አዲስ ቡድን ፍጠር"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ቡድኖች</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ቡድኖች</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' ቡድን ይሰረዝ? (ዕውቂያዎች ራሳቸው አይሰረዙም።)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ሰዎች ከ<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ሰዎች ከ<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ሰዎች</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ሰዎች</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"አምጣ"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"አዲስ ፍጠር…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (መሰየሚያው ይሰረዝ? (ዕውቂያዎች ራሳቸው አይሰረዙም።)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ሌላ ዕውቂያ ከማገናኘትዎ በፊት የዕውቂያ ስም ይተይቡ።"</string>
<string name="copy_text" msgid="3257145021583508761">"ወደ ቅንጥብ ሰሌዳ ገልብጥ"</string>
<string name="set_default" msgid="4417505153468300351">"ነባሪ አዘጋጅ"</string>
<string name="clear_default" msgid="7193185801596678067">"ነባሪ አጽዳ"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"ፅሁፍ ገልብጧል"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ለውጦችዎ ይወገዱ እና ማርትዕ ይቁም?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ለውጦች ይወገዱ?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"አስወግድ"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"አርትዖቱን ቀጥል"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"መገለጫዬን አዘጋጅ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"የግለሰቡን ስም ተይብ"</string>
- <string name="group_name_hint" msgid="238359485263401293">"የቡድኑ ስም"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ተወው"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ብጁዎች ይወገዱ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"እውቅያዎችን ፈልግ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"ዕውቂያዎችን ያስወግዱ"</string>
<string name="local_profile_title" msgid="2021416826991393684">"በአካባቢው ምንም መገለጫ የለም"</string>
<string name="external_profile_title" msgid="8034998767621359438">"የእኔ የ<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> መገለጫ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ሁሉንም ዕውቂያዎች በማሳየት ላይ"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"ስልክህ ቢጠፋብህ እንኳን ዕውቂያዎችህን ደህንነታቸው እንደተጠበቀ እንዲቆዩ አድርግ ከመስመር ላይ አገልገሎት ጋር አመሳስለው::"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"መለያ አክል"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"አዲሱ ዕውቅያ ምትክ አይቀመጥለትም:: በመስመር ላይ ዕውቅያዎች በምትክ የሚያስቀምጥ መለያ አክል?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ለእውቂያዎችዎ ወደ Google ምትክ የሚያስቀምጥ መለያ ለማከል አንድ ደቂቃ ይውሰዱ።"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"አዲስ እውቂያዎች ወደ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ይቀመጣሉ።"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ለአዲስ እውቂያዎች ነባሪ መለያን ይምረጡ፦"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"አዲስ እውቂያ ያክሉ"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"አዲስ እውቂያ ፍጠር"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"እውቂያ ያርትዑ"</string>
- <string name="keep_local" msgid="1258761699192993322">"በአካባቢው አቆይ"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ለእይታ ብቻ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"አርትዕ ሊያደርጉ የሚፈልጉትን እውቂያ ይምረጡ"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"የተገናኙ ዕውቂያዎች"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"አክል"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ግንኙነት አቋርጥ"</string>
<string name="add_account" msgid="8201790677994503186">"መለያ አክል"</string>
<string name="add_new_account" msgid="5748627740680940264">"አዲስ መለያ አክል"</string>
<string name="menu_export_database" msgid="2659719297530170820">"የውሂብ ጎታ ፋይሎችን ወደ ውጭ ላክ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"አዲስ እውቂያ ያክሉ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"አዲስ እውቂያ ፍጠር"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ተጨማሪ ይመልከቱ"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ያነሰ ይመልከቱ"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ሁሉንም ይመልከቱ"</string>
<string name="recent_card_title" msgid="8982782042698001695">"የቅርብ ጊዜ"</string>
<string name="about_card_title" msgid="2920942314212825637">"ስለ"</string>
- <string name="send_message" msgid="8938418965550543196">"መልዕክት ላክ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"የግል ቅጂ በመፍጠር ላይ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ትላንት"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"የግል ቅጂ በመፍጠር ላይ..."</string>
<string name="tomorrow" msgid="6241969467795308581">"ነገ"</string>
<string name="today" msgid="8041090779381781781">"ዛሬ"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"ዛሬ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ላይ"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ነገ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ላይ"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>፣ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>፣ <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(ርዕስ-አልባ ክስተት)"</string>
<string name="date_time_set" msgid="4761419824439606690">"አዘጋጅ"</string>
<string name="header_im_entry" msgid="3581720979640225615">"ፈጣን መልዕክት"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"ድር ጣቢያ"</string>
<string name="header_event_entry" msgid="6738250422744401460">"ክስተት"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"ዝምድና"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"መለያ"</string>
<string name="header_name_entry" msgid="1592791008096288306">"ስም"</string>
<string name="header_email_entry" msgid="8666093061171624478">"ኢሜይል"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"ስልክ"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ፎተግራፍ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"የእውቂያ አርታዒን ለመዘርጋት ጠቅ ያድርጉ።"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"የእውቂያ አርታዒን ለመሰብሰብ ጠቅ ያድርጉ።"</string>
<string name="content_description_directions" msgid="2686791825798189335">"ወደ አካባቢ የሚወስዱ አቅጣጫዎች"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"የቅርብ ጊዜ ኤስኤምኤስ። <xliff:g id="MESSAGE_BODY">%s</xliff:g>። <xliff:g id="PHONE_NUMBER">%s</xliff:g>። <xliff:g id="DATE">%s</xliff:g>። ምላሽ ለመስጠት ጠቅ ያድርጉ"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"የቅርብ ጊዜ ኤስኤምኤስ። <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>። <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>። <xliff:g id="DATE">%3$s</xliff:g>። ምላሽ ለመስጠት ጠቅ ያድርጉ"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ገቢ"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ወጪ"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ያመለጡ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"የቅርብ ጊዜ ጥሪ። <xliff:g id="CALL_TYPE">%s</xliff:g>። <xliff:g id="PHONE_NUMBER">%s</xliff:g>። <xliff:g id="DATE">%s</xliff:g>። መልሰው ለመደወል ጠቅ ያድርጉ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"የቅርብ ጊዜ ጥሪ። <xliff:g id="CALL_TYPE">%1$s</xliff:g>። <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>። <xliff:g id="DATE">%3$s</xliff:g>። መልሰው ለመደወል ጠቅ ያድርጉ"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"እርስዎ፦ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"የግለሰቡን የHangouts ለይቶ አዋቂ ወደ ኢሜይል መስኩ ወይም የስልክ መስኩ በሚያስገቡበት ጊዜ Hangouts በተሻለ ሁኔታ ይሰራል።"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ተጨማሪ መስኮች"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ፎቶ ለውጥ"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"አርታዒውን መክፈት አልተሳካም።"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ወደዚህ በማስቀመጥ ላይ፦"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"አሁን ላይ ወደ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> በማስቀመጥ ላይ። ሌላ መለያ ለመምረጥ ሁለቴ መታ ያድርጉ።"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">የተገናኙ እውቂያዎች (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">የተገናኙ እውቂያዎች (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ተጨማሪ መስኮች"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"የእውቂያ ፎቶ ለውጥ"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"የእውቂያ ፎቶ አክል"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"የዕውቂያ ፎቶ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"አርታዒውን መክፈት አልተሳካም።"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"በማስቀመጥ ላይ ወደ፦"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ከ<xliff:g id="ACCOUNT">%s</xliff:g> የተገኘው የእውቂያ መረጃ አርትዕ መደረግ አይችልም"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ዕውቂያዎችን አገናኝ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ይቅር"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> የተደገሙ ሊሆኑ የሚችሉ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የተደገሙ ሊሆኑ የሚችሉ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ይህ እውቂያ"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ሊሆኑ የሚችሉ ድግምግሞሽ"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"ይህ እውቂያ ተመሳሳይ ሰው ሊሆን ይችላል። እንደ ነጠላ እውቂያ በአንድ ላይ ሊያገናኙዋቸው ይችላሉ።"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"የተገናኙ ዕውቂያዎች"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ከእርስዎ መለያዎች"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ፎቶ አንሳ"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ሁሉም ፎቶዎች"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ፎቶ ይምረጡ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"ከ<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ን ሰርዝ"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ን ሰርዝ"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ን ሰርዝ"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ከ<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> የመጣ ፎቶ አልተረጋገጠም"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"ከ<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> የመጣ ፎቶ ተረጋግጧል"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ካልታወቀ መለያ የመጣ ፎቶ ምልክት አልተደረገበትም"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ካልታወቀ መለያ የመጣ ፎቶ ምልክት ተደርጎበታል"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"የእውቅያ ዝርዝር የቋንቋ ለውጥን ለማንፀባረቅ ዘምኗል።\n\nእባክዎ ይጠብቁ....."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"ጥቆማዎች"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"አዲስ"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"የአሰሳ መሣቢያውን ክፈት"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"የአሰሳ መሣቢያውን ዝጋ"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"የ<xliff:g id="LABEL_NAME">%s</xliff:g> መለያ"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"መሰየሚያዎች"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"መለያዎች"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ታሪክዎን አብረው ይመልከቱ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ኩነቶች እና መልዕክቶች"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ኩነቶች"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"መልእክቶች"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"ጥቆማዎች"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"እውቂያዎችዎን የተደራጁና ጠቃሚ እንደሆኑ ያቆዩ"</string>
+ <string name="undo" msgid="1425165101664071422">"ቀልብስ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"ጥሪ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">" መነሻጥሪ"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ተንቀሳቃሽ ስልክ ጥሪ"</string>
+ <string name="call_work" msgid="5328785911463744028">"የሥራ ጥሪ"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"የሥራ ጥሪ ፋክስ"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"የጥሪ መነሻፋክስ"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ምልክት ማድረጊያ ጥሪ"</string>
+ <string name="call_other" msgid="8563753966926932052">"ደውል"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ተዘዋዋሪ ጥሪ ደውል"</string>
+ <string name="call_car" msgid="3280537320306436445">"የመኪና ደውል"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"የጥሪ ኩባንያ ዋና"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN ጥሪ"</string>
+ <string name="call_main" msgid="6082900571803441339">"ዋና ጥሪ"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ፋክስ ደውል"</string>
+ <string name="call_radio" msgid="8296755876398357063">"የሬዲዮጥሪ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ቴሌክስጥሪ"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD ጥሪ"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ተንቀሳቃሽ ሥራ ስልክደውል"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"የሥራ ጥሪ ምልክት ማድረጊያ"</string>
+ <string name="call_assistant" msgid="670941612175068337">"ጥሪ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ጥሪ"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ጥሪ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ጽሁፍ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"የፅሁፍመነሻ"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"የ ተንቀሳቃሽፅሁፍ"</string>
+ <string name="sms_work" msgid="2269624156655267740">"የፅሁፍ ሥራ"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"የፅሁፍ ሥራፋክስ"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"የመነሻ ፅሁፍ ፋክስ"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"የፅሁፍ ምልክት ማድረጊያ"</string>
+ <string name="sms_other" msgid="806127844607642331">"ፅሁፍ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"የተዘዋዋሪ ጥሪ ፅሁፍ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"የፅሁፍ ማሽን"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"የኩባንያ ዋናፅሁፍ"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"የ ISDN ፅሁፍ"</string>
+ <string name="sms_main" msgid="8621625784504541679">"የዋና ፅሁፍ"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"የፋክስ ፅሁፍ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"የፅሁፍ ሬዲዮ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"የፅሁፍ ቴሌክስ"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD ፅሁፍ"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"የፅሁፍ ሥራ ተንቀሳቃሽ"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"የፅሁፍ ሥራ ምልክት ማድረጊያ"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"ፅሁፍ <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"የMMS ፅሁፍ"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (መልዕክት)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"የቪዲዮ ጥሪ ያድርጉ"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"በተደጋጋሚ ያገኝዋቸው ይጽዱ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"በእውቂያዎች እና በስልክ መተግበሪያዎች ውስጥ በተደጋጋሚ ያገኟቸውን እውቂያዎች ዝርዝር አጽድተው የኢሜይል መተግበሪያዎች የአድራሻ አያያዝ ምርጫዎችዎን ከባዶ ተነስተው እንዲያውቁ ያስገድዱዋቸዋል።"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"በተደጋጋሚ ያገኘሃቸውን በመጥረግ ላይ…"</string>
+ <string name="status_available" msgid="5586870015822828392">"የሚገኝ"</string>
+ <string name="status_away" msgid="1838861100379804730">"ወጣ ብሏል"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ተይዟ ል"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ሌላ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">" ማውጫ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"የሥራ ማውጫ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ሁሉም እውቅያዎች"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"ለ <xliff:g id="NAME">%1$s</xliff:g> ፈጣን ዕውቂያ"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ስም የለም)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"በተደጋጋሚ የሚገናኙ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"የስልክ ቁጥር ያላቸው ሁሉም ዕውቂያዎች"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"የሥራ መገለጫ ዕውቂያዎች"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"አዘምኖችን ዕይ"</string>
+ <string name="account_phone" msgid="7128032778471187553">"መሣሪያ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"ሲም"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ስም"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ቅጽል ስም"</string>
+ <string name="name_given" msgid="4280790853455320619">"የራስ ስም"</string>
+ <string name="name_family" msgid="7466985689626017037">"የአያት ስም"</string>
+ <string name="name_prefix" msgid="59756378548779822">"ቅድመ ስም"</string>
+ <string name="name_middle" msgid="8467433655992690326">"የአባት ስም"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"ድህረ ስም"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"የድምፀ ልሳን ስም"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"የራስ ስም በድምጸ-ልሳን"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"የድምፀ ልሳንመካከለኛ ስም"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"የአያት ስም በድምጸ-ልሳን"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ስልክ"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ኢሜይል"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"አድራሻ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"ፈጣን መልዕክቶች"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"መስርያ ቤት"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ግንኙነት"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"ልዩ እለት"</string>
+ <string name="sms" msgid="1756857139634224222">"የጽሑፍ መልዕክት"</string>
+ <string name="postal_address" msgid="8765560217149624536">"አድራሻ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ኩባንያ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"አርዕስት"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ማስታወሻዎች"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ብጁ"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"ኤስአይፒ"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ድረ ገፅ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"መሰየሚያዎች"</string>
+ <string name="email_home" msgid="8573740658148184279">"የኢሜይል መነሻ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ኢሜይል ተንቀሳቃሽ"</string>
+ <string name="email_work" msgid="2807430017302722689">"ኢሜይልሥራ"</string>
+ <string name="email_other" msgid="3454004077967657109">"ኢሜይል"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ኢሜይል <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"ኢሜይል"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ጎዳና"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ከተማ፡"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ክልል፡"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ዚፕ ኮድ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"አገር፡"</string>
+ <string name="map_home" msgid="1243547733423343982">"የመነሻ አድራሻ ዕይ"</string>
+ <string name="map_work" msgid="1360474076921878088">"የሥራ አድራሻ ዕይ"</string>
+ <string name="map_other" msgid="3817820803587012641">"አድራሻ እይ"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> አድራሻ ይመልከቱ"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"ጨዋታ AIM በመጠቀም"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"ጨዋታ Windows Live በመጠቀም"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ፣ውይይት በመጠቀም"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"ጨዋታ Skype በመጠቀም"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"ጨዋታ QQ በመጠቀም"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"የGoogle Talk በመጠቀም ጨዋታ"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ጨዋታ ICQ በመጠቀም"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"ጨዋታ Jabber በመጠቀም"</string>
+ <string name="chat" msgid="9025361898797412245">"ጨዋታ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ሰርዝ"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"ተጨማሪ መስኮችን አሳይ"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"የስም መስኮችን ይሰብስቡ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ተጨማሪ የፎነቲክ ስም መስኮችን አሳይ"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"የድምፀ-ልሳን የስም መስኮችን ይሰብስቡ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ይዘርጉ"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ይሰብስቡ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ተዘርግቷል"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ተሰብስቧል"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ሁሉም እውቅያዎች"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ኮከብ የተደረገባቸው"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"ብጁ አድርግ"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"እውቅያ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ሌላ ሁሉም ዕውቂያዎች"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ሁሉም እውቅያዎች"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"የአስምር ቡድን አስወግድ"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"አሳምርቡድንአክል"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"ተጨማሪቡድኖች..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\'<xliff:g id="GROUP">%s</xliff:g>\' ከአሳምር ማስወገድ እንዲሁ ማንኛውም በተነጣጥል ያሉ ዕውቅያዎችን ከአሳምር ያስወግዳል።"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ማሳያ አማራጮችን በማስቀመጥ ላይ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ብጁ እይታ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"እንዲመጡ የተደረጉ እውቂያዎችን አስቀምጥ ወደ፦"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ሲም ካርድ"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"ሲም <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d እውቂያዎች</item>
+ <item quantity="other">%1$d እውቂያዎች</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> እውቂያዎች • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> እውቂያዎች • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ፋይል"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ለማምጣት ምንም"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"እውቂያዎች ከvCard ይምጡ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"የ<xliff:g id="FILENAME">%s</xliff:g>ወደ ውስጥ ማስገባት ይቅር?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"የ<xliff:g id="FILENAME">%s</xliff:g> ወደ ውጭ መላክ ይቅር?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ማስመጣት/ወደ ውጪ መላክ ይቅር ማለት አልተቻለም"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"ያልታወቀ ስህተት"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ፡<xliff:g id="EXACT_REASON">%2$s</xliff:g> መክፈት አልተቻለም"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ላኪው፡\"<xliff:g id="EXACT_REASON">%s</xliff:g>\" ለማስነሳት አልተቻለም"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ምንም ወደ ውጭ መላክ የሚችል ዕውቂያ የለም"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"አንድ የሚያስፈልግ ፈቃድ አስወግደዋል።"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"በመላክ ጊዜስህተት ተከስቷል: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ስህተት"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"በቂ ማህደረ ትውስታ የለም፡፡ፋይሉ ምናልባት በጣም ትልቅ ይሆናል፡፡"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ቅርፀቱ አይታገዝም"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> መላክ ጨርሷል"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"እውቂያዎችን ወደ ውጪ መላክ ተጠናቅቋል።"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"እውቂያዎችን ወደ ውጭ መላክ ተጠናቅቋል፣ እውቂያዎችን ለማጋራት ማሳወቂያውን ጠቅ ያድርጉ።"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"እውቂያዎችን ለማጋራት መታ ያድርጉ።"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"መላክ <xliff:g id="FILENAME">%s</xliff:g> ተሰርዟል::"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"የዕውቂያ ውሂብ በመላክ ላይ"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"የእውቂያ ውሂብ ወደ ውጭ በመላክ ላይ ነው።"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ውሂብ ጎታ መረጃን ማግኘት አልተቻለም"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ወደ ውጭ የሚላኩ እውቅያዎች የሉም።"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"የ vCard አቀናባሪው በትክክል አልጀመረም::"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ወደ ውጭ መላክ አልተቻለም"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"የዕውቅያ ውሂብ ወደ ውጭ አልተላከም፡፡ \nምክንያት፡፡\"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ማስገባት"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ውሂብ ማንበብ አልተቻለም"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">" <xliff:g id="FILENAME">%s</xliff:g> vCard ማስመጣት ጨርሷል"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ማስመጣት ተሰርዞዋል"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ከአፍታ ቆይታ በኋላ ይመጣል።"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ፋይሉ ከአፍታ ቆይታ በኋላ ይመጣል።"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"የvCard ማስመጣት ጥየቃ ውድቅ ተደርጓል። እባክህ ትንሽ ቆይተህ ሞክር።"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"እውቂያዎች አሁን ወደ ውጭ ይላካሉ።"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"የvCard ላክ ጥየቃ ውድቅ ተደርጓል። እባክህ ትንሽ ቆይተህ ሞክር።"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"እውቅያ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"ወደ ጊዜያዊ ማከማቻ vCard(s) እየሸጎጠ ነው። ትክክለኛው አስመጣ በቅርቡ ይጀምራል።"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ማስመጣት አልተቻለም"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"በ NFC የደረሱ ዕውቂያዎች"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"በመሸጎጥ ላይ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"በማስገባት ላይ<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>፡<xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"ወደ .vcf ፋይል ላክ"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ደርድር በ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"የድምፀ ልሳን ስም"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ሁልጊዜ አሳይ"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ባዶ ከሆነ ደብቅ"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"የራስ ስም"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"የአያት ስም"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"የስም ቅርጸት"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"የራስ ስም መጀመሪያ"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"የአያት ስም መጀመሪያ"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"መለያዎች"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"ለአዲስ እውቂያዎች ነባሪ መለያ"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"የእኔ መረጃ"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"መገለጫዎን ያዘጋጁ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"ስለ ዕውቂያዎች"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ተወዳጅ እውቂያዎችን አጋራ"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ሁሉንም እውቂያዎች አጋራ"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"እውቂያዎችን ማጋራት አልተሳካም።"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"እውቅያዎች ወደ ውጭ ላክ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"እውቂያዎችን አምጣ ከ"</string>
+ <string name="share_error" msgid="948429331673358107">"ይህ ዕውቂያ መጋራት አይችልም።"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ምንም የሚጋሩ እውቂያዎች የሉም።"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ዕውቂያዎች አሳይ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ዕውቂያዎች አሳይ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ዕይታ አብጅ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"አስቀምጥ"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"እውቂያዎችን ይፈልጉ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ተወዳጆች"</string>
+ <string name="menu_import" msgid="6107961135813836467">"አምጣ"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ወደ ውጪ ላክ"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"የታገዱ ቁጥሮች"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"በ<xliff:g id="SOURCE">%1$s</xliff:g> በኩል"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>በ<xliff:g id="SOURCE">%2$s</xliff:g> በኩል"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"መፈለግ አቁም"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ፍለጋን አጽዳ"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"መለያ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ለጥሪዎች ሁልጊዜ ይህንን ተጠቀም"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ከማስታወሻ ጋር ደውል"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ከውይይት ጋር ለመላክ የማስታወሻ ጽሑፍ ይተይቡ…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ላክ እና ደውል"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"የግንብ ሥሪት"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"የክፍት ምንጭ ፈቃዶች"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ለክፍት ምንጭ ሶፍትዌሮች የፈቃድ ዝርዝሮች"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"የግላዊነት መመሪያ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"የአገልግሎት ውል"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"የክፍት ምንጭ ፈቃዶች"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"ዩ አር ኤሉን ለመክፈት አልተሳካም።"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ምልክት ተደርጎበታል"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ምልክት አልተደረገበትም"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"የቪዲዮ ጥሪ አስቀምጥ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ሰርዝ"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ሶስት ነጥብ"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%2$s</xliff:g> ሴ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ሰዓት <xliff:g id="MINUTES_1">%2$s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%3$s</xliff:g> ሴ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ይህ አቋራጭ ተወግዷል"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"እውቂያ ተወግዷል"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ከውጭ አምጣ"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"እውቂያዎችን ምረጥ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"በ ሲም ካርድዎ ላይ ዕውቂያዎች የሉም"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"እውቂያው ቀድሞም በዝርዝርዎ ውስጥ አለ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> የሲም እውቂያዎች መጥተዋል</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የሲም እውቂያዎች መጥተዋል</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"የሲም እውቂያዎችን ማምጣት አልተሳካም"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"ከሲም አምጣ"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ይቅር"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ራስሰር-አስምር ጠፍቷል። ለማብራት መታ ያድርጉ።"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"አሰናብት"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"መለያ አስምር ጠፍቷል። ለማብራት መታ ያድርጉ።"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"በራስ ማስመር ይብራ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"በGoogle እውቂያዎች ላይ ብቻ ሳይሆን፣ በሁሉም መተግበሪያዎች እና መለያዎች ላይ የሚያደርጓቸው ለውጦች፣ በድር እና በመሳሪያዎችዎ መካከል እንደዘመኑ ይቆያሉ።"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"አብራ"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ምንም ግንኙነት የለም"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"ሲም"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"ተጨማሪ አሳይ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"ሲም ካርድ ማምጣት ጨርሷል"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ማስመጣት አልተሳካም"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"ከ SIM ካርድ ዕውቂያዎች ማስመጣት አልተቻለም"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ሲም በማምጣት ላይ"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"ማሳወቂያዎች"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 183085fa3..ac6442546 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"جهات الاتصال"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"جهات الاتصال"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"عرض جهة الاتصال"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"تعديل جهة الاتصال"</string>
<string name="contactsList" msgid="8661624236494819731">"جهات الاتصال"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"إضافة جهة اتصال"</string>
<string name="shortcutContact" msgid="749243779392912958">"الاتصال بـ"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"طلب مباشر"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"رسالة مباشرة"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"اختيار اختصار لجهة الاتصال"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"اختيار رقم للاتصال به"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"اختيار رقم لإرسال رسالة له"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"اختيار جهة اتصال"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"إضافة إلى جهة اتصال"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"اختيار جهة اتصال"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"تحديد"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"إنشاء جهة اتصال جديدة"</string>
- <string name="starredList" msgid="4817256136413959463">"مميّزة بنجمة"</string>
- <string name="frequentList" msgid="7154768136473953056">"متكررة"</string>
- <string name="strequentList" msgid="5640192862059373511">"المفضلة"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"تفاصيل جهة الاتصال"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"تعديل جهة الاتصال"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"إنشاء جهة اتصال"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"تعديل المجموعة"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"إنشاء مجموعة"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"حول"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"التحديثات"</string>
<string name="searchHint" msgid="8482945356247760701">"البحث في جهات الاتصال"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"عرض جهة الاتصال"</string>
<string name="menu_addStar" msgid="2908478235715404876">"إضافة إلى المفضلة"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"إزالة من المفضلة"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"تمت الإزالة من المفضلة"</string>
@@ -49,28 +35,36 @@
<string name="menu_editContact" msgid="9042415603857662633">"تعديل"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"تغيير الصورة"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"وضع على الشاشة الرئيسية"</string>
- <string name="menu_call" msgid="3992595586042260618">"الاتصال بجهة الاتصال"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"إرسال رسالة لجهة الاتصال"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"إنشاء اختصار"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"إلغاء الربط"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"تعديل"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"حذف"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"إضافة جهة اتصال"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"إضافة مجموعة"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"إزالة جهات الاتصال"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"إعادة تسمية التصنيف"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"حذف التصنيف"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"إضافة جهة اتصال"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"تحديد جهات الاتصال"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"إضافة جهات اتصال"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"الإزالة من تصنيف"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"إنشاء تصنيف"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"هل تريد إلغاء ربط جهة الاتصال هذه إلى جهات اتصال متعددة؟"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"إلغاء الربط"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"هل تريد حفظ التغييرات التي أجريتها وإلغاء ربط جهة الاتصال هذه إلى جهات اتصال متعددة؟"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"حفظ وإلغاء الربط"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"هل تريد حفظ التغييرات التي أجريتها والربط بجهة الاتصال المحددة؟"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"حفظ وربط"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"الربط"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"إلغاء الربط"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"ربط"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"عرض جهات الاتصال المرتبطة"</string>
<string name="menu_save" msgid="1727844363591825909">"حفظ"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"ربط جهات الاتصال"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"اختر جهة الاتصال التي تريد ربطها بـ <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"عرض جميع جهات الاتصال"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"جهات الاتصال المقترحة"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"جميع جهات الاتصال"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> مرتبط"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"تم ربط جهات الاتصال"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"تم حذف <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"تم حذف <xliff:g id="NAME_0">%1$s</xliff:g> و<xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"تم حذف <xliff:g id="NAME_0">%1$s</xliff:g> و<xliff:g id="NAME_1">%2$s</xliff:g> و<xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="zero">تم حذف جهة الاتصال</item>
<item quantity="two">تم حذف جهتي الاتصال</item>
@@ -79,14 +73,30 @@
<item quantity="other">تم حذف جهات الاتصال</item>
<item quantity="one">تم حذف جهة الاتصال</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="zero">ليست هناك أية جهة اتصال (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
+ <item quantity="two">جهتا اتصال (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> جهات اتصال</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> جهة اتصال</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من جهات الاتصال</item>
+ <item quantity="one">جهة اتصال واحدة (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> جهتا اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> جهات اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"‏من Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"من <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"تعيين نغمة رنين"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"جميع المكالمات إلى البريد الصوتي"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"يتعذر حذف جهات الاتصال من حساباتك المخصصة للقراءة فقط، ولكن يمكن إخفاؤها."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"إخفاء"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"تتضمن جهة الاتصال التي تريد حذفها تفاصيل من حسابات متعددة. وسيتم إخفاء التفاصيل الواردة من الحسابات المخصصة للقراءة فقط، وليس حذفها."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"يجب تحديد جهتي اتصال على الأقل لإجراء الربط."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"هل تريد ربط جهات الاتصال المحددة؟"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"ربط"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"إرسال إلى البريد الصوتي"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"عدم إرسال إلى البريد الصوتي"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"جهة الاتصال هذه للقراءة فقط. لا يمكن حذفها، ولكن يمكنك إخفاؤها."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"إخفاء جهة الاتصال"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"سيتم فقط إخفاء حسابات القراءة فقط الموجودة في جهة الاتصال هذه، ولم يتم حذفها."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"هل تريد حذف جهة الاتصال هذه؟"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"هل تريد حذف جهات الاتصال المحددة؟"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"يتعذر حذف جهات الاتصال من حساباتك المخصصة للقراءة فقط، ولكن يمكن إخفاؤها."</string>
@@ -94,201 +104,128 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"سيؤدي حذف جهة الاتصال هذه إلى حذف تفاصيل من عدة حسابات."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"هل تريد حذف جهة الاتصال هذه؟"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف"</string>
- <string name="menu_discard" msgid="6854657936970228164">"إلغاء التغييرات"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"جهة الاتصال غير موجودة."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"تمت إضافة جهة الاتصال إلى الشاشة الرئيسية."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"تمت إضافة <xliff:g id="NAME">%s</xliff:g> إلى الشاشة الرئيسية."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"إنشاء جهة اتصال جديدة"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"إنشاء جهة اتصال جديدة"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"المؤسسة"</item>
- <item msgid="7196592230748086755">"ملاحظة"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ليس هناك صور متوفرة على الجهاز اللوحي."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"لا تتوفر أية صور على الهاتف."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"لا تتوفر أية صور على الهاتف."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"صورة جهة الاتصال"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"اسم تصنيف مخصص"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"إرسال المكالمات إلى البريد الصوتي مباشرة"</string>
<string name="removePhoto" msgid="4898105274130284565">"إزالة الصورة"</string>
- <string name="noContacts" msgid="4955659076981974652">"ليست هناك جهات اتصال"</string>
- <string name="noGroups" msgid="8614664663561385253">"لا توجد مجموعات."</string>
- <string name="noAccounts" msgid="7768267764545265909">"يجب توفير حساب لإنشاء مجموعات."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ليس هناك أشخاص في هذه المجموعة."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"لإضافة البعض، ابدأ في تعديل المجموعة."</string>
- <string name="savingContact" msgid="4075751076741924939">"جارٍ حفظ جهة الاتصال..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"قائمة جهات اتصالك فارغة"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"لا توجد جهات اتصال بهذه التسمية"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"لا توجد جهات اتصال في هذا الحساب"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"قائمة جهات اتصالك فارغة"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"تم حفظ <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"تم حفظ جهة الاتصال."</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"تم إلغاء ربط جهات الاتصال"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"تعذر حفظ التغييرات التي تم إجراؤها على جهة الاتصال."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"تعذر إلغاء ربط جهة الاتصال."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"تعذر ربط جهة الاتصال."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"حدث خطأ أثناء حفظ جهة الاتصال."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"تعذر حفظ تغييرات صورة جهة الاتصال."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"تم حفظ المجموعة."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"تعذر حفظ التغييرات التي تم إجراؤها على المجموعة."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="zero">لا توجد أية جهات اتصال بها أرقام هواتف (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">توجد جهتا اتصال (<xliff:g id="COUNT">%d</xliff:g>) بهما أرقام هواتف</item>
- <item quantity="few">توجد <xliff:g id="COUNT">%d</xliff:g> جهات اتصال بها أرقام هواتف</item>
- <item quantity="many">توجد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال بها أرقام هواتف</item>
- <item quantity="other">توجد <xliff:g id="COUNT">%d</xliff:g> من جهات الاتصال بها أرقام هواتف</item>
- <item quantity="one">توجد جهة اتصال واحدة بها رقم هاتف</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ليس هناك جهات اتصال تشتمل على أرقام هواتف"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="zero">لا توجد أي جهة اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">توجد جهتا اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">توجد <xliff:g id="COUNT">%d</xliff:g> جهات اتصال</item>
- <item quantity="many">توجد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال</item>
- <item quantity="other">توجد <xliff:g id="COUNT">%d</xliff:g> من جهات الاتصال</item>
- <item quantity="one">توجد جهة اتصال واحدة</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"تعذر حفظ التغييرات التي تم إجراؤها على جهة الاتصال"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"تعذر إلغاء ربط جهة الاتصال"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"تعذر ربط جهة الاتصال"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"حدث خطأ أثناء حفظ جهة الاتصال"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تعذر حفظ تغييرات صورة جهة الاتصال"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"فشل تحميل التصنيف"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"تم حذف التصنيف"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"تم إنشاء التصنيف"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"يتعذر إنشاء تصنيف"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"تم تحديث التصنيف"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"تمت الإزالة من التصنيف"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"تمت الإضافة إلى التصنيف"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"لا يمكن حفظ التغييرات على التصنيف"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"هذا التصنيف موجود فعلاً"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"بعض جهات الاتصال ليس لديها بريدًا إلكترونيًا."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"بعض جهات الاتصال ليست لديها أرقام هواتف."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"إرسال البريد الإلكتروني"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"إرسال رسالة"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"اختيار جهات الاتصال"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"إرسال"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"ليست هناك جهات اتصال"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="zero">لا توجد أي جهة اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">توجد جهتا اتصال (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">توجد <xliff:g id="COUNT">%d</xliff:g> جهات اتصال</item>
- <item quantity="many">توجد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال</item>
- <item quantity="other">توجد <xliff:g id="COUNT">%d</xliff:g> من جهات الاتصال</item>
- <item quantity="one">توجد جهة اتصال واحدة</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"الكل"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"المفضلة"</string>
- <string name="callBack" msgid="5498224409038809224">"معاودة الاتصال"</string>
- <string name="callAgain" msgid="3197312117049874778">"الاتصال مرة أخرى"</string>
- <string name="returnCall" msgid="8171961914203617813">"معاودة اتصال بمكالمة فائتة"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"هل ترغب في إضافة \"<xliff:g id="EMAIL">%s</xliff:g>\" إلى جهات الاتصال؟"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"صورة جهة الاتصال"</string>
- <string name="description_plus_button" msgid="515164827856229880">"علامة زائد"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> من <xliff:g id="TOTAL_NUMBER">%s</xliff:g> من جهات الاتصال"</string>
<string name="search_settings_description" msgid="2675223022992445813">"أسماء جهات الاتصال"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"لم يتم العثور على تطبيق يمكنه مباشرة هذا الإجراء."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"انقر للرجوع إلى الشاشة السابقة"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"إضافة رقم الهاتف"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"إضافة بريد إلكتروني"</string>
<string name="missing_app" msgid="1466111003546611387">"لم يتم العثور على تطبيق يمكنه مباشرة هذا الإجراء."</string>
<string name="menu_share" msgid="943789700636542260">"مشاركة"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"إضافة إلى جهات الاتصال"</string>
- <string name="share_via" msgid="563121028023030093">"مشاركة جهة الاتصال عبر"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"إنشاء مجموعة ضمن حساب"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"إضافة"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="zero">مشاركة جهات الاتصال عبر</item>
+ <item quantity="two">مشاركة جهتي الاتصال عبر</item>
+ <item quantity="few">مشاركة جهات الاتصال عبر</item>
+ <item quantity="many">مشاركة جهات الاتصال عبر</item>
+ <item quantity="other">مشاركة جهات الاتصال عبر</item>
+ <item quantity="one">مشاركة جهة الاتصال عبر</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"اختيار حساب"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"إنشاء تصنيف"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"إعادة تسمية التصنيف"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"اسم التصنيف"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"اسم التصنيف"</string>
<string name="audio_chat" msgid="2535716629358298691">"دردشة صوتية"</string>
<string name="video_chat" msgid="1872255818640336072">"دردشة فيديو"</string>
- <string name="connections" msgid="8098440723172028350">"الاتصالات"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"إضافة اتصال"</string>
- <string name="recent" msgid="2659189233141493004">"الأحدث"</string>
- <string name="recent_updates" msgid="4267258535615860710">"التحديثات الأخيرة"</string>
<string name="account_type_format" msgid="718948015590343010">"جهة اتصال <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"حساب <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"غير قابلة للتعديل من هذا التطبيق."</string>
- <string name="group_read_only" msgid="1061762906115697637">"غير قابلة للتعديل على هذا الجهاز."</string>
<string name="take_photo" msgid="7496128293167402354">"التقاط صورة"</string>
<string name="take_new_photo" msgid="7341354729436576304">"التقاط صورة جديدة"</string>
<string name="pick_photo" msgid="2129509985223564942">"اختيار صورة"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"تحديد صورة جديدة"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"يجري تحديث قائمة جهات الاتصال."</string>
<string name="search_results_searching" msgid="3984833028938569930">"جارٍ البحث..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"عرض العناصر المحددة"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"عرض الكل"</string>
- <string name="menu_select_all" msgid="621719255150713545">"تحديد الكل"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"إلغاء تحديد الكل"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"إضافة جديد"</string>
- <string name="add_organization" msgid="7311893231158291197">"إضافة مؤسسة"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"التاريخ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"اسم المجموعة"</string>
- <string name="change_photo" msgid="8530597935483526383">"تغيير"</string>
- <string name="primary_photo" msgid="8517942231868516999">"الصورة الأساسية"</string>
- <string name="description_star" msgid="2605854427360036550">"مفضل"</string>
- <string name="edit_contact" msgid="7529281274005689512">"تعديل جهة الاتصال"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"هل تريد ربط جهة الاتصال الحالية بجهة الاتصال المحددة؟"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"التصنيف"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"إلغاء"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"رجوع"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"إغلاق"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"هل تريد التبديل إلى تعديل جهة الاتصال المحددة؟ سيتم نسخ المعلومات التي أدخلتها حتى الآن."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"نسخ إلى جهات الاتصال الخاصة بي"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"إضافة إلى \"جهات الاتصال الخاصة بي\""</string>
<string name="contact_directory_description" msgid="683398073603909119">"الدليل <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"مخصص"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"الإعدادات"</string>
<string name="menu_settings" msgid="377929915873428211">"الإعدادات"</string>
<string name="menu_help" msgid="1680178646764069976">"مساعدة وتعليقات"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"خيارات العرض"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"رقم الهاتف"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"إضافة إلى جهات الاتصال"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"إضافة إلى جهة اتصال"</string>
<string name="non_phone_close" msgid="7608506439725515667">"إغلاق"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"تضمين العام"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"جهة الاتصال"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"جارٍ التحميل…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"إنشاء جهة اتصال جديدة"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"إضافة حساب"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"استيراد جهات الاتصال"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"إنشاء تصنيف جديد"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"إنشاء مجموعة جديدة"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="zero"><xliff:g id="COUNT">%0$d</xliff:g> مجموعات</item>
- <item quantity="two">مجموعتان (<xliff:g id="COUNT">%0$d</xliff:g>)</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> مجموعات</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> مجموعة</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> من المجموعات</item>
- <item quantity="one">مجموعة واحدة</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"هل تريد حذف المجموعة \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"؟ (لن يتم حذف جهات الاتصال ذاتها)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="zero">لا يوجد أي شخص (<xliff:g id="COUNT_2">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="two">يوجد شخصان (<xliff:g id="COUNT_2">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> أشخاص من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> شخصًا من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other">يوجد <xliff:g id="COUNT_2">%1$d</xliff:g> من الأشخاص من <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one">يوجد شخص واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>) من <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="zero">لا يوجد أي شخص (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="two">شخصان (<xliff:g id="COUNT_1">%1$d</xliff:g>)</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> أشخاص</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> شخصًا</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> من الأشخاص</item>
- <item quantity="one">شخص واحد (<xliff:g id="COUNT_0">%1$d</xliff:g>)</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"استيراد"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"إنشاء مجموعة جديدة…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"حذف التصنيف \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"؟ (لن يتم حذف جهات الاتصال نفسها)."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"اكتب اسم جهة الاتصال قبل ربطها بجهة اتصال أخرى."</string>
<string name="copy_text" msgid="3257145021583508761">"نسخ إلى الحافظة"</string>
<string name="set_default" msgid="4417505153468300351">"تعيين كافتراضي"</string>
<string name="clear_default" msgid="7193185801596678067">"محو الإعدادات الافتراضية"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"تم نسخ النص"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"هل تريد تجاهل التغييرات ومغادرة التعديل؟"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"هل تريد إلغاء التغييرات؟"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"تجاهل"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"متابعة التعديلات"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"إعداد الملف الشخصي"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"اكتب اسم الشخص"</string>
- <string name="group_name_hint" msgid="238359485263401293">"اسم المجموعة"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"إلغاء"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"تجاهل عمليات التخصيص؟"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"البحث في جهات الاتصال"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"إزالة جهات الاتصال"</string>
<string name="local_profile_title" msgid="2021416826991393684">"ملفي الشخصي المحلي"</string>
<string name="external_profile_title" msgid="8034998767621359438">"ملفي الشخصي في <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"عرض جميع جهات الاتصال"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"يمكنك الاحتفاظ بجهات اتصالك في أمان حتى إذا فقدت هاتفك: من خلال المزامنة مع خدمة عبر الإنترنت."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"إضافة حساب"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"لن يتم الاحتفاظ بنسخة احتياطية من جهة الاتصال الجديدة. هل تريد إضافة حساب يحتفظ بنسخة احتياطية من جهات الاتصال على الإنترنت؟"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏خذ دقيقة من وقتك لإضافة حساب يحفظ نسخة احتياطية من جهات اتصالك على Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"سيتم حفظ جهات الاتصال الجديدة في <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"اختيار حساب افتراضي لجهات الاتصال الجديدة:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"إضافة جهة اتصال جديدة"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"إنشاء جهة اتصال"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"تعديل جهة الاتصال"</string>
- <string name="keep_local" msgid="1258761699192993322">"الاحتفاظ بها محليًا"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"للعرض فقط"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"اختيار جهة اتصال لتعديلها"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"جهات الاتصال المرتبطة"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"إضافة"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"إلغاء الربط"</string>
<string name="add_account" msgid="8201790677994503186">"إضافة حساب"</string>
<string name="add_new_account" msgid="5748627740680940264">"إضافة حساب جديد"</string>
<string name="menu_export_database" msgid="2659719297530170820">"تصدير ملفات قاعدة البيانات"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"إضافة جهة اتصال جديدة"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"إنشاء جهة اتصال جديدة"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"الاطلاع على المزيد"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"عرض أقل"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"عرض الكل"</string>
<string name="recent_card_title" msgid="8982782042698001695">"الأخيرة"</string>
<string name="about_card_title" msgid="2920942314212825637">"حول"</string>
- <string name="send_message" msgid="8938418965550543196">"إرسال رسالة"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"جارٍ إنشاء نسخة شخصية..."</string>
- <string name="yesterday" msgid="6840858548955018569">"أمس"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"جارٍ إنشاء نسخة شخصية..."</string>
<string name="tomorrow" msgid="6241969467795308581">"غدًا"</string>
<string name="today" msgid="8041090779381781781">"اليوم"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"اليوم في <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"غدًا في <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>، <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>، <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(حدث بدون اسم)"</string>
<string name="date_time_set" msgid="4761419824439606690">"تعيين"</string>
<string name="header_im_entry" msgid="3581720979640225615">"المراسلة الفورية"</string>
@@ -298,78 +235,326 @@
<string name="header_website_entry" msgid="1411467850000824745">"موقع الويب"</string>
<string name="header_event_entry" msgid="6738250422744401460">"الحدث"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"العلاقة"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"الحساب"</string>
<string name="header_name_entry" msgid="1592791008096288306">"الاسم"</string>
<string name="header_email_entry" msgid="8666093061171624478">"البريد الإلكتروني"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"الهاتف"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"الصورة"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"يمكنك النقر لتوسيع محرر جهات الاتصال."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"يمكنك النقر لتصغير محرر جهات الاتصال."</string>
<string name="content_description_directions" msgid="2686791825798189335">"الاتجاهات إلى الموقع"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"‏رسائل SMS الأخيرة. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. انقر للرد"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"‏رسائل SMS الأخيرة. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. انقر للرد"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"الواردة"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"الصادرة"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"الفائتة"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"المكالمة الأخيرة. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. انقر لمعاودة الاتصال"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"المكالمة الأخيرة. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. انقر لمعاودة الاتصال"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"أنت: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏تعمل Hangouts بشكل أفضل عند إدخال معرف الشخص في Hangouts في حقل البريد الإلكتروني أو حقل الهاتف."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"المزيد من الحقول"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تغيير الصورة"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"أخفق فتح المحرر."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"الحفظ في"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"جارٍ الحفظ حاليًا في <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. يمكنك النقر نقرًا مزدوجًا لاختيار حساب آخر."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="zero">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">جهات الاتصال المرتبطة (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">جهة اتصال مرتبطة</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> جهة اتصال مرتبطة"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"المزيد من الحقول"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"تغيير صورة جهة الاتصال"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"إضافة صورة جهة الاتصال"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"صورة جهة الاتصال"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"تعذّر فتح المحرر."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"الحفظ في"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"معلومات جهة الاتصال من <xliff:g id="ACCOUNT">%s</xliff:g> غير قابلة للتعديل"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ربط جهات الاتصال"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"إلغاء"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> تكرار محتمل</item>
- <item quantity="two">تكراران (<xliff:g id="COUNT">%d</xliff:g>) محتملان</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> تكرارات محتملة</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> تكرارًا محتملاً</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> تكرار محتمل</item>
- <item quantity="one">تكرار واحد محتمل</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> جهة اتصال مقترنة</item>
- <item quantity="two">جهتا اتصال مقترنتان (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> جهات اتصال مقترنة</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> جهة اتصال مقترنة</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> جهة اتصال مقترنة</item>
- <item quantity="one">جهة اتصال واحدة مقترنة</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="zero">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"جهة الاتصال هذه"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"التكرارات المحتملة"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"ربما تمثل جهات الاتصال هذه شخصًا واحدًا. يمكنك ربطها معًا كجهة اتصال واحدة."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"جهات الاتصال المرتبطة"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"من حساباتك"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"التقاط صورة"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"جميع الصور"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"اختيار صورة"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"من <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"حذف <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"تم إلغاء تحديد صورة من <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"تم تحديد صورة من <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"لم يتم تحديد صورة من حساب غير معروف"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"تم تحديد صورة من حساب غير معروف"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"يتم تحديث قائمة جهات الاتصال لتعكس التغيير الذي حدث في اللغة.\n\nالرجاء الانتظار..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"الاقتراحات"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"جديد"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"فتح لائحة التنقل"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"إغلاق لائحة التنقل"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"التصنيف <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"التصنيفات"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"الحسابات"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"الاطلاع على المحادثات والأحداث التي جمعتكما"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"الأحداث والرسائل"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"الأحداث"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"الرسائل"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"الاقتراحات"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"الاحتفاظ بجهات الاتصال منظمة ومفيدة"</string>
+ <string name="undo" msgid="1425165101664071422">"تراجع"</string>
+ <string name="call_custom" msgid="6385303130912713318">"الاتصال على <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"الاتصال بهاتف منزلي"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"الاتصال بالجوال"</string>
+ <string name="call_work" msgid="5328785911463744028">"الاتصال بهاتف العمل"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"الاتصال بفاكس العمل"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"الاتصال بفاكس المنزل"</string>
+ <string name="call_pager" msgid="9003902812293983281">"الاتصال بجهاز النداء"</string>
+ <string name="call_other" msgid="8563753966926932052">"اتصال"</string>
+ <string name="call_callback" msgid="1910165691349426858">"الاتصال برقم معادوة الاتصال"</string>
+ <string name="call_car" msgid="3280537320306436445">"الاتصال بهاتف السيارة"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"الاتصال بهاتف الشركة الرئيسي"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"‏اتصال بـ ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"الاتصال بالهاتف الرئيسي"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"الاتصال برقم الفاكس"</string>
+ <string name="call_radio" msgid="8296755876398357063">"اتصال بهاتف لاسلكي"</string>
+ <string name="call_telex" msgid="2223170774548648114">"الاتصال بالتلكس"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"‏اتصال بـ TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"الاتصال بجوال العمل"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"الاتصال بجهاز نداء العمل"</string>
+ <string name="call_assistant" msgid="670941612175068337">"الاتصال على <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"اتصال بهاتف رسائل الوسائط المتعددة"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (اتصال)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"إرسال رسال نصية إلى <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"إرسال رسالة نصية إلى هاتف منزلي"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"إرسال رسالة نصية إلى جوال"</string>
+ <string name="sms_work" msgid="2269624156655267740">"إرسال رسالة نصية قصيرة إلى هاتف العمل"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"إرسال رسالة نصية قصيرة إلى فاكس العمل"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"إرسال رسالة نصية إلى فاكس المنزل"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"إرسال رسالة نصية إلى جهاز النداء"</string>
+ <string name="sms_other" msgid="806127844607642331">"إرسال رسالة نصية"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"إرسال رسالة إلى هاتف معاودة الاتصال"</string>
+ <string name="sms_car" msgid="7444227058437359641">"إرسال رسالة نصية إلى هاتف السيارة"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"إرسال رسالة نصية قصيرة على الهاتف الرئيسي للشركة"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"‏إرسال رسالة نصية قصيرة إلى ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"إرسال رسالة إلى الهاتف الرئيسي"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"إرسال رسالة إلى فاكس"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"إرسال رسالة إلى هاتف لاسلكي"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"إرسال رسالة نصية إلى هاتف تليكس"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"‏إرسال رسالة إلى TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"إرسال رسالة إلى جوال العمل"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"إرسال رسالة نصية قصيرة على جهاز نداء العمل"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"إرسال رسالة نصية إلى <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"إرسال رسالة وسائط متعددة"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (رسالة)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"إجراء مكالمة فيديو"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"هل تريد محو قائمة من يُتصل بهم كثيرًا؟"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"ستمحو قائمة من يتم الاتصال بهم كثيرًا في تطبيقي جهات الاتصال والهاتف، وستفرض على تطبيقات البريد الإلكتروني التعرف على تفضيلات توجيه الرسائل من البداية."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"جارٍ محو قائمة المُتصل بهم كثيرًا…"</string>
+ <string name="status_available" msgid="5586870015822828392">"متوفر"</string>
+ <string name="status_away" msgid="1838861100379804730">"بعيد"</string>
+ <string name="status_busy" msgid="9147992455450257136">"مشغول"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"غير ذلك"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"الدليل"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"دليل العمل"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"جميع جهات الاتصال"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"اتصال سريع لـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(بلا اسم)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"يتم الاتصال بهم بشكل متكرر"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"جميع جهات الاتصال التي لها أرقام هواتف"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"جهات الاتصال للملف الشخصي للعمل"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"عرض التحديثات"</string>
+ <string name="account_phone" msgid="7128032778471187553">"الجهاز"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"الاسم"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"اللقب"</string>
+ <string name="name_given" msgid="4280790853455320619">"الاسم الأول"</string>
+ <string name="name_family" msgid="7466985689626017037">"اسم العائلة"</string>
+ <string name="name_prefix" msgid="59756378548779822">"بادئة الاسم"</string>
+ <string name="name_middle" msgid="8467433655992690326">"الاسم الأوسط"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"لاحقة الاسم"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"الاسم صوتياً"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"الاسم الأول صوتيًا"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"الاسم الأوسط صوتيًا"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"اسم العائلة صوتيًا"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"الهاتف"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"البريد الإلكتروني"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"العنوان"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"المراسلة الفورية"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"المؤسسة"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"العلاقة"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"تاريخ مميز"</string>
+ <string name="sms" msgid="1756857139634224222">"رسالة نصية"</string>
+ <string name="postal_address" msgid="8765560217149624536">"العنوان"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"شركة"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"المسمى الوظيفي"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ملاحظات"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"مخصص"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"موقع ويب"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"التصنيفات"</string>
+ <string name="email_home" msgid="8573740658148184279">"البريد الإلكتروني للمنزل"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"إرسال رسالة إلكترونية إلى عنوان بريد إلكتروني على الجوال"</string>
+ <string name="email_work" msgid="2807430017302722689">"البريد الإلكتروني للعمل"</string>
+ <string name="email_other" msgid="3454004077967657109">"بريد إلكتروني"</string>
+ <string name="email_custom" msgid="5536404237099078802">"إرسال بريد إلكتروني إلى <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"بريد إلكتروني"</string>
+ <string name="postal_street" msgid="8133143961580058972">"الشارع"</string>
+ <string name="postal_city" msgid="6597491300084895548">"المدينة"</string>
+ <string name="postal_region" msgid="6045263193478437672">"المحافظة"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"الرمز البريدي"</string>
+ <string name="postal_country" msgid="7638264508416368690">"البلد"</string>
+ <string name="map_home" msgid="1243547733423343982">"عرض عنوان المنزل"</string>
+ <string name="map_work" msgid="1360474076921878088">"عرض عنوان العمل"</string>
+ <string name="map_other" msgid="3817820803587012641">"عرض عنوان"</string>
+ <string name="map_custom" msgid="8761800628069473526">"عرض عنوان <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"‏الدردشة باستخدام AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"‏الدردشة باستخدام Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"‏الدردشة باستخدام Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"‏الدردشة باستخدام Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"‏الدردشة باستخدام QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"‏الدردشة باستخدام Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"‏الدردشة باستخدام ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"‏الدردشة باستخدام Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"دردشة"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"حذف"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"عرض المزيد من حقول الأسماء"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"تصغير حقول الأسماء"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"عرض المزيد من حقول الأسماء الصوتية"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"تصغير حقول الأسماء الصوتية"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"توسيع"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"تصغير"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"في وضع التوسيع"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"في وضع التصغير"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"جميع جهات الاتصال"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"مميّزة بنجمة"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"تخصيص"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"جهة الاتصال"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"جميع جهات الاتصال الأخرى"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"جميع جهات الاتصال"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"إزالة مجموعة متزامنة"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"إضافة مجموعة متزامنة"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"مزيد من المجموعات..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ستؤدي إزالة \"<xliff:g id="GROUP">%s</xliff:g>\" من المزامنة أيضًا إلى إزالة أية جهات اتصال غير مجمعة من المزامنة."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"جارٍ حفظ خيارات العرض..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"عرض مُخصص"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"حفظ جهات الاتصال المستوردة إلى:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"‏شريحة SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"‏شريحة SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="zero">‏%1$d جهة اتصال</item>
+ <item quantity="two">‏%1$d جهتا اتصال</item>
+ <item quantity="few">‏%1$d جهات اتصال</item>
+ <item quantity="many">‏%1$d جهة اتصال</item>
+ <item quantity="other">‏%1$d جهة اتصال</item>
+ <item quantity="one">جهة اتصال واحدة</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="zero"><xliff:g id="COUNT_2">^1</xliff:g> جهة اتصال • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="two"><xliff:g id="COUNT_2">^1</xliff:g> جهتا اتصال • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> جهات اتصال • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> جهة اتصال • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> جهة اتصال • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> جهة اتصال • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"‏ملف .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"لا يوجد شيء للاستيراد"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"‏استيراد جهات الاتصال من vCard؟"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"هل تريد إلغاء استيراد <xliff:g id="FILENAME">%s</xliff:g>؟"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"هل تريد إلغاء تصدير <xliff:g id="FILENAME">%s</xliff:g>؟"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏تعذر إلغاء استيراد/تصدير vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"خطأ غير معروف."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"تعذر فتح \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"تعذر بدء المُصدر: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ليست هناك جهة اتصال قابلة للتصدير."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"لقد عطلت إذنًا مطلوبًا."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"حدث خطأ أثناء التصدير: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"‏خطأ I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"الذاكرة غير كافية. ربما يكون الملف أكبر مما يجب."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"التنسيق غير معتمد."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"تم الانتهاء من تصدير <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"تم الانتهاء من تصدير جهات الاتصال."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"تم الانتهاء من تصدير جهات الاتصال، انقر على الإشعار لمشاركة جهات الاتصال."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"انقر لمشاركة جهات الاتصال."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"تم إلغاء تصدير <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"تصدير بيانات جهة الاتصال"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"يجري تصدير بيانات جهات الاتصال."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"تعذر الحصول على معلومات قاعدة البيانات."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"لا توجد جهات اتصال قابلة للتصدير."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"‏لم يبدأ مؤلف vCard بشكل صحيح."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"تعذر التصدير"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"لم يتم تصدير بيانات جهة الاتصال.\nالسبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"جارٍ استيراد <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏تتعذر قراءة بيانات vCard."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏تم الانتهاء من استيراد ملف vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"تم إلغاء استيراد <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"سيتم استيراد <xliff:g id="FILENAME">%s</xliff:g> بعد قليل."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"سيتم استيراد الملف قريبًا."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏تم رفض طلب استيراد vCard. أعد المحاولة لاحقًا."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"سيتم تصدير جهات الاتصال قريبًا."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏تم رفض طلب تصدير vCard. أعد المحاولة لاحقًا."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"جهة اتصال"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"‏يجري تخزين ملفات vCard مؤقتًا على وحدة تخزين مؤقتة محلية. سيبدأ الاستيراد الفعلي قريبًا."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"‏تعذر استيراد vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏استلام ج اتص.NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"تخزين مؤقت"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"استيراد <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"‏تصدير إلى ملف vcf."</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ترتيب بحسب"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"الاسم صوتياً"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"الإظهار دائمًا"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"الإخفاء إذا كان فارغًا"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"الاسم الأول"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"اسم العائلة"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"تنسيق الاسم"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"الاسم الأول أولاً"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"اسم العائلة أوّلًا"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"الحسابات"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"الحساب الافتراضي لجهات الاتصال الجديدة"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"معلوماتي"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"إعداد الملف الشخصي"</string>
+ <string name="setting_about" msgid="7014388749752042863">"حول جهات الاتصال"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"مشاركة جهات الاتصال المفضلة"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"مشاركة جميع جهات الاتصال"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"أخفقت مشاركة جهات الاتصال."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"تصدير جهات الاتصال"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"استيراد جهات اتصال من"</string>
+ <string name="share_error" msgid="948429331673358107">"لا يمكن مشاركة جهة الاتصال هذه."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ليست هناك جهات اتصال لمشاركتها."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"جهات الاتصال المعروضة"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"جهات الاتصال المعروضة"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"تخصيص العرض"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"حفظ"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"البحث في قائمة جهات الاتصال"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"المفضلة"</string>
+ <string name="menu_import" msgid="6107961135813836467">"استيراد"</string>
+ <string name="menu_export" msgid="2658783911863503902">"تصدير"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"الأرقام المحظورة"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"عبر <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> عبر <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"إيقاف البحث"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"محو البحث"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"الحساب"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"استخدام هذا للمكالمات دائمًا"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"مكالمة مع ملاحظة"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"اكتب ملاحظة لإرسالها مع المكالمة..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"الإرسال والاتصال"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"نسخة الإصدار"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"تراخيص البرامج المفتوحة المصدر"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"تفاصيل الترخيص للبرامج مفتوحة المصدر"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"سياسة الخصوصية"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"بنود الخدمة"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"تراخيص البرامج المفتوحة المصدر"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"‏فشل فتح عنوان URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"تم تحديد <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"لم يتم تحديد <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"إجراء مكالمة فيديو"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"حذف"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"علامة حذف"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> دقيقة <xliff:g id="SECONDS">%2$s</xliff:g> ثانية"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ساعة <xliff:g id="MINUTES_1">%2$s</xliff:g> دقيقة <xliff:g id="SECONDS">%3$s</xliff:g> ثانية"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"تم تعطيل هذا الاختصار"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"تمت إزالة جهة الاتصال"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"استيراد"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"تحديد جهات الاتصال"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"‏ليس هناك جهات اتصال على شريحة SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"جهة الاتصال موجودة فعلاً في قائمتك"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="zero">‏تم استيراد جهتي اتصال (<xliff:g id="COUNT">%d</xliff:g>) من شريحة SIM</item>
+ <item quantity="two">‏تم استيراد <xliff:g id="COUNT">%d</xliff:g> جهات اتصال من شريحة SIM</item>
+ <item quantity="few">‏تم استيراد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال من شريحة SIM</item>
+ <item quantity="many">‏تم استيراد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال من شريحة SIM</item>
+ <item quantity="other">‏تم استيراد <xliff:g id="COUNT">%d</xliff:g> جهة اتصال من شريحة SIM</item>
+ <item quantity="one">‏تم استيراد جهة اتصال واحدة من شريحة SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏فشل استيراد جهات الاتصال من شريحة SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"‏استيراد من SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"إلغاء"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"المزامنة التلقائية متوقفة. انقر للتشغيل."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"تجاهل"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"مزامنة الحساب متوقفة. انقر للتشغيل."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"تشغيل المزامنة التلقائية؟"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"‏سيتم تحديث التغييرات التي أجريتها على كل التطبيقات والحسابات، وليس فقط جهات اتصال Google، بين الويب وأجهزتك."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"تشغيل"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"لا اتصال"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"‏شريحة SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"عرض المزيد"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏انتهى استيراد شريحة SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"تعذّر الاستيراد"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏تعذر استيراد جهات الاتصال من شريحة SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏استيراد SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"الإشعارات"</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
deleted file mode 100644
index 3ce7c7ca5..000000000
--- a/res/values-az-rAZ/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktlar"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kontakta baxın"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Kontaktları Redaktə Edin"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Birbaşa nömrə yığımı"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Birbaşa mesaj"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakt qısayolunu seçin"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Zəng üçün nömrə seçin"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Mesaj göndərmək üçün nömrə seçin"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontakta əlavə edin"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakt seçin"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yeni kontakt yaradın"</string>
- <string name="starredList" msgid="4817256136413959463">"Ulduzlu"</string>
- <string name="frequentList" msgid="7154768136473953056">"Tez-tez"</string>
- <string name="strequentList" msgid="5640192862059373511">"Seçilmişlər"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontakt detalları"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Kontakta düzəliş edin"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Kontakt yaradın"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Qrupa düzəliş edin"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Qrup yaradın"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Haqqında"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Güncəlləşdirmələr"</string>
- <string name="searchHint" msgid="8482945356247760701">"Kontakt axtarın"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Kontakta baxın"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Favoritlərə əlavə edin"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Favoritlərdən yığışdırın"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Seçilmişlərdən silindi"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Favoritlərə əlavə edin"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Düzəliş edin"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Silin"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Şəkli dəyiş"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Əsas ekranda yer"</string>
- <string name="menu_call" msgid="3992595586042260618">"Kontakta zəng edin"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Mətn kontaktı"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Parçalayın"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Düzəliş edin"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Silin"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Kontakt əlavə edin"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Qrupu əlavə edin"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt çoxsaylı kontaktlara parçalansın?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Parçalayın"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Hal-hazırda etdiyiniz dəyişiklikləri yadda saxlamaq və bu kontaktı çoxsaylı kontaktlara parçalamaq istərdiniz?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Yadda saxlayın və parçalayın"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Hal-hazırda etdiyiniz dəyişiklikləri yadda saxlamaq və seçilmiş kontaktla əlaqələndirmək istərdiniz?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Yadda saxlayın və Əlaqələndirin"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Əlaqə"</string>
- <string name="menu_save" msgid="1727844363591825909">"Yadda saxlayın"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktları əlaqələndirin"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ilə əlaqələndirmək istədiyiniz kontaktı seçin:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Bütün kontaktları göstərin"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Təklif edilmiş kontaktlar"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bütün kontaktlar"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar əlaqələndirildi"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Kontakt silindi</item>
- <item quantity="one">Kontakt silindi</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Zəng səsi seçin"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Bütün zənglər səsli poçta"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Yalnız-oxunabilən hesablardan olan kontaktlar silinə bilməz, lakin gizlədilə bilər."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Gizlədin"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Silinəcək kontaktın çoxsaylı hesablardan detalları var. Yalnız-oxunabilən hesablardan olan detallar gizlədiləcək, silinməyəcək."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Əlaqələndirməni yerinə yetirmək üçün ən az iki kontaktınız olmalıdır."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Seçilmiş kontaktlar əlaqələndirilsin?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Link"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Bu kontakt silinsin?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Seçilmiş kontaktlar silinsin?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Yalnız-oxunabilən hesablardan olan kontaktlar silinə bilməz, lakin gizlədilə bilər."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Silinəcək kontaktların çoxsaylı hesablardan detalları var. Yalnız-oxunabilən hesablardan olan detallar gizlədiləcək, silinməyəcək."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontaktın silinməsi çoxsaylı hesablardan detalların silinməsi ilə nəticələnəcək."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt silinsin?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Silin"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Dəyişiklikləri kənarlaşdırın"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mövcud deyil."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt Əsas ekrana elavə edilib."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Əsas ekrana əlavə edilib."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yeni kontakt yaradın"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Yeni kontakt yaradın"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Təşkilat"</item>
- <item msgid="7196592230748086755">"Qeyd"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planşetdə şəkillər əlçatımlı deyil."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda heç bir şəkil əlçatımlı deyil."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt fotosu"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Fərdi etiket adı"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Səsləri birbaşa səsli poçta göndərin"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Fotonu yığışdırın"</string>
- <string name="noContacts" msgid="4955659076981974652">"Kontakt yoxdur"</string>
- <string name="noGroups" msgid="8614664663561385253">"Qrup yoxdur."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Qrup yaratmaq üçün hesaba ehtiyacınız var."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Bu qrupda adam yoxdur."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Bəzilərini əlavə etmək üçün qrupu redaktə edin"</string>
- <string name="savingContact" msgid="4075751076741924939">"Kontakt yadda saxlanır..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt yadda saxlanıldı"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar əlaqələndirilməyib"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontakt dəyişiklikləri saxlanıla bilmədi."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktdan ayrıla bilmədi."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktı əlaqələndirə bilmədi."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktın yadda saxlanmasında xəta"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakt foto dəyişiklikləri yadda saxlanılmadı."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Qrup yadda saxlanıldı."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Qrup dəyişiklikləri yadda saxlanılmadı."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> əlaqə</item>
- <item quantity="one"> telefon nömrəsi olan 1 əlaqə</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon nömrəsi olan kontakt yoxdur"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tapıldı</item>
- <item quantity="one">1 tapıldı</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakt yoxdur"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tapıldı</item>
- <item quantity="one">1 nəfər tapıldı</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Bütün"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritlər"</string>
- <string name="callBack" msgid="5498224409038809224">"Geriyə zəng"</string>
- <string name="callAgain" msgid="3197312117049874778">"Yenidən zəng edin"</string>
- <string name="returnCall" msgid="8171961914203617813">"Zəngi qaytarın"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktlara əlavə olunsun?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"Kontakt şəkli"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktdan <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kontakt"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlarınızın adları"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Öncəki ekrana qayıtmaq üçün klikləyin"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Digər nömrə əlavə edin"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"E-mail əlavə edin"</string>
- <string name="missing_app" msgid="1466111003546611387">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
- <string name="menu_share" msgid="943789700636542260">"Paylaşın"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Kontaktlara əlavə edin"</string>
- <string name="share_via" msgid="563121028023030093">"Kontaktı bu vasitə ilə paylaşın:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Hesab altında qrup yaradın"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Səsli çat"</string>
- <string name="video_chat" msgid="1872255818640336072">"Video çat"</string>
- <string name="connections" msgid="8098440723172028350">"Əlaqələr"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Bağlantı əlavə edin"</string>
- <string name="recent" msgid="2659189233141493004">"Son"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Son güncəlləşmələr"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabı"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Bu tətbiqdən düzəliş edilə bilən deyil."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Bu cihaz üçün redaktəolunmazdır."</string>
- <string name="take_photo" msgid="7496128293167402354">"Fotoşəkil çəkin"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Yeni foto çəkin"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Foto seçin"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Yeni foto seçin"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontakt siyahısı güncəlləşdirilir."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Axtarılır..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Seçilmişləri göstər"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Hamısını göstər"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Hamısını seçin"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Heç birini seçməyin"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yenisini əlavə edin"</string>
- <string name="add_organization" msgid="7311893231158291197">"Təşkilat əlavə edin"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarix"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Qrup adı"</string>
- <string name="change_photo" msgid="8530597935483526383">"Dəyişdir"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Əsas şəkil"</string>
- <string name="description_star" msgid="2605854427360036550">"sevimli"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Kontaktı redaktə edin"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Cari kontakt seçilmiş kontaktla əlaqələndirilsin?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçilmiş kontaktın redaktəsinə keçirilsin? Hazırda daxil etdiyiniz informasiya kopyalanacaq."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kontaktlarıma Kopyalayın"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Kontaktlarıma Əlavə Edin"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Kataloq <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Adət"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
- <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
- <string name="menu_help" msgid="1680178646764069976">"Kömək &amp; əks əlaqə"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Displey seçənəkləri"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Telefon nömrəsi"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlara əlavə edin"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kontakta əlavə edin"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Qapadın"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"İl daxil edin"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Yüklənir…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yeni kontakt yaradın"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hesab əlavə edin"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontaktları import edin"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Yeni qrup yarat"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Yeni qrup yarat"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> qrup</item>
- <item quantity="one">1 qrup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" qrupu silinsin? (Kontaktlar silinməyəcək.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>hesabından <xliff:g id="COUNT_2">%1$d</xliff:g> nəfər</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>hesabından <xliff:g id="COUNT_0">%1$d</xliff:g> nəfər</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> nəfər</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> nəfər</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Digəri ilə əlaqələndirilmədən öncə kontakt adı yazın."</string>
- <string name="copy_text" msgid="3257145021583508761">"Panoya kopyalayın"</string>
- <string name="set_default" msgid="4417505153468300351">"Defolt ayarlayın"</string>
- <string name="clear_default" msgid="7193185801596678067">"Defoltu təmizləyin"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Mətn kopyalandı"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Dəyişiklikləriniz kənarlaşdırılsın və redaktə sonlandırılsın?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ləğv edin"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Redaktəyə davam edin"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Profilimi quraşdırın"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Şəxsin adını yazın"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Qrup adı"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Yerli profilim"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Mənim <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Bütün kontaktlar göstərilir"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Telefonunuzu itirsəniz belə, kontaktlarınızı təhlükəsiz saxlayın: onlayn xidmət ilə sinxronlaşdırın."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hesab əlavə edin"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Yeni kontaktınız yedəklənməyəcək. Kontaktları onlayn yedəkləyən hesab əlavə olunsun?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yeni kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hesabında yadda saxlanacaq."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yeni kontaktlar üçün defolt hesab seçin:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Yeni kontakt əlavə edin"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontakta düzəliş edin"</string>
- <string name="keep_local" msgid="1258761699192993322">"Lokal saxlayın"</string>
- <string name="add_account" msgid="8201790677994503186">"Hesab əlavə edin"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Yeni hesab əlavə edin"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Data baza fayllarını eksport edin"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"yeni kontakt əlavə edin"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Daha çoxunu görün"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Baxışı kiçildin"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Hamısına baxın"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Son"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Haqqında"</string>
- <string name="send_message" msgid="8938418965550543196">"Mesaj göndərin"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Şəxsi nüsxə yaradılır..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Dünən"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Sabah"</string>
- <string name="today" msgid="8041090779381781781">"Bu gün"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Bu gün saat <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sabah saat <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Başlıqsız tədbir)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Ayarlayın"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Təşkilat"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Nik"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Qeyd"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Veb sayt"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Tədbir"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Əlaqə"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Hesab"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-poçt"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Şəkil"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Əlaqə redaktorunu genişləndirmək üçün klikləyin."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Əlaqə redaktorunu yığışdırmaq üçün klikləyin."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"məkana istiqamətlər"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"son sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. cavab üçün klikləyin"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gələn"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"gedən"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"buraxılmış"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"son çağrı. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. zəng etmək üçün klikləyin"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Siz hər hansı bir şəxsin Görüşlə bağlı identifikatorlarını e-poçt sahəsi və ya telefon sahəsinə daxil edəndə, Görüş yerləri daha yaxşı işləyir."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Daha çox sahə"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Şəkli dəyişin"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redaktoru açmaq uğursuz oldu."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Hesabda yadda saxlanır"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hal-hazırda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabında yadda saxlanır. Fərqli hesab seçmək üçün iki dəfə basın."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Əlaqələnmiş kontakt (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Əlaqələnmiş kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> əlaqələnmiş kontakt"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KONTAKTLARI ƏLAQƏLƏNDİRİN"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"LƏĞV EDİN"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Mümkün dublikat</item>
- <item quantity="one">1 Mümkün dublikat </item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> əlaqələnmiş kontakt</item>
- <item quantity="one">1 əlaqələnmiş kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Bu kontakt"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mümkün dublikatlar"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar eyni şəxsə aid ola bilər. Onları bir kontaktda birləşdirə bilərsiniz."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Əlaqələndirilmiş kontaktlar"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Hesablarınızdan"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Şəkil çək"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Bütün fotolar"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Foto seçin"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabından"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> datasını silin"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> datasını silin"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>istifadəçisindən gələn foto yoxlanmadı"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> istifadəçisindən gələn foto yoxlandı"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Naməlum hesabdan olan foto yoxlanmadı"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Naməlum hesabdan olan foto yoxlandı"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontakt siyahısı dilin dəyişməsinə uyğun olaraq güncəlləşir.\n\nLütfən, gözləyin..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklanmış nömrələr"</string>
-</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
new file mode 100644
index 000000000..4482a9fe5
--- /dev/null
+++ b/res/values-az/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt əlavə edin"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Birbaşa nömrə yığımı"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Birbaşa mesaj"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt seçin"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontakta əlavə edin"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakt seçin"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seçin"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yeni kontakt yaradın"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Kontakt axtarın"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Favoritlərə əlavə edin"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Favoritlərdən yığışdırın"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Seçilmişlərdən silindi"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Favoritlərə əlavə edin"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Düzəliş edin"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Silin"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Şəkli dəyiş"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Qısayol yaradın"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Parçalayın"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Kontaktları silin"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Etiketin adını dəyişin"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Etiketi silin"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Kontakt əlavə edin"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktları seçin"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakt əlavə edin"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Etiketdən silin"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Etiket yaradın"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt çoxsaylı kontaktlara parçalansın?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Parçalayın"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Hal-hazırda etdiyiniz dəyişiklikləri yadda saxlamaq və bu kontaktı çoxsaylı kontaktlara parçalamaq istərdiniz?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Yadda saxlayın və parçalayın"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Hal-hazırda etdiyiniz dəyişiklikləri yadda saxlamaq və seçilmiş kontaktla əlaqələndirmək istərdiniz?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Yadda saxlayın və Əlaqələndirin"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Əlaqələndirilir"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Əlaqə ləğv edilir"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Əlaqə"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Əlaqələnmiş kontaktlara baxın"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Yadda saxlayın"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktları əlaqələndirin"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ilə əlaqələndirmək istədiyiniz kontaktı seçin:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Təklif edilmiş kontaktlar"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bütün kontaktlar"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ilə bağlantı"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar əlaqələndirildi"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> silindi"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> və <xliff:g id="NAME_1">%2$s</xliff:g> silindi"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… silindi"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Kontakt silindi</item>
+ <item quantity="one">Kontakt silindi</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google\'dan"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Zəng səsi seçin"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Səsli poçta istiqamətləndirin"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Səsli poçta istiqamətləndirməyin"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Bu kontakt yalnız oxunmaq üçündür. O silinə bilməz lakin, gizlədə bilərsiniz."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Kontaktı Gizlədin"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Bu kontaktdakı yalnız-oxunabilən hesablar gizlədiləcək, silinməyəcək."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Bu kontakt silinsin?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Seçilmiş kontaktlar silinsin?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Yalnız-oxunabilən hesablardan olan kontaktlar silinə bilməz, lakin gizlədilə bilər."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Silinəcək kontaktların çoxsaylı hesablardan detalları var. Yalnız-oxunabilən hesablardan olan detallar gizlədiləcək, silinməyəcək."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontaktın silinməsi çoxsaylı hesablardan detalların silinməsi ilə nəticələnəcək."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt silinsin?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Silin"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mövcud deyil."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt Əsas ekrana elavə edilib."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Əsas ekrana əlavə edilib."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Cihazda şəkil yoxdur."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt fotosu"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Fərdi etiket adı"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Fotonu yığışdırın"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Kontakt siyahınız boşdur"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Bu etiketlə kontakt yoxdur"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Bu hesabda heç bir kontakt yoxdur"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Kontakt siyahınız boşdur"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> saxlanıldı"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt yadda saxlanıldı"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar əlaqələndirilməyib"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakt dəyişiklikləri saxlanıla bilmədi"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontaktdan ayrıla bilmədi"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktı əlaqələndirə bilmədi"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktın yadda saxlanmasında xəta"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt foto dəyişiklikləri yadda saxlanılmadı"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketi yükləmək uğursuz oldu"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket yaradıldı"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiket yarada bilməz"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket yeniləndi"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Etiketdən silindi"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Etiketə əlavə edildi"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Etiket dəyişikliyini yadda saxlamaq mümkün olmadı"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Həmin etiket artıq mövcuddur"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Bəzi kontaktlarda e-poçt ünvanı yoxdur."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Bəzi kontaktlarda telefon nömrələri yoxdur."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-məktub göndərin"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Mesaj göndərin"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktları seçin"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Göndərin"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakt yoxdur"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktlara əlavə olunsun?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlarınızın adları"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Öncəki ekrana qayıtmaq üçün klikləyin"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Digər nömrə əlavə edin"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"E-mail əlavə edin"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
+ <string name="menu_share" msgid="943789700636542260">"Paylaşın"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Kontaktlara əlavə edin"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Əlavə edin"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kontaktları bu vasitə ilə paylaşın:</item>
+ <item quantity="one">Kontaktı bu vasitə ilə paylaşın:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Hesab seçin"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Etiket yaradın"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Etiketin adını dəyişin"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiket adı"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiket adı"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Səsli çat"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Video çat"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabı"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Fotoşəkil çəkin"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Yeni foto çəkin"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Foto seçin"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Yeni foto seçin"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Axtarılır..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarix"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Ləğv edin"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Geri"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"qapadın"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçilmiş kontaktın redaktəsinə keçirilsin? Hazırda daxil etdiyiniz informasiya kopyalanacaq."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Kataloq <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Kömək &amp; əks əlaqə"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Telefon nömrəsi"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlara əlavə edin"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Qapadın"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"İl daxil edin"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hesab əlavə edin"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"İmport"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Yenisini yaradın..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" etiketi silinsin? (Kontaktların özləri silinməyəcək.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Digəri ilə əlaqələndirilmədən öncə kontakt adı yazın."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Panoya kopyalayın"</string>
+ <string name="set_default" msgid="4417505153468300351">"Defolt ayarlayın"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Defoltu təmizləyin"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Mətn kopyalandı"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Dəyişikliklər ləğv edilsin?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ləğv edin"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ləğv edin"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Fərdiləşmə ləğv edilsin?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Kontakt axtarın"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kontaktları silin"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Yerli profilim"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Mənim <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Kontaktlarınızı Google\'a yedəkləyən hesabı əlavə etmək üçün bir dəqiqənizi ayırın."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yeni kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hesabında yadda saxlanacaq."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yeni kontaktlar üçün defolt hesab seçin:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Yeni kontakt yaradın"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontakta düzəliş edin"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Yalnız görüntü"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Redaktə etmək üçün kontakt seçin"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Əlaqələndirilmiş kontaktlar"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Əlavə edin"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Parçalayın"</string>
+ <string name="add_account" msgid="8201790677994503186">"Hesab əlavə edin"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Yeni hesab əlavə edin"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Data baza fayllarını eksport edin"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Yeni kontakt yaradın"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Daha çoxunu görün"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Baxışı kiçildin"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Son"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Haqqında"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Şəxsi nüsxə yaradılır..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Sabah"</string>
+ <string name="today" msgid="8041090779381781781">"Bu gün"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Bu gün saat <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sabah saat <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Başlıqsız tədbir)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Ayarlayın"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Təşkilat"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Nik"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Qeyd"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Veb sayt"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Tədbir"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Əlaqə"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-poçt"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"məkana istiqamətlər"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"son sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. cavab üçün klikləyin"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gələn"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"gedən"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"buraxılmış"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"son çağrı. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. zəng etmək üçün klikləyin"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Daha çox sahə"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakt fotosunu dəyişin"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakt fotosu əlavə edin"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontakt fotosu"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Redaktoru açmaq uğursuz oldu."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Hesabda yadda saxlanır"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından olan kontakt məlumatı redaktə olunmur"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KONTAKTLARI ƏLAQƏLƏNDİRİN"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"LƏĞV EDİN"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Bu kontakt"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mümkün dublikatlar"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar eyni şəxsə aid ola bilər. Onları bir kontaktda birləşdirə bilərsiniz."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> datasını silin"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> datasını silin"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Təkliflər"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yeni"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Naviqasiya siyirməsini açın"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Naviqasiya siyirməsini qapadın"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> etiketi"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"İşarələr"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Hesablar"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Tarixçənizə birlikdə baxın"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Tədbirlər və mesajlar"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Tədbirlər"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mesajlarım"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Təkliflər"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Kontaktlarınızı sistemləşdirin"</string>
+ <string name="undo" msgid="1425165101664071422">"Geri qayıdın"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> nömrəsinə zəng edin"</string>
+ <string name="call_home" msgid="1990519474420545392">"Evə zəng"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Mobil cihaza zəng edin"</string>
+ <string name="call_work" msgid="5328785911463744028">"İşə zəng"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"İş faksına zəng edin"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Ev faksına zəng edin"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Peycerə zəng edin"</string>
+ <string name="call_other" msgid="8563753966926932052">"Zəng edin"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Geriyə zəng edin"</string>
+ <string name="call_car" msgid="3280537320306436445">"Avtomobil zəngi"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Əsas şirkət zəngi"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN zəng edin"</string>
+ <string name="call_main" msgid="6082900571803441339">"Əsas zəng"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Faksa zəng edin"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Radioya zəng edin"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Teleksə zəng edin"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD zəng edin"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"İş mobil telefonuna zəng edin"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"İş peycerinə zəng edin"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> nömrəsinə zəng edin"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS Zəng"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Zəng)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> nömrəsinə məktub göndərin"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Ev mətni"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Mobil mətn"</string>
+ <string name="sms_work" msgid="2269624156655267740">"İş nömrəsinə mesaj"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"İş faksına mesaj göndərin"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Ev faksına mesaj göndərin"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Peycer nömrəsinə mesaj"</string>
+ <string name="sms_other" msgid="806127844607642331">"Mətn"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Geri zəng nömrəsinə mesaj"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Avtomobil nömrəsinə mesaj"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Əsas şirkət mətni"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN mətni"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Əsas mətn"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Faks nömrəsinə mesaj"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Radio mətni"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Teleks nömrəsinə mesaj"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD nömrəsinə mesaj"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"İş mobil nömrəsinə mesaj"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"İş peyceri mətni"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Mətn <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS nömrəsinə mesaj"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Mesaj)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Video zəng edin"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Tez-tez ünsiyyət qurulanlar silinsin?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Əlaqələr və Telefon proqramlarında tez-tez əlaqə saxlanılanların siyahısını siləcəksiniz və fraqmentdən ünvanlama seçimlərinizi öyrənmək üçün e-poçt proqramlarını məcbur edəcəksiniz."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Tez-tez ünsiyyət qurulanlar silinir..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Əlçatımlı"</string>
+ <string name="status_away" msgid="1838861100379804730">"Kənar"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Məşğul"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Digər"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Kataloq"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"İş kataloqu"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Bütün kontaktlar"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> üçün tez kontakt"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ad yoxdur)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Tez-tez əlaqə saxlanan"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Telefon nömrələri olan bütün kontaktlar"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"İş profili kontaktları"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Güncəlləşmələri göstər"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Cihaz"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ad"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nik"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ad"</string>
+ <string name="name_family" msgid="7466985689626017037">"Soyad"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Ad prefiksi"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Atasının adı"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Ad suffiksi"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetik ad"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetik ad"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetik atasının adı"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetik soyad"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-poçt"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Ünvan"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Təşkilat"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Əlaqə"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Xüsusi tarix"</string>
+ <string name="sms" msgid="1756857139634224222">"Mətn mesajı"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Ünvan:"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Şirkət"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Başlıq"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Qeydlər"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Fərdi"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Veb sayt"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"İşarələr"</string>
+ <string name="email_home" msgid="8573740658148184279">"Evə e-məktub yazın"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Mobil ünvana e-məktub"</string>
+ <string name="email_work" msgid="2807430017302722689">"İşə e-məktub yazın"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-poçt"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ünvanına məktub göndərin"</string>
+ <string name="email" msgid="5668400997660065897">"E-poçt"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Küçə"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Şəhər"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Dövlət"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poçt indeksi"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Ölkə"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ev ünvanına baxın"</string>
+ <string name="map_work" msgid="1360474076921878088">"İş ünvanına baxın"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ünvana baxın"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>ünvanına baxın"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM üzərindən çat"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live üzərindən söhbət"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo üzərindən çat"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype üzərindən çat"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ üzərindən çat"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Söhbət üzərindən çat"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ üzərindən çat"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber üzərindən çat"</string>
+ <string name="chat" msgid="9025361898797412245">"Çat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"sil"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Daha çox ad sahələri göstərin"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ad sahələrini yığcamlaşdırın"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Daha çox fonetik ad sahələri göstərin"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ad sahələrini yığcamlaşdırın"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Genişləndirin"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Yığcamlaşdırın"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Genişləndirilib"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Yığcamlaşdırılıb"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Bütün kontaktlar"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Ulduzlu"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Fərdiləşdirin"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Bütün digər kontaktlar"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Bütün kontaktlar"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Sinxronizasiya qrupunu silin"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Sinx qrup əlavə edin"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Daha çox qrup..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" qrupunun sinxronlaşmadan silinməsi istənilən qrupsuz kontaktı da sinxronlaşmadan siləcək."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Displey seçənəkləri yadda saxlanır..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Fərdiləşdirilmiş görünüş"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"İmport olunan kontaktları yadda saxlayın:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SİM kart"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SİM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakt</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf faylı"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"İmport etmək üçün heç nə yoxdur"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Kontaktlar vCard\'dan import edilsin?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> importu ləğv olunsun?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> eksportu ləğv edilsin?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Vizit kart importunu/eksportunu ləğv etmək mümkün olmadı"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Naməlum xəta."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" açmaq olmadı: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksporteri başlatmaq olmadı: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksport edilə bilən heç bir kontakt yoxdur."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Tələb olunan icazəni deaktiv etmisiniz."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksport zamanı xəta baş verdi: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O xəta"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Yetərincə yaddaş yoxdur. Fayl çox böyük ola bilər."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format dəstəklənmir."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> eksportu bitdi."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktların eksportu tamamlandı."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktların eksportu tamamlandı, kontaktları paylaşmaq üçün bildirişə tıklayın."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Kontaktları paylaşmaq üçün toxunun."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> eksportu ləğv edildi."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontakt datası eksport olunur"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakt datası eksport olunur."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Verilənlər bazası məlumatları əldə oluna bilmədi."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Burada eksport edilə bilən kontakt yoxdur."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Vizit kart tərtibçisi düzgün başlamadı."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport edilə bilmədi"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakt datası eksport edilmədi.\nSəbəb: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> import edilir"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Vizit kart datası oxuna bilmədi"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vizit kart importu qurtardı"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> importu ləğv edildi"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tezliklə import olunacaq."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Bu fayl tezliklə import ediləcək."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Vizit kart import sorğusu rədd edildi. Yenidən cəhd edin."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktlar tezliklə eksport ediləcək."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Vizit kart eksport sorğusu rədd edildi. Daha sonra cəhd edin."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Vizit kart yerli müvəqqəti yaddaşa keşlənir. Hazırkı import tezliklə başlayacaq."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Vizit kart import edilə bilmədi."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC üzərindən alınıb"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Keşləndirilir"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"İmport edilir: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf fayldan eksport edin"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sıralayın:"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetik ad"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Həmişə göstərin"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Boşdursa gizlədin"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ad"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Soyad"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ad formatı"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Ad ilk yazılsın"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Soyad ilk yazılsın"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Hesablar"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Yeni kontaktlar üçün defolt hesab"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Məlumatlarım"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Profilinizi quraşdırın"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Kontaktlar Haqqında"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevdiyiniz kontaktları paylaşın"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Bütün kontaktları paylaşın"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktları paylaşmaq uğursuz oldu."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kontaktları eksport edin"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontaktları buradan import edin:"</string>
+ <string name="share_error" msgid="948429331673358107">"Bu kontakt paylaşıla bilməz."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Bölüşmək üçün kontakt yoxdur."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Göstərilməli kontaktlar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Göstəriləsi kontaktlar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Görünüşü fərdiləşdirin"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Yadda saxlayın"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Kontakt axtarın"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritlər"</string>
+ <string name="menu_import" msgid="6107961135813836467">"İmport edin"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksport edin"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklanmış nömrələr"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> vasitəsilə"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> vasitəsilə <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"axtarışı dayandırın"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Axtarışı təmizləyin"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Hesab"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Həmişə bu zənglər üçün istifadə edin"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Qeyd ilə zəng edin"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Zəng ilə göndərmək üçün qeyd yazın..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"GÖNDƏRİN &amp; ZƏNG EDİN"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Quruluş versiyası"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Mənbə lisenziyalarını açın"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Açıq mənbə proqramı üçün lisenziya detalları"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Məxfilik siyasəti"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Xidmət şərtləri"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Mənbə lisenziyalarını açın"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Linki açmaq alınmadı."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> yoxlanılıb"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> yoxlanılmayıb"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Video zəng edin"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Silin"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> dəq <xliff:g id="SECONDS">%2$s</xliff:g> san"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> saat <xliff:g id="MINUTES_1">%2$s</xliff:g> dəqiqə <xliff:g id="SECONDS">%3$s</xliff:g> saniyə"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu qısayol deaktiv edildi"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt silindi"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"İmport"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kontaktları seçin"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM kartınızda kontakt yoxdur"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt artıq siyahıda var"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM kontakt import edildi</item>
+ <item quantity="one">1 SIM kontakt</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM kontaktları import etmək olmadı"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM kartdan import edin"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Ləğv edin"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Avto-sinxronizasiya deaktivdir. Aktiv etmək üçün toxunun."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Yığışdırın"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Avto-sinxronizasiya deaktivdir. Aktiv etmək üçün toxunun."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Avto-sinxronizasiya aktiv edilsin?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Sadəcə Google Kontaktlar deyil, bütün tətbiq və hesablarda edəcəyiniz dəyişikliklər veb və cihaz arasında saxlanacaq."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktiv edin"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Bağlantı yoxdur"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Daha çox göstərin"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartın importu tamamlandı"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"İmport alınmadı"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktları SIM kartdan import etmək olmadı"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM import edilir"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Bildirişlər"</string>
+</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 59b65b685..fc5c55383 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakti"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Prikaži kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Izmeni kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direktno biranje"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direktna poruka"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Odaberite prečicu za kontakt"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Odaberite broj za poziv"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Odaberite broj za SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Izaberite kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodajte kontaktu"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberite kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Izaberite"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Sa zvezdicom"</string>
- <string name="frequentList" msgid="7154768136473953056">"Česti"</string>
- <string name="strequentList" msgid="5640192862059373511">"Omiljeno"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalji o kontaktu"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Izmeni kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Napravi kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Izmeni grupu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Napravi grupu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Osnovni podaci"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
<string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Prikaži kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj u omiljene kontakte"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz omiljenih kontakata"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno je iz Omiljenog"</string>
@@ -49,41 +35,59 @@
<string name="menu_editContact" msgid="9042415603857662633">"Izmeni"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Promeni sliku"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Postavi na Početni ekran"</string>
- <string name="menu_call" msgid="3992595586042260618">"Pozovi kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Pošalji SMS kontaktu"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Napravi prečicu"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Razdvoji"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Izmeni"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Izbriši"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodaj kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodaj grupu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Ukloni kontakte"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznaku"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Izbriši oznaku"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Izaberi kontakte"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodaj kontakte"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ukloni iz oznake"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Napravi oznaku"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Želite li da razdvojite ovaj kontakt u više kontakata?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdvoji"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Želite li da sačuvate promene koje ste već obavili i razdvojite ovaj kontakt u više kontakata?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Sačuvaj i razdvoji"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Želite li da sačuvate promene koje ste već obavili i objedinite ovaj kontakt sa izabranim kontaktom?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Sačuvaj i objedini"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Povezuje se"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Opoziva se veza"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Objedini"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Prikaži objedinjene kontakte"</string>
<string name="menu_save" msgid="1727844363591825909">"Sačuvaj"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Objedinite kontakte"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izaberite kontakt koji želite da objedinite sa kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži sve kontakte"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakti su povezani sa <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su objedinjeni"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> je izbrisan/a"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> i <xliff:g id="NAME_1">%2$s</xliff:g> su izbrisani"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… su izbrisani"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Kontakti su izbrisani</item>
<item quantity="few">Kontakti su izbrisani</item>
<item quantity="other">Kontakti su izbrisani</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Sa Google-a"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Podesi melodiju zvona"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Svi pozivi u govornu poštu"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakti sa naloga koji su samo za čitanje ne mogu da se izbrišu, ali mogu da se sakriju."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Sakrij"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt koji ste izabrali za brisanje sadrži detalje sa više naloga. Detalji sa naloga koji su samo za čitanje će biti skriveni, ali ne i izbrisani."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Treba da izaberete najmanje dva kontakta da biste ih objedinili."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Želite li da objedinite izabrane kontakte?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Objedini"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Usmeri na govornu poštu"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ne usmeravaj na govornu poštu"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ovaj kontakt je samo za čitanje. Ne možete da ga izbrišete, ali možete da ga sakrijete."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Sakrij kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Nalozi koji su samo za čitanje u okviru ovog kontakta će biti skriveni, a ne izbrisani."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Želite li da izbrišete ovaj kontakt?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Želite li da izbrišete izabrane kontakte?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakti sa naloga koji su samo za čitanje ne mogu da se izbrišu, ali mogu da se sakriju."</string>
@@ -91,252 +95,445 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ako izbrišete ovaj kontakt, biće izbrisani detalji sa više naloga."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Želite li da izbrišete ovaj kontakt?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Odbaci promene"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt ne postoji."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt je dodat na početni ekran."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> je dodat na početni ekran."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Napravite novi kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Napravi novi kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacija"</item>
- <item msgid="7196592230748086755">"Napomena"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Slike nisu dostupne na tabletu."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Na telefonu nema dostupnih slika."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Na uređaju nije pronađena nijedna slika."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Slika kontakta"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Naziv prilagođene oznake"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Šalji pozive direktno u glasovnu poštu"</string>
<string name="removePhoto" msgid="4898105274130284565">"Ukloni sliku"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nema kontakata"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nema grupa."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Morate da imate nalog da biste mogli da pravite grupe."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nema ljudi u ovoj grupi."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Da biste dodali neke, izmenite grupu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Čuvanje kontakta je u toku..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Lista kontakata je prazna"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata sa ovom oznakom"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom nalogu"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Lista kontakata je prazna"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontakt <xliff:g id="DISPLAY_NAME">%s</xliff:g> je sačuvan"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je sačuvan"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakti su razdvojeni"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nije moguće sačuvati izmene kontakata."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Razdvajanje kontakta na više njih nije uspelo."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Objedinjavanje kontakata nije uspelo."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Došlo je do greške pri čuvanju kontakta."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Čuvanje izmena slike kontakta nije uspelo."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupa je sačuvana."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nije moguće sačuvati izmene grupa."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt sa brojem telefona</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta sa brojevima telefona</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata sa brojevima telefona</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nema kontakata sa brojevima telefona"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">pronađen je <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">pronađena su <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">pronađeno je <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Čuvanje promena kontakta nije uspelo"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Razdvajanje kontakta nije uspelo"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Objedinjavanje kontakata nije uspelo"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Greška pri čuvanju kontakta"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Čuvanje promena slike kontakta nije uspelo"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Učitavanje oznake nije uspelo"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je napravljena"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Pravljenje oznake nije uspelo"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonili smo iz oznake"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodato je u oznaku"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Čuvanje promena oznake nije uspelo"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznaka već postoji"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Neki kontakti nemaju imejl adresu."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Neki kontakti nemaju broj telefona."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Pošalji imejl"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Pošalji poruku"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Izaberite kontakte"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Pošalji"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nema kontakata"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">pronađen je <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">pronađena su <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">pronađeno je <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Sve"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Omiljeno"</string>
- <string name="callBack" msgid="5498224409038809224">"Uzvrati poziv"</string>
- <string name="callAgain" msgid="3197312117049874778">"Pozovi ponovo"</string>
- <string name="returnCall" msgid="8171961914203617813">"Uzvrati poziv"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite li da dodate imejl adresu „<xliff:g id="EMAIL">%s</xliff:g>“ u kontakte?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"slika kontakta"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontak(a)ta"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imena kontakata"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nije pronađena nijedna aplikacija koja bi mogla da izvrši ovu radnju."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite da biste se vratili na prethodni ekran"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodajte broj telefona"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Dodajte imejl"</string>
<string name="missing_app" msgid="1466111003546611387">"Nije pronađena nijedna aplikacija koja bi mogla da obavi ovu radnju."</string>
<string name="menu_share" msgid="943789700636542260">"Deli"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Dodaj u kontakte"</string>
- <string name="share_via" msgid="563121028023030093">"Deli kontakt preko"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Pravljenje grupe na nalogu"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Dodaj"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Delite kontakte preko</item>
+ <item quantity="few">Delite kontakte preko</item>
+ <item quantity="other">Delite kontakte preko</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Izaberite nalog"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Napravite oznaku"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Preimenujte oznaku"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Ime oznake"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Ime oznake"</string>
<string name="audio_chat" msgid="2535716629358298691">"Audio ćaskanje"</string>
<string name="video_chat" msgid="1872255818640336072">"Video ćaskanje"</string>
- <string name="connections" msgid="8098440723172028350">"Veze"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Dodaj vezu"</string>
- <string name="recent" msgid="2659189233141493004">"Nedavno"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nedavna ažuriranja"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> nalog"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ne može da se izmeni iz ove aplikacije."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ne može da se menja na ovom uređaju."</string>
<string name="take_photo" msgid="7496128293167402354">"Slikaj"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Slikaj novu sliku"</string>
<string name="pick_photo" msgid="2129509985223564942">"Izaberi sliku"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Izaberi novu sliku"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontakt lista se ažurira."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Pretražuje se..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Prikaži izabrano"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Prikaži sve"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Izaberi sve"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Poništi sve izbore"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Dodaj organizaciju"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Naziv grupe"</string>
- <string name="change_photo" msgid="8530597935483526383">"Promeni"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Glavna slika"</string>
- <string name="description_star" msgid="2605854427360036550">"omiljeno"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Izmenite kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Želite li da aktuelni kontakt objedinite sa izabranim kontaktom?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Otkaži"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Nazad"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvorite"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Želite li da prebacite na uređivanje izabranog kontakta? Biće kopirane informacije koje ste uneli do sada."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj u moje kontakte"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj u Moje kontakte"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Prilagođeno"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Podešavanja"</string>
<string name="menu_settings" msgid="377929915873428211">"Podešavanja"</string>
<string name="menu_help" msgid="1680178646764069976">"Pomoć i povratne informacije"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcije prikaza"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Broj telefona"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj u kontakte"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodajte kontaktu"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zatvori"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Prikaži godinu"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Učitava se…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Napravi novi kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodajte nalog"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Pravljenje nove grupe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Napravi novu grupu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Želite li da izbrišete grupu „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontakti neće biti izbrisani.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba sa naloga <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osobe sa naloga <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba sa naloga <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osobe</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Napravi novu…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Želite da izbrišete oznaku „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontakti neće biti izbrisani.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Unesite ime kontakta pre nego što ga objedinite sa drugim kontaktom."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiraj u priv. memoriju"</string>
<string name="set_default" msgid="4417505153468300351">"Postavi na podrazumevano"</string>
<string name="clear_default" msgid="7193185801596678067">"Obriši podrazumevanu vrednost"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst je kopiran"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite li da odbacite promene i prekinete sa izmenama?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Želite da odbacite promene?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nastavi izmene"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Podesi moj profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Unesite ime osobe"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Naziv grupe"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Otkaži"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite da odbacite prilagođavanja?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pretražite kontakte"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Uklonite kontakte"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Moj <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profil"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikazani su svi kontakti"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte bezbednost kontakata čak i ako izgubite telefon – sinhronizujte sa uslugom na mreži."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodavanje naloga"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Neće biti napravljena rezervna kopija novog kontakta. Želite li da dodate nalog koji pravi rezervnu kopiju kontakata onlajn?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojte malo vremena da biste dodali nalog pomoću kog ćete napraviti rezervnu kopiju kontakata na Google-u."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti će biti sačuvani na nalogu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izaberite podrazumevani nalog za nove kontakte:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj novi kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Novi kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Izmenite kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Zadrži lokalno"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Samo pregled"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Izaberite kontakt za izmenu"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Objedinjeni kontakti"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Dodaj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Razdvoj"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj nalog"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj novi nalog"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Izvezi datoteke baze podataka"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodavanje novog kontakta"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Napravi novi kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Prikaži više"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Prikaži manje"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Prikaži sve"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
<string name="about_card_title" msgid="2920942314212825637">"Osnovni podaci"</string>
- <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Pravljenje lične kopije..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Juče"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Pravljenje lične kopije..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
<string name="today" msgid="8041090779381781781">"Danas"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sutra u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Nenaslovljeni događaj)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Podesi"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Razmena trenutnih poruka"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Trenutne poruke"</string>
<string name="header_organization_entry" msgid="8515394955666265406">"Organizacija"</string>
<string name="header_nickname_entry" msgid="6743561883967451485">"Nadimak"</string>
<string name="header_note_entry" msgid="4320190426480612344">"Beleška"</string>
<string name="header_website_entry" msgid="1411467850000824745">"Veb-sajt"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Događaj"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Odnos"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Nalog"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Imejl"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Slika"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da biste proširili uređivač kontakata."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da biste skupili uređivač kontakata."</string>
<string name="content_description_directions" msgid="2686791825798189335">"uputstva do lokacije"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Nedavni SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Kliknite za odgovor"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Nedavni SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Kliknite za odgovor"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"dolazni"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odlazni"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"propušteni"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Nedavni poziv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Kliknite za povratni poziv"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Nedavni poziv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Kliknite za povratni poziv"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts radi bolje kad unesete Hangouts identifikator osobe u polje za imejl adresu ili broj telefona."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Još polja"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promenite sliku"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje uređivača nije uspelo."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Čuva se"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se čuva na nalogu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dodirnite dvaput da biste izabrali drugi nalog."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Objedinjeni kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Objedinjeni kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Objedinjeni kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Objedinjenih kontakata: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Još polja"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Promenite sliku kontakta"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodajte sliku kontakta"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Slika kontakta"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Otvaranje uređivača nije uspelo."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Čuva se na"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Nije moguće izmeniti kontakt informacije sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"OBJEDINI KONTAKTE"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"OTKAŽI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> moguć duplikat</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> moguća duplikata</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mogućih duplikata</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> objedinjen kontakt</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> objedinjena kontakta</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> objedinjenih kontakata</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ovaj kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogući duplikati"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Izgleda da su ovi kontakti ista osoba. Možete da ih objedinite u jedan kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Objedinjeni kontakti"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Sa vaših naloga"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Slikaj"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Sve slike"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Izaberite sliku"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Sa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Slika sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> naloga <xliff:g id="USER_NAME">%s </xliff:g> nije označena"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Slika sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> naloga <xliff:g id="USER_NAME">%s </xliff:g> je označena"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Slika sa nepoznatog naloga nije označena"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Slika sa nepoznatog naloga je označena"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Lista kontakata se trenutno ažurira kako bi se primenila promena jezika.\n\nSačekajte..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Predlozi"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvori fioku za navigaciju"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zatvori fioku za navigaciju"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Oznaka <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Oznake"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Nalozi"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Pregledajte zajedničku istoriju"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Događaji i poruke"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Događaji"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Poruke"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Predlozi"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Neka vam kontakti budu organizovani i korisni"</string>
+ <string name="undo" msgid="1425165101664071422">"Opozovi"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Pozovi kućni telefon"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Pozovi mobilni telefon"</string>
+ <string name="call_work" msgid="5328785911463744028">"Pozovi poslovni telefon"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Pozovi faks"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Pozovi kućni faks"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Pozovi pejdžer"</string>
+ <string name="call_other" msgid="8563753966926932052">"Pozovi"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Pozovi za povratni poziv"</string>
+ <string name="call_car" msgid="3280537320306436445">"Pozovi telefon u automobilu"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Pozovi glavni telefon preduzeća"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Pozovi ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Pozovi glavni telefon"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Pozovi faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Pozovi mobilni telefon"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Pozovi teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Pozovi TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Pozovi poslovni mobilni telefon"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Pozovi poslovni pejdžer"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Pozovi MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pozovi)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Pošalji SMS na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Pošalji SMS na kućni telefon"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Pošalji SMS na mobilni telefon"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Pošalji SMS na poslovni telefon"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Pošalji SMS na poslovni faks"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Pošalji SMS na kućni faks"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Pošalji SMS na pejdžer"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Pošalji SMS za povratni poziv"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Pošalji SMS na telefon u automobilu"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Pošalji SMS na glavni broj telefona preduzeća"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Pošalji SMS na ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Pošalji SMS na glavni telefon"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Pošalji SMS na faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Pošalji SMS na mobilni telefon"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Pošalji SMS na teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Pošalji SMS na TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Pošalji SMS na poslovni mobilni telefon"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Pošalji SMS na pejdžer"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Pošalji SMS na <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Pošalji SMS na MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pošalji SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Uputite video poziv"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Brisanje često kontaktiranih?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Obrisaćete listu često kontaktiranih u aplikacijama Kontakti i Telefon, pa će imejl aplikacije morati iz početka da prikupe informacije o adresiranju."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Dostupan/na"</string>
+ <string name="status_away" msgid="1838861100379804730">"Odsutan/na"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zauzet/a"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Drugo"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Katalog za Work"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za korisnika <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti sa brojevima telefona"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakti sa profila za Work"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Uređaj"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+ <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefiks za ime"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Srednje slovo"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufiks imena"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Ime – fonetski"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Ime – fonetski"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Srednje ime – fonetski"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Prezime – fonetski"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Imejl"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Trenutne poruke"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Poseban dan"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Preduzeće"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Beleške"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Veb-sajt"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+ <string name="email_home" msgid="8573740658148184279">"Pošalji imejl na kućnu imejl adresu"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Pošalji imejl na broj mobilnog telefona"</string>
+ <string name="email_work" msgid="2807430017302722689">"Pošalji imejl na poslovni broj telefona"</string>
+ <string name="email_other" msgid="3454004077967657109">"Pošalji imejlom"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Pošalji imejl na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Pošalji imejlom"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Država"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Zemlja"</string>
+ <string name="map_home" msgid="1243547733423343982">"Prikaži kućnu adresu"</string>
+ <string name="map_work" msgid="1360474076921878088">"Prikaži poslovnu adresu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Prikaži adresu"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Prikaži adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Započni ćaskanje preko AIM-a"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Započni ćaskanje preko Windows Live-a"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Započni ćaskanje preko Yahoo-a"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Započni ćaskanje preko Skype-a"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Započni ćaskanje preko QQ-a"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Ćaskaj preko Google Talk-a"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Započni ćaskanje preko ICQ-a"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Započni ćaskanje preko Jabber-a"</string>
+ <string name="chat" msgid="9025361898797412245">"Ćaskanje"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Prikažite još polja za ime"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skupite polja za ime"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Prikažite još polja za fonetsko ime"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skupite polja za fonetsko ime"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Proširite"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Skupite"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno je"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skupljeno je"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Sa zvezdicom"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Svi drugi kontakti"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Svi kontakti"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu za sinhronizaciju"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupu za sinhronizaciju"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Još grupa…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanjem grupe „<xliff:g id="GROUP">%s</xliff:g>“ sa liste za sinhronizaciju uklonićete i sve negrupisane kontakte sa te liste."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Čuvanje opcija prikaza je u toku..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Sačuvajte uvezene kontakte na:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Sa SIM kartice"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Sa SIM kartice <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d kontakt</item>
+ <item quantity="few">%1$d kontakta</item>
+ <item quantity="other">%1$d kontakata</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakta • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakata • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Iz .vcf datoteke"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nema ničega za uvoz"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Želite da uvezete kontakte iz vCard datoteke?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Želite li da otkažete uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Želite li da otkažete izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nije moguće otkazati vCard uvoz/izvoz"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata greška."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nije moguće otvoriti datoteku „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nije moguće pokrenuti program za izvoz: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema kontakata za izvoz."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste obaveznu dozvolu."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Došlo je do greške pri izvozu: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O greška"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Datoteka je možda prevelika."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz kontakata je završen."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz kontakata je završen. Kliknite na obaveštenje da biste ih delili."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dodirnite da biste delili kontakte."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka o kontaktima je u toku"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci o kontaktima se izvoze."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nije moguće preuzeti informacije iz baze podataka"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nema kontakata koje je moguće izvesti."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Program za izradu vCard datoteka se nije ispravno pokrenuo."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nije moguće izvesti"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci o kontaktima nizu izvezeni.\nRazlog: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Uvoz <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nije moguće čitati vCard podatke"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je završen"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti uvezena."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka će uskoro biti uvezena."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtev za izvoz vCard datoteke je odbijen. Pokušajte kasnije."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će uskoro biti izvezeni."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtev za izvoz vCard datoteke je odbijen. Pokušajte kasnije."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Keširanje vCard datoteke u lokalnu privremenu memoriju. Uvoz će uskoro započeti."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nije moguće uvesti vCard datoteku."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt preko NFC-a"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Keširanje..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Uvoz <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Izvezi u .vcf datoteku"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortiraj prema"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Ime i prezime – fonetski"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Uvek prikazuj"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Sakrij ako je prazno"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Prezime"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format imena"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Prvo ime"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Prvo prezime"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Nalozi"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Podrazumevani nalog za nove kontakte"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Podesite profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O Kontaktima"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Deli omiljene kontakte"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Deli sve kontakte"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Deljenje kontakata nije uspelo."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Izvezite kontakte"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Uvezite kontakte"</string>
+ <string name="share_error" msgid="948429331673358107">"Ovaj kontakt ne može da se deli."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za deljenje."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Prilagodite prikaz"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Sačuvaj"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pretražite kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Omiljeno"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Uvezi"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Izvezi"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"preko <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> preko <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavite pretraživanje"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Brisanje pretrage"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Nalog"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Uvek koristi ovo za pozive"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Uputi poziv sa beleškom"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Unesite belešku koju ćete poslati uz poziv…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I POZOVI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Verzija"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podaci o licenci za softver otvorenog koda"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Politika privatnosti"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Uslovi korišćenja usluge"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licence otvorenog koda"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Otvaranje URL-a nije uspelo."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Označeno: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Nije označeno: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Uputite video poziv"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Izbrišite"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Tri tačke"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> s <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sek"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ova prečica je onemogućena"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt je uklonjen"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Uvezi"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Izaberite kontakte"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nema kontakata na SIM kartici"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt je već na listi"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Uvezen je <xliff:g id="COUNT">%d</xliff:g> kontakt sa SIM kartice</item>
+ <item quantity="few">Uvezena su <xliff:g id="COUNT">%d</xliff:g> kontakta sa SIM kartice</item>
+ <item quantity="other">Uvezeno je <xliff:g id="COUNT">%d</xliff:g> kontakata sa SIM kartice</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Uvoz kontakata sa SIM kartice nije uspeo"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Uvezite sa SIM-a"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Otkažite"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatska sinhronizacija je isključena. Dodirnite da biste je uključili."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Odbacite"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinhronizacija naloga je isključena. Dodirnite da biste je uključili."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Želite da uključite automatsku sinhronizaciju?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Na vebu i uređajima će se redovno ažurirati promene koje unosite u svim aplikacijama i na svim nalozima, a ne samo u Google kontaktima."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Uključi"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Veza nije uspostavljena"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Prikaži više"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Uvoz sa SIM kartice je završen"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspeo"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Uvoz kontakata sa SIM kartice nije uspeo"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvozi se sa SIM-a"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obaveštenja"</string>
</resources>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
deleted file mode 100644
index 6b60b3a0d..000000000
--- a/res/values-be-rBY/strings.xml
+++ /dev/null
@@ -1,353 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Кантакты"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Кантакты"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Прагледзець кантакт"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Рэдагаваць кантакт"</string>
- <string name="contactsList" msgid="8661624236494819731">"Кантакты"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Кантакт"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Хуткі выклік"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Хуткае паведамл."</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Выберыце кантакт"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Выберыце нумар"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Выберыце нумар"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Дадаць у кантакт"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выберыце кантакт"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Стварыць новы кантакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Пазначана"</string>
- <string name="frequentList" msgid="7154768136473953056">"Частыя"</string>
- <string name="strequentList" msgid="5640192862059373511">"Любімыя"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Дадзеныя кантакта"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Рэдагаваць кантакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Стварыць кантакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Рэдагаваць групу"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Стварыць групу"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Інфармацыя"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Абнаўленні"</string>
- <string name="searchHint" msgid="8482945356247760701">"Пошук кантактаў"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Прагледзець кантакт"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Дадаць у абраныя"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Выдаліць з абраных"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Выдалена з упадабаных"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Дададзена ва ўпадабаныя"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Рэдагаваць"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Выдаліць"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Змяніць фота"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Размясціць на галоўным экране"</string>
- <string name="menu_call" msgid="3992595586042260618">"Выклікаць кантакт"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Паведамленне кантакту"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Выдаліць сувязь"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Рэдагаваць"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Выдаліць"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Дадаць кантакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Дадаць групу"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Раз\'яднаць гэты кантакт на некалькі кантактаў?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раз\'яднаць"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Жадаеце захаваць змяненні, якія вы ўжо зрабілі, і развязаць гэты кантакт на некалькі кантактаў?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Захаваць і развязаць"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Жадаеце захаваць змяненні, якія вы ўжо зрабілі, і спасылку на выбраны кантакт?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Захаваць і звязаць"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Звязаць"</string>
- <string name="menu_save" msgid="1727844363591825909">"Захаваць"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Звязаць кантакты"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Выберыце кантакт, які хочаце звязаць з iмем <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Паказаць усе кантакты"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Прапанаваныя кантакты"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усе кантакты"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Кантакты звязаны"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">Кантакты выдалены</item>
- <item quantity="few">Кантакты выдалены</item>
- <item quantity="many">Кантакты выдалены</item>
- <item quantity="other">Кантакты выдалены</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Задаць рынгтон"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Усе выклікі на галасавую пошту"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Кантакты з уліковых запісаў, даступных толькі для чытання, нельга выдаліць, але іх можна схаваць."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Схаваць"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Кантакт на выдаленне мае інфармацыю з некалькіх уліковых запісаў. Інфармацыя з уліковых запісаў, даступных толькі для чытання, будзе схавана, а не выдалена."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Трэба, па меншай меры, два кантакты, каб выканаць звязванне."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Звязаць выдаленыя кантакты?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Звязаць"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Выдаліць гэты кантакт?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Выдаліць выбраныя кантакты?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Кантакты з уліковых запісаў, даступных толькі для чытання, нельга выдаліць, але іх можна схаваць."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Кантакты на выдаленне змяшчаюць інфармацыю з некалькіх уліковых запісаў. Інфармацыя з уліковых запісаў, даступных толькі для чытання, будзе схавана, а не выдалена."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Выдаленне гэтага кантакту выдаліць інфармацыю з некалькіх уліковых запісаў."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Выдаліць гэты кантакт?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Выдаліць"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Скасаваць змены"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Кантакт не існуе."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Кантакт дададзены на Галоўны экран."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> дададзены на Галоўны экран."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Стварыць новы кантакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Стварыць новы кантакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Установа"</item>
- <item msgid="7196592230748086755">"Нататкі"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"На планшэце няма фатаграфій."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"На тэлефоне няма даступных малюнкаў."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фота кантакта"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Імя карыстальніцкага цэтліка"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Адпраўляць выклікі непасрэдна на галасавую пошту"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Выдаліць фота"</string>
- <string name="noContacts" msgid="4955659076981974652">"Няма кантактаў"</string>
- <string name="noGroups" msgid="8614664663561385253">"Няма груп."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Для стварэння групы патрабуецца ўліковы запіс."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"У гэтай групе няма карыстальнiкаў."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Каб дадаць, змянiце групу."</string>
- <string name="savingContact" msgid="4075751076741924939">"Захаванне кантакту..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Кантакт захаваны"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Кантакты раз\'яднаны"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Немагчыма захаваць змены кантакта."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не ўдалося скасаваць сувязь з кантактам."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не ўдалося падлучыць кантакт."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Памылка пры захаванні кантакту."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не ўдалося захаваць змяненні фота кантакту."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Група захаваная."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Немагчыма захаваць змены групы."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> кантакт з нумарам(і) тэлефона(ў)</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> кантакты з нумарамі тэлефонаў</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> кантактаў з нумарамі тэлефонаў</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> кантакту з нумарам(і) тэлефона(ў)</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Няма кантактаў з нумарамі тэлефонаў"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> знойдзены</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> знойдзены</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> знойдзена</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> знойдзена</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Кантактаў няма"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> знойдзены</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> знойдзены</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> знойдзена</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> знойдзена</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Усе"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Абраныя"</string>
- <string name="callBack" msgid="5498224409038809224">"Зваротны выклік"</string>
- <string name="callAgain" msgid="3197312117049874778">"Выклікаць зноў"</string>
- <string name="returnCall" msgid="8171961914203617813">"Зваротны выклік"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Дадаць адрас \"<xliff:g id="EMAIL">%s</xliff:g>\" у кантакты?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"фатаграфія кантакта"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> з <xliff:g id="TOTAL_NUMBER">%s</xliff:g> кантактаў"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Імёны вашых кантактаў"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Не знойдзена прыкладанне для гэтага дзеяння."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Націсніце, каб вярнуцца на папярэдні экран"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Дадаць нумар тэлефона"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Дадаць адрас электроннай пошты"</string>
- <string name="missing_app" msgid="1466111003546611387">"Не знойдзена праграма для гэтага дзеяння."</string>
- <string name="menu_share" msgid="943789700636542260">"Абагуліць"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Дадаць у кантакты"</string>
- <string name="share_via" msgid="563121028023030093">"Абагуліць кантакт з дапамогай"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Стварыць групу ва ўліковым запісе"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Галасавы чат"</string>
- <string name="video_chat" msgid="1872255818640336072">"Відэачат"</string>
- <string name="connections" msgid="8098440723172028350">"Сувязi"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Дадаць кантакт"</string>
- <string name="recent" msgid="2659189233141493004">"Нядаўнія"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Апошнія абнаўленні"</string>
- <string name="account_type_format" msgid="718948015590343010">"Кантакт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Уліковы запіс <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Не рэдагуецца гэтым прыкладаннем."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Нельга рэдагаваць на гэтай прыладзе."</string>
- <string name="take_photo" msgid="7496128293167402354">"Зрабіць фота"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Зрабiць новую фатаграфію"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Выбраць фота"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Выбраць новае фота"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Спiс кантактаў абнаўляецца."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Пошук..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Паказаць выбраныя"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Паказаць усіх"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Выбраць усе"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Адмяніць выбар для ўсіх"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Дадаць новы"</string>
- <string name="add_organization" msgid="7311893231158291197">"Дадаць арганізацыю"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Назва групы"</string>
- <string name="change_photo" msgid="8530597935483526383">"Змяніць"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Асноўнае фота"</string>
- <string name="description_star" msgid="2605854427360036550">"выбранае"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Рэдагаваць кантакт"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Звязаць бягучы кантакт з выбраным кантактам?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Пераключыцца ў рэжым рэдагавання выбранага кантакту? Інфармацыя, якую вы ўвялі да гэтага часу, будзе скапіявана."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Капіяваць у мае кантакты"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Дадаць да Маіх кантактаў"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Каталог <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Карыстальніцкі"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Налады"</string>
- <string name="menu_settings" msgid="377929915873428211">"Налады"</string>
- <string name="menu_help" msgid="1680178646764069976">"Даведка і водгукі"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Параметры адлюстравання"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Нумар тэлефона"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Дадаць у кантакты"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Дадаць у кантакт"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Закрыць"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Уключыць год"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Кантакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Загрузка..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Стварыць новы кантакт"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Дадаць уліковы запіс"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпартаваць кантакты"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Стварыць новую групу"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Стварыць новую групу"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> групы</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> груп</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групы</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Выдаліць групу \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Кантакты не будуць выдалены.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> чалавек з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> чалавекі з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> чалавек з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> чалавека з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> чалавек</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> чалавекі</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> чалавек</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> чалавека</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Перад звязваннем кантакту з іншым увядзіце імя кантакту."</string>
- <string name="copy_text" msgid="3257145021583508761">"Скапіраваць у буфер абмену"</string>
- <string name="set_default" msgid="4417505153468300351">"Усталяваць па змаўчанні"</string>
- <string name="clear_default" msgid="7193185801596678067">"Скінуць налады па змаўчанні"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Тэкст скапіяваны"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Адхіліць змены і скончыць рэдагаванне?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Адхіліць"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Працягнуць рэдагаванне"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Наладзіць мой профіль"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Тып імя чалавека"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Назва групы"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Мой лакальны профіль"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Мой профіль у <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Адлюстраванне ўсіх кантактаў"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Абаранiце свае кантакты, нават калі страціце тэлефон: сінхранізуйце iх з вэб-службай."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Дадаць уліковы запіс"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Рэзервовая копiя вашага новага кантакту не будзе створана. Дадаць улiковы запiс, у якiм будуць захоўвацца рэзервовыя копii кантактаў у Iнтэрнэце?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новыя кантакты будуць захаваны ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выбраць уліковы запіс па змаўчанні для новых кантактаў:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Новы кантакт"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Рэдагаваць кантакт"</string>
- <string name="keep_local" msgid="1258761699192993322">"Захоўваць лакальна"</string>
- <string name="add_account" msgid="8201790677994503186">"Дадаць уліковы запіс"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Дадаць новы ўліковы запіс"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Экспарт базы дадзеных файлаў"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"дадаць новы кантакт"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Болей"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Паказаць менш"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Прагледзець усё"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Нядаўнія"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Інфармацыя"</string>
- <string name="send_message" msgid="8938418965550543196">"Адправiць паведамленне"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Стварэнне асабістай копіі…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Учора"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Заўтра"</string>
- <string name="today" msgid="8041090779381781781">"Сёння"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Сёння ў перыяд <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Заўтра ў перыяд <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Падзея без назвы)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Задаць"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Iмгненныя паведамленні"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Арганізацыя"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Псеўданім"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Нататка"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Вэб-сайт"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Падзея"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Сувязь"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Уліковы запіс"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Імя"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Электронная пошта"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Тэлефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Фота"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Націсніце, каб разгарнуць рэдактар кантактаў."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Націсніце, каб згарнуць рэдактар кантактаў."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"напрамкі да месцазнаходжання"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"апошнія sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. націсніце, каб адказаць"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"уваходны"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"выходны"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"прапушчаны"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"апошні выклік. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. націсніце для зваротнага выкліку"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Вы: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts працуе лепш, калі вы ўводзіце ідэнтыфікатар асобы Hangouts у поле для адраса электроннай пошты ці тэлефона."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Дадатковыя палі"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Змяніць фота"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Збой адкрыцця рэдактара."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Куды захоўваць:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Зараз ідзе захаванне ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Двойчы дакраніцеся, каб выбраць іншы ўліковы запіс."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Звязаны кантакт (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Звязаныя кантакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Звязаныя кантакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Звязаныя кантакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Звязаных кантактаў: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ЗВЯЗАЦЬ КАНТАКТЫ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"СКАСАВАЦЬ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> магчымы дублікат</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> магчымыя дублікаты</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> магчымых дублікатаў</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> магчымага дубліката</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> звязаны кантакт</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> звязаныя кантакты</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> звязаных кантактаў</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> звязанага кантакту</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Гэты кантакт"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Магчымыя дублікаты"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Гэтыя кантакты могуць датычыць адной асобы. Іх можна звязаць, каб стварыць адзіны кантакт."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Падлучаныя кантакты"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"З вашых уліковых запісаў"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Зрабіць фотаздымак"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Усе фота"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Выбраць фота"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"З уліковага запісу <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Выдаліць <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Выдаліць <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фота з уліковага запісу <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>не пазначана"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Фота з уліковага запісу <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>пазначана"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Фота з невядомага ўліковага запісу не пазначана"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Пазначана фота з невядомага ўліковага запісу"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Спіс кантактаў абнаўляецца, каб адлюстраваць змяненне мовы.\n\nПачакайце..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблакіраваныя нумары"</string>
-</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
new file mode 100644
index 000000000..1a3146635
--- /dev/null
+++ b/res/values-be/strings.xml
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Кантакты"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Кантакты"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Дадаць кантакт"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Кантакт"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Хуткі выклік"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Хуткае паведамл."</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Выбраць кантакт"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Дадаць у кантакт"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выберыце кантакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Выбраць"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Новы кантакт"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Пошук кантактаў"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Дадаць у абраныя"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Выдаліць з абраных"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Выдалена з упадабаных"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Дададзена ва ўпадабаныя"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Рэдагаваць"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Выдаліць"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Змяніць фота"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Стварыць ярлык"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Выдаліць сувязь"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Выдаліць кантакты"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Перайменаваць метку"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Выдаліць метку"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Дадаць кантакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Вылучыце кантакты"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Дадаць кантакты"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Выдаліць з меткі"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Стварыць метку"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Раз\'яднаць гэты кантакт на некалькі кантактаў?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раз\'яднаць"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Жадаеце захаваць змяненні, якія вы ўжо зрабілі, і развязаць гэты кантакт на некалькі кантактаў?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Захаваць і развязаць"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Жадаеце захаваць змяненні, якія вы ўжо зрабілі, і спасылку на выбраны кантакт?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Захаваць і звязаць"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Ідзе звязванне"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ідзе выдаленне сувязі"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Звязаць"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Прагледзець звязаныя кантакты"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Захаваць"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Звязаць кантакты"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Выберыце кантакт, які хочаце звязаць з iмем <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Прапанаваныя кантакты"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усе кантакты"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Звязаны <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Кантакты звязаны"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Карыстальнік <xliff:g id="NAME">%1$s</xliff:g> выдалены"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Карыстальнікі <xliff:g id="NAME_0">%1$s</xliff:g> і <xliff:g id="NAME_1">%2$s</xliff:g> выдалены"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Карыстальнікі <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... выдалены"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">Кантакты выдалены</item>
+ <item quantity="few">Кантакты выдалены</item>
+ <item quantity="many">Кантакты выдалены</item>
+ <item quantity="other">Кантакты выдалены</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> кантакт</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> кантакты</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> кантактаў</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> кантакту</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> кантакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> кантакты · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> кантактаў · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> кантакту · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"З Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"З <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Задаць рынгтон"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Накіроўваць на галасавую пошту"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Адм. накірав. на галас. пошту"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Гэты кантакт толькі для чытання. Яго немагчыма выдаліць, але вы можаце яго схаваць."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Схаваць кантакт"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Уліковыя запісы толькі для чытання ў гэтым кантакце будуць схаваны, а не выдалены."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Выдаліць гэты кантакт?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Выдаліць выбраныя кантакты?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Кантакты з уліковых запісаў, даступных толькі для чытання, нельга выдаліць, але іх можна схаваць."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Кантакты на выдаленне змяшчаюць інфармацыю з некалькіх уліковых запісаў. Інфармацыя з уліковых запісаў, даступных толькі для чытання, будзе схавана, а не выдалена."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Выдаленне гэтага кантакту выдаліць інфармацыю з некалькіх уліковых запісаў."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Выдаліць гэты кантакт?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Выдаліць"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Кантакт не існуе."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Кантакт дададзены на Галоўны экран."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> дададзены на Галоўны экран."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"На прыладзе няма даступных малюнкаў."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фота кантакта"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Імя карыстальніцкага цэтліка"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Выдаліць фота"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Ваш спіс кантактаў пусты"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Няма кантактаў з гэтай меткай"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Няма кантактаў у гэтым уліковым запісе"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Ваш спіс кантактаў пусты"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Кантакт <xliff:g id="DISPLAY_NAME">%s</xliff:g> захаваны"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Кантакт захаваны"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Кантакты раз\'яднаны"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не ўдалося захаваць змены кантакту"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не ўдалося скасаваць сувязь з кантактам"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не ўдалося звязаць кантакт"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Памылка пры захаванні кантакту"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не ўдалося захаваць змяненні фота кантакту"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Збой загрузкі этыкеткі"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Метка выдалена"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Створана метка"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Немагчыма стварыць метку"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Метка абноўлена"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Выдалена з меткі"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Дададзена ў метку"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не ўдалося захаваць змяненні меткі"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Гэта метка ўжо існуе"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Некаторыя кантакты не маюць адрасоў электр. пошты."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Некаторыя кантакты не маюць нумароў тэлефона."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Адправіць электронны ліст"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Адправіць паведамленне"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Выберыце кантакты"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Адправіць"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Кантактаў няма"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Дадаць адрас \"<xliff:g id="EMAIL">%s</xliff:g>\" у кантакты?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Імёны вашых кантактаў"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Націсніце, каб вярнуцца на папярэдні экран"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Дадаць нумар тэлефона"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Дадаць адрас электроннай пошты"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Не знойдзена праграма для гэтага дзеяння."</string>
+ <string name="menu_share" msgid="943789700636542260">"Абагуліць"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Дадаць у кантакты"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Дадаць"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Абагуліць кантакты праз</item>
+ <item quantity="few">Абагуліць кантакты праз</item>
+ <item quantity="many">Абагуліць кантакты праз</item>
+ <item quantity="other">Абагуліць кантакты праз</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Выбраць уліковы запіс"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Стварыць метку"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Перайменаваць метку"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Назва меткі"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Назва меткі"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Галасавы чат"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Відэачат"</string>
+ <string name="account_type_format" msgid="718948015590343010">"Кантакт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Уліковы запіс <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Зрабіць фота"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Зрабiць новую фатаграфію"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Выбраць фота"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Выбраць новае фота"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Пошук..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Метка"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Скасаваць"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрыць"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Пераключыцца ў рэжым рэдагавання выбранага кантакту? Інфармацыя, якую вы ўвялі да гэтага часу, будзе скапіявана."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Каталог <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Налады"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Налады"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Даведка і водгукі"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Нумар тэлефона"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Дадаць у кантакты"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Закрыць"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Уключыць год"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Дадаць уліковы запіс"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Імпартаваць"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Стварыць новую..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Выдаліць метку \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Самі кантакты не будуць выдалены.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Перад звязваннем кантакту з іншым увядзіце імя кантакту."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Скапіраваць у буфер абмену"</string>
+ <string name="set_default" msgid="4417505153468300351">"Усталяваць па змаўчанні"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Скінуць налады па змаўчанні"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Тэкст скапіяваны"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Скасаваць змены?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Скасаваць"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Скасаваць"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Скінуць налады?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Пошук кантактаў"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Выдаліць кантакты"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Мой лакальны профіль"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Мой профіль у <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Знайдзіце хвілінку, каб дадаць уліковы запіс, які дазволіць стварыць рэзервовую копію вашых кантактаў у Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новыя кантакты будуць захаваны ва ўліковы запіс <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выбраць уліковы запіс па змаўчанні для новых кантактаў:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Новы кантакт"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Рэдагаваць кантакт"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Толькі прагляд"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Выбраць кантакт для рэдагавання"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Звязаныя кантакты"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Дадаць"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Выдаліць сувязь"</string>
+ <string name="add_account" msgid="8201790677994503186">"Дадаць уліковы запіс"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Дадаць новы ўліковы запіс"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Экспарт базы дадзеных файлаў"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Новы кантакт"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Болей"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Паказаць менш"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Нядаўнія"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Інфармацыя"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Стварэнне асабістай копіі..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Заўтра"</string>
+ <string name="today" msgid="8041090779381781781">"Сёння"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Сёння ў перыяд <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Заўтра ў перыяд <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Падзея без назвы)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Задаць"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Iмгненныя паведамленні"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Арганізацыя"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Псеўданім"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Нататка"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Вэб-сайт"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Падзея"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Сувязь"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Імя"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Электронная пошта"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Тэлефон"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"напрамкі да месцазнаходжання"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"апошнія sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. націсніце, каб адказаць"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"уваходны"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"выходны"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"прапушчаны"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"апошні выклік. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. націсніце для зваротнага выкліку"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Вы: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Дадатковыя палі"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Змяніць фота кантакту"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Дадаць фота кантакту"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Фота кантакту"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Збой пры адкрыванні рэдактара."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Захаваць у:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Кантактную інфармацыю з <xliff:g id="ACCOUNT">%s</xliff:g> немагчыма рэдагаваць"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ЗВЯЗАЦЬ КАНТАКТЫ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"СКАСАВАЦЬ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Гэты кантакт"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Магчымыя дублікаты"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Гэтыя кантакты могуць датычыць адной асобы. Іх можна звязаць, каб стварыць адзіны кантакт."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Выдаліць <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Выдаліць <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Прапановы"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Новыя"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Адкрыць высоўнае меню навігацыі"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Закрыць высоўнае меню навігацыi"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Метка <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Меткі"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Уліковыя запісы"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Паказаць агульную гісторыю"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Падзеі і паведамленні"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Падзеі"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Паведамленні"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Прапановы"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Упарадкуйце свае кантакты для зручнага выкарыстання"</string>
+ <string name="undo" msgid="1425165101664071422">"Адрабіць"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Выклікаць <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Патэлефанаваць на хатні нумар"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Набраць нумар мабільнага тэлефону"</string>
+ <string name="call_work" msgid="5328785911463744028">"Выклікаць працоўны нумар тэлефона"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Набраць нумар працоўнага факса"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Патэлефанаваць на хатні факс"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Выклікаць пэйджар"</string>
+ <string name="call_other" msgid="8563753966926932052">"Выклікаць"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Зрабіць зваротны выклік"</string>
+ <string name="call_car" msgid="3280537320306436445">"Выклікаць нумар у машыне"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Выклікаць асноўны нумар кампаніі"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Выклік ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Выклікаць асноўны нумар"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Выклік факса"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Патэлефанаваць на радыётэлефон"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Выклік на тэлекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Выклікаць TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Патэлефанаваць на працоўны мабільны"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Выклікаць працоўны пэйджар"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Выклікаць <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Выклік MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Выклікаць)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Адправіць SMS на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Тэкставае паведамленне на хатні тэлефон"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Тэкставае паведамленне на мабільны тэлефон"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Тэкставае паведамленне на працоўны тэлефон"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Тэкставае паведамленне на працоўны факс"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Тэкставае паведамленне на хатні факс"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Тэкставае паведамленне на пэйджар"</string>
+ <string name="sms_other" msgid="806127844607642331">"Тэкст"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Тэкст на нумар зваротнага выкліку"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Тэкставае паведамленне ў аўтамабіль"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Паведамленне на асноўны нумар кампаніі"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Тэкст ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Паведамленне на асноўны нумар"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Тэкставае паведамленне на факс"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Тэкставае паведамленее на радыётэлефон"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Тэкставае паведамленне на тэлекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Тэкставае паведамленне на TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Тэкставае паведамленне на працоўны мабільны тэлефон"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Тэкставае паведамленне на працоўны пэйджар"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Напiсаць тэкставае паведамленне: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Паведамленне MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Паведамленне)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Зрабіць відэавыклік"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Выдалiць частыя кантакты?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Спіс найчасцей ужываных кантактаў праграм \"Кантакты\" i \"Тэлефон\" ачысціцца, а параметры адрасацыі паштовых праграм абнуляцца."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Выдаленне частых кантактаў..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Даступны"</string>
+ <string name="status_away" msgid="1838861100379804730">"Адсутнічае"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Заняты"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Іншае"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Дырэкторыя"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Працоўны каталог"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Усе кантакты"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Хуткі кантакт для карыстальніка <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Без назвы)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Частая сувязь"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Усе кантакты з нумарамі тэлефонаў"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Кантакты працоўнага профілю"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Прагл. абнаўленняў"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Прылада"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Імя"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псеўданiм"</string>
+ <string name="name_given" msgid="4280790853455320619">"Імя"</string>
+ <string name="name_family" msgid="7466985689626017037">"Прозвішча"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Прэфікс імені"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Імя па бацьку"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Суфікс да імені"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Фанетычнае імя"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Фанетычнае імя"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Фанетычнае імя па бацьку"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Фанетычнае прозвішча"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Тэлефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Электронная пошта"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адрас"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"ІМ"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Арганізацыя"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Сувязі"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Асаблівая дата"</string>
+ <string name="sms" msgid="1756857139634224222">"Тэкставае паведамленне"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адрас"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Кампанія"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Пасада"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Нататкі"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Карыстальніцкі"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Вэб-старонка"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Меткі"</string>
+ <string name="email_home" msgid="8573740658148184279">"Паведамленне на хатні адрас электроннай пошты"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Адправіць электронную пошту на мабільны адрас"</string>
+ <string name="email_work" msgid="2807430017302722689">"Паведамленне на працоўную электронную пошту"</string>
+ <string name="email_other" msgid="3454004077967657109">"Электронная пошта"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Адправіць ліст на адрас <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Электронная пошта"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Вуліца"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Горад"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Штат"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Паштовы індэкс"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Краіна"</string>
+ <string name="map_home" msgid="1243547733423343982">"Прагледзець хатні адрас"</string>
+ <string name="map_work" msgid="1360474076921878088">"Паглядзець працоўны адрас"</string>
+ <string name="map_other" msgid="3817820803587012641">"Прагледзець адрас"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Паглядзець адрас <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Чат у AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Чат у Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Чат праз Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Чат у Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Чат у QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Чат у Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Чат праз ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Чат у Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"выдаліць"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Паказаць больш палёў імён"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Згарнуць палі імён"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Паказаць больш палёў фанетычных імён"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Згарнуць палі фанетычных імён"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Разгарнуць"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Згарнуць"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Разгорнута"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Згорнута"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Усе кантакты"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Пазначана"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Наладзіць"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Кантакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Усе іншыя кантакты"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Усе кантакты"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Выдаліць групу сінхранізацыі"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Дадаць групу сінхранізацыі"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Больш груп..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Выдаленне групы \"<xliff:g id="GROUP">%s</xliff:g>\" з сінхранізацыі таксама выдаліць любыя разгрупаваныя кантакты з сінхранізацыі."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Захаванне параметраў адлюстравання..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Карыстальніцкі выгляд"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Захаваць імпартаваныя кантакты ў:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-карта <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d кантакт</item>
+ <item quantity="few">%1$d кантакты</item>
+ <item quantity="many">%1$d кантактаў</item>
+ <item quantity="other">%1$d кантакту</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> кантакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> кантакты • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> кантактаў • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> кантакту • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Файл .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Няма што імпартаваць"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Імпартаваць кантакты з vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Адмянiць iмпарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Адмянiць экспарт файла <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Немагчыма адмяніць імпарт/экспарт vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Невядомая памылка."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Немагчыма адкрыць файл \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не атрымалася запусцiць экспарцёр: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Няма кантактаў для экспарту."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Вы адключылі дазвол, які патрабуецца."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Памылка экспарту: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Памылка ўводу/вываду"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недастаткова памяці (магчыма, занадта вялікі файл)"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Фармат не падтрымліваецца."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Экспарт файла <xliff:g id="FILENAME">%s</xliff:g> завершаны."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Экспартаванне кантактаў завершана."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Экспартаванне кантактаў завершана, націсніце на апавяшчэнне, каб абагуліць кантакты."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Дакраніцеся, каб абагуліць кантакты."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Экспарт файла <xliff:g id="FILENAME">%s</xliff:g> адменены."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Экспарт дадзеных кантакту"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Кантактныя даныя экспартуюцца."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Немагчыма атрымаць інфармацыю з базы дадзеных."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Няма кантактаў, якія можна экспартаваць."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Памылка запуску складальнiка файлаў vCard."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не атрымалася экспартаваць"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Памылка экспарта кантактных дадзеных. \nПрычына: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Імпарт <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Немагчыма прачытаць дадзеныя vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Заканчэнне імпартавання vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Імпарт файла <xliff:g id="FILENAME">%s</xliff:g> адменены"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Файл <xliff:g id="FILENAME">%s</xliff:g> будзе імпартаваны ў бліжэйшы час."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл будзе імпартаваны ў бліжэйшы час."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запыт экспарту vCard адхілены. Паспрабуйце пазней."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Неўзабаве кантакты будуць экспартаваны."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запыт экспарту vCard адхілены. Паспрабуйце пазней."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"кантакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Кэшуе файлы vCard у лакальнае часовае сховішча. Фактычны імпарт пачнецца ў бліжэйшы час."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Немагчыма імпартаваць vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Кант. атр. праз NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кэшаванне..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Імпарт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Экспартаваць у файл .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сартаваць па"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Фанетычнае імя"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Заўсёды паказваць"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Схаваць, калі пустое"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Імя"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Прозвішча"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Фармат імя"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Спачатку імя"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Спачатку прозвішча"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Уліковыя запісы"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Стандартны ўліковы запіс для новых кантактаў"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Мая інфармацыя"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Наладзьце ваш профіль"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Інфармацыя аб Кантактах"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Абагуліць улюбёныя кантакты"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Абагуліць усе кантакты"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Збой абагульвання кантактаў."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Экспартаваць кантакты"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Імпартаваць кантакты з"</string>
+ <string name="share_error" msgid="948429331673358107">"Нельга падзялiцца гэтым кантактам."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Няма кантактаў, якія можна абагуліць."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Паказаць кантакты"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Адлюстроўваць кантакты"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Наладзіць прагляд"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Захаваць"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Шукаць у кантактах"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Выбранае"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Імпартаваць"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Экспартаваць"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблакіраваныя нумары"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"праз <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> праз <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"спыніць пошук"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Ачысціць пошук"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Уліковы запіс"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Заўсёды ўжываць гэта для выклікаў"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Выклікаць з нататкай"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Увесці нататку для адпраўкі з выклікам…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"АДПРАВІЦЬ І ВЫКЛІКАЦЬ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Версія зборкі"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцэнзіі на ПЗ з адкрытым кодам"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Звесткі аб ліцэнзіі на праграмнае забеспячэнне з адкрытым зыходным кодам"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Палітыка прыватнасці"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Умовы абслугоўвання"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Ліцэнзіі на ПЗ з адкрытым кодам"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Збой адкрыцця URL-адраса."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> - пазначана"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> - не пазначана"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Пачаць відэавыклік"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Выдаліць"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Шматкроп\'е"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> c"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> хв <xliff:g id="SECONDS">%2$s</xliff:g> с"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> гадз <xliff:g id="MINUTES_1">%2$s</xliff:g> хв <xliff:g id="SECONDS">%3$s</xliff:g> с"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Гэта спалучэнне клавіш было адключана"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Кантакт быў выдалены"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Імпартаваць"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Выберыце кантакты"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"На вашай SIM-карце няма кантактаў"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Кантакт ужо ёсць у вашым спісе"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> кантакт SIM-карты імпартаваны</item>
+ <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> кантакты SIM-карты імпартаваны</item>
+ <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> кантактаў SIM-карты імпартаваны</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> кантакту SIM-карты імпартавана</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Памылка імпарту кантактаў SIM-карты"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Імпартаваць з SIM-карты"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Скасаваць"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Аўтасінхранізацыя адключана. Дакраніцеся, каб уключыць яе."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Адхіліць"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Сінхранізацыя ўліковага запісу адключана. Дакраніцеся, каб уключыць яе."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Уключыць аўтасінхранізацыю?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Змены, якія вы зрабілі ва ўсіх праграмах і ўліковых запісах, не толькі ў Кантактах Google, будуць сінхранізоўвацца паміж вэб-інтэрфейсам і вашымі прыладамі."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Уключыць"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Няма падключэння"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Паказаць больш"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Імпартаванне SIM-карты скончана"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Не ўдалося імпартаваць"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не ўдалося імпартаваць кантакты з SIM-карты"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Імпартаванне SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Апавяшчэнні"</string>
+</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index f78b5ea26..af1b65020 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контакти"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Преглед на контакта"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Редактиране на контакта"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Добавяне на контакт"</string>
<string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Директно набиране"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Директно съобщение"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Избор на пряк път до контакт"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Избор на номер за обаждане"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Избор на номер за изпращане на съобщение"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Избиране на контакт"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Добавяне към контакта"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Избор на контакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Избиране"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Създайте нов контакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Със звезда"</string>
- <string name="frequentList" msgid="7154768136473953056">"Често"</string>
- <string name="strequentList" msgid="5640192862059373511">"Любими"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Подробности за контакта"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Редактиране на контакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Създаване на контакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Редактиране на групата"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Създаване на група"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Информация"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Актуал."</string>
<string name="searchHint" msgid="8482945356247760701">"Търсене в контактите"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Преглед на контакт"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Добавяне към предпочитани"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Премахване от любими"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Премахнато от любимите"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Редактиране"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Изтриване"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Промяна на снимката"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Поставяне на началния екран"</string>
- <string name="menu_call" msgid="3992595586042260618">"Обаждане на контакт"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Изпращaне на SMS на контакт"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Създаване на пряк път"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Разделяне"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Редактиране"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Изтриване"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Добавяне на контакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Добавяне на група"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Премахване на контакти"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Преименуване на етикета"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Изтриване на етикета"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Добавяне на контакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Избор на контакти"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Добавяне на контакти"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Премахване от етикета"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Създаване на етикет"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Искате ли да разделите този контакт на няколко?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Разделяне"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Искате ли да запазите вече направените от вас промени и да разделите този контакт на няколко?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Запазване и разделяне"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Искате ли да запазите вече направените от вас промени и да свържете този контакт с избрания от вас?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Запазване и свързване"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Свързват се"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Връзката се спира"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Свързване"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Преглед на свързаните контакти"</string>
<string name="menu_save" msgid="1727844363591825909">"Запазване"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Свързване на контактите"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изберете контакта, който искате да свържете с/ъс <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показване на всички контакти"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагани контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Всички контакти"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Свързахте <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактите са свързани"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Изтрихте <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> и <xliff:g id="NAME_1">%2$s</xliff:g> бяха изтрити"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… бяха изтрити"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Контактите са изтрити</item>
<item quantity="one">Контактът е изтрит</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"От Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"От <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Задаване на мелодия"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Всички обаждания до гл. поща"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Контактите от профилите ви само за четене могат да бъдат скрити, но не и изтрити."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Скриване"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Контактът, който предстои да бъде изтрит, съдържа подробности от няколко профила. Подробностите от профилите само за четене ще бъдат скрити, а не изтрити."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Трябва да изберете поне два контакта, за да извършите свързване."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Да се свържат ли избраните контакти?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Свързване"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Препращане към гласовата поща"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Спиране на препращането"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Този контакт е само за четене. Не може да бъде изтрит, но можете да го скриете."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Скриване на контакта"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Контактите само за четене в този профил ще бъдат скрити, не изтрити."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Да се изтрие ли този контакт?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Да се изтрият ли избраните контакти?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Контактите от профилите ви само за четене могат да бъдат скрити, но не и изтрити."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Изтриването на този контакт ще премахне подробностите от няколко профила."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Да се изтрие ли този контакт?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Изтриване"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Отхвърляне на промените"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Контактът не съществува."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контактът е добавен към началния екран."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Добавихте <xliff:g id="NAME">%s</xliff:g> към началния екран."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Създаване на нов контакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Създаване на нов контакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Организация"</item>
- <item msgid="7196592230748086755">"Бележка"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"В таблета няма снимки."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"В телефона няма снимки."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"В устройството няма снимки."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Снимка на контакта"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Персонализирано име на етикет"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Обажданията да се изпращат директно в гл. поща"</string>
<string name="removePhoto" msgid="4898105274130284565">"Премахване на снимката"</string>
- <string name="noContacts" msgid="4955659076981974652">"Няма контакти"</string>
- <string name="noGroups" msgid="8614664663561385253">"Няма групи."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Необходим ви е профил, за да създавате групи."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"В тази група няма хора."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"За да добавите, редактирайте групата."</string>
- <string name="savingContact" msgid="4075751076741924939">"Контактът се запазва..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Списъкът ви с контакти е празен"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Няма контакти с този етикет"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"В този профил няма контакти"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Списъкът ви с контакти е празен"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Запазихте <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Контактът е запазен"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактите са разделени"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Промените в контакта не можаха да бъдат запазени."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Контактът не можа да бъде разделен."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Контактът не можа да бъде свързан."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"При запазването на контакта възникна грешка."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Промените в снимката на контакта не можаха да се запазят."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Групата е запазена."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Промените в групата не можаха да бъдат запазени."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта с телефонен номер</item>
- <item quantity="one">1 контакт с телефонен номер</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Няма контакти с телефонни номера"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> намерени</item>
- <item quantity="one">1 намерен</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Промените в контакта не можаха да бъдат запазени"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Връзката на контакта не можа да бъде прекратена"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Контактът не можа да бъде свързан"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"При запазването на контакта възникна грешка"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Промените в снимката на контакта не можаха да бъдат запазени"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Зареждането на етикета не бе успешно"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Етикетът бе изтрит"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Етикетът бе създаден"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Етикетът не може да бъде създаден"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Етикетът бе актуализиран"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Премахнати от етикета"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Добавянето към етикета бе успешно"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Промените в етикета не можаха да бъдат запазени"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Етикетът вече съществува"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Някои контакти нямат имейл адреси."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Някои контакти нямат телефонни номера."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Изпращане на имейл"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Изпращане на съобщение"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Избиране на контакти"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Изпращане"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Няма контакти"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> намерени</item>
- <item quantity="one">1 намерен</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Всички"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Любими"</string>
- <string name="callBack" msgid="5498224409038809224">"Обратно обаждане"</string>
- <string name="callAgain" msgid="3197312117049874778">"Повторно обаждане"</string>
- <string name="returnCall" msgid="8171961914203617813">"Отговаряне на обаждане"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Да се добави ли „<xliff:g id="EMAIL">%s</xliff:g>“ към контакти?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"снимка на контакта"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> от <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакта"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена на контактите ви"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Не бе намерено приложение за извършване на това действие."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Кликнете за връщане към предишния екран"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Добавяне на телефонен номер"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Добавяне на имейл"</string>
<string name="missing_app" msgid="1466111003546611387">"Не бе намерено приложение за извършване на това действие."</string>
<string name="menu_share" msgid="943789700636542260">"Споделяне"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Добавяне към контактите"</string>
- <string name="share_via" msgid="563121028023030093">"Споделяне на контакт чрез"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Създаване на група в профил"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Добавяне"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Споделяне на контактите чрез</item>
+ <item quantity="one">Споделяне на контакта чрез</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Избиране на профил"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Създаване на етикет"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Преименуване на етикета"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Име на етикета"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име на етикета"</string>
<string name="audio_chat" msgid="2535716629358298691">"Гласов разговор"</string>
<string name="video_chat" msgid="1872255818640336072">"Видеоразговор"</string>
- <string name="connections" msgid="8098440723172028350">"Връзки"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Добавяне на връзка"</string>
- <string name="recent" msgid="2659189233141493004">"Скорошни"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Скорошни актуал."</string>
<string name="account_type_format" msgid="718948015590343010">"Контакт от <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Профил в <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Не може да се редактира от приложението."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Не може да се редактира на това у-во."</string>
<string name="take_photo" msgid="7496128293167402354">"Снимане"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Заснемане на нова снимка"</string>
<string name="pick_photo" msgid="2129509985223564942">"Избор на снимка"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Избор на нова снимка"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Списъкът с контакти се актуализира."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Търси се..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Показване на избраните"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Показване на всички"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Избиране на всички"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Премахване на избора от всички"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Добавяне на нов"</string>
- <string name="add_organization" msgid="7311893231158291197">"Организация: Добавяне"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Име на групата"</string>
- <string name="change_photo" msgid="8530597935483526383">"Промяна"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Основна снимка"</string>
- <string name="description_star" msgid="2605854427360036550">"любимо"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Редактиране на контакта"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Да се свърже ли текущият контакт с избрания?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Етикет"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Отказ"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затваряне"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се превключи ли към редактиране на избрания контакт? Въведената досега информация ще бъде копирана."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Копиране в моите контакти"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Добавяне в „Моите контакти“"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Директория „<xliff:g id="TYPE">%1$s</xliff:g>“"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"По избор"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
<string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
<string name="menu_help" msgid="1680178646764069976">"Помощ и отзиви"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Опции за показване"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Телефонен номер"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Добавяне към контактите"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Добавяне към контакта"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Затваряне"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Включване на годината"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Зарежда се…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Създаване на нов контакт"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Добавяне на профил"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортиране на контактите"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Създаване на нова група"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Нова група"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
- <item quantity="one">1 група</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Да се изтрие ли групата „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Самите контакти няма да бъдат изтрити.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> души от <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> човек от <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> души</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> човек</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортиране"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Създаване на ново…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Да се изтрие ли етикетът „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Самите контакти няма да бъдат изтрити.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Въведете името на контакта преди свързването му с друг."</string>
<string name="copy_text" msgid="3257145021583508761">"Копиране в буфера"</string>
<string name="set_default" msgid="4417505153468300351">"Задаване като стандартна настройка"</string>
<string name="clear_default" msgid="7193185801596678067">"Изчистване на стандартната настройка"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текстът бе копиран"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Искате ли да отхвърлите направените от вас промени и да излезете от редактирането?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Да се отхвърлят ли промените?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отхвърляне"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Продължаване с редактирането"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Потребит. профил"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Въведете името на човека"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Име на групата"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Отказ"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Да се отхвърли ли персонализирането?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Търсене в контактите"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Премахване на контакти"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Моят локален потр. профил"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Потр. ми профил <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Показват се всички контакти"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Погрижете се за безопасността на контактите си, ако загубите своя телефон: синхронизирайте с онлайн услуга."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Добавяне на профил"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"За новия ви контакт няма да бъде създадено резервно копие. Да се добави ли профил, в който да се създават такива копия на контактите онлайн?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Отделете малко време и добавете профил, чрез който ще се създават резервни копия на контактите ви в Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новите контакти ще се запазват в/ъв <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изберете стандартен профил за новите контакти:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Добавяне"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Нов контакт"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Редактиране"</string>
- <string name="keep_local" msgid="1258761699192993322">"Съхраняване локално"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Само преглед"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Избор на контакт за редактиране"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Свързани контакти"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Добавяне"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Разделяне"</string>
<string name="add_account" msgid="8201790677994503186">"Добавяне"</string>
<string name="add_new_account" msgid="5748627740680940264">"Добавяне на нов профил"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Експортиране на файловете на базата от данни"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"добавяне на нов контакт"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Създаване на нов контакт"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Преглед на още"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Преглед на по-малко"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Преглед на всичко"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Скорошни"</string>
<string name="about_card_title" msgid="2920942314212825637">"Информация"</string>
- <string name="send_message" msgid="8938418965550543196">"Изпращане на съобщение"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Създава се лично копие..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Вчера"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Създава се лично копие..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Утре"</string>
<string name="today" msgid="8041090779381781781">"Днес"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Днес от <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Утре от <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Неозаглавено събитие)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Задаване"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Незабавно съобщение"</string>
@@ -269,63 +218,315 @@
<string name="header_note_entry" msgid="4320190426480612344">"Бележка"</string>
<string name="header_website_entry" msgid="1411467850000824745">"Уебсайт"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Събитие"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Отношение"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Профил"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Връзка"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Имейл"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Снимка"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликнете за разгъване на редактора за контакти."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликнете за свиване на редактора за контакти."</string>
<string name="content_description_directions" msgid="2686791825798189335">"упътвания до местоположението"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Скорошен SMS. „<xliff:g id="MESSAGE_BODY">%s</xliff:g>“ от <xliff:g id="PHONE_NUMBER">%s</xliff:g> на <xliff:g id="DATE">%s</xliff:g>. Кликнете за отговор"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Скорошен SMS. „<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>“ от <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> на <xliff:g id="DATE">%3$s</xliff:g>. Кликнете за отговор"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"входящо"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"изходящо"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропуснато"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Скорошно обаждане (<xliff:g id="CALL_TYPE">%s</xliff:g>) от <xliff:g id="PHONE_NUMBER">%s</xliff:g> на <xliff:g id="DATE">%s</xliff:g>. Кликнете за обратно обаждане"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Скорошно обаждане (<xliff:g id="CALL_TYPE">%1$s</xliff:g>) от <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> на <xliff:g id="DATE">%3$s</xliff:g>. Кликнете за обратно обаждане"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Вие: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts работи по-добре, когато въведете съответния идентификатор на човека в полето за имейл или телефон."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Още полета"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промяна на снимката"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Отварянето на редактора не бе успешно."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Запазване във:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Понастоящем се запазва в профила <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Докоснете двукратно, за да изберете друг."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Свързани контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Свързан контакт</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> свързани контакта"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Още полета"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Промяна на снимката на контакта"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Добавяне на снимка на контакта"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Снимка на контакта"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Отварянето на редактора не бе успешно."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Запазва се във:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Данните за контакта от <xliff:g id="ACCOUNT">%s</xliff:g> не могат да се редактират"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"СВЪРЗВАНЕ НА КОНТАКТИТЕ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЗ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> възможни дубликата</item>
- <item quantity="one">1 възможен дубликат</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> свързани контакта</item>
- <item quantity="one">1 свързан контакт</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Този контакт"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Възможни дубликати"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Тези контакти може да са един и същи човек. Можете да ги свържете в един."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Свързани контакти"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"От профилите ви"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Правене на снимка"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Всички снимки"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Избиране на снимка"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"От <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Изтриване на <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Изтриване на <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Изтриване на <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Снимката от <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> е без отметка"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Снимката от <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> е с отметка"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Неизбрана снимка от неизвестен профил"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Избрана снимка от неизвестен профил"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Списъкът с контакти се актуализира, за да отрази промяната на езика.\n\nМоля, изчакайте..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Предложения"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Отваряне на слоя за навигация"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Затваряне на слоя за навигация"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Етикет „<xliff:g id="LABEL_NAME">%s</xliff:g>“"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Етикети"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Профили"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Преглед на общата ви история"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Събития и съобщения"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Събития"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Съобщения"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Предложения"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Поддържайте контактите си организирани и полезни"</string>
+ <string name="undo" msgid="1425165101664071422">"Отмяна"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Обаждане на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Обаждане на домашен"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Обаждане на мобилен"</string>
+ <string name="call_work" msgid="5328785911463744028">"Обаждане на служебен"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Обаждане на служебен факс"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Обаждане на домашен факс"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Обаждане на пейджър"</string>
+ <string name="call_other" msgid="8563753966926932052">"Обаждане"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Обаждане на обратно обаждане"</string>
+ <string name="call_car" msgid="3280537320306436445">"Обаждане на кола"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Обаждане на основен служебен"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Обаждане на ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Обаждане на основен"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Обаждане на факс"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Обаждане на радио"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Обаждане на телекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Обаждане на TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Обаждане на служебен мобилен"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Обаждане на служебен пейджър"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Обаждане на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Обаждане на MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (обаждане)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"SMS до <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Изпращaне на SMS на домашен"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Изпращaне на SMS на мобилен"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Изпращане на SMS на служебен"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Изпращане на SMS на служебен факс"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Изпращане на SMS на домашен факс"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Изпращане на SMS на пейджър"</string>
+ <string name="sms_other" msgid="806127844607642331">"Текст"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Изпращане на SMS на отговорилия"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Изпращане на SMS на кола"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Изпращaне на SMS на основен служебен"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Изпращaне на SMS на ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Изпращане на SMS на основен"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Изпращане на SMS на факс"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Изпращане на SMS на радио"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Изпращане на SMS на телекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Изпращане на SMS на TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Изпращане на SMS на служебен мобилен"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Изпращaне на SMS на служебен пейджър"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Изпращане на SMS на <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Изпращане на SMS на MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (изпращане на съобщение)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Провеждане на видеообаждане"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Да се изчистят ли често търсените?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Ще изчистите списъка с често търсените в приложенията Контакти и Телефон и ще принудите приложенията за електронна поща да научат отново предпочитанията ви за адресите."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Често търсените се изчистват…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Налице"</string>
+ <string name="status_away" msgid="1838861100379804730">"Отсъства"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Зает/а"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Други"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Директория"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Служебен указател"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Всички контакти"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Бърз контакт за <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Няма име)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често търсени"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Всички контакти с телефонни номера"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти в служебния потребителски профил"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Актуализации"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Устройство"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM карта"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдоним"</string>
+ <string name="name_given" msgid="4280790853455320619">"Собствено име"</string>
+ <string name="name_family" msgid="7466985689626017037">"Фамилно име"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Обръщение"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Презиме"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Обръщение"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Име, както се произнася"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Собствено име (фонетично)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Презиме (фонетично)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Фамилно име (фонетично)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Имейл"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адрес"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Незабавни съобщения"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Организация"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Връзка"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Специална дата"</string>
+ <string name="sms" msgid="1756857139634224222">"Текстово съобщение"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адрес"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Фирма"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Длъжност"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Бележки"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Персонализирано"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Уебсайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Етикети"</string>
+ <string name="email_home" msgid="8573740658148184279">"Изпращане на имейл до домашен"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Изпращане на имейл до мобилен"</string>
+ <string name="email_work" msgid="2807430017302722689">"Изпращане на имейл до служебен"</string>
+ <string name="email_other" msgid="3454004077967657109">"Изпращане на имейл"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Имейл до <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Изпращане на имейл"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Град"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Щат"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Пощенски код"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Държава"</string>
+ <string name="map_home" msgid="1243547733423343982">"Преглед на домашен адрес"</string>
+ <string name="map_work" msgid="1360474076921878088">"Преглед на служебен адрес"</string>
+ <string name="map_other" msgid="3817820803587012641">"Преглед на адрес"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Преглед на адреса на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Чат по AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Чат по Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Чат по Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Чат по Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Чат по QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Чат по Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Чат по ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Чат по Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"изтриване"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Показване на още полета за името"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Свиване на полетата за имена"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Показване на още полета за фонетичното име"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Свиване на полетата за фонетични имена"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Разгъване"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Свиване"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Разгънато"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Свито"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Всички контакти"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Със звезда"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Персонализиране"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Всички други контакти"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Всички контакти"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Премахване на група за синхронизиране"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Добавяне на група за синхронизиране"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Още групи..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ако синхронизирането на „<xliff:g id="GROUP">%s</xliff:g>“ спре, то ще спре и за негрупираните контакти."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Опциите за показване се запазват..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Персонализиран изглед"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Запазване на импортираните контакти във:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM карта"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM карта <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d контакта</item>
+ <item quantity="one">1 контакт</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контакта • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf файл"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Няма нищо за импортиране"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Да се импортират ли контактите от vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Да се анулира ли импортирането на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Да се анулира ли експортирането на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Импорт./експорт. не можа да се анулира"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Неизвестна грешка."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ не можа да се отвори: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Експортирането не можа да започне: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Няма контакт, позволяващ експортиране."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Деактивирахте задължително разрешение."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Възникна грешка при експортирането: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Няма достатъчно памет. Файлът може да е твърде голям."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматът не се поддържа."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Експортирането на <xliff:g id="FILENAME">%s</xliff:g> завърши."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Експортирането на контактите завърши."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Експортирането на контактите завърши. Кликнете върху известието, за да ги споделите."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Докоснете, за да споделите контактите."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Експортирането на <xliff:g id="FILENAME">%s</xliff:g> е анулирано."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Експортиране на данни за контакти"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Данните за контактите се експортират."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Информацията за базата от данни не можа да бъде получена."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Няма контакти, позволяващи експортиране."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Създателят на vCard не се стартира правилно."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не се експортира"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Данните за контакта не бяха експортирани.\nПричина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> се импортира"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Данните не можаха да бъдат прочетени"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Импортирането на vCard <xliff:g id="FILENAME">%s</xliff:g> завърши"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Импортирането на <xliff:g id="FILENAME">%s</xliff:g> е анулирано"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ще се импортира скоро."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файлът ще се импортира скоро."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Заявката за импортиране на vCard бе отхвърлена. Опитайте отново по-късно."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контактите ще бъдат експортирани скоро."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Заявката за експортиране на vCard бе отхвърлена. Опитайте отново по-късно."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard се кешира/т във временно локално хранилище. Самото импортиране ще започне скоро."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard не можа да бъде импортирана."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт: Получ. чрез NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кешира се"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Импортира се <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Експорт като .vcf файл"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортиране по"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Име (фонетично)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Винаги да се показва"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Скриване, ако е празно"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Собствено име"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Фамилно име"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Формат на името"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Първо собственото име"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Първо фамилното име"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Профили"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Стандартен профил за новите контакти"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Моята информация"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Настройте потребителския си профил"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Всичко за Контакти"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделяне на любимите контакти"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Споделяне на всички контакти"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Споделянето на контактите не бе успешно."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Експортиране на контакти"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Импортиране на контакти от"</string>
+ <string name="share_error" msgid="948429331673358107">"Този контакт не може да бъде споделен."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Няма контакти за споделяне."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за показване"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за показване"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Персонализиране"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Запазване"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Търсете контакти"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Любими"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Импортиране"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Експортиране"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани номера"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"чрез <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> чрез <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"спиране на търсенето"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Изчистване на търсенето"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Профил"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Винаги да се използва за обаждания"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Обаждане, включващо бележка"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Напишете бележка, която да се изпрати с обаждането…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ИЗПРАЩАНЕ И ОБАЖДАНЕ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Версия"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Лицензи за отворен код"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Подробности за лицензите на софтуера с отворен код"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Декларация за поверителност"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Общи условия"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Лицензи за отворен код"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Отварянето на URL адреса не бе успешно."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"За <xliff:g id="ACCOUNT_INFO">%s</xliff:g> е поставена отметка"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"За <xliff:g id="ACCOUNT_INFO">%s</xliff:g> не е поставена отметка"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Извършване на видеообаждане"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Изтриване"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Многоточие"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ч <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Този пряк път е деактивиран"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контактът бе премахнат"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Импортиране"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Избор на контакти"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"В SIM картата ви няма контакти"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Контактът вече съществува в списъка ви"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта в SIM картата бяха импортирани</item>
+ <item quantity="one">1 контакт в SIM картата бе импортиран</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Импортирането на контактите в SIM картата не бе успешно"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Импортиране от SIM картата"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Отказ"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автоматичното синхронизиране е изключено. Докоснете, за да включите."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Отхвърляне"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Синхронизирането на профила е изключено. Докоснете, за да включите."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Да се включи ли автоматичното синхронизиране?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Промените ви във всички приложения и профили, не само в контактите в Google, ще се поддържат актуални в устройствата ви и в мрежата."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Включване"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Няма връзка"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM карта"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Показване на още"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Импортирането от SIM картата завърши"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Импортирането не бе успешно"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Контактите не можаха да се импортират от SIM картата"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Импортира се от SIM картата"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Известия"</string>
</resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
deleted file mode 100644
index 9798ae5e5..000000000
--- a/res/values-bn-rBD/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"পরিচিতিগুলি"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"পরিচিতিগুলি"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"পরিচিতি দেখুন"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"পরিচিতি সম্পাদনা করুন"</string>
- <string name="contactsList" msgid="8661624236494819731">"পরিচিতিগুলি"</string>
- <string name="shortcutContact" msgid="749243779392912958">"পরিচিতি"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"সরাসরি ডায়াল"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"সরাসরি বার্তা"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"একটি পরিচিতি শর্টকার্ট বাছুন"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"কল করার জন্য একটি নম্বর বেছে নিন"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"বার্তা পাঠানোর জন্য একটি নম্বর বেছে নিন"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"পরিচিতিতে যোগ করুন"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"একটি পরিচিতি বেছে নিন"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"নতুন পরিচিতি তৈরি করুন"</string>
- <string name="starredList" msgid="4817256136413959463">"তারকা চিহ্নিত"</string>
- <string name="frequentList" msgid="7154768136473953056">"ঘন ঘন"</string>
- <string name="strequentList" msgid="5640192862059373511">"পছন্দগুলি"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"পরিচিতির বিবরণগুলি"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"পরিচিতি সম্পাদনা করুন"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"পরিচিতি তৈরি করুন"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"গোষ্ঠী সম্পাদনা করুন"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"গোষ্ঠী তৈরি করুন"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"সম্পর্কে"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"আপডেটগুলি"</string>
- <string name="searchHint" msgid="8482945356247760701">"পরিচিতিগুলি খুঁজুন"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"পরিচিতি দেখুন"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"পছন্দগুলিতে জুড়ুন"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"পছন্দসই থেকে সরান"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"পছন্দসই থেকে সরানো হয়েছে"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"পছন্দসই এ জোড়া হয়েছে"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"সম্পাদনা করুন"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"মুছুন"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ফটো পরিবর্তন করুন"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"হোম স্ক্রীনে রাখুন"</string>
- <string name="menu_call" msgid="3992595586042260618">"পরিচিতিকে কল করুন"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"পরিচিতিকে পাঠ্য বার্তা পাঠান"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"লিঙ্কমুক্ত করুন"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"সম্পাদনা করুন"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"মুছুন"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"পরিচিতি যুক্ত করুন"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"গোষ্ঠী যোগ করুন"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করবেন?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"লিঙ্কমুক্ত করুন"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"আপনি কি আপনার ইতিমধ্যে করা পরিবর্তনগুলি সংরক্ষণ এবং এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করতে চান?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"সংরক্ষণ ও লিঙ্কমুক্ত করুন"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"আপনি কি আপনার ইতিমধ্যে করা পরিবর্তনগুলি সংরক্ষণ এবং নির্বাচিত পরিচিতির সাথে লিঙ্ক করতে চান?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"সংরক্ষণ ও লিঙ্ক করুন"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"লিঙ্ক করুন"</string>
- <string name="menu_save" msgid="1727844363591825909">"সংরক্ষণ করুন"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"পরিচিতিগুলি লিঙ্ক করুন"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"যে পরিচিতিটিকে <xliff:g id="NAME">%s</xliff:g> এর সাথে লিঙ্ক করতে চান বেছে নিন:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"সকল পরিচিতি দেখান"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"প্রস্তাবিত পরিচিতিগুলি"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"সকল পরিচিতি"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"পরিচিতিগুলি লিঙ্ক করা হয়েছে"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">পরিচিতিগুলি মোছা হয়েছে</item>
- <item quantity="other">পরিচিতিগুলি মোছা হয়েছে</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"রিংটোন সেট করুন"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ভয়েসমেলে সকল কল"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টের পরিচিতিগুলি মোছা যায় না, কিন্তু সেগুলিকে লুকিয়ে রাখা যাবে৷"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"লুকান"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"যে পরিচিতিগুলি মোছা হবে সেগুলিতে একধিক অ্যাকাউন্টের বিশদ বিবরণ রয়েছে৷ শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টগুলির বিশদ বিবরণ লুকানো হবে, কিন্তু মুছে ফেলা হবে না৷"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"একটি লিঙ্ক করার কাজ সম্পাদন করতে আপনাকে কমপক্ষে দুটি পরিচিতি নির্বাচন করতে হবে৷"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"নির্বাচিত পরিচিতিগুলি লিঙ্ক করবেন?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"লিঙ্ক করুন"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"এই পরিচিতিটি মুছবেন?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"নির্বাচিত পরিচিতিগুলি মুছে ফেলতে চান?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টের পরিচিতিগুলি মোছা যায় না, কিন্তু সেগুলিকে লুকিয়ে রাখা যাবে৷"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"যে পরিচিতিগুলি মোছা হবে সেগুলিতে একধিক অ্যাকাউন্টের বিশদ বিবরণ উপস্থিত রয়েছে৷ শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টগুলির বিশদ বিবরণ লুকানো হবে, মুছে ফেলা হবে না৷"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"এই পরিচিতিটি মোছা হলে সেটি একাধিক অ্যাকাউন্ট থেকে বিশদ বিবরণ মুছবে৷"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"এই পরিচিতিটি মুছবেন?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"মুছুন"</string>
- <string name="menu_discard" msgid="6854657936970228164">"পরিবর্তনগুলি খারিজ করুন"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"এই পরিচিতিটি বিদ্যমান নয়৷"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"হোম স্ক্রীনে পরিচিতি যোগ করা হযেছে৷"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"হোম স্ক্রীনে <xliff:g id="NAME">%s</xliff:g> যোগ করা হয়েছে৷"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"নতুন পরিচিতি তৈরি করুন"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"নতুন পরিচিতি তৈরি করুন"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"সংগঠন"</item>
- <item msgid="7196592230748086755">"টিকা"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ট্যাবলেটে কোনো ছবি উপলব্ধ নয়৷"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ফোনে কোনো ছবি উপলব্ধ নয়৷"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"পরিচিতির ফটো"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"কাস্টম লেবেল নাম"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"কলগুলিকে সরাসরি ভয়েসমেলে পাঠান"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ফটো সরান"</string>
- <string name="noContacts" msgid="4955659076981974652">"কোনো পরিচিতি নেই"</string>
- <string name="noGroups" msgid="8614664663561385253">"কোনো গোষ্ঠী নেই৷"</string>
- <string name="noAccounts" msgid="7768267764545265909">"গোষ্ঠীগুলি তৈরি করার জন্য আপনার একটি অ্যাকাউন্টের প্রয়োজন৷"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"এই গোষ্ঠীতে কেউ নেই৷"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"কিছু যোগ করতে, গোষ্ঠী সম্পাদনা করুন৷"</string>
- <string name="savingContact" msgid="4075751076741924939">"পরিচিতি সংরক্ষণ করা হচ্ছে…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"পরিচিতি সংরক্ষণ করা হয়েছে"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"পরিচিতিগুলি লিঙ্কমুক্ত করা হয়েছে"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"পরিচিতির পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"পরিচিতিতে লিঙ্কমুক্ত করা যায়নি৷"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"পরিচিতি লিঙ্ক করা যায়নি৷"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"পরিচিতি সংরক্ষণ করতে ত্রুটি হয়েছে৷"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"পরিচিতির ফটোর পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"গোষ্ঠী সংরক্ষিত হয়েছে৷"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"গোষ্ঠীর পরিবর্তনগুলি সংরক্ষণ করা যায়নি৷"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি</item>
- <item quantity="other">ফোন নম্বর সহ <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ফোন নম্বর সহ কোনো পরিচিতি নেই"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"কোনো পরিচিতি নেই"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি খুঁজে পাওয়া গেছে</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"সমস্ত"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"পছন্দসইগুলি"</string>
- <string name="callBack" msgid="5498224409038809224">"কল ব্যাক করুন"</string>
- <string name="callAgain" msgid="3197312117049874778">"আবার কল করুন"</string>
- <string name="returnCall" msgid="8171961914203617813">"মিস হয়ে যওয়া নম্বরে পুনরায় কল করুন"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"পরিচিতিগুলিতে <xliff:g id="EMAIL">%s</xliff:g> যোগ করবেন?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"পরিচিতির ফটো"</string>
- <string name="description_plus_button" msgid="515164827856229880">"যোগ চিহ্ন"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g>টির মধ্যে <xliff:g id="CURRENT_NUMBER">%s</xliff:g>টি পরিচিতি"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"আপনার পরিচিতিগুলির নামগুলি"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"এই ক্রিয়াটিকে চালনা করার জন্য কোনো অ্যাপ্লিকেশান পাওয়া যায়নি৷"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"পূর্ববর্তী স্ক্রীনে প্রত্যাবর্তন করার জন্য ক্লিক করুন"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ফোন নম্বর জুড়ুন"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ইমেল জুড়ুন"</string>
- <string name="missing_app" msgid="1466111003546611387">"এই ক্রিয়াটিকে চালনা করার জন্য কোনো অ্যাপ্লিকেশান পাওয়া যায়নি৷"</string>
- <string name="menu_share" msgid="943789700636542260">"শেয়ার করুন"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"পরিচিতিগুলিতে জুড়ুন"</string>
- <string name="share_via" msgid="563121028023030093">"এর মাধ্যমে পরিচিতি শেয়ার করুন"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"অ্যাকাউন্টের অধীনে গোষ্ঠী তৈরি করুন"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ভয়েস চ্যাট"</string>
- <string name="video_chat" msgid="1872255818640336072">"ভিডিও চ্যাট"</string>
- <string name="connections" msgid="8098440723172028350">"সংযোগগুলি"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"সংযোগ যোগ করুন"</string>
- <string name="recent" msgid="2659189233141493004">"সাম্প্রতিক"</string>
- <string name="recent_updates" msgid="4267258535615860710">"সাম্প্রতিক আপডেটগুলি"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>টি পরিচিতি"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> অ্যাকাউন্ট"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"এই অ্যাপ্লিকেশন থেকে সম্পাদনাযোগ্য নয়৷"</string>
- <string name="group_read_only" msgid="1061762906115697637">"এই ডিভাইসে সম্পাদনযোগ্য নয়৷"</string>
- <string name="take_photo" msgid="7496128293167402354">"ফটো তুলুন"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"নতুন ফটো তুলুন"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ফটো বেছে নিন"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"নতুন ফটো নির্বাচন করুন"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"পরিচিতি তালিকা আপডেট করা হচ্ছে৷"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"অনুসন্ধান করছে..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"নির্বাচিত দেখান"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"সকল দেখান"</string>
- <string name="menu_select_all" msgid="621719255150713545">"সবগুলি নির্বাচন করুন"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"সবগুলি নির্বাচন মুক্ত করুন"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"নতুন যোগ করুন"</string>
- <string name="add_organization" msgid="7311893231158291197">"সংগঠন যোগ করুন"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"তারিখ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"গোষ্ঠী নাম"</string>
- <string name="change_photo" msgid="8530597935483526383">"পরিবর্তন"</string>
- <string name="primary_photo" msgid="8517942231868516999">"প্রাথমিক ফটো"</string>
- <string name="description_star" msgid="2605854427360036550">"পছন্দসই"</string>
- <string name="edit_contact" msgid="7529281274005689512">"পরিচিতি সম্পাদনা করুন"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"নির্বাচিত পরিচিতির সঙ্গে বর্তমান পরিচিতিটি লিঙ্ক করবেন?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"নির্বাচিত পরিচিতি সম্পাদনায় নিয়ে যাবেন? আপনার এ পর্যন্ত প্রবেশ করানো তথ্য অনুলিপি করা হবে৷"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"আমার পরিচিতিগুলিতে কপি করুন"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"আমার পরিচিতিগুলিতে যুক্ত করুন"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ডিরেক্টরি <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"কাস্টম"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"সেটিংস"</string>
- <string name="menu_settings" msgid="377929915873428211">"সেটিংস"</string>
- <string name="menu_help" msgid="1680178646764069976">"সহায়তা ও প্রতিক্রিয়া"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"প্রদর্শনের বিকল্পগুলি"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ফোন নম্বর"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"পরিচিতিগুলিতে যোগ করুন"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"পরিচিতিতে যুক্ত করুন"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"বন্ধ"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"বছর অন্তর্ভুক্ত করুন"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"পরিচিতি"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"লোড হচ্ছে..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"একটি নতুন পরিচিতি তৈরি করুন"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"অ্যাকাউন্ট যোগ করুন"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"পরিচিতিগুলি আমদানি করুন"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"নতুন গোষ্ঠী তৈরি করুন"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"নতুন গোষ্ঠী তৈরি করুন"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g>টি গোষ্ঠী</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>টি গোষ্ঠী</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"গোষ্ঠী \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" মুছবেন? (পরিচিতিগুলি নিজে থেকে মুছে যাবে না৷)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> থেকে <xliff:g id="COUNT_2">%1$d</xliff:g> জন</item>
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> থেকে <xliff:g id="COUNT_2">%1$d</xliff:g> জন</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> জন</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> জন</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"অন্য একটির সাথে লিঙ্ক করার আগে পরিচিতির নাম লিখুন৷"</string>
- <string name="copy_text" msgid="3257145021583508761">"ক্লিপবোর্ডে কপি করুন"</string>
- <string name="set_default" msgid="4417505153468300351">"ডিফল্ট সেট করুন"</string>
- <string name="clear_default" msgid="7193185801596678067">"ডিফল্ট সাফ করুন"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"পাঠ্য অনুলিপি হয়েছে"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"আপনার পরিবর্তনগুলি বাতিল করতে এবং সম্পাদনা থেকে প্রস্থান করতে চান?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"বাতিল করুন"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"সম্পাদনা করা চালিয়ে যান"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"আমার প্রোফাইল সেট করা"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"ব্যক্তির নাম লিখুন"</string>
- <string name="group_name_hint" msgid="238359485263401293">"গোষ্ঠীর নাম"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"আমার স্থানীয় প্রোফাইল"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"আমার <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> প্রোফাইল"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"সমস্ত পরিচিতি দেখানো হচ্ছে"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"আপনার ফোন হারিয়ে গেলেও আপনার পরিচিতিগুলিকে নিরাপদ রাখুন: একটি অনলাইন পরিষেবার সাথে সিংক্রোনাইজ করুন৷"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"একটি অ্যাকাউন্ট যোগ করুন"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"আপনার নতুন পরিচিতিটির ব্যাকআপ নেওয়া হবে না৷ পরিচিতিগুলিকে অনলাইনে ব্যাকআপ নেওয়ার জন্য একটি অ্যাকাউন্ট যুক্ত করবেন?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"নতুন পরিচিতিগুলি <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> এ সংরক্ষণ করা হবে৷"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"নতুন পরিচিতিগুলির জন্য একটি ডিফল্ট অ্যাকাউন্ট বেছে নিন:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"নতুন পরিচিতি জুড়ুন"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"পরিচিতি সম্পাদনা করুন"</string>
- <string name="keep_local" msgid="1258761699192993322">"স্থানীয় ভাবে রাখুন"</string>
- <string name="add_account" msgid="8201790677994503186">"অ্যাকাউন্ট জুড়ুন"</string>
- <string name="add_new_account" msgid="5748627740680940264">"নতুন অ্যাকাউন্ট যোগ করুন"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ডেটাবেস ফাইলগুলি রপ্তানি করুন"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"নতুন পরিচিতি জুড়ুন"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"আরো দেখুন"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"আরো কম"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"সবগুলো দেখুন"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"সাম্প্রতিক"</string>
- <string name="about_card_title" msgid="2920942314212825637">"সম্পর্কে"</string>
- <string name="send_message" msgid="8938418965550543196">"বার্তা পাঠান"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"একটি ব্যক্তিগত প্রতিলিপি তৈরি করা হচ্ছে..."</string>
- <string name="yesterday" msgid="6840858548955018569">"গতকাল"</string>
- <string name="tomorrow" msgid="6241969467795308581">"আগামীকাল"</string>
- <string name="today" msgid="8041090779381781781">"আজ"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"আজ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"আগামীকাল <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(শিরোনামহীন ইভেন্ট)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"সেট করুন"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"সংগঠন"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ডাকনাম"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"টীকা"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ওয়েবসাইট"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ইভেন্ট"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"সম্পর্ক"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"অ্যাকাউন্ট"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"নাম"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ইমেল"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ফোন"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ফটো"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"পরিচিতি সম্পাদক প্রসারিত করতে ক্লিক করুন৷"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"পরিচিতি সম্পাদক সঙ্কুচিত করতে ক্লিক করুন৷"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"অবস্থান জানার দিকনির্দেশ"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"সাম্প্রতিক sms৷ <xliff:g id="MESSAGE_BODY">%s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%s</xliff:g>৷ <xliff:g id="DATE">%s</xliff:g>৷ প্রতিক্রিয়া জানাতে ক্লিক করুন"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"আগত"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"আউটগোয়িং"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"মিস করা"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"সাম্প্রতিক কল৷ <xliff:g id="CALL_TYPE">%s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%s</xliff:g>৷ <xliff:g id="DATE">%s</xliff:g>৷ ঘুরিয়ে কল করতে ক্লিক করুন"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"আপনি: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"আপনি যখন ইমেল বা ফোন নম্বর লেখার ক্ষেত্রটিতে ব্যক্তির Hangouts সনাক্তকারী লেখেন তখন Hangouts আরো ভালো কাজ করে৷"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"আরো ফিল্ড"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ফটো পরিবর্তন করুন"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"সম্পাদক খুলতে ব্যর্থ হচ্ছে৷"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"এতে সংরক্ষণ করা হচ্ছে"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"বর্তমানে <xliff:g id="ACCOUNT_NAME">%s</xliff:g> এ সংরক্ষণ করা হচ্ছে৷ কোনো আলাদা অ্যাকাউন্ট চয়ন করার জন্য দুবার আলতো চপুন৷"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">লিঙ্ক করা পরিচিতিগুলি (<xliff:g id="COUNT">%d</xliff:g>টি)</item>
- <item quantity="other">লিঙ্ক করা পরিচিতিগুলি (<xliff:g id="COUNT">%d</xliff:g>টি)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"পরিচিতি লিঙ্ক করুন"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"বাতিল করুন"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি সম্ভাব্য ডুপ্লিকেট</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি সম্ভাব্য ডুপ্লিকেট</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>টি)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>টি)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"এই পরিচিতি"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"সম্ভাব্য সদৃশগুলি"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"এই পরিচিতিগুলি একই ব্যক্তির হতে পারে৷ আপনি সেগুলিকে একটি একক পরিচিতি হিসাবে লিঙ্ক করতে পারবেন৷"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"লিঙ্ক করা পরিচিতিগুলি"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"আপনার অ্যাকাউন্টগুলি থেকে"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"একটি ফটো তুলুন"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"সকল ফটো"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ফটো বেছে নিন"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> থেকে"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> মুছুন"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> মুছুন"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> এর থেকে ফটো পরীক্ষা করা হয়নি"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> এর থেকে ফটো পরীক্ষা করা হয়েছে"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"অজানা অ্যাকাউন্টের ফটোতে টিক চিহ্ন দেওয়া হয়নি"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"অজানা অ্যাকাউন্টের ফটোতে টিক চিহ্ন দেওয়া হয়েছে"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ভাষা পরিবর্তন দেখানোর জন্য পরিচিতির তালিকা আপডেট করা হচ্ছে৷\n\nঅনুগ্রহ করে অপেক্ষা করুন..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"অবরোধ করা নম্বরগুলি"</string>
-</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
new file mode 100644
index 000000000..da6f3845a
--- /dev/null
+++ b/res/values-bn/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"পরিচিতিগুলি"</string>
+ <string name="contactsList" msgid="8661624236494819731">"পরিচিতিগুলি"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"পরিচিতি যোগ করুন"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"পরিচিতি"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"সরাসরি ডায়াল"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"সরাসরি বার্তা"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"পরিচিতি বেছে নিন"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"পরিচিতিতে যোগ করুন"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"একটি পরিচিতি বেছে নিন"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"নির্বাচন"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"নতুন পরিচিতি বানান"</string>
+ <string name="searchHint" msgid="8482945356247760701">"পরিচিতিগুলি খুঁজুন"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"পছন্দগুলিতে জুড়ুন"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"পছন্দসই থেকে সরান"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"পছন্দসই থেকে সরানো হয়েছে"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"পছন্দসই এ জোড়া হয়েছে"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"সম্পাদনা করুন"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"মুছুন"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ফটো পরিবর্তন করুন"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"শর্টকাট তৈরি করুন"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"লিঙ্কমুক্ত করুন"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"পরিচিতিগুলি সরান"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"লেবেলের পুনঃনামকরণ করুন"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"লেবেল মুছুন"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"পরিচিতি যোগ করুন"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"পরিচিতিগুলিকে নির্বাচন করুন"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"পরিচিতিগুলি যোগ করুন"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"লেবেল থেকে সরান"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"লেবেল তৈরি করুন"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করবেন?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"লিঙ্কমুক্ত করুন"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"আপনি কি আপনার ইতিমধ্যে করা পরিবর্তনগুলি সংরক্ষণ এবং এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করতে চান?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"সংরক্ষণ ও লিঙ্কমুক্ত করুন"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"আপনি কি আপনার ইতিমধ্যে করা পরিবর্তনগুলি সংরক্ষণ এবং নির্বাচিত পরিচিতির সাথে লিঙ্ক করতে চান?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"সংরক্ষণ ও লিঙ্ক করুন"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"লিঙ্ক করা হচ্ছে"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"লিঙ্কমুক্ত করা হচ্ছে"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"লিঙ্ক করুন"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"লিঙ্ক করা পরিচিতিগুলি দেখুন"</string>
+ <string name="menu_save" msgid="1727844363591825909">"সংরক্ষণ করুন"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"পরিচিতিগুলি লিঙ্ক করুন"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"যে পরিচিতিটিকে <xliff:g id="NAME">%s</xliff:g> এর সাথে লিঙ্ক করতে চান বেছে নিন:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"প্রস্তাবিত পরিচিতিগুলি"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"সকল পরিচিতি"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> লিঙ্ক করা হয়েছে"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"পরিচিতিগুলি লিঙ্ক করা হয়েছে"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g>কে মোছা হয়েছে"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> এবং <xliff:g id="NAME_1">%2$s</xliff:g>কে মোছা হয়েছে"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... মোছা হয়েছে"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">পরিচিতিগুলি মোছা হয়েছে</item>
+ <item quantity="other">পরিচিতিগুলি মোছা হয়েছে</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g>টি পরিচিতি</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>টি পরিচিতি</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google থেকে"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> থেকে"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"রিংটোন সেট করুন"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ভয়েসমেলে রুট করুন"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ভয়েসমেল থেকে আনরুট করুন"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"এই পরিচিতিটি শুধুমাত্র পঠনযোগ্য৷ এটিকে মোছা যাবে না কিন্তু আপনি এটিকে লুকিয়ে রাখতে পারেন৷"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"পরিচিতি লুকান"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"এই পরিচিতিতে থাকা শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টগুলি লুকানো হবে, কিন্তু মুছে ফেলা হবে না৷"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"এই পরিচিতিটি মুছবেন?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"নির্বাচিত পরিচিতিগুলি মুছে ফেলতে চান?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টের পরিচিতিগুলি মোছা যায় না, কিন্তু সেগুলিকে লুকিয়ে রাখা যাবে৷"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"যে পরিচিতিগুলি মোছা হবে সেগুলিতে একধিক অ্যাকাউন্টের বিশদ বিবরণ উপস্থিত রয়েছে৷ শুধুমাত্র-পঠনযোগ্য অ্যাকাউন্টগুলির বিশদ বিবরণ লুকানো হবে, মুছে ফেলা হবে না৷"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"এই পরিচিতিটি মোছা হলে সেটি একাধিক অ্যাকাউন্ট থেকে বিশদ বিবরণ মুছবে৷"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"এই পরিচিতিটি মুছবেন?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"মুছুন"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"এই পরিচিতিটি বিদ্যমান নয়৷"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"হোম স্ক্রীনে পরিচিতি যোগ করা হযেছে৷"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"হোম স্ক্রীনে <xliff:g id="NAME">%s</xliff:g> যোগ করা হয়েছে৷"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ডিভাইসে কোনো ছবি নেই৷"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"পরিচিতির ফটো"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"কাস্টম লেবেল নাম"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ফটো সরান"</string>
+ <string name="noContacts" msgid="2228592924476426108">"আপনার পরিচিতির তালিকা খালি"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"এই লেবেলে কোনো পরিচিতি নেই"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"এই অ্যাকাউন্টে কোনো পরিচিতি নেই"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"আপনার পরিচিতির তালিকা খালি"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> সংরক্ষণ করা হয়েছে"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"পরিচিতি সংরক্ষণ করা হয়েছে"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"পরিচিতিগুলি লিঙ্কমুক্ত করা হয়েছে"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"পরিচিতিতে করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"পরিচিতি লিঙ্কমুক্ত করা গেল না"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"পরিচিতি লিঙ্ক করা গেল না"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"পরিচিতি সংরক্ষণ করার সময় ত্রুটি"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"পরিচিতির ফটোয় করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"লেবেল লোড করা গেল না"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"লেবেল মুছে ফেলা হয়েছে"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"লেবেল তৈরি করা হয়েছে"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"লেবেল তৈরি করা গেল না"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"লেবেল আপডেট করা হয়েছে"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"লেবেল থেকে সরানো হয়েছে"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"লেবেল যোগ করা হয়েছে"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"লেবেলে করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"এই লেবেলটি ইতিমধ্যে রয়েছে"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"কিছু পরিচিতির ইমেল ঠিকানা নেই৷"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"কিছু পরিচিতির ফোন নম্বর নেই৷"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ইমেল পাঠান"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"বার্তা পাঠান"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"পরিচিতিগুলি বেছে নিন"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"পাঠান"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"কোনো পরিচিতি নেই"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"পরিচিতিগুলিতে <xliff:g id="EMAIL">%s</xliff:g> যোগ করবেন?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"আপনার পরিচিতিগুলির নামগুলি"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"পূর্ববর্তী স্ক্রীনে প্রত্যাবর্তন করার জন্য ক্লিক করুন"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ফোন নম্বর জুড়ুন"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ইমেল জুড়ুন"</string>
+ <string name="missing_app" msgid="1466111003546611387">"এই ক্রিয়াটিকে চালনা করার জন্য কোনো অ্যাপ্লিকেশান পাওয়া যায়নি৷"</string>
+ <string name="menu_share" msgid="943789700636542260">"শেয়ার করুন"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"পরিচিতিগুলিতে জুড়ুন"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"যোগ করুন"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">এর মাধ্যমে পরিচিতিগুলি শেয়ার করুন</item>
+ <item quantity="other">এর মাধ্যমে পরিচিতিগুলি শেয়ার করুন</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"অ্যাকাউন্ট বেছে নিন"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"লেবেল তৈরি করুন"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"লেবেলের পুনঃনামকরণ করুন"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"লেবেলের নাম"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"লেবেলের নাম"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ভয়েস চ্যাট"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ভিডিও চ্যাট"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>টি পরিচিতি"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> অ্যাকাউন্ট"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ফটো তুলুন"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"নতুন ফটো তুলুন"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ফটো বেছে নিন"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"নতুন ফটো নির্বাচন করুন"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"অনুসন্ধান করছে..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"তারিখ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"লেবেল"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"বাতিল করুন"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ফিরুন"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"বন্ধ করুন"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"নির্বাচিত পরিচিতি সম্পাদনায় নিয়ে যাবেন? আপনার এ পর্যন্ত প্রবেশ করানো তথ্য অনুলিপি করা হবে৷"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ডিরেক্টরি <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"সেটিংস"</string>
+ <string name="menu_settings" msgid="377929915873428211">"সেটিংস"</string>
+ <string name="menu_help" msgid="1680178646764069976">"সহায়তা ও প্রতিক্রিয়া"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ফোন নম্বর"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"পরিচিতিগুলিতে যোগ করুন"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"বন্ধ"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"বছর অন্তর্ভুক্ত করুন"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"অ্যাকাউন্ট যোগ করুন"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"আমদানি করুন"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"নতুন তৈরি করুন…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" গোষ্ঠী মুছবেন? (পরিচিতিগুলি নিজে থেকে মুছে যাবে না৷)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"অন্য একটির সাথে লিঙ্ক করার আগে পরিচিতির নাম লিখুন৷"</string>
+ <string name="copy_text" msgid="3257145021583508761">"ক্লিপবোর্ডে কপি করুন"</string>
+ <string name="set_default" msgid="4417505153468300351">"ডিফল্ট সেট করুন"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ডিফল্ট সাফ করুন"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"পাঠ্য অনুলিপি হয়েছে"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"পরিবর্তনগুলি বাতিল করবেন?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"বাতিল করুন"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"বাতিল করুন"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"কাস্টমাইজেশান বাতিল করতে চান?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"পরিচিতিগুলি খুঁজুন"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"পরিচিতিগুলি সরান"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"আমার স্থানীয় প্রোফাইল"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"আমার <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> প্রোফাইল"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"কয়েক মিনিট সময় দিয়ে একটি অ্যাকাউন্ট যোগ করুন যেটি Google এ আপনার পরিচিতিগুলির ব্যাক আপ নেবে৷"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"নতুন পরিচিতিগুলি <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> এ সংরক্ষণ করা হবে৷"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"নতুন পরিচিতিগুলির জন্য একটি ডিফল্ট অ্যাকাউন্ট বেছে নিন:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"নতুন পরিচিতি বানান"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"পরিচিতি সম্পাদনা করুন"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"কেবলমাত্র দেখার জন্য"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"সম্পাদনা করার জন্য একটি পরিচিতি বেছে নিন"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"লিঙ্ক করা পরিচিতিগুলি"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"যোগ করুন"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"লিঙ্কমুক্ত করুন"</string>
+ <string name="add_account" msgid="8201790677994503186">"অ্যাকাউন্ট জুড়ুন"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"নতুন অ্যাকাউন্ট যোগ করুন"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ডেটাবেস ফাইলগুলি রপ্তানি করুন"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"নতুন পরিচিতি বানান"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"আরো দেখুন"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"আরো কম"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"সাম্প্রতিক"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"সম্পর্কে"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"একটি ব্যক্তিগত অনুলিপি তৈরি করা হচ্ছে…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"আগামীকাল"</string>
+ <string name="today" msgid="8041090779381781781">"আজ"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"আজ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"আগামীকাল <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(শিরোনামহীন ইভেন্ট)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"সেট করুন"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"সংগঠন"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ডাকনাম"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"টীকা"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ওয়েবসাইট"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ইভেন্ট"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"সম্পর্ক"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"নাম"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ইমেল"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ফোন"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"অবস্থান জানার দিকনির্দেশ"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"সাম্প্রতিক sms৷ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>৷ <xliff:g id="DATE">%3$s</xliff:g>৷ প্রতিক্রিয়া জানাতে ক্লিক করুন"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"আগত"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"আউটগোয়িং"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"মিস করা"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"সাম্প্রতিক কল৷ <xliff:g id="CALL_TYPE">%1$s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>৷ <xliff:g id="DATE">%3$s</xliff:g>৷ ঘুরিয়ে কল করতে ক্লিক করুন"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"আপনি: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"আরো ফিল্ড"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"পরিচিতির ফটো পরিবর্তন করুন"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"পরিচিতির ফটো যোগ করুন"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"পরিচিতির ফটো"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"সম্পাদক খোলা গেল না৷"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"এতে সংরক্ষণ করা হচ্ছে"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> এর থেকে আসা পরিচিতির তথ্য সম্পাদনযোগ্য নয়"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"পরিচিতি লিঙ্ক করুন"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"বাতিল করুন"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"এই পরিচিতি"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"সম্ভাব্য সদৃশগুলি"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"এই পরিচিতিগুলি একই ব্যক্তির হতে পারে৷ আপনি সেগুলিকে একটি একক পরিচিতি হিসাবে লিঙ্ক করতে পারবেন৷"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> মুছুন"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> মুছুন"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"প্রস্তাবনা"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"নতুন"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"নেভিগেশান ড্রয়ার খুলুন"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"নেভিগেশান ড্রয়ার বন্ধ করুন"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> লেবেল"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"লেবেলগুলি"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"অ্যাকাউন্টগুলি"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"আপনার ইতিহাস একসাথে দেখুন"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ইভেন্ট এবং বার্তাগুলি"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ইভেন্টগুলি"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"বার্তাগুলি"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"প্রস্তাবনা"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"আপনার পরিচিতিগুলিকে সংগঠিত এবং উপযোগী করে রাখুন"</string>
+ <string name="undo" msgid="1425165101664071422">"পূর্বাবস্থায় ফিরুন"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> নম্বরে কল করুন"</string>
+ <string name="call_home" msgid="1990519474420545392">"বাড়ির নম্বরে কল করুন"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"মোবাইল নম্বরে কল করুন"</string>
+ <string name="call_work" msgid="5328785911463744028">"কর্মক্ষেত্রের নম্বরে কল করুন"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"কর্মক্ষেত্রের ফ্যাক্স নম্বরে কল করুন"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"বাড়ির ফ্যাক্স নম্বরে কল করুন"</string>
+ <string name="call_pager" msgid="9003902812293983281">"পেজার নম্বরে কল করুন"</string>
+ <string name="call_other" msgid="8563753966926932052">"কল করুন"</string>
+ <string name="call_callback" msgid="1910165691349426858">"কলব্যাক করার নম্বরে কল করুন"</string>
+ <string name="call_car" msgid="3280537320306436445">"গাড়ির ফোন নম্বরে কল করুন"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"কোম্পানির প্রধান নম্বরে কল করুন"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN নম্বরে কল করুন"</string>
+ <string name="call_main" msgid="6082900571803441339">"প্রধান নম্বরে কল করুন"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ফ্যাক্স নম্বরে কল করুন"</string>
+ <string name="call_radio" msgid="8296755876398357063">"রেডিওর ফোন নম্বরে কল করুন"</string>
+ <string name="call_telex" msgid="2223170774548648114">"টেলেক্স নম্বরে কল করুন"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD নম্বরে কল করুন"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"অফিসের মোবাইল নম্বরে কল করুন"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"অফিসের পেজার নম্বরে কল করুন"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> নম্বরে কল করুন"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS নম্বরে কল করুন"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (কল)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ঘরের ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"মোবাইল নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_work" msgid="2269624156655267740">"কর্মক্ষেত্রের নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"কার্মক্ষেত্রের ফ্যাক্স নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"বাড়ির ফ্যাক্স নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"পেজারের নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_other" msgid="806127844607642331">"পাঠ্য"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"কলব্যাক করার নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_car" msgid="7444227058437359641">"গাড়ির ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"কোম্পানির প্রধান ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_main" msgid="8621625784504541679">"প্রধান নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ফ্যাক্স নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"রেডিওর ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"টেলেক্স নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"কর্মক্ষেত্রের মোবাইলে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"কর্মক্ষেত্রের পেজারে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS ফোন নম্বরে পাঠ্য বার্তা পাঠান"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (বার্তা)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ভিডিও কল করুন"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"ঘন ঘন যোগাযোগ করা হয়েছে এমন পরিচিতিগুলিকে সাফ করবেন?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"পরিচিতি এবং ফোন অ্যাপ্লিকেশানগুলি থেকে আপনি ঘন ঘন যোগাযোগ করা পরিচিতির তালিকা সাফ করবেন, এবং ইমেল অ্যাপ্লিকেশানগুলিকে আবার শুরু থেকে আপনার ঠিকানা অভিরুচি জানতে বাধ্য করবেন৷"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"ঘন ঘন যোগাযোগ করা পরিচিতিগুলিকে সাফ করা হচ্ছে…"</string>
+ <string name="status_available" msgid="5586870015822828392">"উপলব্ধ"</string>
+ <string name="status_away" msgid="1838861100379804730">"অন্যত্র"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ব্যস্ত"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"অন্যান্য"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ডিরেক্টরি"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"কাজের সংগ্রহ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"সকল পরিচিতি"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> এর জন্য দ্রুত পরিচিতি"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(কোনও নাম নেই)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ঘন ঘন যোগাযোগ করা হয়েছে"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ফোন নম্বর সহ সমস্ত পরিচিতি"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"কর্মস্থলের প্রোফাইলের পরিচিতিগুলি"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"আপডেটগুলি দেখুন"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ডিভাইস"</string>
+ <string name="account_sim" msgid="6519016427905087952">"সিম"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"নাম"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ডাকনাম"</string>
+ <string name="name_given" msgid="4280790853455320619">"প্রথম নাম"</string>
+ <string name="name_family" msgid="7466985689626017037">"পদবি"</string>
+ <string name="name_prefix" msgid="59756378548779822">"নামের আগের অংশ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"মাঝের নাম"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"নামের পরের অংশ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"উচ্চারণগত নাম"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"উচ্চারণগত প্রথম নাম"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"উচ্চারণগত মাঝের নাম"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"উচ্চারণগত পারিবারিক নাম"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ফোন"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ইমেল করুন"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ঠিকানা"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"সংগঠন"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"সম্পর্ক"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"বিশেষ তারিখ"</string>
+ <string name="sms" msgid="1756857139634224222">"পাঠ্য বার্তা"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ঠিকানা"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"কোম্পানি"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"শীর্ষক"</string>
+ <string name="label_notes" msgid="8337354953278341042">"নোটগুলি"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"কাস্টম"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ওয়েবসাইট"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"লেবেলগুলি"</string>
+ <string name="email_home" msgid="8573740658148184279">"বাড়ির ইমেল ঠিকানায় ইমেল করুন"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"মোবাইলের ইমেল ঠিকানায় ইমেল করুন"</string>
+ <string name="email_work" msgid="2807430017302722689">"কর্মক্ষেত্রের ইমেল ঠিকানায় ইমেল করুন"</string>
+ <string name="email_other" msgid="3454004077967657109">"ইমেল করুন"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> এ ইমেল পাঠান"</string>
+ <string name="email" msgid="5668400997660065897">"ইমেল করুন"</string>
+ <string name="postal_street" msgid="8133143961580058972">"রাস্তা"</string>
+ <string name="postal_city" msgid="6597491300084895548">"শহর"</string>
+ <string name="postal_region" msgid="6045263193478437672">"রাজ্য"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"পিন কোড"</string>
+ <string name="postal_country" msgid="7638264508416368690">"দেশ"</string>
+ <string name="map_home" msgid="1243547733423343982">"বাড়ির ঠিকানা দেখুন"</string>
+ <string name="map_work" msgid="1360474076921878088">"কর্মক্ষেত্রের ঠিকানা দেখুন"</string>
+ <string name="map_other" msgid="3817820803587012641">"ঠিকানা দেখুন"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> এর ঠিকানা দেখুন"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber ব্যবহার করে চ্যাট করুন"</string>
+ <string name="chat" msgid="9025361898797412245">"চ্যাট"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"মুছুন"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"আরো নামের ক্ষেত্রগুলি দেখান"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"নামের ক্ষেত্রটিকে সঙ্কুচিত করুন"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"আরো ফোনেটিক নামের ক্ষেত্রগুলি দেখান"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ফোনেটিক নামের ক্ষেত্রটিকে প্রসারিত করুন"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"প্রসারিত করুন"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"সঙ্কুচিত করুন"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"প্রসারিত হয়েছে"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"সংকুচিত রয়েছে"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"সকল পরিচিতি"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"তারকাচিহ্নিত"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"নিজের সুবিধামতো করুন"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"পরিচিতি"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"অন্যান্য সকল পরিচিতি"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"সকল পরিচিতি"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"সমন্বয় গোষ্ঠী সরান"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"সমন্বয় গোষ্ঠী যোগ করুন"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"আরো গোষ্ঠী…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"সমন্বয় থেকে \"<xliff:g id="GROUP">%s</xliff:g>\" সরানো হলে তা সমন্বয় থেকে যেকোনো অগোষ্ঠীবদ্ধ পরিচিতিগুলিকেও সরাবে৷"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"প্রদর্শনের বিকল্পগুলি সংরক্ষণ করা হচ্ছে..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"কাস্টমাইজ করা দৃশ্য"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"আমদানি করা পরিচিতিগুলি এতে সংরক্ষণ করুন:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"সিম কার্ড"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"সিম <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%dটি পরিচিতি</item>
+ <item quantity="other">%dটি পরিচিতি</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g>টি পরিচিতি • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g>টি পরিচিতি • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ফাইল"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"আমদানি করার জন্য কিছুই নেই"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard থেকে পরিচিতিগুলি আমদানি করবেন?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> এর আমদানি বাতিল করবেন?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> এর রপ্তানি বাতিল করবেন?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard এর আমদানি/রপ্তানি বাতিল করা যায়নি"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"অজানা ত্রুটি৷"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" খোলা যায়নি: <xliff:g id="EXACT_REASON">%2$s</xliff:g>৷"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"রপ্তানিকারক শুরু করা যায়নি: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"৷"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"রফতানিযোগ্য কোনো পরিচিতি নেই৷"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"আপনি একটি প্রয়োজনীয় অনুমতি অক্ষম করেছেন৷"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"রপ্তানির সময় একটি ত্রুটি ঘটেছে: \" <xliff:g id="EXACT_REASON">%s</xliff:g> \"৷"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ত্রুটি"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"যথেষ্ট মেমরি নেই৷ ফাইলটি খুব বড় হতে পারে৷"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"এই ফর্ম্যাটটি সমর্থিত নয়৷"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> রপ্তানি করা সম্পন্ন হয়েছে৷"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"পরিচিতি রপ্তানি করা সম্পন্ন হয়েছে৷"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"পরিচিতিগুলি রপ্তানি করা হয়েছে, পরিচিতিগুলিকে শেয়ার করতে বিজ্ঞপ্তিটিতে ক্লিক করুন৷"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"পরিচিতিগুলিকে শেয়ার করতে আলতো চাপ দিন৷"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> রপ্তানি করা বাতিল হয়েছে৷"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"পরিচিতির তথ্য রপ্তানি করা হচ্ছে"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"পরিচিতির ডেটা রপ্তানি করা হচ্ছে৷"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ডেটাবেসের তথ্য পাওয়া যায়নি৷"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"রপ্তানি করার জন্য কোনো পরিচিতি নেই৷"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard কম্পোজার সঠিকভাবে শুরু করা হয়নি৷"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"রপ্তানি করা যায়নি"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"পরিচিতির তথ্য রপ্তানি করা যায়নি৷\nকারণ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> আমদানি করা হচ্ছে"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ডেটা পড়া যায়নি"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> আমদানি করা সমাপ্ত হয়েছে"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> আমদানি করা বাতিল করা হয়েছে"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> শীঘ্রই আমদানি করা হবে৷"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ফাইলটি শীঘ্রই আমদানি করা হবে৷"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard আমদানি করার অনুরোধ প্রত্যাখ্যাত হয়েছে৷ পরে আবার চেষ্টা করুন৷"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"পরিচিতিগুলি শীঘ্রই রপ্তানি করা হবে৷"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard রপ্তানি করার অনুরোধ প্রত্যাখ্যাত হয়েছে৷ পরে আবার চেষ্টা করুন৷"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"পরিচিতি"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"স্থানীয় অস্থায়ী সংগ্রহস্থলে vCard(গুলি)কে ক্যাশ করা হচ্ছে৷ প্রকৃত আমদানি শীঘ্রই শুরু হবে৷"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard আমদানি করতে পারা যায় নি৷"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC এর মাধ্যমে পরিচিতি প্রাপ্ত হয়েছে"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ক্যাশ করা হচ্ছে"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"আমদানি করা হচ্ছে, <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ফাইলে রপ্তানি করুন"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"এই অনুসারে সাজান"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"উচ্চারণগত নাম"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"সবসময় দেখান"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"খালি থাকলে লুকান"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"প্রথম নাম"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"পদবি"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"নামের বিন্যাস"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"প্রথমে প্রথম নামটি"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"প্রথমে উপাধি"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"অ্যাকাউন্টগুলি"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"নতুন পরিচিতিগুলির জন্য ডিফল্ট অ্যাকাউন্ট"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"আমার তথ্য"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"আপনার প্রোফাইল সেট আপ করুন"</string>
+ <string name="setting_about" msgid="7014388749752042863">"পরিচিতি সম্পর্কিত"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"পছন্দসই পরিচিতিগুলি শেয়ার করুন"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"সকল পরিচিতি শেয়ার করুন"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"পরিচিতিগুলিকে শেয়ার করতে ব্যর্থ হয়েছে৷"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"পরিচিতিগুলি রপ্তানি করুন"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"এর থেকে পরিচিতিগুলি আমদানি করুন"</string>
+ <string name="share_error" msgid="948429331673358107">"এই পরিচিতিটিকে শেয়ার করা যাবে না৷"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"শেয়ার করার জন্য কোনো পরিচিতি নেই৷"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"দেখানোর জন্য পরিচিতিগুলি"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"দেখানোর জন্য পরিচিতিগুলি"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"দর্শন কাস্টমাইজ করুন"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"সংরক্ষণ"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"পরিচিতিগুলি খুঁজুন"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"পছন্দসইগুলি"</string>
+ <string name="menu_import" msgid="6107961135813836467">"আমদানি করুন"</string>
+ <string name="menu_export" msgid="2658783911863503902">"রপ্তানি করুন"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"অবরোধ করা নম্বরগুলি"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> এর মাধ্যমে"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> এর মাধ্যমে <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"অনুসন্ধান বন্ধ করুন"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"অনুসন্ধান সাফ করুন"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"অ্যাকাউন্ট"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"কলের জন্য সবসময় এটি ব্যবহার করুন"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"একটি নোট সহ কল করুন"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"কলের সাথে পাঠানোর জন্য একটি নোট লিখুন…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"পাঠান এবং কল করুন"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"বিল্ডের সংস্করণ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"মুক্ত উৎস লাইসেন্স"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"মুক্ত উৎস সফ্টওয়্যারের লাইসেন্স বিবরণ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"গোপনীয়তা নীতি"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"পরিষেবার শর্তাবলী"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"মুক্ত উৎস লাইসেন্সগুলি"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url খুলতে ব্যর্থ হয়েছে৷"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> এ টিক চিহ্ন দেওয়া হয়েছে"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> এ টিক চিহ্ন দেওয়া হয়নি"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ভিডিও কল করুন"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"মুছুন"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"এলিপসিস"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> মিনিট <xliff:g id="SECONDS">%2$s</xliff:g> সেকেন্ড"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ঘণ্টা <xliff:g id="MINUTES_1">%2$s</xliff:g> মিনিট <xliff:g id="SECONDS">%3$s</xliff:g> সেকেন্ড"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"এই শর্টকাটটি অক্ষম করা হয়েছে"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"পরিচিতিটি সরানো হয়েছে"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"আমদানি করুন"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"পরিচিতিগুলি নির্বাচন করুন"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"আপনার সিম কার্ডে কোনো পরিচিতি নেই"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"পরিচিতিটি ইতিমধ্যেই আপনার তালিকাতে রয়েছে"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">সিম কার্ডে থাকা <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি আমদানি করা হয়েছে</item>
+ <item quantity="other">সিম কার্ডে থাকা <xliff:g id="COUNT">%d</xliff:g>টি পরিচিতি আমদানি করা হয়েছে</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"সিম কার্ডে থাকা পরিচিতিগুলি আমদানি করা গেল না"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"সিম থেকে আমদানি করুন"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"বাতিল করুন"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"স্বতঃ-সিঙ্ক বন্ধ আছে৷ চালু করতে আলতো চাপ দিন৷"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"খারিজ করুন"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"অ্যাকাউন্ট সিঙ্ক বন্ধ আছে৷ চালু করতে আলতো চাপ দিন৷"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"স্বতঃ-সিঙ্ক চালু করবেন?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google পরিচিতিগুলি ছাড়াও, সমস্ত অ্যাপ এবং অ্যাকাউন্টে আপনার করা পরিবর্তনগুলি, ওয়েব এবং আপনার ডিভাইসগুলির মধ্যে আপ টু ডেট রাখা হবে।"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"চালু করুন"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"কোনো সংযোগ নেই"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"সিম"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"আরো দেখান"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"সিম কার্ড আমদানি করা সমাপ্ত হয়েছে"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"আমদানি ব্যর্থ হয়েছে"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"সিম কার্ড থেকে পরিচিতিগুলি আমদানি করা গেল না"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"সিম আমদানি করা হচ্ছে"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"বিজ্ঞপ্তি"</string>
+</resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
deleted file mode 100644
index 52f1b1d61..000000000
--- a/res/values-bs-rBA/strings.xml
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakti"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Prikaži kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Uredi kontakt"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Direktno biranje"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Direktna poruka"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Izaberite prečicu kontakta"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Izaberite broj za pozivanje"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Izaberite broj da pošaljete poruku"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodaj u kontakt"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberi kontakt"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Označeno zvijezdom"</string>
- <string name="frequentList" msgid="7154768136473953056">"Često kontaktirani"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoriti"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalji o kontaktu"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Uredi kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Napravi kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Uredi grupu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Napravi grupu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
- <string name="searchHint" msgid="8482945356247760701">"Traži kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Prikaži kontakt"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno iz favorita"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Dodano u favorite"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Promijeni fotografiju"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Postavi na Početni ekran"</string>
- <string name="menu_call" msgid="3992595586042260618">"Pozovi kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Pošalji tekstualnu poruku kontaktu"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Razdvoji"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Uredi"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Izbriši"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodaj kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodaj grupu"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Razdvojiti ovaj kontakt na više kontakata?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdvoji"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Želite li sačuvati promjene koje ste već načinili i razdvojiti ovaj kontakt na više kontakata?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Sačuvaj i razdvoji"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Želite li sačuvati promjene koje ste već načinili i povezati s odabranim kontaktom?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Sačuvaj i poveži"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Poveži"</string>
- <string name="menu_save" msgid="1727844363591825909">"Sačuvaj"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Poveži kontakte"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izaberite kontakt koji želite povezati s kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži sve kontakte"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su povezani"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">Kontakti su izbrisani</item>
- <item quantity="few">Kontakti su izbrisani</item>
- <item quantity="other">Kontakti su izbrisani</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Postavi zvono"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Svi pozivi na govornu poštu"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakti s računa koji su samo za čitanje se ne mogu izbrisati, ali se mogu sakriti."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Sakrij"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt kojeg želite izbrisati sadrži detalje s više računa. Detalji s računa koji su samo za čitanje se neće izbrisati, već sakriti."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Trebate odabrati najmanje dva kontakta da obavite povezivanje."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Povezati odabrane kontakte?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Poveži"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Izbrisati ovaj kontakt?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Izbrisati odabrane kontakte?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakti s računa koji su samo za čitanje se ne mogu izbrisati, ali se mogu sakriti."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kontakti koje želite izbrisati sadrže detalje s više računa. Detalji s računa koji su samo za čitanje se neće izbrisati, već sakriti."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Brisanjem ovog kontakta ćete izbrisati detalje s više računa."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Izbrisati ovaj kontakt?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Odbaci promjene"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt ne postoji."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt je dodan na Početni ekran."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> je dodan na Početni ekran."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Napravi novi kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Napravi novi kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacija"</item>
- <item msgid="7196592230748086755">"Bilješka"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Na tabletu nema dostupnih slika."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Na telefonu nema dostupnih slika."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografija kontakta"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Prilagođeni naziv oznake"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pošalji pozive direktno na govornu poštu"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nema kontakata"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nema grupa."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Potreban vam je račun da napravite grupe."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"U ovoj grupi nema ljudi."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Da dodate članove, uredite grupu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Spremanje kontakta u toku…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je sačuvan"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakti su razdvojeni"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nije moguće sačuvati promjene kontakta."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nije moguće razdvojiti kontakt."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nije moguće povezati kontakt."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Greška prilikom čuvanja kontakta."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nije moguće sačuvati promjene fotografije kontakta."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupa je sačuvana."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nije moguće sačuvati promjene grupe."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt s brojem telefona</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta s brojevima telefona</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata s brojevima telefona</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nema kontakata s brojevima telefona"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt pronađen</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta pronađena</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata pronađeno</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nema kontakata"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt pronađen</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta pronađena</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata pronađeno</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Sve"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriti"</string>
- <string name="callBack" msgid="5498224409038809224">"Uputi povratni poziv"</string>
- <string name="callAgain" msgid="3197312117049874778">"Pozovi ponovo"</string>
- <string name="returnCall" msgid="8171961914203617813">"Uzvrati poziv"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" u kontakte?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Imena kontakata"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nije pronađena aplikacija za obavljanje ove radnje."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za povratak na prethodni ekran"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodajte broj telefona"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Dodajte adresu e-pošte"</string>
- <string name="missing_app" msgid="1466111003546611387">"Nije pronađena aplikacija za obavljanje ove radnje."</string>
- <string name="menu_share" msgid="943789700636542260">"Podijeli"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Dodaj u kontakte"</string>
- <string name="share_via" msgid="563121028023030093">"Podijeli kontakt putem"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Napravite grupu pod računom"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Glasovno ćaskanje"</string>
- <string name="video_chat" msgid="1872255818640336072">"Videoćaskanje"</string>
- <string name="connections" msgid="8098440723172028350">"Veze"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Dodaj vezu"</string>
- <string name="recent" msgid="2659189233141493004">"Nedavno"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nedavna ažuriranja"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Račun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nije moguće uređivati iz ove aplikacije."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nije moguće uređivati na ovom uređaju."</string>
- <string name="take_photo" msgid="7496128293167402354">"Snimi fotografiju"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Snimi novu fotografiju"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Izaberi fotografiju"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Odaberi novu fotografiju"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Lista kontakata se ažurira."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Pretraživanje…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Prikaži odabrane"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Prikaži sve"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Odaberi sve"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Ukloni odabir svih"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novi"</string>
- <string name="add_organization" msgid="7311893231158291197">"Dodaj organizaciju"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Naziv grupe"</string>
- <string name="change_photo" msgid="8530597935483526383">"Promijeni"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primarna fotografija"</string>
- <string name="description_star" msgid="2605854427360036550">"favorit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Uredi kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Povezati trenutni kontakt s odabranim kontaktom?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prebaciti se na uređivanje odabranog kontakta? Informacije koje ste unijeli će biti kopirane."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj u Moje kontakte"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj u Moje kontakte"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Imenik <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Prilagođeno"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
- <string name="menu_settings" msgid="377929915873428211">"Postavke"</string>
- <string name="menu_help" msgid="1680178646764069976">"Pomoć i povratne informacije"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcije prikaza"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Broj telefona"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj u kontakte"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodaj u kontakt"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Zatvori"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Prikaži godinu"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Učitavanje…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Napravi novi kontakt"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Napravi novu grupu"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Napravi novu grupu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Izbrisati grupu \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakti neće biti izbrisani.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osobe iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osobe</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Upišite ime kontakta prije povezivanja s drugim kontaktom."</string>
- <string name="copy_text" msgid="3257145021583508761">"Kopiraj u međumemoriju"</string>
- <string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
- <string name="clear_default" msgid="7193185801596678067">"Obriši zadano"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Tekst je kopiran"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite li odbaciti napravljene promjene i prekinuti uređivanje?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nastavi uređivanje"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Postavljanje mog profila"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Upišite ime osobe"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Naziv grupe"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Moj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikazuju se svi kontakti"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte sigurnost svojih kontakata čak i ako izgubite telefon: sinhronizirajte ih s mrežnom uslugom."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajte račun"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Neće biti napravljena sigurnosna kopija novog računa. Dodati račun za pravljenje sigurnosnih kopija kontakata na mreži?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti će biti sačuvani na račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izaberite zadani račun za nove kontakte:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj novi kontakt"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Uredi kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Zadrži na uređaju"</string>
- <string name="add_account" msgid="8201790677994503186">"Dodajte račun"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Dodaj novi račun"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Izvezi fajlove baze podataka"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodaj novi kontakt"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pogledaj više"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Vidi manje"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Pogledaj sve"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
- <string name="about_card_title" msgid="2920942314212825637">"O kontaktu"</string>
- <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Izrađivanje lične kopije u toku..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Jučer"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
- <string name="today" msgid="8041090779381781781">"Danas"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sutra u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Događaj bez naslova)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Postavi"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Organizacija"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Nadimak"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Bilješka"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Web lokacija"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Događaj"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Odnos"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Račun"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da proširite uređivač kontakata."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da skupite uređivač kontakata."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"smjernice do lokacije"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms-ovi. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite da odgovorite"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"dolazni"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odlazni"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"propušteni"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite da uputite povratni poziv"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funkcionira bolje kada unesete Hangouts identifikator osobe u polje za adresu e-pošte ili telefon."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Više polja"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promijeni fotografiju"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje uređivača nije uspjelo."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sačuvati na"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se sprema na račun <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dodirnite dvaput da izaberete drugi račun."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Povezani kontakti: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI KONTAKTE"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"OTKAŽI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> Mogući duplikat</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> Moguća duplikata</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Mogućih duplikata</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> povezan kontakt</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> povezana kontakta</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> povezanih kontakata</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ovaj kontakt"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogući duplikati"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Moguće je da su ovi kontakti ista osoba. Možete ih povezati u jedan kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Povezani kontakti"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"S vaših računa"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Snimi fotografiju"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Sve fotografije"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Izaberi fotografiju"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Od kontakta <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotografija s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>nije označena"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografija s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>je označena"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografija s nepoznatog računa nije označena"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografija s nepoznatog računa je označena"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Lista kontakata se ažurira u skladu s promjenom jezika.\n\nPričekajte..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
-</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
new file mode 100644
index 000000000..091b09e8b
--- /dev/null
+++ b/res/values-bs/strings.xml
@@ -0,0 +1,539 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj kontakt"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Direktno biranje"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Direktna poruka"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Izaberi kontakt"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodaj u kontakt"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izaberi kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Odaberi"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Napravi novi kontakt"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno iz favorita"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Dodano u favorite"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Promijeni fotografiju"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Napravi prečicu"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Razdvoji"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Ukloni kontakte"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznaku"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Izbriši oznaku"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Odaberite kontakte"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodaj kontakte"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ukloni iz oznake"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Napravi oznaku"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Razdvojiti ovaj kontakt na više kontakata?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdvoji"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Želite li sačuvati promjene koje ste već načinili i razdvojiti ovaj kontakt na više kontakata?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Sačuvaj i razdvoji"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Želite li sačuvati promjene koje ste već načinili i povezati s odabranim kontaktom?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Sačuvaj i poveži"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Povezivanje u toku"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Prekid povezanosti u toku"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Poveži"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Prikaz povezanih kontakata"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Sačuvaj"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Poveži kontakte"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izaberite kontakt koji želite povezati s kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> je povezan"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su povezani"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> je izbrisan"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Kontakti <xliff:g id="NAME_0">%1$s</xliff:g> i <xliff:g id="NAME_1">%2$s</xliff:g> su izbrisani"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Kontakti <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… su izbrisani"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">Kontakti su izbrisani</item>
+ <item quantity="few">Kontakti su izbrisani</item>
+ <item quantity="other">Kontakti su izbrisani</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Sa Googlea"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Sa računa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Postavi zvono"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Preusmjeri na govornu poštu"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Poništi preusmj. na gov. poštu"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ovaj kontakt je samo za čitanje. Ne može se izbrisati, ali ga možete sakriti."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Sakrij kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Računi koji su samo za čitanje u ovom kontaktu bit će sakriveni, ne izbrisani."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Izbrisati ovaj kontakt?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Izbrisati odabrane kontakte?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakti s računa koji su samo za čitanje se ne mogu izbrisati, ali se mogu sakriti."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kontakti koje želite izbrisati sadrže detalje s više računa. Detalji s računa koji su samo za čitanje se neće izbrisati, već sakriti."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Brisanjem ovog kontakta ćete izbrisati detalje s više računa."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Izbrisati ovaj kontakt?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt ne postoji."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt je dodan na Početni ekran."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> je dodan na Početni ekran."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Na uređaju nema dostupnih slika."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografija kontakta"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Prilagođeni naziv oznake"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Spisak kontakata je prazan"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata s ovom oznakom"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom računu"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Spisak kontakata je prazan"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontakt <xliff:g id="DISPLAY_NAME">%s</xliff:g> je sačuvan"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je sačuvan"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakti su razdvojeni"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nije moguće sačuvati promjene kontakta"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nije moguće razdvojiti kontakt"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nije moguće povezati kontakt"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Greška prilikom spremanja kontakta"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nije moguće sačuvati promjene fotografije kontakta"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Učitavanje oznake nije uspjelo"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je napravljena"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nije moguće napraviti oznaku"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonjeno iz oznake"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano oznaci"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nije moguće sačuvati promjene oznake"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznaka već postoji"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Neki kontakti nemaju adrese e-pošte."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Neki kontakti nemaju brojeve telefona."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Pošalji poruku e-pošte"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Pošalji poruku"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Izaberite kontakte"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Pošalji"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nema kontakata"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" u kontakte?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Imena kontakata"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za povratak na prethodni ekran"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodajte broj telefona"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Dodajte adresu e-pošte"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Nije pronađena aplikacija za obavljanje ove radnje."</string>
+ <string name="menu_share" msgid="943789700636542260">"Podijeli"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Dodaj u kontakte"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Dodaj"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Podijeli kontakte putem</item>
+ <item quantity="few">Podijeli kontakte putem</item>
+ <item quantity="other">Podijeli kontakte putem</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Izaberi račun"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Napravi oznaku"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Preimenuj oznaku"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Naziv oznake"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Naziv oznake"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Glasovno ćaskanje"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Videoćaskanje"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Račun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Snimi fotografiju"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Snimi novu fotografiju"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Izaberi fotografiju"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Odaberi novu fotografiju"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Pretraživanje…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Otkaži"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Nazad"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvori"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prebaciti se na uređivanje odabranog kontakta? Informacije koje ste unijeli će biti kopirane."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Imenik <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Postavke"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Pomoć i povratne informacije"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Broj telefona"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj u kontakte"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Zatvori"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Prikaži godinu"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Napravi novu…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Izbrisati oznaku \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakti neće biti izbrisani.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Upišite ime kontakta prije povezivanja s drugim kontaktom."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Kopiraj u međumemoriju"</string>
+ <string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Obriši zadano"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Tekst je kopiran"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Odbaciti promjene?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Otkaži"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Odbaciti prilagođavanja?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pretraži kontakte"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Ukloni kontakte"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Moj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojite malo vremena da dodate račun putem kojeg će se kontakti sigurnosno kopirati na Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti će biti sačuvani na račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izaberite zadani račun za nove kontakte:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Napravi novi kontakt"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Uredi kontakt"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Samo prikaz"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Izaberite kontakt za uređivanje"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Povezani kontakti"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Dodaj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Prekini povezanost"</string>
+ <string name="add_account" msgid="8201790677994503186">"Dodajte račun"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Dodaj novi račun"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Izvezi fajlove baze podataka"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Napravi novi kontakt"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pogledaj više"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Vidi manje"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"O kontaktu"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Izrađivanje lične kopije u toku…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
+ <string name="today" msgid="8041090779381781781">"Danas"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sutra u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Događaj bez naslova)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Postavi"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Organizacija"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Nadimak"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Bilješka"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Web lokacija"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Događaj"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Odnos"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"smjernice do lokacije"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms-ovi. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite da odgovorite"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"dolazni"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odlazni"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"propušteni"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite da uputite povratni poziv"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Više polja"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Promijenite fotografiju kontakta"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodajte fotografiju kontakta"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotografija kontakta"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Otvaranje uređivača nije uspjelo."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Sačuvaj na"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Informacije o kontaktu s <xliff:g id="ACCOUNT">%s</xliff:g> nije moguće uređivati"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI KONTAKTE"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"OTKAŽI"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ovaj kontakt"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogući duplikati"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Moguće je da su ovi kontakti ista osoba. Možete ih povezati u jedan kontakt."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Prijedlozi"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvori panel za navigaciju"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zatvori panel za navigaciju"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Oznaka <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Oznake"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Računi"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Pogledajte historiju kalendara i SMS-a"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Događaji i poruke"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Događaji"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Poruke"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Prijedlozi"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Neka vam kontakti budu organizirani i korisni"</string>
+ <string name="undo" msgid="1425165101664071422">"Poništi"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Pozovi kuću"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Pozovi mobitel"</string>
+ <string name="call_work" msgid="5328785911463744028">"Pozovi posao"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Pozovi poslovni faks"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Pozovi kućni faks"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Pozovi pejdžer"</string>
+ <string name="call_other" msgid="8563753966926932052">"Pozovi"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Pozovi broj za uzvraćanje poziva"</string>
+ <string name="call_car" msgid="3280537320306436445">"Pozovi automobil"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Pozovi glavni broj kompanije"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Pozovi ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Pozovi glavni broj"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Pozovi faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Pozovi radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Pozovi teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Pozovi TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Pozovi poslovni mobitel"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Pozovi poslovni pejdžer"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Pozovi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Pozovi MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Poziv)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Pošalji poruku na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Pošalji tekstualnu poruku na kućni broj"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Pošalji tekstualnu poruku na mobilni"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Pošalji tekstualnu poruku na poslovni broj"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Pošalji tekstualnu poruku na poslovni faks"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Pošalji tekstualnu poruku na kućni faks"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Pošalji tekstualnu poruku na pejdžer"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Pošalji tekstualnu poruku na broj za povratni poziv"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Pošalji tekstualnu poruku na automobil"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Pošalji tekstualnu poruku na glavni broj kompanije"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Pošalji tekstualnu poruku na ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Pošalji tekstualnu poruku na glavni broj"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Pošalji tekstualnu poruku na faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Pošalji tekstualnu poruku na radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Pošalji tekstualnu poruku na teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Pošalji tekstualnu poruku na TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Pošalji tekstualnu poruku na poslovni mobitel"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Pošalji tekstualnu poruku na poslovni pejdžer"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Pošalji tekstualnu poruku <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Pošalji tekstualnu poruku na MMS broj"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Poruka)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Uputi videopoziv"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Obrisati često kontaktirane osobe?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Obrisat ćete listu često kontaktiranih osoba u aplikaciji Kontakti i Aplikaciji za telefon, pa će aplikacije za e-poštu morati ispočetka učiti vaše postavke adresa."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih osoba…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Dostupno"</string>
+ <string name="status_away" msgid="1838861100379804730">"Odsutan"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zauzeto"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Ostalo"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktorij"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Poslovni imenik"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti s brojevima telefona"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakti radnog profila"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Uređaj"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+ <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Titula ispred imena"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Srednje ime"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Titula iza imena"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetsko ime"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetsko ime"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetsko srednje ime"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetsko prezime"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pošta"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Posebni datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Kompanija"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Pozicija"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Bilješke"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web lokacija"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+ <string name="email_home" msgid="8573740658148184279">"Pošalji poruku e-pošte na kućnu adresu e-pošte"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Mobilna e-pošta"</string>
+ <string name="email_work" msgid="2807430017302722689">"Pošalji poruku e-pošte na poslovnu adresu e-pošte"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-pošta"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Pošalji poruku e-pošte na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-pošta"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Država"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Država"</string>
+ <string name="map_home" msgid="1243547733423343982">"Prikaži kućnu adresu"</string>
+ <string name="map_work" msgid="1360474076921878088">"Prikaži poslovnu adresu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Prikaži adresu"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Prikaži <xliff:g id="CUSTOM_LABEL">%s</xliff:g> adresu"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Ćaskanje putem aplikacije AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Ćaskanje putem aplikacije Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Ćaskanje putem aplikacije Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Ćaskanje putem aplikacije Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Ćaskanje putem aplikacije QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Ćaskanje putem aplikacije Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Ćaskanje putem aplikacije ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Ćaskanje putem aplikacije Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Ćaskanje"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Prikaži više polja za ime"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skupi polja za imena"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Prikaži više polja za fonetsko ime"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skupi polja za fonetska imena"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Proširi"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Skupi"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skupljeno"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Označeno zvijezdom"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Svi drugi kontakti"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Svi kontakti"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu za sinhronizaciju"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupu za sinhronizaciju"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Više grupa…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanje grupe \"<xliff:g id="GROUP">%s</xliff:g>\" iz sinhronizacije će također ukloniti sve negrupirane kontakte iz sinhronizacije."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Čuvanje opcija prikaza u toku…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Sačuvaj uvezene kontakte na karticu:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM kartice"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM kartice <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d kontakt</item>
+ <item quantity="few">%1$d kontakta</item>
+ <item quantity="other">%1$d kontakata</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakta • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakata • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf fajla"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nema ništa za uvoz"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Uvesti kontakte iz vCard fajla?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Otkazati uvoz fajla <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Otkazati izvoz fajla <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nemoguće otkazati uvoz/izvoz vCard fajla"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata greška."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nije moguće otvoriti \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nije moguće pokrenuti program za izvoz: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema sadržaja za izvoz."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste potrebnu dozvolu."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Došlo je do greške prilikom izvoza: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O greška"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Možda je fajl prevelik."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je završen."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz kontakata je završen."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz kontakata je završen. Kliknite obavještenje da podijelite kontakte."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dodirnite da podijelite kontakte."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je otkazan."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka kontakta u toku"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci kontakta se izvoze."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nije moguće preuzeti informacije iz baze podataka."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nema kontakata za izvoz."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Program za izradu kartica vCard nije pravilno pokrenut."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz nije uspio"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci kontakta nisu izvezeni.\nRazlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Uvozi se kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Čitanje podataka vCard nije uspjelo"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Završen uvoz vCard fajla <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz fajla <xliff:g id="FILENAME">%s</xliff:g> je otkazan"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fajl <xliff:g id="FILENAME">%s</xliff:g> će uskoro biti uvezen."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fajl će uskoro biti uvezen."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtjev za uvoz vCard fajla je odbijen. Pokušajte ponovo kasnije."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će uskoro biti izvezeni."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtjev za izvoz vCard fajla je odbijen. Pokušajte ponovo kasnije."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Spremanje vCard fajlova u lokalnu privremenu pohranu. Uvoz će započeti uskoro."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Uvoz vCard kartice nije uspio."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC-om"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Spremanje u privremenu pohranu u toku"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Uvozi se <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Izvezi u .vcf fajl"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Poredano po"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetsko ime"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Uvijek prikaži"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Sakrij ako je prazno"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Prezime"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format imena"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Ime prvo"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Prezime prvo"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Računi"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Zadani račun za nove kontakte"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Postavite svoj profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O kontaktima"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Dijeli omiljene kontakte"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Dijeli sve kontakte"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Dijeljenje kontakata nije uspjelo."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Izvezi kontakte"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Uvezi kontakte sa"</string>
+ <string name="share_error" msgid="948429331673358107">"Ovaj kontakt se ne može podijeliti."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za dijeljenje."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Prilagodi prikaz"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Sačuvaj"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pretraži kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Uvezi"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Izvezi"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"putem <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> putem <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavi pretraživanje"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Obriši pretragu"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Uvijek koristi ovu karticu za poziv"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Poziv s bilješkom"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Upišite bilješku koja će se poslati uz poziv…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I POZOVI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Podverzija"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalji o licenci za softver otvorenog koda"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Pravila o privatnosti"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Uslovi pružanja usluge"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licence otvorenog koda"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Otvaranje URL-a nije uspjelo."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> je označen"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nije označen"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Uputi videopoziv"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsa"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ova prečica je onemogućena"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt je uklonjen"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Uvezi"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Odaberite kontakte"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nema kontakata na SIM kartici"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt se već nalazi na listi"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Uvezen je <xliff:g id="COUNT">%d</xliff:g> kontakt sa SIM kartice</item>
+ <item quantity="few">Uvezena su <xliff:g id="COUNT">%d</xliff:g> kontakta sa SIM kartice</item>
+ <item quantity="other">Uvezeno je <xliff:g id="COUNT">%d</xliff:g> kontakata sa SIM kartice</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Uvoz kontakata sa SIM kartice nije uspio"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Uvezi sa SIM kartice"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Otkaži"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatska sinhronizacija je isključena. Dodirnite da je uključite."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Odbaci"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinhronizacija računa je isključena. Dodirnite da je uključite."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Želite li uključiti automatsko sinhroniziranje?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Promjene koje načinite u svim aplikacijama i računima, ne samo u Google kontaktima, bit će ažurirani i na internetu i na vašim uređajima."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Uključi"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Niste povezani na mrežu"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Prikaži više"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Uvoz sa SIM kartice je dovršen"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspio"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nije moguće uvesti kontakte sa SIM kartice"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvoz sa SIM kartice"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obavještenja"</string>
+</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 95c2f4552..cf747c2ca 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contactes"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contactes"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Mostra el contacte"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edita el contacte"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactes"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Afegeix un contacte"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contacte"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Marcatge directe"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Missatge directe"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Tria una drecera de contacte"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Tria un número per trucar-hi"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Número per enviar un missatge"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Tria un contacte"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Afegeix al contacte"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Tria un contacte"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecciona"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crea un contacte"</string>
- <string name="starredList" msgid="4817256136413959463">"Destacats"</string>
- <string name="frequentList" msgid="7154768136473953056">"Freqüent"</string>
- <string name="strequentList" msgid="5640192862059373511">"Preferits"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Dades de contacte"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edita el contacte"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Crea un contacte"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edita el grup"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Crea un grup"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Informació"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualitz."</string>
<string name="searchHint" msgid="8482945356247760701">"Cerca als contactes"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Visualitza el contacte"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Afegeix als preferits"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Suprimeix dels preferits"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminat dels preferits"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edita"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Suprimeix"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Canvia la foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Afegeix a la pantalla d\'inici"</string>
- <string name="menu_call" msgid="3992595586042260618">"Truca al contacte"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Envia un SMS al contacte"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crea una drecera"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desenllaça"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edita"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Suprimeix"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Afegeix el contacte"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Afegeix un grup"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Suprimeix els contactes"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Canvia el nom de l\'etiqueta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Suprimeix l\'etiqueta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Afegeix un contacte"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecciona contactes"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Afegeix contactes"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Suprimeix de l\'etiqueta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crea una etiqueta"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Vols desenllaçar aquest contacte en diversos contactes?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desenllaça"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vols desar els canvis que ja has aplicat i desenllaçar aquest contacte en diversos contactes?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Desa i desenllaça"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vols desar els canvis que ja has aplicat i enllaçar els contactes seleccionats?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Desa i enllaça"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"S\'està enllaçant"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"S\'està desenllaçant"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Enllaça"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Mostra els contactes enllaçats"</string>
<string name="menu_save" msgid="1727844363591825909">"Desa"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Enllaça els contactes"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Tria el contacte que vols enllaçar amb <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostra tots els contactes"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactes suggerits"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tots els contactes"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> s\'ha enllaçat"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contactes enllaçats"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"S\'ha suprimit <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"S\'ha suprimit <xliff:g id="NAME_0">%1$s</xliff:g> i <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"S\'ha suprimit <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">S\'han suprimit els contactes</item>
<item quantity="one">S\'ha suprimit el contacte</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactes</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacte</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactes · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacte · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Estableix so"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Trucades a la bústia de veu"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Els contactes dels teus comptes que siguin només de lectura no es poden suprimir, però sí que es poden amagar."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Amaga"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"El contacte que s\'ha de suprimir té informació de diversos comptes. La informació dels comptes que siguin només de lectura s\'amagarà, però no se suprimirà."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Has de tenir com a mínim dos contactes seleccionats per enllaçar-los."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vols enllaçar els contactes seleccionats?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Enllaça"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Encamina a la bústia de veu"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"No encaminis a la bústia de veu"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Aquest contacte és només de lectura. No es pot suprimir, però el pots amagar."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Amaga el contacte"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Els contactes només de lectura d\'aquest compte s\'amagaran, però no se suprimiran."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vols suprimir aquest contacte?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vols suprimir els contactes seleccionats?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Els contactes dels teus comptes que siguin només de lectura no es poden suprimir, però sí que es poden amagar."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Si suprimeixes aquest contacte, se suprimirà informació de diversos comptes."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vols suprimir aquest contacte?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Suprimeix"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descarta els canvis"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"El contacte no existeix."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"S\'ha afegit el contacte a la pantalla d\'inici."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"S\'ha afegit <xliff:g id="NAME">%s</xliff:g> a la pantalla d\'inici."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crea un contacte"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Crea un contacte"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organització"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hi ha imatges disponibles a la tauleta."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hi ha cap imatge disponible al telèfon."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"No hi ha cap imatge disponible al dispositiu."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacte"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nom de camp personalitzat"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Envia les trucades directament a la bústia de veu"</string>
<string name="removePhoto" msgid="4898105274130284565">"Suprimeix la foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"No hi ha cap contacte"</string>
- <string name="noGroups" msgid="8614664663561385253">"Cap grup"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Per crear grups necessites un compte."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"No hi ha persones en aquest grup."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Per afegir-ne, edita el grup."</string>
- <string name="savingContact" msgid="4075751076741924939">"S\'està desant el contacte..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"La llista de contactes està buida"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No hi ha cap contacte amb aquesta etiqueta"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No hi ha cap contacte en aquest compte"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"La llista de contactes està buida"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> s\'ha desat"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"S\'ha desat el contacte"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Els contactes s\'han desenllaçat"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"No s\'han pogut desar els canvis al contacte."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No s\'ha pogut desenllaçar el contacte."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"No s\'ha pogut enllaçar el contacte."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"S\'ha produït un error en desar el contacte."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No s\'han pogut desar els canvis de la foto de contacte."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grup desat."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"No s\'han pogut desar els canvis al grup."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes amb número de telèfon</item>
- <item quantity="one">1 contacte amb número de telèfon</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No hi ha cap contacte amb número de telèfon"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes</item>
- <item quantity="one">1 contacte</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"No s\'han pogut desar els canvis al contacte"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No s\'ha pogut desenllaçar el contacte"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"No s\'ha pogut enllaçar el contacte"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"S\'ha produït un error en desar el contacte"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No s\'han pogut desar els canvis de la foto de contacte"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"L\'etiqueta no s\'ha pogut carregar"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"L\'etiqueta s\'ha suprimit"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"L\'etiqueta s\'ha creat"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"L\'etiqueta no es pot crear"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"L\'etiqueta s\'ha actualitzat"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"S\'han suprimit de l\'etiqueta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"S\'han afegit a l\'etiqueta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"No s\'han pogut desar els canvis fets a l\'etiqueta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Aquesta etiqueta ja existeix"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Alguns contactes no tenen adreces electròniques."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Alguns contactes no tenen números de telèfon."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Envia un correu electrònic"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envia un missatge"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Tria contactes"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Envia"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No hi ha cap contacte"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes</item>
- <item quantity="one">1 contacte</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tots"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Preferits"</string>
- <string name="callBack" msgid="5498224409038809224">"Truca"</string>
- <string name="callAgain" msgid="3197312117049874778">"Torna a trucar"</string>
- <string name="returnCall" msgid="8171961914203617813">"Retorna la trucada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voleu afegir \"<xliff:g id="EMAIL">%s</xliff:g>\" als contactes?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto del contacte"</string>
- <string name="description_plus_button" msgid="515164827856229880">"més"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactes"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms dels contactes"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No s\'ha trobat cap aplicació per processar aquesta acció."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fes clic per tornar a la pantalla anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Afegeix un número de telèfon"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Afegeix una adreça electrònica"</string>
<string name="missing_app" msgid="1466111003546611387">"No s\'ha trobat cap aplicació per processar aquesta acció."</string>
<string name="menu_share" msgid="943789700636542260">"Comparteix"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Afegeix als contactes"</string>
- <string name="share_via" msgid="563121028023030093">"Comparteix el contacte mitjançant"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Creació d\'un grup al compte"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Afegeix"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Comparteix els contactes per</item>
+ <item quantity="one">Comparteix el contacte per</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Tria un compte"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Crea una etiqueta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Canvia el nom de l\'etiqueta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nom de l\'etiqueta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom de l\'etiqueta"</string>
<string name="audio_chat" msgid="2535716629358298691">"Xat de veu"</string>
<string name="video_chat" msgid="1872255818640336072">"Xat de vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Connexions"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Afegeix una connexió"</string>
- <string name="recent" msgid="2659189233141493004">"Recent"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Actualitzac. recents"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Compte de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"No es pot editar des d\'aquesta aplicació."</string>
- <string name="group_read_only" msgid="1061762906115697637">"No es pot editar en aquest dispositiu."</string>
<string name="take_photo" msgid="7496128293167402354">"Fes una foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Fes una foto nova"</string>
<string name="pick_photo" msgid="2129509985223564942">"Tria una foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Selecciona una foto nova"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"S\'actualitza la llista de contactes."</string>
<string name="search_results_searching" msgid="3984833028938569930">"S\'està cercant..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostra la selecció"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostra-ho tot"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Selecciona-ho tot"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Anul·la tota la selecció"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Afegeix-ne un"</string>
- <string name="add_organization" msgid="7311893231158291197">"Afegeix organització"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nom del grup"</string>
- <string name="change_photo" msgid="8530597935483526383">"Canvia"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"preferit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edita contacte"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vols enllaçar el contacte actual amb el contacte seleccionat?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel·la"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Enrere"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tanca"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vols canviar per editar el contacte seleccionat? Es copiarà la informació que hagis introduït fins ara."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copia a Els meus contactes"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Afegeix a Els meus contactes"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalitza"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Configuració"</string>
<string name="menu_settings" msgid="377929915873428211">"Configuració"</string>
<string name="menu_help" msgid="1680178646764069976">"Ajuda i suggeriments"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcions de visualització"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Número de telèfon"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Afegeix als contactes"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Afegeix al contacte"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Tanca"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inclou l\'any"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacte"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"S\'està carregant…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea un contacte"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Afegeix un compte"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contactes"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Creació d\'un grup nou"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Crea un grup nou"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grups</item>
- <item quantity="one">1 grup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vols suprimir el grup \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (No se\'n suprimiran els contactes.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persones de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persones</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importa"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Crea…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Vols suprimir l\'etiqueta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (No se\'n suprimiran els contactes.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Escriu el nom del contacte abans d\'enllaçar-lo amb un altre contacte."</string>
<string name="copy_text" msgid="3257145021583508761">"Copia al porta-retalls"</string>
<string name="set_default" msgid="4417505153468300351">"Predeterminat"</string>
<string name="clear_default" msgid="7193185801596678067">"Esborra els valors predeterminats"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copiat"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Vols descartar els canvis i sortir del mode d\'edició?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Vols descartar els canvis?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descarta"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continua editant"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configura el meu perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Escriu el nom de la persona"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nom del grup"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel·la"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vols descartar les personalitzacions?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Cerca als contactes"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Suprimeix els contactes"</string>
<string name="local_profile_title" msgid="2021416826991393684">"El meu perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"El meu perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"S\'estan mostrant tots els contactes"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén els contactes segurs encara que perdis el telèfon: sincronitza\'ls amb un servidor en línia."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Afegeix compte"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"No es farà una còpia de seguretat del teu contacte nou. Vols afegir un compte per fer còpies de seguretat en línia dels contactes?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minut a afegir un compte per crear una còpia de seguretat dels contactes a Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Els contactes nous es desaran a <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Tria un compte predeterminat per als contactes nous:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Afegeix un contacte"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Crea un contacte"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edita el contacte"</string>
- <string name="keep_local" msgid="1258761699192993322">"Còpia local"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Només de lectura"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Tria un contacte per editar-lo"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contactes enllaçats"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Afegeix"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desenllaça"</string>
<string name="add_account" msgid="8201790677994503186">"Afegeix compte"</string>
<string name="add_new_account" msgid="5748627740680940264">"Afegeix compte"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exporta els fitxers de la base de dades"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"afegeix un contacte nou"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Crea un contacte"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Mostra\'n més"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mostra\'n menys"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Mostra-ho tot"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recents"</string>
<string name="about_card_title" msgid="2920942314212825637">"Informació"</string>
- <string name="send_message" msgid="8938418965550543196">"Envia un missatge"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"S\'està creant una còpia personal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ahir"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"S\'està creant una còpia personal..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Demà"</string>
<string name="today" msgid="8041090779381781781">"Avui"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Avui a les <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demà a les <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Esdeveniment sense títol)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Estableix"</string>
<string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Lloc web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Esdeveniment"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relació"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Adreça electrònica"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telèfon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Fes clic per desplegar l\'editor de contactes."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fes clic per replegar l\'editor de contactes."</string>
<string name="content_description_directions" msgid="2686791825798189335">"indicacions cap a la ubicació"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS recent. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Fes clic per respondre."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS recent. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Fes clic per respondre."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortints"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdudes"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Trucada recent. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Fes clic per tornar la trucada."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Trucada recent. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Fes clic per tornar la trucada."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Usuari: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona millor si introdueixes l\'identificador de Hangouts de la persona corresponent al camp de l\'adreça electrònica o del telèfon."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Més camps"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Canvia la foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"No s\'ha pogut obrir l\'editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Es desa a"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualment es desa a <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Fes doble toc per triar un altre compte."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">S\'han enllaçat els contactes (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">S\'ha enllaçat el contacte</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactes enllaçats"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Més camps"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Canvia la foto del contacte"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Afegeix una foto al contacte"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto del contacte"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"No s\'ha pogut obrir l\'editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Es desa a"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"La informació de contacte de <xliff:g id="ACCOUNT">%s</xliff:g> no es pot editar"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ENLLAÇA ELS CONTACTES"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL·LA"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possibles duplicats</item>
- <item quantity="one">1 possible duplicat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">S\'han enllaçat <xliff:g id="COUNT">%d</xliff:g> contactes</item>
- <item quantity="one">S\'ha enllaçat 1 contacte</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Aquest contacte"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possibles duplicats"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"És possible que aquests contactes corresponguin a la mateixa persona. Els pots enllaçar i crear un contacte únic."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contactes enllaçats"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Dels teus comptes"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fes una foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Totes les fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Tria una foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Del compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Suprimeix <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Suprimeix <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Suprimeix <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto del compte <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> no seleccionada"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto del compte <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> seleccionada"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No s\'ha seleccionat la foto d\'un compte desconegut"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"S\'ha seleccionat la foto d\'un compte desconegut"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"La llista de contactes s\'està actualitzant per reflectir el canvi d\'idioma.\n\nEspereu-vos..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggeriments"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nou"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Obre el tauler de navegació"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Tanca el tauler de navegació"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiqueta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiquetes"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Comptes"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Mostra els teus historials junts"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Esdeveniments i missatges"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Esdeveniments"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Missatges"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggeriments"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantén els contactes organitzats i rellevants"</string>
+ <string name="undo" msgid="1425165101664071422">"Desfés"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Truca a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Truca a casa"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Truca al mòbil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Truca a la feina"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Truca al fax de la feina"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Truca al fax particular"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Truca al cercapersones"</string>
+ <string name="call_other" msgid="8563753966926932052">"Truca a"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Truca al número de crida de retorn"</string>
+ <string name="call_car" msgid="3280537320306436445">"Truca al cotxe"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Truca el telèfon principal de l\'empresa"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Truca a l\'XDSI"</string>
+ <string name="call_main" msgid="6082900571803441339">"Truca al telèfon principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Truca al fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Truca a la ràdio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Truca al tèlex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Truca a TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Truca al mòbil de la feina"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Truca al cercapersones de la feina"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Truca a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Truca al número MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (truca-li)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Envia un missatge de text a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Envia un SMS al número particular"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Envia un SMS al mòbil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Envia un SMS a la feina"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Envia un SMS al fax de la feina"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Envia un SMS al fax particular"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Envia un SMS al cercapersones"</string>
+ <string name="sms_other" msgid="806127844607642331">"Envia un SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Envia un SMS a la crida de retorn"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Envia un SMS al cotxe"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Envia un SMS al telèfon principal de l\'empresa"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Envia un SMS a l\'XDSI"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Envia un SMS al telèfon principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Envia un SMS al fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Envia un SMS a la ràdio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Envia un SMS al tèlex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Envia un SMS al TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Envia un SMS al telèfon de la feina"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Envia un SMS al cercapersones de la feina"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Envia un SMS a <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Envia un MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (envia-li un missatge)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Estableix una videotrucada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vols esborrar contac. més freqüents?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"S\'esborrarà la llista de contactes més freqüents a les aplicacions Contactes i Telèfon i es forçarà les aplicacions de correu electrònic a obtenir informació nova sobre les teves preferències pel que fa a adreces."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"S\'està esb. cont. més freqüents..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Absent"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupat"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Altres"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">" Directori"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directori de la feina"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tots els contactes"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacte ràpid per a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sense nom)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactats sovint"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Tots els contactes amb números de telèfon"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactes del perfil professional"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Mostra actualitzac."</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositiu"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Àlies"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nom"</string>
+ <string name="name_family" msgid="7466985689626017037">"Cognoms"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefix del nom"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Segon nom"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufix del nom"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nom fonètic"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nom fonètic"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Primer cognom fonètic"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Cognoms fonètics"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telèfon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Correu electrònic"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adreça"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Xat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organització"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relació"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Missatge de text"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adreça"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Títol"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalitzat"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Lloc web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiquetes"</string>
+ <string name="email_home" msgid="8573740658148184279">"Envia un correu electrònic a l\'adreça particular"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Envia un correu electrònic al mòbil"</string>
+ <string name="email_work" msgid="2807430017302722689">"Envia un correu electrònic a la feina"</string>
+ <string name="email_other" msgid="3454004077967657109">"Envia un correu electrònic"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Envia un correu electrònic a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Envia un correu electrònic"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Carrer"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Ciutat"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Codi postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Visualitza l\'adreça particular"</string>
+ <string name="map_work" msgid="1360474076921878088">"Visualitza l\'adreça de la feina"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualitza l\'adreça"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Mostra l\'adreça de: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Xateja amb AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Xateja amb Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Xateja amb Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Xateja amb Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Xateja amb QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Xateja amb Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Xateja amb ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Xateja amb Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Fes un xat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"suprimeix"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostra més camps de nom"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Replega els camps de nom"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostra més camps amb la transcripció fonètica del nom"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Replega els camps amb la transcripció fonètica del nom"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Desplega"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Replega"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Desplegat"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Replegat"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tots els contactes"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacats"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalitza"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacte"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"La resta de contactes"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tots els contactes"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Elimina el grup de sincronització"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Afegeix un grup de sincronització"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Més grups..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Si s\'elimina \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronització, també se n\'eliminaran els contactes no agrupats."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"S\'estan desant les opcions de visualització..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Visualització personalitzada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Desa els contactes importats a:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Targeta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contactes</item>
+ <item quantity="one">1 contacte</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactes • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacte • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Fitxer .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"No hi ha res per importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Vols importar contactes de la vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vols cancel·lar la importació de: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vols cancel·lar l\'exportació de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No es pot cancel·lar la imp./exp. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"S\'ha produït un error desconegut."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No s\'ha pogut obrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No s\'ha pogut iniciar l\'exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hi ha cap contacte que es pugui exportar."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Has desactivat un permís obligatori."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"S\'ha produït un error durant l\'exportació: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Error d\'E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"No hi ha prou memòria. És possible que el fitxer sigui massa gran."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"No s\'admet aquest format."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportació de <xliff:g id="FILENAME">%s</xliff:g> finalitzada."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"S\'han acabat d\'exportar els contactes"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"S\'han acabat d\'exportar els contactes; fes clic a la notificació per compartir-los."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toca per compartir els contactes."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"S\'ha cancel·lat l\'exportació de: <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"S\'estan exportant les dades de contacte"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"S\'estan exportant les dades de contacte."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No s\'ha pogut obtenir informació de la base de dades."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hi ha contactes que es puguin exportar."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"No s\'ha iniciat correctament el creador de vCard."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Error en exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No s\'han exportat les dades de contacte.\nMotiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"S\'està important <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No s\'han pogut llegir les dades de vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importació de vCard <xliff:g id="FILENAME">%s</xliff:g> finalitzada"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"S\'ha cancel·lat la importació de: <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> s\'importarà d\'aquí a una estona."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"D\'aquí a poc s\'importarà el fitxer."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"S\'ha rebutjat la sol·licitud per importar vCard. Torna-ho a provar més tard."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Aviat s\'exportaran els contactes."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"S\'ha rebutjat la sol·licitud per exportar vCard. Torna-ho a provar més tard."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacte"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"S\'estan desant els vCard a l\'emmagatzematge temporal local. La importació real començarà aviat."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"No s\'ha pogut importar la vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contac. reb. NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Desament a la memòria cau"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"S\'està important <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exporta a un fitxer .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordena per"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nom fonètic"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostra sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Amaga si està buit"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nom"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Cognoms"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format del nom"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Primer el nom"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Primer els cognoms"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Comptes"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Compte predeterminat per als contactes nous"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"La meva informació"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configura el teu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Informació sobre Contactes"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Comparteix els contactes preferits"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Comparteix tots els contactes"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"No s\'han pogut compartir els contactes."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exporta contactes"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importa contactes de"</string>
+ <string name="share_error" msgid="948429331673358107">"No es pot compartir aquest contacte."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"No hi ha cap contacte per compartir."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactes per mostrar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactes per mostrar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalitza la visualització"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Desa"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Cerca contactes"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferits"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importa"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exporta"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloquejats"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"mitjançant <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> mitjançant <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"atura la cerca"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Esborra la cerca"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Utilitza sempre per a les trucades"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Truca amb una nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Escriu una nota per enviar-la juntament amb la trucada…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIA I TRUCA"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versió de la compilació"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Llicències de programari lliure"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalls de la llicència de programari lliure"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privadesa"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Condicions del servei"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Llicències de programari lliure"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"No s\'ha pogut obrir l\'URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"S\'ha marcat <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"No s\'ha marcat <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Fa una videotrucada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Suprimeix"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Punts suspensius"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Aquesta drecera s\'ha desactivat"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"El contacte s\'ha suprimit"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importa"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Selecciona contactes"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No hi ha cap contacte a la targeta SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"El contacte ja existeix a la teva llista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">S\'han importat <xliff:g id="COUNT">%d</xliff:g> contactes de la SIM</item>
+ <item quantity="one">S\'ha importat 1 contacte de la SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"No s\'han pogut importar els contactes de la SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importa des de la SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancel·la"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La sincronització automàtica està desactivada. Toca per activar-la."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignora"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La sincronització del compte està desactivada. Toca per activar-la."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Vols activar la sincronització automàtica?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Els canvis que facis a les aplicacions i als comptes, i no només als Contactes de Google, es mantindran actualitzats al web i als teus dispositius."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activa"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sense connexió"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostra més"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importació de la targeta SIM completada"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"La importació ha fallat"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"No s\'han pogut importar els contactes de la targeta SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"S\'estan important els contactes de la SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificacions"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index a3cc36be2..b15320aa6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakty"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Zobrazit kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Upravit kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Přidat kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Přímé vytáčení"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Přímá zpráva"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Výběr zkratky kontaktu"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Výběr čísla pro hovor"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Výběr čísla pro zprávu"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vybrat kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Přidat do kontaktu"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vyberte kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vybrat"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Vytvořte nový kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Označené hvězdičkou"</string>
- <string name="frequentList" msgid="7154768136473953056">"Časté"</string>
- <string name="strequentList" msgid="5640192862059373511">"Oblíbené"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktní údaje"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Upravit kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Vytvořit kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Upravit skupinu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Vytvořit skupinu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizace"</string>
<string name="searchHint" msgid="8482945356247760701">"Vyhledat kontakty"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Zobrazit kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Přidat k oblíbeným položkám"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Odebrat z oblíbených položek"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstraněno z oblíbených"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Upravit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Smazat"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Změnit fotografii"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umístit na plochu"</string>
- <string name="menu_call" msgid="3992595586042260618">"Volat kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Odeslat zprávu kontaktu"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Vytvořit zkratku"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Zrušit propojení"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Upravit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Smazat"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Přidat kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Přidat skupinu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Odebrat kontakty"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Přejmenovat štítek"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Smazat štítek"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Přidat kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Vybrat kontakty"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Přidat kontakty"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odebrat ze štítku"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Vytvořit štítek"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Chcete propojení kontaktů zrušit a vytvořit několik samostatných kontaktů?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Zrušit propojení"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Chcete uložit provedené změny, zrušit propojení kontaktu a vytvořit několik samostatných kontaktů?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Uložit a zrušit propojení"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Chcete uložit provedené změny a vybrané kontakty propojit?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Uložit a propojit"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Propojování"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Odpojování"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Propojit"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Zobrazit propojené kontakty"</string>
<string name="menu_save" msgid="1727844363591825909">"Uložit"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Propojit kontakty"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vyberte kontakt, který chcete propojit s kontaktem <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Zobrazit všechny kontakty"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhované kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všechny kontakty"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakt <xliff:g id="NAME">%s</xliff:g> byl propojen"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty byly propojeny"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> byl smazán"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g> a <xliff:g id="NAME_1">%2$s</xliff:g> byly smazány"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… byly smazány"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="few">Kontakty byly smazány</item>
<item quantity="many">Kontakty byly smazány</item>
<item quantity="other">Kontakty byly smazány</item>
<item quantity="one">Kontakt byl smazán</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktů</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktů · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Z účtu Googlu"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Z účtu služby <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastavit vyzvánění"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Hovory do hlas. schránky"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakty z účtů pouze ke čtení nelze smazat, lze je však skrýt."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Skrýt"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt určený ke smazání obsahuje podrobnosti z několika účtů. Podrobnosti z účtů pouze ke čtení budou skryty, ale smazány nebudou."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Chcete-li provést propojení, vyberte alespoň dva kontakty."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Chcete vybrané kontakty propojit?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Propojit"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Směrovat do hlasové schránky"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nesměrovat do hlasové schránky"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Tento kontakt je pouze ke čtení. Není možné ho smazat, ale můžete ho skrýt."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Skrýt kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Účty tohoto kontaktu, které jsou pouze ke čtení, nebudou smazány, ale jen skryty."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Chcete tento kontakt smazat?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Chcete vybrané kontakty smazat?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakty z účtů pouze ke čtení nelze smazat, lze je však skrýt."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Smazáním tohoto kontaktu smažete podrobnosti z více účtů."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Chcete tento kontakt smazat?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Smazat"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Zahodit změny"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt neexistuje."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt byl přidán na plochu."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> byl přidán na plochu."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Vytvořit nový kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Vytvořit nový kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizace"</item>
- <item msgid="7196592230748086755">"Poznámka"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V tabletu nejsou žádné fotografie."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefonu nejsou žádné fotografie."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"V zařízení nejsou žádné fotky."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografie kontaktu"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Vlastní název štítku"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Přesměrovat hovory přímo do hlasové schránky"</string>
<string name="removePhoto" msgid="4898105274130284565">"Odebrat fotografii"</string>
- <string name="noContacts" msgid="4955659076981974652">"Žádné kontakty"</string>
- <string name="noGroups" msgid="8614664663561385253">"Žádné skupiny."</string>
- <string name="noAccounts" msgid="7768267764545265909">"K vytváření skupin potřebujete účet."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Skupina nemá žádné členy."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Chcete-li někoho přidat, upravte skupinu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Ukládání kontaktu…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Váš seznam kontaktů je prázdný"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Žádné kontakty s tímto štítkem"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"V tomto účtu nejsou uloženy žádné kontakty"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Váš seznam kontaktů je prázdný"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontakt <xliff:g id="DISPLAY_NAME">%s</xliff:g> byl uložen"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt uložen"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Propojení kontaktů bylo zrušeno"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Změny kontaktů nelze uložit."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Propojení kontaktu nelze zrušit."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Propojení kontaktu se nezdařilo."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Při ukládání kontaktu došlo k chybě."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Změny fotografií kontaktů nelze uložit."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Skupina byla uložena."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Změny skupiny nelze uložit."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefonním číslem</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktu s telefonním číslem</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktů s telefonním číslem</item>
- <item quantity="one">1 kontakt s telefonním číslem</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ke kontaktům nejsou přiřazena žádná telefonní čísla"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="few">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Nalezeno: 1</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Změny kontaktu se nepodařilo uložit"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Propojení kontaktu se nepodařilo zrušit"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt se nepodařilo propojit"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontakt se nepodařilo uložit"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Změny fotky kontaktu se nepodařilo uložit"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Štítek se nepodařilo načíst"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Štítek byl smazán"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Štítek byl vytvořen"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Štítek se nepodařilo vytvořit"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Štítek byl aktualizován"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odebráno ze štítku"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Přidáno do štítku"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Změny štítku se nepodařilo uložit"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Tento štítek už existuje"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Některé kontakty nemají e-mailové adresy."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Některé kontakty nemají telefonní čísla."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Poslat e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Poslat zprávu"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Vybrat kontakty"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Odeslat"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Žádné kontakty"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="few">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Nalezeno: <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Nalezeno: 1</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Vše"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Oblíbené"</string>
- <string name="callBack" msgid="5498224409038809224">"Zavolat zpět"</string>
- <string name="callAgain" msgid="3197312117049874778">"Zavolat znovu"</string>
- <string name="returnCall" msgid="8171961914203617813">"Zpětné volání"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete přidat „<xliff:g id="EMAIL">%s</xliff:g>“ do kontaktů?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografie kontaktu"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktů"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Jména vašich kontaktů"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikace potřebná k provedení této akce nebyla nalezena."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknutím se vrátíte na předchozí obrazovku"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Přidat telefonní číslo"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Přidat e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Aplikace potřebná k provedení této akce nebyla nalezena."</string>
<string name="menu_share" msgid="943789700636542260">"Sdílet"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Přidat do kontaktů"</string>
- <string name="share_via" msgid="563121028023030093">"Sdílet kontakt pomocí"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Vytvořit skupinu v účtu"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Přidat"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="few">Sdílet kontakty v aplikaci</item>
+ <item quantity="many">Sdílet kontakty v aplikaci</item>
+ <item quantity="other">Sdílet kontakty v aplikaci</item>
+ <item quantity="one">Sdílet kontakt v aplikaci</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Vyberte účet"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Vytvořit štítek"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Přejmenovat štítek"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Název štítku"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Název štítku"</string>
<string name="audio_chat" msgid="2535716629358298691">"Hlasový chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
- <string name="connections" msgid="8098440723172028350">"Spojení"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Přidat spojení"</string>
- <string name="recent" msgid="2659189233141493004">"Nedávné"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Poslední aktualizace"</string>
<string name="account_type_format" msgid="718948015590343010">"Zdroj kontaktu: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Účet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nelze upravit v této aplikaci."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nelze upravit v tomto zařízení."</string>
<string name="take_photo" msgid="7496128293167402354">"Vyfotit"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Pořídit novou fotografii"</string>
<string name="pick_photo" msgid="2129509985223564942">"Vybrat fotku"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Vybrat novou fotku"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Probíhá aktualizace seznamu kontaktů."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Vyhledávání..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Zobrazit vybrané"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Zobrazit vše"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Vybrat vše"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Zrušit výběr všech"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Přidat nové"</string>
- <string name="add_organization" msgid="7311893231158291197">"Přidat organizaci"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Název skupiny"</string>
- <string name="change_photo" msgid="8530597935483526383">"Změnit"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primární fotka"</string>
- <string name="description_star" msgid="2605854427360036550">"oblíbené"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Upravit kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Propojit aktuální kontakt s vybraným kontaktem?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítek"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Zrušit"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Zpět"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavřít"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Přepnout do režimu úpravy vybraného kontaktu? Doposud zadané informace budou zkopírovány."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Zkopírovat do kontaktů"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Přidat do skupiny Moje kontakty"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Adresář <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Vlastní"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Nastavení"</string>
<string name="menu_settings" msgid="377929915873428211">"Nastavení"</string>
<string name="menu_help" msgid="1680178646764069976">"Nápověda a zpětná vazba"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazení"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonní číslo"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Přidat do kontaktů"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Přidat do kontaktu"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zavřít"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Uvést rok"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Načítá se..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvořit nový kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Přidat účet"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovat kontakty"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvořit novou skupinu"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Vytvořit novou skupinu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupin</item>
- <item quantity="one">1 skupina</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Chcete smazat skupinu <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Samotné kontakty smazány nebudou.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> lidé ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> člověka ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> lidí ze skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> člověk ze skupiny <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> lidé</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> člověka</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> lidí</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> člověk</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importovat"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Nový štítek…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Smazat štítek <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Samotné kontakty smazány nebudou.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Před propojením s jiným kontaktem je třeba zadat jméno kontaktu."</string>
<string name="copy_text" msgid="3257145021583508761">"Zkopírovat do schránky"</string>
<string name="set_default" msgid="4417505153468300351">"Výchozí nastavení"</string>
<string name="clear_default" msgid="7193185801596678067">"Vymazat výchozí nastavení"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text zkopírován"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Zahodit změny a ukončit úpravy?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Zahodit změny?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zahodit"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Pokračovat v úpravách"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Nastavit profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Zadejte jméno osoby"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Název skupiny"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Zrušit"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Zahodit vlastní úpravy?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Vyhledejte kontakty"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Odebrat kontakty"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Můj místní profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Můj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Zobrazují se všechny kontakty"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mějte kontakty v bezpečí, i když telefon ztratíte: synchronizujte je s některou online službou."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Přidat účet"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Nový kontakt nebude zálohován. Chcete přidat účet pro zálohování kontaktů online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Přidejte svůj účet a nechte si kontakty zálohovat do Googlu."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nové kontakty se uloží do účtu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Zvolte výchozí účet pro nové kontakty:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Přidat nový kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Nový kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Upravit kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Ponechat místně"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Pouze zobrazení"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Vyberte kontakt, který chcete upravit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Propojené kontakty"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Přidat"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Odpojit"</string>
<string name="add_account" msgid="8201790677994503186">"Přidat účet"</string>
<string name="add_new_account" msgid="5748627740680940264">"Přidat nový účet"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportovat soubory databáze"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"přidat nový kontakt"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Vytvořit nový kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Zobrazit více"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Zobrazit méně"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Zobrazit vše"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nedávné"</string>
<string name="about_card_title" msgid="2920942314212825637">"O kartě"</string>
- <string name="send_message" msgid="8938418965550543196">"Odeslat zprávu"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Vytváření osobní kopie..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Včera"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Vytváření osobní kopie..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Zítra"</string>
<string name="today" msgid="8041090779381781781">"Dnes"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Dnes v <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Zítra v <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Událost bez názvu)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Nastavit"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Událost"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Vztah"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Účet"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Jméno"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotka"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktů."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím sbalíte editor kontaktů."</string>
<string name="content_description_directions" msgid="2686791825798189335">"trasy k místům"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávná sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím odpovíte"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávná sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím odpovíte"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"příchozí"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odchozí"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"zmeškaný"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nedávný hovor. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím zavoláte zpět"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nedávný hovor. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím zavoláte zpět"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Aplikace Hangouts funguje lépe, když do pole pro e-mail nebo pro telefon zadáte identifikátor osoby ve službě Hangouts."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Další pole"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Změnit fotografii"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editor nelze otevřít."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Uložit do účtu"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Momentálně se ukládá do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvojitým klepnutím můžete vybrat jiný účet."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="few">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Propojený kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Počet propojených kontaktů: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Další pole"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Změnit fotku kontaktu"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Přidat fotku kontaktu"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotka kontaktu"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Editor se nepodařilo otevřít."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Uložit do účtu"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktní údaje z účtu <xliff:g id="ACCOUNT">%s</xliff:g> není možné upravit"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PROPOJIT KONTAKTY"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ZRUŠIT"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> možné duplicity</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> možné duplicity</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> možných duplicit</item>
- <item quantity="one">1 možná duplicita</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> propojené kontakty</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> propojeného kontaktu</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> propojených kontaktů</item>
- <item quantity="one">1 propojený kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tento kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Možná duplicita"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Tyto kontakty možná reprezentují stejného člověka. Můžete je propojit a vytvořit z nich jeden kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Propojené kontakty"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Z vašich účtů"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Pořídit fotku"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Všechny fotky"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Výběr fotky"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Z účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Smazat <xliff:g id="DATA_KIND">%s</xliff:g> (<xliff:g id="DATA_TYPE">%s </xliff:g>)"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Smazat <xliff:g id="DATA_KIND">%2$s</xliff:g> (<xliff:g id="DATA_TYPE">%1$s </xliff:g>)"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Smazat <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> není vybrána"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Vybrána fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotka z neznámého účtu nebyla vybrána"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotka z neznámého účtu byla vybrána"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"V souvislosti se změnou jazyka probíhá aktualizace seznamu kontaktů.\n\nČekejte prosím..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Návrhy"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novinka"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otevřít navigační panel"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zavřít navigační panel"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Štítek <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Štítky"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Účty"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Mějte svou historii pohromadě"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Události a zprávy"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Události"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Zprávy"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Návrhy"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Udržujte si v kontaktech pořádek, ať vám dobře slouží"</string>
+ <string name="undo" msgid="1425165101664071422">"Vrátit zpět"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Zavolat na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Volat domů"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Volat mobil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Volat do práce"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Volat pracovní fax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Volat domácí fax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Volat pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Volat"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Volat na číslo zpětného volání"</string>
+ <string name="call_car" msgid="3280537320306436445">"Volat do auta"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Volat firmu (hlavní)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Volat na číslo ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Volat na hlavní číslo"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Volat fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Volat radiostanici"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Volat na číslo Telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Volat na číslo TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Volat na pracovní mobil"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Volat na pracovní pager"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Zavolat na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Volat MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Zavolat)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Poslat SMS na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS domů"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS na mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS do práce"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS na pracovní fax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS na domácí fax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS na pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Odeslat zprávu na číslo zpětného volání"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS do auta"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS do firmy (hlavní)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Odeslat zprávu na číslo ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Odeslat zprávu na hlavní číslo"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS na fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS na radiotelefon"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Odeslat zprávu na číslo Telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Odeslat zprávu na číslo TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Odeslat zprávu na pracovní mobil"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Odeslat zprávu na pracovní pager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Odeslat zprávu asistentovi <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS na číslo MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Poslat zprávu)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Zahájit videohovor"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vymazat často kontaktované osoby?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Vymažete seznam často kontaktovaných osob v aplikacích Kontakty a Telefon a e-mailové aplikace budou muset nastavení adresátů vytvořit znovu."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Mazání často kontaktovaných osob..."</string>
+ <string name="status_available" msgid="5586870015822828392">"K dispozici"</string>
+ <string name="status_away" msgid="1838861100379804730">"Pryč"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Nemám čas"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Ostatní"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Adresář"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Pracovní adresář"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Všechny kontakty"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Rychlý kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Žádné jméno)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Často používané kontakty"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Všechny kontakty s telefonními čísly"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty z pracovního profilu"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Zobrazit aktualizace"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Zařízení"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Jméno"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Přezdívka"</string>
+ <string name="name_given" msgid="4280790853455320619">"Jméno"</string>
+ <string name="name_family" msgid="7466985689626017037">"Příjmení"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Titul před jménem"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Další jméno"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Titul za jménem"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Jméno (foneticky)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Jméno (foneticky)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Druhé jméno (foneticky)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Příjmení (foneticky)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizace"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Vztah"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Zvláštní datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Textová zpráva"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Společnost"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Název"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Poznámky"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Vlastní"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Webové stránky"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Štítky"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail domů"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mail na mobil"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail do práce"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Poslat e-mail na adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulice"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Město"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Stát"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"PSČ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Země"</string>
+ <string name="map_home" msgid="1243547733423343982">"Zobrazit adresu domů"</string>
+ <string name="map_work" msgid="1360474076921878088">"Zobrazit pracovní adresu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Zobrazit adresu"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Zobrazit adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatovat pomocí AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatovat pomocí Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatovat pomocí Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatovat pomocí Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatovat pomocí QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatovat pomocí Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatovat pomocí ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatovat pomocí Jabberu"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"smazat"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Zobrazit více polí na jména"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sbalit pole na jména"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Zobrazit více polí na fonetický přepis jmen"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sbalit pole na fonetický přepis jmen"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Rozbalit"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Sbalit"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozbaleno"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sbaleno"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Všechny kontakty"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Označené hvězdičkou"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Přizpůsobit"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Všechny ostatní kontakty"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Všechny kontakty"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Odstranit synchronizovanou skupinu"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Přidat synchronizovanou skupinu"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Další skupiny…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Odebráním skupiny <xliff:g id="GROUP">%s</xliff:g> ze synchronizace odeberete ze synchronizace také všechny kontakty mimo skupinu."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Ukládání možností zobrazení…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vlastní zobrazení"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Účet k uložení importovaných kontaktů:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM karta"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM karta <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="few">%1$d kontakty</item>
+ <item quantity="many">%1$d kontaktu</item>
+ <item quantity="other">%1$d kontaktů</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakty • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> kontaktu • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktů • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Soubor .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nic k importování"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importovat kontakty ze souboru vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Zrušit import souboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušit export souboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/export vizitky vCard nelze zrušit"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznámá chyba."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Soubor <xliff:g id="FILE_NAME">%1$s</xliff:g> nelze otevřít: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nelze spustit nástroj pro export: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Žádný kontakt nelze exportovat."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Zakázali jste nutné oprávnění."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Při exportu došlo k chybě: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Není k dispozici dostatek paměti. Soubor může být příliš velký."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formát není podporován."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export souboru <xliff:g id="FILENAME">%s</xliff:g> byl dokončen."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Export kontaktů byl dokončen."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Export kontaktů byl dokončen. Klepnutím na oznámení je můžete sdílet."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Klepnutím můžete sdílet kontakty."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Export souboru <xliff:g id="FILENAME">%s</xliff:g> byl zrušen."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Export dat kontaktů"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Probíhá export dat kontaktů."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepodařilo se získat informace o databázi."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nemáte žádné kontakty k exportu."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Editor souboru vCard nebyl správně spuštěn."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export se nezdařil"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data kontaktů nebyla exportována.\nDůvod: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Probíhá import: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepodařilo se přečíst údaje vizitky vCard."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import souboru vCard (<xliff:g id="FILENAME">%s</xliff:g>) byl dokončen"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import souboru <xliff:g id="FILENAME">%s</xliff:g> byl zrušen."</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Soubor <xliff:g id="FILENAME">%s</xliff:g> bude za okamžik importován."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Soubor bude zakrátko importován."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Požadavek na import souborů vCard byl zamítnut. Zkuste to prosím později."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty budou brzy exportovány."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Požadavek na export souborů vCard byl zamítnut. Zkuste to prosím později."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Načítání souboru vCard do mezipaměti místního dočasného úložiště. Vlastní import bude zahájen v krátké době."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Soubor vCard se nepodařilo importovat."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt přijatý přes NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Ukládání do mezipaměti"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Probíhá import: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportovat do souboru VCF"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Řadit podle"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Jméno (foneticky)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vždy zobrazovat"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Skrýt, pokud je prázdné"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Jméno"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Příjmení"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formát jména"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nejprve jméno"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nejprve příjmení"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Účty"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Výchozí účet pro nové kontakty"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Moje údaje"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Nastavit váš profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O aplikaci Kontakty"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Sdílet oblíbené kontakty"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Sdílet všechny kontakty"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakty se nepodařilo sdílet."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportovat kontakty"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importovat kontakty z umístění"</string>
+ <string name="share_error" msgid="948429331673358107">"Tento kontakt nelze sdílet."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nejsou dostupné žádné kontakty ke sdílení."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty k zobrazení"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty k zobrazení"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Přizpůsobit zobrazení"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Uložit"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Vyhledejte kontakty"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Oblíbené"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importovat"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportovat"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokovaná čísla"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"pomocí služby <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prostřednictvím služby <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zastavit vyhledávání"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Vymazat vyhledávání"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Účet"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Vždy používat pro hovory"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Volání s poznámkou"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Zadejte poznámku, která se odešle pomocí volání…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ODESLAT A ZAVOLAT"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Verze sestavení"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence open source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licencích pro software open source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Zásady ochrany soukromí"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Smluvní podmínky"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licence open source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Adresu URL se nepodařilo otevřít."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – zaškrtnuto"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – nezaškrtnuto"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Zahájit videohovor"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Smazat"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Tři tečky"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Tato zkratka byla deaktivována"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt byl odebrán"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importovat"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Vyberte kontakty"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Na SIM kartě nejsou žádné kontakty"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt už je na vašem seznamu"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="few">Byly importovány <xliff:g id="COUNT">%d</xliff:g> kontakty ze SIM karty</item>
+ <item quantity="many">Bylo importováno <xliff:g id="COUNT">%d</xliff:g> kontaktu ze SIM karty</item>
+ <item quantity="other">Bylo importováno <xliff:g id="COUNT">%d</xliff:g> kontaktů ze SIM karty</item>
+ <item quantity="one">Byl importován 1 kontakt ze SIM karty</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontakty ze SIM karty se nepodařilo importovat"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import ze SIM karty"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Zrušit"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatická synchronizace je vypnutá. Zapnete ji klepnutím."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Zavřít"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Synchronizace účtu je vypnutá. Zapnete ji klepnutím."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Zapnout automatickou synchronizaci?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Změny, které provedete ve všech aplikacích a účtech (ne jen v Kontaktech Google), budou aktualizovány mezi webem a vašimi zařízeními."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Zapnout"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nejste připojeni"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Zobrazit více"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import ze SIM karty byl dokončen"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import se nezdařil"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakty ze SIM karty se nepodařilo importovat"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importování ze SIM karty"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Oznámení"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 15c5481ec..2381a4e9a 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontaktpersoner"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktpersoner"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Se kontaktperson"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Rediger kontaktperson"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontaktpersoner"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Tilføj kontaktperson"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direkte opkald"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direkte besked"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Vælg en kontaktgenvej"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Vælg et nummer at ringe til"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Vælg et nummer"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vælg kontaktperson"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Føj til kontaktperson"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vælg en kontaktperson"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vælg"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Opret ny kontaktperson"</string>
- <string name="starredList" msgid="4817256136413959463">"Stjernemarkerede"</string>
- <string name="frequentList" msgid="7154768136473953056">"Ofte"</string>
- <string name="strequentList" msgid="5640192862059373511">"Foretrukne"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktoplysninger"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Rediger kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Opret kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Rediger gruppe"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Opret gruppe"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Om"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Opdateringer"</string>
<string name="searchHint" msgid="8482945356247760701">"Søg i kontakter"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Vis kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Føj til foretrukne"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra foretrukne"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjernet fra foretrukne"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Rediger"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Slet"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Skift billede"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer på startskærmen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ring til kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Send sms til kontakt"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Opret genvej"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Ophæv sammenfletning"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Rediger"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Slet"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Tilføj kontaktperson"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tilføj gruppe"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Fjern kontaktpersoner"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Omdøb etiket"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Slet etiket"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Tilføj kontaktperson"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Vælg kontaktpersoner"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tilføj kontaktpersoner"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Fjern fra etiket"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Opret etiket"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Vil du ophæve sammenfletningen og opdele denne kontaktperson i flere kontaktpersoner?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ophæv sammenfletningen"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vil du gemme de ændringer, du allerede har foretaget, og ophæve sammenfletningen og opdele kontaktpersonen i flere kontaktpersoner?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Gem, og ophæv sammenfletningen"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vil du gemme de ændringer, du allerede har foretaget, og sammenflette med den valgte kontaktperson?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Gem og flet"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Sammenfletter"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ophæver sammenfletning"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Sammenflet"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Se sammenflettede kontaktpersoner"</string>
<string name="menu_save" msgid="1727844363591825909">"Gem"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Sammenflet kontaktpersoner"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vælg den kontaktperson, der skal knyttes til <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Vis alle kontakter"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Foreslåede kontakter"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> er sammenflettet"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktpersonerne er sammenflettet"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> blev slettet"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> og <xliff:g id="NAME_1">%2$s</xliff:g> blev slettet"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… blev slettet"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Kontaktpersonen blev slettet</item>
<item quantity="other">Kontaktpersonerne blev slettet</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktperson</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersoner</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktperson · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersoner · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Fra Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Fra <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Angiv ringetone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle opkald til telefonsvareren"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontaktpersoner fra dine skrivebeskyttede konti kan ikke slettes, men de kan skjules."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Skjul"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Den kontaktperson, du vil slette, indeholder oplysninger fra flere konti. Oplysninger fra skrivebeskyttede konti skjules fremfor at blive slettet."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Du skal vælge mindst to kontaktpersoner for at foretage en sammenfletning."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vil du sammenflette de valgte kontaktpersoner?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Sammenflet"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Omdiriger til telefonsvarer"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Træk tilbage fra telefonsvarer"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Denne kontaktperson er skrivebeskyttet. Vedkommende kan ikke slettes, men kun skjules."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Skjul kontaktperson"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Data om denne kontaktperson fra skrivebeskyttede konti bliver skjult, men ikke slettet."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vil du slette denne kontaktperson?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vil du slette de valgte kontaktpersoner?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontaktpersoner fra dine skrivebeskyttede konti kan ikke slettes, men de kan skjules."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Sletning af denne kontaktperson sletter oplysninger fra flere konti."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vil du slette denne kontaktperson?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Slet"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Kassér ændringer"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontaktpersonen findes ikke."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktpersonen blev føjet til startskærmen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> blev føjet til startskærmen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Opret ny kontaktperson"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Opret ny kontaktperson"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Note"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Der er ingen tilgængelige billeder på tabletcomputeren."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Der er ingen tilgængelige billeder på telefonen."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Der er ingen tilgængelige billeder på enheden."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Billede af kontaktperson"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Navn på tilpasset etiket"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send opkald direkte til telefonsvarer"</string>
<string name="removePhoto" msgid="4898105274130284565">"Fjern billede"</string>
- <string name="noContacts" msgid="4955659076981974652">"Ingen kontaktpersoner"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ingen grupper."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Du skal have en konto for at kunne oprette grupper."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ingen personer i denne gruppe."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Rediger gruppen for at tilføje nogen."</string>
- <string name="savingContact" msgid="4075751076741924939">"Gemmer kontakt..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Din liste over kontaktpersoner er tom"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Der er ingen kontaktpersoner med denne etiket"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Der er ingen kontaktpersoner på denne konto"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Din liste over kontaktpersoner er tom"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> blev gemt"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontaktpersonen er gemt"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Sammenfletningen af kontaktpersonerne blev ophævet"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Der kunne ikke gemmes ændringer i kontaktpersoner."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Sammenfletningen med kontaktpersonen kunne ikke fjernes."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktpersonen kunne ikke sammenflettes."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktpersonen kunne ikke gemmes."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Det ændrede billede af kontaktpersonen kunne ikke gemmes."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Gruppen er gemt."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Gruppeændringerne kunne ikke gemmes."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner med telefonnumre</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Der er ingen kontakter med telefonnumre"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ændringerne af kontaktpersonen kan ikke gemmes"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Sammenfletningen til kontaktpersonen kan ikke ophæves"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktpersonen kan ikke sammenflettes"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Der opstod en fejl, da kontaktpersonen blev gemt"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ændringerne af kontaktpersonens billede kan ikke gemmes"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketten kan ikke indlæses"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten blev slettet"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketten blev oprettet"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiketten kan ikke oprettes"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketten blev opdateret"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjernet fra etiketten"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Føjet til etiket"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ændringerne af etiketten kan ikke gemmes"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Etiketten findes allerede"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Nogle kontaktpersoner har ikke e-mails."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Nogle kontaktpersoner har ikke telefonnumre."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Send e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send besked"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Vælg kontaktpersoner"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Ingen kontaktpersoner"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Der blev fundet <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alle"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Foretrukne"</string>
- <string name="callBack" msgid="5498224409038809224">"Ring tilbage"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ring op igen"</string>
- <string name="returnCall" msgid="8171961914203617813">"Ring tilbage"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Føj \"<xliff:g id="EMAIL">%s</xliff:g>\" til kontaktpersoner?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonfoto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navne på dine kontakter"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Der blev ikke fundet nogen app, der kan håndtere denne handling."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik for at gå tilbage til forrige skærmbillede"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tilføj telefonnummer"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Tilføj e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Der blev ikke fundet nogen app, der kan håndtere denne handling."</string>
<string name="menu_share" msgid="943789700636542260">"Del"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Føj til kontaktpersoner"</string>
- <string name="share_via" msgid="563121028023030093">"Del kontakt via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Opret gruppe på konto"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Tilføj"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Del kontaktpersonen via</item>
+ <item quantity="other">Del kontaktpersonerne via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Vælg konto"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Opret etiket"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Omdøb etiket"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiketnavn"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketnavn"</string>
<string name="audio_chat" msgid="2535716629358298691">"Talechat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
- <string name="connections" msgid="8098440723172028350">"Forbindelser"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Tilføj forbindelse"</string>
- <string name="recent" msgid="2659189233141493004">"Seneste"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Seneste opdateringer"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktperson"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Kan ikke redigeres fra denne app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Kan ikke redigeres på denne enhed."</string>
<string name="take_photo" msgid="7496128293167402354">"Tag billede"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Tag nyt billede"</string>
<string name="pick_photo" msgid="2129509985223564942">"Vælg billede"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Vælg et nyt billede"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Listen over kontaktpersoner opdateres."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Søger..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Vis valgte"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Vis alle"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Vælg alle"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Fravælg alle"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tilføj ny"</string>
- <string name="add_organization" msgid="7311893231158291197">"Tilføj organisation"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Gruppenavn"</string>
- <string name="change_photo" msgid="8530597935483526383">"Rediger"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primært foto"</string>
- <string name="description_star" msgid="2605854427360036550">"foretrukken"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Rediger kontaktperson"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vil du knytte den aktuelle kontaktperson til den valgte kontaktperson?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuller"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Tilbage"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"luk"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vil du redigere den valgte kontaktperson? Dine indtastninger kopieres."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopier til Mine kontaktpersoner"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Føj til mine kontaktpersoner"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Indeks <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Tilpasset"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Indstillinger"</string>
<string name="menu_settings" msgid="377929915873428211">"Indstillinger"</string>
<string name="menu_help" msgid="1680178646764069976">"Hjælp og feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Indstillinger for visning"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Føj til kontaktpersoner"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Føj til kontaktperson"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Luk"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inkluder år"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontaktperson"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Indlæser…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opret ny kontaktperson"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tilføj konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importér kontaktpersoner"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Opret en ny gruppe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Opret en ny gruppe"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vil du slette gruppen \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Selve kontaktpersonerne slettes ikke)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importér"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Opret ny…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Vil du slette etiketten \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Selve kontaktpersonerne bliver ikke slettet)."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Skriv kontaktpersonens navn, før den knyttes sammen med en anden."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopier til udklipsholder"</string>
<string name="set_default" msgid="4417505153468300351">"Indstil standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Ryd standarder"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Kopieret tekst"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Vil du kassere ændringerne og afslutte redigering?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Vil du kassere ændringerne?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Kassér"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Fortsæt redigering"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Konfigurer min profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Indtast personens navn"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Gruppens navn"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuller"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vil du kassere tilpasningerne?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Søg i kontaktpersoner"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Fjern kontaktpersoner"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Min lokale profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Min <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profil"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Viser alle kontaktpersoner"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Behold dine kontaktpersoner, selv hvis du mister din telefon: Synkroniser med en onlinetjeneste."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tilføj en konto"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Din nye kontaktperson bliver ikke sikkerhedskopieret. Vil du tilføje en konto, der sikkerhedskopierer kontaktpersoner online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Brug et øjeblik på at tilføje en konto, som sikkerhedskopierer dine kontaktpersoner til Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nye kontakter gemmes på <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Vælg en standardkonto til nye kontaktpersoner:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Tilføj ny kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Opret ny kontaktperson"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Rediger kontaktperson"</string>
- <string name="keep_local" msgid="1258761699192993322">"Gem kun lokalt"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Kun visning"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Vælg en kontaktperson at redigere"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Sammenflettede kontaktpersoner"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Tilføj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ophæv sammenfletning"</string>
<string name="add_account" msgid="8201790677994503186">"Tilføj konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Tilføj ny konto"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Eksportér databasefiler"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"tilføj ny kontaktperson"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Opret ny kontaktperson"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Se mere"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Se mindre"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Se alle"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Seneste"</string>
<string name="about_card_title" msgid="2920942314212825637">"Om"</string>
- <string name="send_message" msgid="8938418965550543196">"Send besked"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Opretter en personlig kopi..."</string>
- <string name="yesterday" msgid="6840858548955018569">"I går"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Opretter en privat kopi..."</string>
<string name="tomorrow" msgid="6241969467795308581">"I morgen"</string>
<string name="today" msgid="8041090779381781781">"I dag"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgen kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Ikke-navngiven begivenhed)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Angiv"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Begivenhed"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik for at udvide værktøjet til redigering af kontaktpersoner."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik for at skjule værktøjet til redigering af kontaktpersoner."</string>
<string name="content_description_directions" msgid="2686791825798189335">"rutevejledning til placering"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"seneste sms-besked. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klik for at svare"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"seneste sms-besked. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klik for at svare"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"indgående"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"udgående"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ubesvarede"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"seneste opkald. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klik for at ringe tilbage"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"seneste opkald. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klik for at ringe tilbage"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Dig: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerer bedre, når du indtaster personens Hangouts-id i e-mailfeltet eller telefonfeltet."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Flere felter"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Skift billede"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redigeringsværktøjet kunne ikke åbnes."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Gemmes på"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"I øjeblikket gemmes den på <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryk to gange for at vælge en anden konto."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Sammenflettet kontaktperson (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Sammenflettede kontaktpersoner (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> sammenflettede kontaktpersoner"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Flere felter"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Skift kontaktpersonens billede"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tilføj et billede af kontaktpersonen"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Billede af kontaktperson"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Redigeringsværktøjet kunne ikke åbnes."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Gemmes på"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktoplysningerne fra <xliff:g id="ACCOUNT">%s</xliff:g> kan ikke redigeres"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SAMMENFLET KONTAKTPERSONER"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULLER"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mulig dublet</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mulige dubletter</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> sammenflettet kontaktperson</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sammenflettede kontaktpersoner</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Denne kontaktperson"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mulige dubletter"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Disse kontaktpersoner kan være den samme person. Du kan sammenflette dem til én enkelt kontaktperson."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Sammenflettede kontaktpersoner"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Fra dine konti"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tag et billede"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alle billeder"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Vælg billede"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Fra <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Slet <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Slet <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Slet <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Billede fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er ikke valgt"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Billede fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er valgt"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Der er ikke markeret et billede fra en ukendt konto"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Et billede fra en ukendt konto er markeret"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlisten opdateres for at afspejle ændringen af sprog.\n\nVent et øjeblik..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Forslag"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nyt"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Åbn navigationsskuffen"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Luk navigationsskuffen"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiketten <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketter"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Konti"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Se jeres fælles historik"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Begivenheder og beskeder"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Begivenheder"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Meddelelser"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Forslag"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Hold dine kontaktpersoner organiserede og brugbare"</string>
+ <string name="undo" msgid="1425165101664071422">"Fortryd"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Ring til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Ring hjem"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Ring til mobil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ring til arbejde"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Ring til arbejdsfax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Ring til hjemmefax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Ring til personsøger"</string>
+ <string name="call_other" msgid="8563753966926932052">"Opkald"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Ring til tilbagekald"</string>
+ <string name="call_car" msgid="3280537320306436445">"Ring til bil"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Ring til arbejde (hovednummer)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Ring til ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Ring til hoved"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Ring til fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Ring til radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Ring til telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Ring til TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ring til arbejdsmobil"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ring til personsøger på arbejdet"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Ring til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Ring til mms"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ring op)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Send en sms til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Sms til hjem"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Sms til mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Sms til arbejde"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Sms til arbejdsfax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Sms til hjemmefax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Sms til personsøger"</string>
+ <string name="sms_other" msgid="806127844607642331">"Send sms"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Send sms til mistede opkald"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Sms til bil"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Sms til arbejde (hovednummer)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Send sms til ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Send sms til hoved"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Send sms til fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Sms til radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Send sms til telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Send sms til TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Send sms til arbejdsmobil"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Send sms til personsøger til arbejdet"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Send sms til <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Sms til mms"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (send besked)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Foretag videoopkald"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vil du rydde de ofte kontaktede?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Hvis du gør dette, rydder du listen over personer, som du ofte kontakter, i dine apps Kontaktpersoner og Telefon. Du vil samtidig tvinge e-mailapps til at lære dine adressepræferencer fra bunden."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Rydder ofte kontaktede personer…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Tilgængelig"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ikke til stede"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Optaget"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Andre"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Indeks"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Indeks for arbejde"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alle kontaktpersoner"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Hurtigkontakt for <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Intet navn)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Jævnligt kontaktet"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alle kontaktpersoner med telefonnumre"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktpersoner for arbejdsprofil"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Se opdateringer"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Enhed"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-kort"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Kaldenavn"</string>
+ <string name="name_given" msgid="4280790853455320619">"Fornavn"</string>
+ <string name="name_family" msgid="7466985689626017037">"Efternavn"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Navnepræfiks"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Mellemnavn"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Navnesuffiks"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetisk navn"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetisk fornavn"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetisk mellemnavn"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetisk efternavn"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresse"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Forhold"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Særlig dato"</string>
+ <string name="sms" msgid="1756857139634224222">"Sms"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresse"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Virksomhed"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Noter"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Tilpasset"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketter"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail til hjem"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mail til mobil"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail til arbejde"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Send en e-mail til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Gade"</string>
+ <string name="postal_city" msgid="6597491300084895548">"By"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Stat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Vis hjemmeadresse"</string>
+ <string name="map_work" msgid="1360474076921878088">"Vis arbejdsadresse"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vis adresse"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Se adressen for <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat ved hjælp af AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat ved hjælp af Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat ved hjælp af Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat ved hjælp af Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat ved hjælp af QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat ved hjælp af Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat ved hjælp af ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat ved hjælp af Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"slet"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Vis flere navnefelter"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skjul navnefelter"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Vis flere felter med fonetiske navne"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skjul fonetiske navnefelter"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Udvid"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Skjul"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Udvidet"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skjult"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontaktpersoner"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjernemarkerede"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Tilpas"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontaktperson"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alle andre kontaktpersoner"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alle kontaktpersoner"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Fjern synkroniseringsgruppe"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Tilføj synkroniseringsgruppe"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Flere grupper ..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Hvis du fjerner \"<xliff:g id="GROUP">%s</xliff:g>\" fra synkroniseringen, fjernes alle ugrupperede kontaktpersoner fra synkroniseringen."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Gemmer indstillinger for visning…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Tilpasset visning"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gem importerede kontaktpersoner på:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-kort <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d kontaktperson</item>
+ <item quantity="other">%1$d kontaktpersoner</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontaktperson • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktpersoner • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-fil"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Der er intet at importere"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Vil du importere kontaktpersoner fra vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vil du annullere import af <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du annullere eksport af <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/eksport af vCard kunne ikke annulleres"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Ukendt fejl."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" kunne ikke åbnes: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportfunktionen kunne ikke startes: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Der er ingen kontaktpersoner, der kan eksporteres."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Du har deaktiveret en påkrævet tilladelse."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Der opstod en fejl under eksporten: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fejl"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ikke nok hukommelse. Filen kan være for stor."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet understøttes ikke."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> er eksporteret."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktpersonerne blev eksporteret."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktpersonerne blev eksporteret. Klik på underretningen for at dele kontaktpersonerne."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tryk for at dele kontaktpersoner."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Eksport af <xliff:g id="FILENAME">%s</xliff:g> er annulleret."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Eksporterer kontaktoplysningerne."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Databaseoplysningerne kunne ikke hentes."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Der er ingen kontaktpersoner, der kan eksporteres."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Oprettelsen af vCard startede ikke korrekt."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport ikke mulig"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktpersondataene blev ikke eksporteret.\nÅrsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importerer <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Dataene på dette vCard kunne ikke læses"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard-filen <xliff:g id="FILENAME">%s</xliff:g> er importeret"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import af <xliff:g id="FILENAME">%s</xliff:g> blev annulleret"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importeres om et øjeblik."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen importeres inden længe."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Anmodningen om import af vCard blev afvist. Prøv igen senere."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktpersonerne eksporteres om lidt."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Anmodningen om eksport af vCard blev afvist. Prøv igen senere."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Cachelagrer vCard(s) til lokalt midlertidigt lager. Den egentlige import starter snart."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard kunne ikke importeres."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Cachelagrer"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportér til .vcf-fil"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortér efter"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetisk navn"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vis altid"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Skjul hvis tom"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornavn"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Efternavn"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Navneformat"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Fornavn først"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Efternavn først"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Konti"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Standardkonto til nye kontaktpersoner"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mine oplysninger"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Konfigurer din profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Om Kontaktpersoner"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Del foretrukne kontaktpersoner"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktpersoner"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktpersonerne kunne ikke deles."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksportér kontaktpersoner"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importér kontaktpersoner fra"</string>
+ <string name="share_error" msgid="948429331673358107">"Denne kontaktperson kan ikke deles."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Der er ingen kontaktpersoner, der kan deles."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Viste kontaktpersoner"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Viste kontaktpersoner"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Tilpas visning"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gem"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Søg efter kontaktpersoner"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Foretrukne"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importér"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportér"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokerede telefonnumre"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop søgning"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Ryd søgning"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Brug altid ved opkald"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Ring med en note"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Indtast en note, som skal sendes ved opkald…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND, OG RING OP"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build-version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open source-licenser"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licensoplysninger til open source-software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privatlivspolitik"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Servicevilkår"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open source-licenser"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Webadressen kunne ikke åbnes."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> er valgt"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> er ikke valgt"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Foretag videoopkald"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Slet"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Denne genvej er blevet deaktiveret"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktpersonen blev fjernet"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importér"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Vælg kontaktpersoner"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Der er ingen kontaktpersoner på dit SIM-kort"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontaktpersonen findes allerede på din liste over kontakter"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktperson på SIM-kortet blev importeret</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersoner på SIM-kortet blev importeret</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontaktpersonerne på SIM-kortet kan ikke importeres"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importér fra SIM-kort"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Annuller"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering er slået fra. Tryk for at slå funktionen til."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Luk"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Kontosynkronisering er slået fra. Tryk for at slå funktionen til."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Vil du slå automatisk synkronisering til?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"De ændringer, du foretager af alle apps og konti og ikke kun Google Kontaktpersoner, holdes opdateret mellem nettet og dine enheder."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Slå til"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Der er ingen forbindelse"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kort"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Vis flere"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kortet blev importeret"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importen mislykkedes"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktpersonerne kunne ikke importeres fra SIM-kortet"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kortet importeres"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Underretninger"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 60c063dbc..3edd3b6c4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakte"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakte"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kontakt ansehen"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Kontakt bearbeiten"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakte"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt hinzufügen"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direktwahl"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direktnachricht"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakt auswählen"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Nummer für den Anruf auswählen"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Nummer für Nachricht auswählen"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt auswählen"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Zu Kontakt hinzufügen"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakt auswählen"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Auswählen"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Neuen Kontakt erstellen"</string>
- <string name="starredList" msgid="4817256136413959463">"Markiert"</string>
- <string name="frequentList" msgid="7154768136473953056">"Häufig"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoriten"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktinformationen"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Kontakt bearbeiten"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Kontakt erstellen"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Gruppe bearbeiten"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Gruppe erstellen"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Über"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
<string name="searchHint" msgid="8482945356247760701">"In Kontakten suchen"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Kontakt anzeigen"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Zu Favoriten hinzufügen"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Aus Favoriten entfernen"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Aus Favoriten entfernt"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Bearbeiten"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Löschen"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Foto ändern"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Auf Startbildschirm platzieren"</string>
- <string name="menu_call" msgid="3992595586042260618">"Kontakt anrufen"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"SMS an Kontakt"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Verknüpfung erstellen"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Verknüpfung aufheben"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Bearbeiten"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Löschen"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Kontakt hinzufügen"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Gruppe hinzufügen"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Kontakte entfernen"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Label umbenennen"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Label löschen"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Kontakt hinzufügen"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontakte auswählen"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakte hinzufügen"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Aus Label entfernen"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Label erstellen"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Verknüpfung dieses Kontakts aufheben, um mehrere Kontakte zu erstellen?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Verknüpfung aufheben"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Möchtest du die vorgenommenen Änderungen speichern und die Verknüpfung dieses Kontakts aufheben, um mehrere Kontakte zu erstellen?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Speichern und Verknüpfung aufheben"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Möchtest du die vorgenommenen Änderungen speichern und diesen Kontakt mit dem ausgewählten Kontakt verknüpfen?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Speichern und verknüpfen"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Verknüpfen"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Verknüpfung entfernen"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Verknüpfen"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Verknüpfte Kontakte anzeigen"</string>
<string name="menu_save" msgid="1727844363591825909">"Speichern"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontakte verknüpfen"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Wähle einen Kontakt aus, den du mit <xliff:g id="NAME">%s</xliff:g> verknüpfen möchtest:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle Kontakte anzeigen"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Vorgeschlagene Kontakte"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle Kontakte"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> verknüpft"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakte verknüpft"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> gelöscht"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> und <xliff:g id="NAME_1">%2$s</xliff:g> gelöscht"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… gelöscht"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kontakte gelöscht</item>
<item quantity="one">Kontakt gelöscht</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> Kontakte</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> Kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Von Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Von <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Klingeltonwahl"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle Anrufe an Mailbox"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakte aus deinen schreibgeschützten Konten können nicht gelöscht, sondern nur ausgeblendet werden."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ausblenden"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Der zu löschende Kontakt enthält Informationen aus mehreren Konten. Informationen aus schreibgeschützten Konten werden nicht gelöscht, sondern nur ausgeblendet."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Wähle für eine Verknüpfung mindestens zwei Kontakte aus."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Ausgewählte Kontakte verknüpfen?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Verknüpfen"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"An Mailbox weiterleiten"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nicht an Mailbox weiterleiten"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Dieser Kontakt ist schreibgeschützt. Er kann nicht gelöscht, aber ausgeblendet werden."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Kontakt ausblenden"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Schreibgeschützte Konten in diesem Kontakt werden ausgeblendet, nicht gelöscht."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Diesen Kontakt löschen?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Ausgewählte Kontakte löschen?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakte aus deinen schreibgeschützten Konten können nicht gelöscht, sondern nur ausgeblendet werden."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Wenn du diesen Kontakt löschst, werden Informationen aus mehreren Konten gelöscht."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Diesen Kontakt löschen?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Löschen"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Änderungen verwerfen"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Dieser Kontakt existiert nicht."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt zu Startbildschirm hinzugefügt."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> zu Startbildschirm hinzugefügt."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Neuen Kontakt erstellen"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Neuen Kontakt erstellen"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Firma/Organisation"</item>
- <item msgid="7196592230748086755">"Notiz"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Auf dem Tablet sind keine Bilder verfügbar."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Auf dem Telefon sind keine Bilder verfügbar."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Auf dem Gerät sind keine Bilder verfügbar."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbild"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Name des benutzerdef. Labels"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Anrufe direkt an Mailbox senden"</string>
<string name="removePhoto" msgid="4898105274130284565">"Foto entfernen"</string>
- <string name="noContacts" msgid="4955659076981974652">"Keine Kontakte"</string>
- <string name="noGroups" msgid="8614664663561385253">"Keine Gruppen"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Du benötigst ein Konto, um Gruppen erstellen zu können."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Keine Personen in dieser Gruppe"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Bearbeite die Gruppe, um Personen hinzuzufügen."</string>
- <string name="savingContact" msgid="4075751076741924939">"Kontakt wird gespeichert..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Die Kontaktliste ist leer"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Keine Kontakte mit diesem Label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Keine Kontakte für dieses Konto"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Die Kontaktliste ist leer"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> gespeichert"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt gespeichert"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Verknüpfung der Kontakte wurde aufgehoben."</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktänderungen konnten nicht gespeichert werden."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Verknüpfung des Kontakts konnte nicht aufgehoben werden."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Der Kontakt konnte nicht verknüpft werden."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Fehler beim Speichern des Kontakts."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Änderungen des Kontaktfotos konnten nicht gespeichert werden."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Gruppe gespeichert"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Gruppenänderungen konnten nicht gespeichert werden."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte mit Telefonnummern</item>
- <item quantity="one">1 Kontakt mit Telefonnummer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Keine sichtbaren Kontakte mit Telefonnummern"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte gefunden</item>
- <item quantity="one">1 Kontakt gefunden</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Änderungen am Kontakt konnten nicht gespeichert werden"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Verknüpfung mit Kontakt konnte nicht aufgehoben werden"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt konnte nicht verknüpft werden"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fehler beim Speichern des Kontakts"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Änderungen am Kontaktfoto konnten nicht gespeichert werden"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Label konnte nicht geladen werden"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label gelöscht"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label erstellt"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Label kann nicht erstellt werden"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label aktualisiert"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Aus Label entfernt"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Zu Label hinzugefügt"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Änderungen am Label konnten nicht gespeichert werden"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Dieses Label ist bereits vorhanden"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Einige Kontakte enthalten keine E-Mail-Adresse."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Einige Kontakte enthalten keine Telefonnummer."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-Mail senden"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Nachricht senden"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontakte auswählen"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Senden"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Keine Kontakte"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kontakte gefunden</item>
- <item quantity="one">1 Kontakt gefunden</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alle"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriten"</string>
- <string name="callBack" msgid="5498224409038809224">"Rückruf"</string>
- <string name="callAgain" msgid="3197312117049874778">"Erneut anrufen"</string>
- <string name="returnCall" msgid="8171961914203617813">"Zurückrufen"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" zu den Kontakten hinzufügen?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"Kontaktbild"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%s</xliff:g> Kontakten"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Namen meiner Kontakte"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Für diese Aktion wurde keine App gefunden."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klicke hier, um zum vorherigen Bildschirm zurückzukehren."</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefonnummer hinzufügen"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"E-Mail-Adresse hinzufügen"</string>
<string name="missing_app" msgid="1466111003546611387">"Für diese Aktion wurde keine App gefunden."</string>
<string name="menu_share" msgid="943789700636542260">"Teilen"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Zu Kontakten hinzufügen"</string>
- <string name="share_via" msgid="563121028023030093">"Kontakt teilen über"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Konto für Gruppenerstellung"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Hinzufügen"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kontakte teilen über</item>
+ <item quantity="one">Kontakt teilen über</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Konto auswählen"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Label erstellen"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Label umbenennen"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Labelname"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Labelname"</string>
<string name="audio_chat" msgid="2535716629358298691">"Sprachchat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
- <string name="connections" msgid="8098440723172028350">"Verbindungen"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Verbindung hinzufügen"</string>
- <string name="recent" msgid="2659189233141493004">"Neueste Nachrichten"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Neueste Updates"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> Kontakt"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-Konto"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"In dieser App nicht bearbeitbar"</string>
- <string name="group_read_only" msgid="1061762906115697637">"Auf diesem Gerät nicht bearbeitbar"</string>
<string name="take_photo" msgid="7496128293167402354">"Foto machen"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Neues Foto aufnehmen"</string>
<string name="pick_photo" msgid="2129509985223564942">"Foto auswählen"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Neues Foto auswählen"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktliste wird aktualisiert..."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Suche..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Auswahl anzeigen"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Alle anzeigen"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Alle auswählen"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Auswahl für alle aufheben"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Hinzufügen"</string>
- <string name="add_organization" msgid="7311893231158291197">"Unternehmen hinzufügen"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Gruppenname"</string>
- <string name="change_photo" msgid="8530597935483526383">"Ändern"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Hauptfoto"</string>
- <string name="description_star" msgid="2605854427360036550">"Favorit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Kontakt bearbeiten"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Aktuellen Kontakt mit ausgewähltem Kontakt verknüpfen?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Abbrechen"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Zurück"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"Schließen"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Zur Bearbeitung des ausgewählten Kontakts wechseln? Die bisher eingegebenen Informationen werden kopiert."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"In meine Kontakte kopieren"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Zu meinen Kontakten hinzufügen"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Verzeichnis <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Benutzerdefiniert"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Einstellungen"</string>
<string name="menu_settings" msgid="377929915873428211">"Einstellungen"</string>
<string name="menu_help" msgid="1680178646764069976">"Hilfe &amp; Feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Anzeigeoptionen"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Zu Kontakten hinzufügen"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Zu Kontakt hinzufügen"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Schließen"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inklusive Jahr"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Wird geladen…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Neuen Kontakt erstellen"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Konto hinzufügen"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontakte importieren"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Neue Gruppe erstellen"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Neue Gruppe erstellen"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> Gruppen</item>
- <item quantity="one">1 Gruppe</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Soll die Gruppe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" wirklich gelöscht werden? Die Kontakte selbst werden nicht gelöscht."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> Personen von <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Person von <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Personen</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importieren"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Neu erstellen…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Soll das Label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" gelöscht werden? (Die Kontakte selbst werden nicht gelöscht.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Gib einen Namen für den Kontakt ein, bevor du ihn mit einem anderen Kontakt verknüpfst."</string>
<string name="copy_text" msgid="3257145021583508761">"In Zwischenablage kopieren"</string>
<string name="set_default" msgid="4417505153468300351">"Als Standard festlegen"</string>
<string name="clear_default" msgid="7193185801596678067">"Als Standard löschen"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text kopiert"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Möchtest du die Änderungen verwerfen und den Bearbeitungsmodus beenden?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Änderungen verwerfen?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Verwerfen"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Bearbeitung fortsetzen"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Mein Profil einrichten"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Namen der Person eingeben"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Gruppenname"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Abbrechen"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Änderungen verwerfen?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Kontakte suchen"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kontakte entfernen"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mein lokales Profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mein <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-Profil"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Alle Kontakte werden angezeigt."</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Synchronisierung mit einem Online-Service: Deine Kontakte sind dann auch sicher, wenn du dein Telefon verlierst."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konto hinzufügen"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Dein neuer Kontakt wird nicht gesichert. Konto für die Online-Sicherung von Kontakten hinzufügen?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Nimm dir kurz Zeit und weise ein Konto zu, mit dem deine Kontakte in Google gesichert werden."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Neue Kontakte werden in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> gespeichert."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Wähle ein Standardkonto für neue Kontakte:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Kontakt hinzufügen"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Neuer Kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontakt bearbeiten"</string>
- <string name="keep_local" msgid="1258761699192993322">"Lokal speichern"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Schreibgeschützt"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Kontakt für Bearbeitung auswählen"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Verknüpfte Kontakte"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Hinzufügen"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Verknüpfung aufheben"</string>
<string name="add_account" msgid="8201790677994503186">"Konto hinzufügen"</string>
<string name="add_new_account" msgid="5748627740680940264">"Neues Konto hinzufügen"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Datenbankdateien exportieren"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"Neuen Kontakt hinzufügen"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Neuen Kontakt erstellen"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Mehr anzeigen"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Weniger anzeigen"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Alle anzeigen"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Letzte"</string>
<string name="about_card_title" msgid="2920942314212825637">"Info"</string>
- <string name="send_message" msgid="8938418965550543196">"Nachricht senden"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Persönliche Kopie wird erstellt…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Gestern"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Persönliche Kopie wird erstellt..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Morgen"</string>
<string name="today" msgid="8041090779381781781">"Heute"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Heute um <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Morgen um <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Unbenannter Termin)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Festlegen"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Termin"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Beziehung"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-Mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Zum Maximieren des Kontakteditors klicken"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Zum Minimieren des Kontakteditors klicken"</string>
<string name="content_description_directions" msgid="2686791825798189335">"Wegbeschreibung"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Letzte SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Zum Antworten klicken."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Letzte SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Zum Antworten klicken."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"Eingehend"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"Ausgehend"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"Verpasst"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Letzter Anruf. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Für Rückruf klicken."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Letzter Anruf. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Für Rückruf klicken."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ich: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funktioniert besser, wenn du die Hangouts-ID der Person in das E-Mail- oder Telefonfeld eingibst."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Weitere Felder"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto ändern"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Fehler beim Öffnen des Editors."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Speichern in"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Wird derzeit in <xliff:g id="ACCOUNT_NAME">%s</xliff:g> gespeichert. Tippe doppelt, um ein anderes Konto auszuwählen."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Verknüpfte Kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Verknüpfter Kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> verknüpfte Kontakte"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Weitere Felder"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontaktbild ändern"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontaktbild hinzufügen"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontaktbild"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Fehler beim Öffnen des Editors."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Speichern in"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktinfo von <xliff:g id="ACCOUNT">%s</xliff:g> kann nicht bearbeitet werden"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"Kontakte verknüpfen"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"Abbrechen"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mögliche Duplikate</item>
- <item quantity="one">1 mögliches Duplikat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> verknüpfte Kontakte</item>
- <item quantity="one">1 verknüpfter Kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Dieser Kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mögliche Duplikate"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Bei diesen Kontakten könnte es sich um dieselbe Person handeln. Du kannst sie zu einem einzigen Kontakt verknüpfen."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Verknüpfte Kontakte"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Aus meinen Konten"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Foto aufnehmen"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alle Fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Foto auswählen"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Von <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> löschen"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> löschen"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> löschen"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto von <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>nicht ausgewählt"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto von <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ausgewählt"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto aus unbekanntem Konto nicht ausgewählt"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto aus unbekanntem Konto ausgewählt"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Die Kontaktliste wird an die geänderte Sprache angepasst.\n\nBitte warten..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Vorschläge"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Neu"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigationsleiste öffnen"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Navigationsleiste schließen"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Label \"<xliff:g id="LABEL_NAME">%s</xliff:g>\""</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Label"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Konten"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Gemeinsamen Verlauf anzeigen"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Termine und Nachrichten"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Termine"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Nachrichten"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Vorschläge"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"So sind deine Kontakte immer organisiert und übersichtlich"</string>
+ <string name="undo" msgid="1425165101664071422">"Rückgängig machen"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> anrufen"</string>
+ <string name="call_home" msgid="1990519474420545392">"Anruf (privat)"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Anruf (mobil)"</string>
+ <string name="call_work" msgid="5328785911463744028">"Anruf (geschäftl.)"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Fax (geschäftlich) anrufen"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Fax (privat) anrufen"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Anruf (Pager)"</string>
+ <string name="call_other" msgid="8563753966926932052">"Anruf"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Rückrufnummer anrufen"</string>
+ <string name="call_car" msgid="3280537320306436445">"Auto anrufen"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Anruf (Firmenhauptnummer)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN-Nummer anrufen"</string>
+ <string name="call_main" msgid="6082900571803441339">"Hauptnummer anrufen"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Anruf an Fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Anruf (Funktelefon)"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Telexnummer anrufen"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD anrufen"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Anruf Handy (geschäftl.)"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Anruf Pager (geschäftl.)"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> anrufen"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Anruf (MMS)"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Anruf)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"SMS an <xliff:g id="CUSTOM_LABEL">%s</xliff:g> senden"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS (privat)"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Text (mobil)"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS (geschäftl.)"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS an Fax (geschäftl.)"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS an Fax (privat)"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Text-Pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS an"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS an Rückrufnummer"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Text (Auto)"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Text (Firmenhauptnummer)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS an ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS an Hauptnummer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS an Fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Text (Funktelefon)"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS an Telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS an TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS an Handy (geschäftl.)"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS an Pager (geschäftl.)"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS an <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Text (MMS)"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Nachricht)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Videoanruf starten"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Liste \"Häufig kontaktiert\" löschen?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Du löschst die Liste \"Häufig kontaktiert\" in den Apps \"Kontakte\" und \"Telefon\" und bewirkst so ein Zurücksetzen deiner Adresseinstellungen für E-Mail-Apps."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"\"Häufig kontaktiert\" wird gelöscht…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Verfügbar"</string>
+ <string name="status_away" msgid="1838861100379804730">"Abwesend"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Beschäftigt"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Sonstige"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Verzeichnis"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Verzeichnis geschäftlicher Kontakte"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alle Kontakte"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Schnellkontakt für <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Kein Name)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Häufig kontaktiert"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alle Kontakte mit Telefonnummern"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Arbeitsprofilkontakte"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Updates anzeigen"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Gerät"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Spitzname"</string>
+ <string name="name_given" msgid="4280790853455320619">"Vorname"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nachname"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Namenpräfix"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Zweiter Vorname"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Namensuffix"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Phonetischer Name"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Vorname (phonetisch)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Zweiter Vorname (phonetisch)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nachname (phonetisch)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-Mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresse"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Firma/Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Beziehung"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Besonderes Datum"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresse"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Unternehmen"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notizen"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Benutzerdefiniert"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Label"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-Mail (privat)"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-Mail (mobil)"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-Mail (geschäftl.)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-Mail an"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-Mail an <xliff:g id="CUSTOM_LABEL">%s</xliff:g> senden"</string>
+ <string name="email" msgid="5668400997660065897">"E-Mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Straße"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Stadt"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Bundesland"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postleitzahl"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Privatadresse anzeigen"</string>
+ <string name="map_work" msgid="1360474076921878088">"Geschäftsadresse anzeigen"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adresse anzeigen"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Adresse <xliff:g id="CUSTOM_LABEL">%s</xliff:g> anzeigen"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Über AIM chatten"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Über Windows Live chatten"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Über Yahoo! chatten"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Über Skype chatten"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Über QQ chatten"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Über Google Talk chatten"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Über ICQ chatten"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Über Jabber chatten"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"Löschen"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Weitere Namensfelder einblenden"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Namensfelder minimieren"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Weitere Felder für phonetische Namen einblenden"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Felder für phonetische Namen minimieren"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Maximieren"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Minimieren"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Maximiert"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Minimiert"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle Kontakte"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Markiert"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Anpassen"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alle weiteren Kontakte"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alle Kontakte"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Synchronisierungsgruppe entfernen"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Synchronisierungsgruppe hinzufügen"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Weitere Gruppen..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Wenn \"<xliff:g id="GROUP">%s</xliff:g>\" aus der Synchronisierung entfernt wird, werden auch alle nicht gruppierten Kontakte aus der Synchronisierung entfernt."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Anzeigeoptionen werden gespeichert..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Benutzerdefinierte Ansicht"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importierte Kontakte speichern unter:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-Karte"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM \"<xliff:g id="SIM_NAME">%1$s</xliff:g>\""</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d Kontakte</item>
+ <item quantity="one">1 Kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> Kontakte • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> Kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-Datei"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Keine Daten zum Importieren vorhanden"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Kontakte von vCard importieren?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Import von <xliff:g id="FILENAME">%s</xliff:g> abbrechen?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export von <xliff:g id="FILENAME">%s</xliff:g> abbrechen?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard-Import/-Export nicht abgebrochen"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Unbekannter Fehler"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" konnte nicht geöffnet werden: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Exportprogramm konnte nicht gestartet werden: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Es ist kein exportierbarer Kontakt vorhanden."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Du hast eine erforderliche Berechtigung deaktiviert."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Beim Export ist ein Fehler aufgetreten: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"E/A-Fehler"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nicht genügend Speicherplatz. Die Datei ist möglicherweise zu groß."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Das Format wird nicht unterstützt."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export von <xliff:g id="FILENAME">%s</xliff:g> abgeschlossen"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontakte wurden exportiert."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Das Exportieren der Kontakte ist abgeschlossen. Klicke auf die Benachrichtigung, um die Kontakte freizugeben."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Zum Teilen der Kontakte tippen."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Export von <xliff:g id="FILENAME">%s</xliff:g> abgebrochen"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktdaten werden exportiert."</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Die Kontaktdaten werden gerade exportiert."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Datenbankinformationen konnten nicht abgerufen werden."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Keine Kontakte zum Exportieren vorhanden."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Das Programm zum Erstellen der vCard wurde nicht richtig gestartet."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export nicht möglich"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Die Kontaktdaten wurden nicht exportiert.\nGrund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> wird importiert"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Lesen der vCard-Daten nicht möglich"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import der vCard <xliff:g id="FILENAME">%s</xliff:g> abgeschlossen"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import von <xliff:g id="FILENAME">%s</xliff:g> abgebrochen"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> wird demnächst importiert."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Die Datei wird in Kürze importiert."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Die vCard-Importanfrage wurde abgelehnt. Bitte versuchen Sie es später erneut."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Die Kontakte werden in Kürze exportiert."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Die vCard-Exportanfrage wurde abgelehnt. Bitte versuchen Sie es später erneut."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"Kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Caching der vCard(s) in lokalen temporären Speicher wird durchgeführt. Der eigentliche Import beginnt gleich."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Importieren der vCard nicht möglich"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt erhalten per NCF"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Caching läuft..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> wird importiert: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"In VCF-Datei exportieren"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortieren nach"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Phonetischer Name"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Immer anzeigen"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Leeres Feld ausblenden"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vorname"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nachname"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Namensformat"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Vorname zuerst"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nachname zuerst"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Konten"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Standardkonto für neue Kontakte"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Meine Daten"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Profil einrichten"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Über \"Kontakte\""</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Lieblingskontakte teilen"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Alle Kontakte teilen"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakte konnten nicht geteilt werden."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kontakte exportieren"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontakte importieren von"</string>
+ <string name="share_error" msgid="948429331673358107">"Dieser Kontakt kann nicht geteilt werden."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Keine Kontakte zum Teilen vorhanden."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Angezeigte Kontakte"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Angezeigte Kontakte"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Ansicht anpassen"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Speichern"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Kontakte suchen"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriten"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importieren"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportieren"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockierte Nummern"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"über <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> über <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"Suche beenden"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Suche zurücksetzen"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Diese SIM für alle Anrufe verwenden"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Mit einer Notiz anrufen"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Notiz eingeben, die beim Anrufen gesendet wird…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SENDEN &amp; ANRUFEN"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build-Version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-Source-Lizenzen"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lizenzdetails für Open-Source-Software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Datenschutzerklärung"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Nutzungsbedingungen"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open-Source-Lizenzen"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Die URL konnte nicht geöffnet werden."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ausgewählt"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nicht ausgewählt"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Videoanruf starten"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Löschen"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Auslassungszeichen"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Diese Verknüpfung wurde deaktiviert"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt wurde entfernt"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importieren"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kontakte auswählen"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Keine Kontakte auf der SIM-Karte"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Der Kontakt ist bereits in der Kontaktliste vorhanden"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-Kontakte importiert</item>
+ <item quantity="one">1 SIM-Kontakt importiert</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Fehler beim Importieren von SIM-Kontakten"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Von SIM importieren"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Abbrechen"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Die automatische Synchronisierung ist deaktiviert. Zum Aktivieren hier tippen."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Schließen"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Die Kontensynchronisierung ist deaktiviert. Zum Aktivieren hier tippen."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Automatische Synchronisierung aktivieren?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Änderungen, die du nicht nur in Google Kontakte, sondern in allen Apps und Konten vornimmst, werden zwischen dem Web und deinen Geräten synchronisiert."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktivieren"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Keine Verbindung"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mehr anzeigen"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importieren der SIM-Karte abgeschlossen"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Fehler beim Importieren"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakte konnten nicht von SIM-Karte importiert werden"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM wird importiert"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Benachrichtigungen"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 643e36d8f..38c72b637 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Επαφές"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Επαφές"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Προβολή επαφής"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Επεξεργασία επαφής"</string>
<string name="contactsList" msgid="8661624236494819731">"Επαφές"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Προσθήκη επαφής"</string>
<string name="shortcutContact" msgid="749243779392912958">"Επαφή"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Άμεση κλήση"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Άμεσο μήνυμα"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Επιλογή μιας συντόμευσης επαφών"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Επιλογή ενός αριθμού για κλήση"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Επιλογή ενός αριθμού για μήνυμα"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Επιλογή επαφής"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Προσθήκη σε επαφή"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Επιλέξτε μια επαφή"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Επιλογή"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Δημιουργία νέας επαφής"</string>
- <string name="starredList" msgid="4817256136413959463">"Με αστέρι"</string>
- <string name="frequentList" msgid="7154768136473953056">"Συχνές"</string>
- <string name="strequentList" msgid="5640192862059373511">"Αγαπ."</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Λεπτομέρειες επαφής"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Επεξεργασία επαφής"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Δημιουργία επαφής"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Επεξεργασία ομάδας"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Δημιουργία ομάδας"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Σχετικά με"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ενημερώσεις"</string>
<string name="searchHint" msgid="8482945356247760701">"Αναζήτηση επαφών"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Προβολή επαφής"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Προσθήκη στα αγαπημένα"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Κατάργηση από τα αγαπημένα"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Καταργήθηκε από τα αγαπημένα"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Επεξεργασία"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Διαγραφή"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Αλλαγή φωτογραφίας"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Τοποθέτηση στην αρχική οθόνη"</string>
- <string name="menu_call" msgid="3992595586042260618">"Κλήση επαφής"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Αποστολή μηνύματος κειμένου σε επαφή"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Δημιουργία συντόμευσης"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Αποσύνδεση"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Επεξεργασία"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Διαγραφή"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Προσθήκη επαφής"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Προσθήκη ομάδας"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Κατάργηση επαφών"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Μετονομασία ετικέτας"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Διαγραφή ετικέτας"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Προσθήκη επαφής"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Επιλογή επαφών"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Προσθήκη επαφών"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Κατάργηση από ετικέτα"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Δημιουργία ετικέτας"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Θέλετε να αναιρέσετε τη σύνδεση αυτής της επαφής για να μετατραπεί σε πολλαπλές επαφές;"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Αναίρεση σύνδεσης"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Θέλετε να αποθηκεύσετε τις αλλαγές που έχετε πραγματοποιήσει ήδη και να αναιρέσετε τη σύνδεση αυτής της επαφής για να μετατραπεί σε πολλαπλές επαφές;"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Αποθήκευση και αναίρεση σύνδεσης"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Θα θέλατε να αποθηκεύσετε τις αλλαγές που έχετε πραγματοποιήσει ήδη και να κάνετε σύνδεση με την επιλεγμένη επαφή;"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Αποθήκευση και σύνδεση"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Σύνδεση"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Αποσύνδεση"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Σύνδεση"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Προβολή συνδεδεμένων επαφών"</string>
<string name="menu_save" msgid="1727844363591825909">"Aποθήκευση"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Σύνδεση επαφών"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Επιλέξτε την επαφή που θέλετε να συνδέσετε με τον χρήστη <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Εμφάνιση όλων των επαφών"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Προτεινόμενες επαφές"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Όλες οι επαφές"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> συνδέθηκε"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Οι επαφές συνδέθηκαν"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Η επαφή <xliff:g id="NAME">%1$s</xliff:g> διαγράφηκε"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Οι <xliff:g id="NAME_0">%1$s</xliff:g> και <xliff:g id="NAME_1">%2$s</xliff:g> διαγράφηκαν"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Οι επαφές <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… διαγράφηκαν"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other"> επαφές διαγράφηκαν</item>
<item quantity="one"> επαφή διαγράφηκε</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> επαφές</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> επαφή</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> επαφές · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> επαφή · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Από την Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Από: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ήχος κλήσης"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Όλες οι κλήσ. στον τηλεφωνητή"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Δεν είναι δυνατή η διαγραφή επαφών από λογαριασμούς που προορίζονται μόνο για ανάγνωση, αλλά είναι δυνατή η απόκρυψή τους."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Απόκρυψη"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Η επαφή που πρόκειται να διαγραφεί περιέχει στοιχεία από πολλαπλούς λογαριασμούς. Τα στοιχεία που προέρχονται από λογαριασμούς που προορίζονται μόνο για ανάγνωση θα είναι κρυφά, αλλά δεν θα διαγραφούν."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Θα πρέπει να έχουν επιλεγεί τουλάχιστον δύο επαφές για να πραγματοποιηθεί μια σύνδεση."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Θέλετε να συνδέσετε τις επιλεγμένες επαφές;"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Σύνδεση"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Δρομολόγηση σε αυτ. τηλεφωνητή"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Κατάργηση δρομ. σε τηλεφωνητή"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Αυτή η επαφή είναι μόνο για ανάγνωση. Δεν μπορεί να διαγραφεί, αλλά μπορείτε να την αποκρύψετε."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Απόκρυψη επαφής"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Οι λογαριασμοί μόνο για ανάγνωση σε αυτήν την επαφή θα είναι κρυφοί, δεν θα διαγραφούν."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Να διαγραφεί αυτή η επαφή;"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Να διαγραφούν οι επιλεγμένες επαφές;"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Δεν είναι δυνατή η διαγραφή επαφών από λογαριασμούς που προορίζονται μόνο για ανάγνωση, αλλά είναι δυνατή η απόκρυψή τους."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Με τη διαγραφή αυτής της επαφής, θα διαγραφούν στοιχεία από πολλαπλούς λογαριασμούς."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Να διαγραφεί αυτή η επαφή;"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Διαγραφή"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Απόρριψη αλλαγών"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Η επαφή δεν υπάρχει."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Η επαφή προστέθηκε στην Αρχική οθόνη."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Ο/Η <xliff:g id="NAME">%s</xliff:g> προστέθηκε στην Αρχική οθόνη."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Δημιουργία νέας επαφής"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Δημιουργία νέας επαφής"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Εταιρεία"</item>
- <item msgid="7196592230748086755">"Σημείωση"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Δεν υπάρχουν διαθέσιμες εικόνες στο tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Δεν υπάρχουν διαθέσιμες εικόνες στο τηλέφωνο."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Δεν υπάρχουν διαθέσιμες εικόνες στη συσκευή."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Φωτογραφία επαφής"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Προσαρμοσμένο όνομα ετικέτας"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Αποστολή κλήσεων απευθείας στον αυτόματο τηλεφωνητή"</string>
<string name="removePhoto" msgid="4898105274130284565">"Κατάργηση εικόνας"</string>
- <string name="noContacts" msgid="4955659076981974652">"Δεν υπάρχουν επαφές"</string>
- <string name="noGroups" msgid="8614664663561385253">"Δεν υπάρχουν ομάδες."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Για να δημιουργήσετε ομάδες πρέπει να έχετε έναν λογαριασμό."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Δεν υπάρχουν άτομα σε αυτήν την ομάδα."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Αν θέλετε να προσθέσετε άτομα, επεξεργαστείτε την ομάδα."</string>
- <string name="savingContact" msgid="4075751076741924939">"Αποθήκευση επαφής…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Η λίστα επαφών σας είναι άδεια"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Δεν υπάρχουν επαφές με αυτήν την εκτικέτα"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Δεν υπάρχουν επαφές σε αυτόν το λογαριασμό"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Η λίστα επαφών σας είναι άδεια"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Η επαφή \"<xliff:g id="DISPLAY_NAME">%s</xliff:g>\" αποθηκεύτηκε"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Η επαφή αποθηκεύτηκε"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Οι επαφές αποσυνδέθηκαν"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στις επαφές."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Δεν ήταν δυνατή η αποσύνδεση επαφής."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Δεν ήταν δυνατή η σύνδεση της επαφής."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Σφάλμα κατά την αποθήκευση επαφής."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στη φωτογραφία της επαφής."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Η ομάδα αποθηκεύτηκε."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στην ομάδα."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> επαφές με αριθμό τηλεφώνου</item>
- <item quantity="one">1 επαφή με αριθμό τηλεφώνου</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Δεν υπάρχουν επαφές με αριθμούς τηλεφώνου"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Βρέθηκε 1</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στην επαφή"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Δεν ήταν δυνατή η αποσύνδεση επαφής"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Δεν ήταν δυνατή η σύνδεση της επαφής"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Σφάλμα κατά την αποθήκευση της επαφής"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στη φωτογραφία της επαφής"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Η φόρτωση ετικέτας απέτυχε"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Η ετικέτα διαγράφηκε"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Η ετικέτα δημιουργήθηκε"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Δεν είναι δυνατή η δημιουργία ετικέτας"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Η ετικέτα ενημερώθηκε"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Καταργήθηκε από ετικέτα"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Προστέθηκε στην ετικέτα"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών ετικέτας"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Η ετικέτα υπάρχει ήδη"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Ορισμένες επαφές δεν έχουν δ/νση ηλ. ταχυδρομείου."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Ορισμένες επαφές δεν έχουν αριθμούς τηλεφώνου."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Αποστολή μηνύματος ηλ. ταχυδρ."</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Αποστολή μηνύματος"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Επιλογή επαφών"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Αποστολή"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Δεν υπάρχουν επαφές"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">Βρέθηκαν <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Βρέθηκε 1</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Όλες"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Αγαπημένα"</string>
- <string name="callBack" msgid="5498224409038809224">"Επανάκληση"</string>
- <string name="callAgain" msgid="3197312117049874778">"Επανάληψη κλήσης"</string>
- <string name="returnCall" msgid="8171961914203617813">"Επιστροφή κλήσης"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Προσθήκη του \"<xliff:g id="EMAIL">%s</xliff:g>\" στις επαφές?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"φωτογραφία επαφής"</string>
- <string name="description_plus_button" msgid="515164827856229880">"συν"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%s</xliff:g> επαφές"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Ονόματα των επαφών σας"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Δεν βρέθηκε εφαρμογή για τη διαχείριση αυτής της ενέργειας."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Κάντε κλικ για να επιστρέψετε στην προηγούμενη οθόνη"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Προσθήκη αριθμού τηλεφώνου"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Προσθήκη email"</string>
<string name="missing_app" msgid="1466111003546611387">"Δεν βρέθηκε εφαρμογή για τη διαχείριση αυτής της ενέργειας."</string>
<string name="menu_share" msgid="943789700636542260">"Κοινοποίηση"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Προσθήκη στις επαφές"</string>
- <string name="share_via" msgid="563121028023030093">"Κοινοποίηση μέσω"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Δημιουργία ομάδας στο λογαριασμό"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Προσθήκη"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Κοινοποίηση επαφών μέσω</item>
+ <item quantity="one">Κοινοποίηση επαφής μέσω</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Επιλογή λογαριασμού"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Δημιουργία ετικέτας"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Μετονομασία ετικέτας"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Όνομα ετικέτας"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Όνομα ετικέτας"</string>
<string name="audio_chat" msgid="2535716629358298691">"Φωνητική συνομιλία"</string>
<string name="video_chat" msgid="1872255818640336072">"Συζήτηση μέσω βίντεο"</string>
- <string name="connections" msgid="8098440723172028350">"Συνδέσεις"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Προσθ. σύνδεσης"</string>
- <string name="recent" msgid="2659189233141493004">"Πρόσφατες"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Πρόσφατες ενημερώσεις"</string>
<string name="account_type_format" msgid="718948015590343010">"Επαφή <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Λογαριασμός <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Αδυναμία επεξεργασ. από αυτήν την εφαρμ."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Αδυναμία επεξεργασίας στη συσκευή."</string>
<string name="take_photo" msgid="7496128293167402354">"Λήψη φωτογραφίας"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Λήψη νέας φωτογραφίας"</string>
<string name="pick_photo" msgid="2129509985223564942">"Επιλογή φωτογραφίας"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Επιλογή νέας φωτογραφίας"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Γίνεται ενημέρωση της λίστας επαφών."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Αναζήτηση…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Εμφάνιση επιλεγμένων"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Εμφάνιση όλων"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Επιλογή όλων"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Αποεπιλογή όλων"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Προσθήκη νέου"</string>
- <string name="add_organization" msgid="7311893231158291197">"Προσθήκη οργανισμού"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ημερομηνία"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Όν. ομάδ."</string>
- <string name="change_photo" msgid="8530597935483526383">"Αλλαγή"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Κύρια φωτογραφία"</string>
- <string name="description_star" msgid="2605854427360036550">"αγαπημένο"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Επεξεργασία"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Να γίνει σύνδεση της τρέχουσας επαφής με την επιλεγμένη επαφή;"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ετικέτα"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Ακύρωση"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Πίσω"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"κλείσιμο"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Να γίνει μετάβαση σε επεξεργασία της επιλεγμένης επαφής; Θα γίνει αντιγραφή των στοιχείων που έχετε εισαγάγει μέχρι τώρα."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Αντιγραφή στις Επαφές μου"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Προσθήκη στις Επαφές μου"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Κατάλογος <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Προσαρμοσμένη"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Ρυθμίσεις"</string>
<string name="menu_settings" msgid="377929915873428211">"Ρυθμίσεις"</string>
<string name="menu_help" msgid="1680178646764069976">"Βοήθεια και σχόλια"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Επιλογές προβολής"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Αριθμός τηλεφώνου"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Προσθήκη στις επαφές"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Προσθ.σε επαφή"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Κλείσιμο"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Συμπερίληψη έτους"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Επαφή"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Φόρτωση…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Δημιουργία νέας επαφής"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Προσθήκη λογαριασμού"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Εισαγωγή επαφών"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Δημιουργία νέας ομάδας"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Δημιουργία νέας ομάδας"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ομάδες</item>
- <item quantity="one">1 ομάδα</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Να διαγραφεί η ομάδα \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"; (Οι επαφές δεν θα διαγραφούν.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> άτομα από <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> άτομο από <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> άτομα</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> άτομο</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Εισαγωγή"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Δημιουργία νέας…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Διαγραφή της ετικέτας \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"; (Οι ίδιες οι επαφές δεν θα διαγραφούν)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Πληκτρολογήστε το όνομα της επαφής προτού τη συνδέσετε με κάποια άλλη."</string>
<string name="copy_text" msgid="3257145021583508761">"Αντιγραφή στο πρόχειρο"</string>
<string name="set_default" msgid="4417505153468300351">"Ορισμός ως προεπιλογή"</string>
<string name="clear_default" msgid="7193185801596678067">"Εκκαθάριση προεπιλεγμένων"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Το κείμενο αντιγράφηκε"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Να απορριφθούν οι αλλαγές που πραγματοποιήσατε και να τερματιστεί η επεξεργασία;"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Να απορριφθούν οι αλλαγές;"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Απόρριψη"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Συνέχεια επεξεργασίας"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Ρύθμιση του προφίλ μου"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Πληκτρολογήστε το όνομα του ατόμου"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Όνομα ομάδας"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ακύρωση"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Απόρριψη προσαρμογών;"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Αναζήτηση επαφών"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Κατάργηση επαφών"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Τοπικό προφίλ"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Προφίλ μου <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Εμφάνιση όλων των επαφών"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Διατηρήστε τις επαφές σας ασφαλείς ακόμα και αν χάσετε το τηλέφωνό σας: συγχρονισμός με άλλη συσκευή στο διαδίκτυο."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Προσθήκη λογαριασμού"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Δεν θα δημιουργηθεί αντίγραφο ασφαλείας για τη νέα επαφή σας. Θέλετε να προσθέσετε ένα λογαριασμό που δημιουργεί αντίγραφα ασφαλείας επαφών στο διαδίκτυο;"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Αφιερώστε λίγο χρόνο για να προσθέσετε έναν λογαριασμό μέσω του οποίου θα δημιουργήσετε αντίγραφα ασφαλείας των επαφών σας στην Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Οι νέες επαφές θα αποθηκευτούν στο λογαριασμό <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Επιλέξτε έναν προεπιλεγμένο λογαριασμό για νέες επαφές:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Προσθήκη νεάς επαφής"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Δημιουρ. επαφής"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Επεξεργασία επαφής"</string>
- <string name="keep_local" msgid="1258761699192993322">"Αποθ. τοπικά"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Μόνο για προβολή"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Επιλέξτε επαφή προς επεξεργασία"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Συνδεδεμένες επαφές"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Προσθήκη"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Αποσύνδεση"</string>
<string name="add_account" msgid="8201790677994503186">"Προσθήκη λογαριασμού"</string>
<string name="add_new_account" msgid="5748627740680940264">"Προσθήκη νέου λογαριασμού"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Εξαγωγή αρχείων βάσης δεδομένων"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"προσθήκη νέας επαφής"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Δημιουργία νέας επαφής"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Δείτε περισσότερα"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Δείτε λιγότερα"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Εμφάνιση όλων"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Πρόσφατα"</string>
<string name="about_card_title" msgid="2920942314212825637">"Σχετικά με"</string>
- <string name="send_message" msgid="8938418965550543196">"Αποστολή μηνύματος"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Δημιουργία προσωπικού αντιγράφου…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Χθες"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Δημιουργία προσωπικού αντιγράφου..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Αύριο"</string>
<string name="today" msgid="8041090779381781781">"Σήμερα"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Σήμερα στις <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Αύριο στις <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Εκδήλωση χωρίς τίτλο)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Ορισμός"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Ανταλλαγή άμεσων μηνυμάτων (IM)"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Ιστότοπος"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Συμβάν"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Σχέση"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Λογαριασμός"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Όνομα"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Τηλέφωνο"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Φωτογραφία"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Κάντε κλικ για επέκταση της επεξεργασίας επαφών."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Κάντε κλικ για σύμπτυξη της επεξεργασίας επαφών."</string>
<string name="content_description_directions" msgid="2686791825798189335">"οδηγίες προς την τοποθεσία"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"πρόσφατο sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. κάντε κλικ για απάντηση"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"πρόσφατο sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. κάντε κλικ για απάντηση"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"εισερχόμενες"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"εξερχόμενες"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"αναπάντητες"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"πρόσφατη κλήση. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. κάντε κλικ για επιστροφή της κλήσης"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"πρόσφατη κλήση. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. κάντε κλικ για επιστροφή της κλήσης"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Εσείς: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Το Hangouts λειτουργεί καλύτερα όταν εισάγετε το αναγνωριστικό Hangouts του ατόμου στο πεδίο ηλεκτρονικού ταχυδρομείου ή τηλεφώνου."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Περισσότερα πεδία"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Αλλαγή φωτογραφίας"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Αποτυχία ανοίγματος προγράμματος επεξεργασίας."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Αποθήκευση σε"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Γίνεται αποθήκευση στο λογαριασμό <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Πατήστε δύο φορές για να επιλέξετε διαφορετικό λογαριασμό."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Συνδεδεμένες επαφές (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Συνδεδεμένη επαφή</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> συνδεδεμένες επαφές"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Περισσότερα πεδία"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Αλλαγή φωτογραφίας επαφής"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Προσθήκη φωτογραφίας επαφής"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Φωτογραφία επαφής"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Αποτυχία ανοίγματος προγράμματος επεξεργασίας."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Αποθήκευση σε"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Τα στοιχεία επαφής από το <xliff:g id="ACCOUNT">%s</xliff:g> δεν είναι επεξεργάσιμα"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ΣΥΝΔΕΣΗ ΕΠΑΦΩΝ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ΑΚΥΡΩΣΗ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> πιθανά διπλότυπα</item>
- <item quantity="one">1 πιθανό διπλότυπο</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> συνδεδεμένες επαφές</item>
- <item quantity="one">1 συνδεδεμένη επαφή</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Αυτή η επαφή"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Πιθανά διπλότυπα"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Αυτές οι επαφές μπορεί να αντιστοιχούν στο ίδιο άτομο. Μπορείτε να τις συνδέσετε σε μία μεμονωμένη επαφή."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Συνδεδεμένες επαφές"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Από τους λογαριασμούς σας"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Λήψη φωτογραφίας"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Όλες οι φωτογραφίες"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Επιλογή φωτογραφίας"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Από <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Διαγραφή <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Διαγραφή <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Διαγραφή <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Δεν επιλέχθηκε φωτογραφία από <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Επιλέχθηκε φωτογραφία από <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Δεν επιλέχθηκε φωτογραφία από άγνωστο λογαριασμό"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Επιλέχθηκε φωτογραφία από άγνωστο λογαριασμό"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Η λίστα επαφών ενημερώνεται ώστε να αντικατοπτρίζει την αλλαγή γλώσσας.\n\nΠεριμένετε..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Προτάσεις"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Νέο"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Άνοιγμα συρταριού πλοήγησης"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Κλείσιμο συρταριού πλοήγησης"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Ετικέτα \"<xliff:g id="LABEL_NAME">%s</xliff:g>\""</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Ετικέτες"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Λογαριασμοί"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Δείτε το ιστορικό σας μαζί"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Συμβάντα και μηνύματα"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Συμβάντα"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Μηνύματα"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Προτάσεις"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Διατηρήστε τις επαφές σας οργανωμένες και χρήσιμες"</string>
+ <string name="undo" msgid="1425165101664071422">"Αναίρεση"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Κλήση προς <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Κλήση οικίας"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Κλήση κινητής συσκευής"</string>
+ <string name="call_work" msgid="5328785911463744028">"Κλήση εργασίας"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Κλήση φαξ εργασίας"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Κλήση φαξ οικίας"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Κλήση βομβητή"</string>
+ <string name="call_other" msgid="8563753966926932052">"Κλήση"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Κλήση αριθμού επανάκλησης"</string>
+ <string name="call_car" msgid="3280537320306436445">"Κλήση τηλεφώνου αυτοκινήτου"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Κλήση κύριας εταιρικής γραμμής"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Κλήση ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Κλήση κύριου αριθμού"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Κλήση φαξ"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Κλήση πομπού"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Κλήση σε τηλέτυπο"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Κλήση σε τηλέφωνο TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Κλήση κινητού τηλεφώνου εργασίας"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Κλήση βομβητή εργασίας"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Κλήση προς <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Κλήση MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Κλήση)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Αποστολή SMS προς <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Αποστολή μηνύματος κειμένου προς οικία"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Αποστολή μηνύματος κειμένου προς κινητή συσκευή"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Αποστολή μηνύματος κειμένου προς εργασία"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Αποστολή μηνύματος κειμένου προς φαξ εργασίας"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Αποστολή μηνύματος κειμένου προς φαξ οικίας"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Αποστολή μηνύματος κειμένου προς βομβητή"</string>
+ <string name="sms_other" msgid="806127844607642331">"Αποστολή μηνύματος κειμένου"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Αποστολή μηνύματος κειμένου σε αριθμό επανάκλησης"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Αποστολή μηνύματος κειμένου προς τηλέφωνο αυτοκινήτου"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Αποστολή μηνύματος κειμένου προς κύρια εταιρική γραμμή"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Αποστολή κειμένου σε ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Αποστολή μηνύματος κειμένου προς κύριο αριθμό"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Αποστολή μηνύματος κειμένου σε φαξ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Αποστολή μηνύματος κειμένου προς πομπό"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Αποστολή μηνύματος κειμένου σε τηλέτυπο"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Αποστολή μηνύματος κειμένου προς τηλέφωνο TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Αποστολή μηνύματος κειμένου προς κινητό τηλέφωνο εργασίας"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Αποστολή μηνύματος κειμένου προς βομβητή εργασίας"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Αποστολή μηνύματος κειμένου προς <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Αποστολή μηνύματος κειμένου ως MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Μήνυμα)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Πραγματοποίηση βιντεοκλήσης"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Διαγραφή ατόμων με συχνή επικοινωνία;"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Θα διαγράψετε τη λίστα συχνών επαφών στις εφαρμογές Επαφές και Τηλέφωνο και θα επιβάλλετε στις εφαρμογές ηλεκτρονικού ταχυδρομείου να μάθουν τις προτιμήσεις διευθύνσεών σας από την αρχή."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Διαγρ. ατόμων με συχνή επικοινωνία…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Διαθέσιμος"</string>
+ <string name="status_away" msgid="1838861100379804730">"Απουσιάζω"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Απασχολημένος"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Άλλο"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Κατάλογος"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Κατάλογος εργασίας"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Όλες οι επαφές"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Γρήγορη επαφή για <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Χωρίς όνομα)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Επαφές που έχετε συχνή επικοινωνία"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Όλες οι επαφές με αριθμούς τηλεφώνου"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Επαφές προφίλ εργασίας"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Προβολή ενημερώσεων"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Συσκευή"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Όνομα"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Ψευδώνυμο"</string>
+ <string name="name_given" msgid="4280790853455320619">"Όνομα"</string>
+ <string name="name_family" msgid="7466985689626017037">"Επώνυμο"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Πρόθεμα ονόματος"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Πατρώνυμο"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Επίθημα ονόματος"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Όνομα σε φωνητική γραφή"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Φωνητικό όνομα"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Φωνητική γραφή ονόματος πατρός"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Φωνητικό επώνυμο"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Τηλέφωνο"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Διεύθυνση"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Ανταλ.άμεσων μην.(IM)"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Οργανισμός"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Σχέση"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Ειδική ημερομηνία"</string>
+ <string name="sms" msgid="1756857139634224222">"Μήνυμα κειμένου"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Διεύθυνση"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Εταιρεία"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Τίτλος"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Σημειώσεις"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Προσαρμοσμένο"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Ιστότοπος"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Ετικέτες"</string>
+ <string name="email_home" msgid="8573740658148184279">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς οικία"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς κινητή συσκευή"</string>
+ <string name="email_work" msgid="2807430017302722689">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς εργασία"</string>
+ <string name="email_other" msgid="3454004077967657109">"Μήνυμα ηλεκτρονικού ταχυδρομείου"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Οδός"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Πόλη"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Πολιτεία"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Ταχυδρομικός κώδικας"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Χώρα"</string>
+ <string name="map_home" msgid="1243547733423343982">"Προβολή διεύθυνσης οικίας"</string>
+ <string name="map_work" msgid="1360474076921878088">"Προβολή διεύθυνσης εργασίας"</string>
+ <string name="map_other" msgid="3817820803587012641">"Προβολή διεύθυνσης"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Προβολή διεύθυνσης <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Συζήτηση μέσω AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Συζήτηση μέσω Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Συζήτηση μέσω Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Συζήτηση μέσω Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Συζήτηση μέσω QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Συζήτηση μέσω Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Συζήτηση μέσω ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Συζήτηση μέσω Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Συζήτηση"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"διαγραφή"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Εμφάνιση περισσότερων πεδίων ονόματος"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Σύμπτυξη πεδίων ονομάτων"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Εμφάνιση περισσότερων πεδίων φωνητικού ονόματος"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Σύμπτυξη πεδίων φωνητικού ονόματος"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Ανάπτυξη"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Σύμπτυξη"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Αναπτύχθηκε"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Συμπτύχθηκε"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Όλες οι επαφές"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Με αστέρι"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Προσαρμογή"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Επαφή"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Όλες οι άλλες επαφές"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Όλες οι επαφές"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Κατάργηση ομάδας συγχρονισμού"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Προσθήκη ομάδας συγχρονισμού"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Περισσότερες ομάδες…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Η κατάργηση της ομάδας \"<xliff:g id="GROUP">%s</xliff:g>\" από τον συγχρονισμό θα καταργήσει επίσης και τις επαφές χωρίς ομαδοποίηση από τον συγχρονισμό."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Αποθήκευση επιλογών προβολής…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Προσαρμοσμένη προβολή"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Αποθήκευση επαφών που εισήχθησαν σε:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Κάρτα SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d επαφές</item>
+ <item quantity="one">1 επαφή</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> επαφές • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> επαφή • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Αρχείο .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Δεν υπάρχει τίποτα προς εισαγωγή"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Εισαγωγή επαφών από vCard;"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Να ακυρωθεί η εισαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g>;"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Να ακυρωθεί η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g>;"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Αδ.ακύρ.εισαγ./εξαγ.vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Άγνωστο σφάλμα."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Δεν ήταν δυνατό το άνοιγμα του αρχείου \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Δεν ήταν δυνατή η έναρξη του εξαγωγέα: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Απενεργοποιήσατε μια απαιτούμενη άδεια."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Προέκυψε κάποιο σφάλμα κατά την εξαγωγή: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Σφάλμα I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Δεν υπάρχει αρκετή μνήμη. Το αρχείο ενδέχεται να είναι πάρα πολύ μεγάλο."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Η μορφή δεν υποστηρίζεται."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g> ολοκληρώθηκε."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Ολοκλήρωση εξαγωγής επαφών."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Ολοκληρώθηκε η εξαγωγή των επαφών. Κάντε κλικ στην ειδοποίηση για να μοιραστείτε επαφές."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Πατήστε για να μοιραστείτε επαφές."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g> ακυρώθηκε."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Εξαγωγή δεδομένων επαφών"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Γίνεται εξαγωγή των δεδομένων επαφών."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Δεν ήταν δυνατή η λήψη πληροφοριών βάσης δεδομένων."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Δεν υπάρχουν επαφές προς εξαγωγή."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Η έναρξη της vCard δεν ήταν σωστή."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Αδυναμία εξαγωγής"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Δεν έγινε εξαγωγή των δεδομένων επαφής.\nΑιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Εισαγωγή <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Αδύν. ανάγν. δεδομ. vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Η εισαγωγή vCard ολοκληρώθηκε <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Η εισαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g> ακυρώθηκε"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Η <xliff:g id="FILENAME">%s</xliff:g> θα εισαχθεί σύντομα."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Η εισαγωγή του αρχείου θα γίνει σύντομα."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Το αίτημα εισαγωγής vCard απορρίφθηκε. Δοκιμάστε ξανά αργότερα."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Σε λίγο θα ξεκινήσει η εξαγωγή επαφών."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Το αίτημα εξαγωγής vCard απορρίφθηκε. Δοκιμάστε ξανά αργότερα."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"επαφή"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Αλλαγή vCard σε τοπικό χώρο προσωρινής αποθήκευσης. Η εισαγωγή θα ξεκινήσει σύντομα."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Δεν ήταν δυνατή η εισαγωγή κάρτας vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Λήψ.επ.μέσω ΕΚΠ"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Προσωρινή αποθήκευση"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Εισαγωγή <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Εξαγωγή σε αρχείο .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ταξινόμηση κατά"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Φωνητικό όνομα"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Να εμφανίζεται πάντα"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Απόκρυψη, εάν είναι κενό"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Όνομα"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Επώνυμο"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Μορφή ονόματος"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Πρώτα το όνομα"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Πρώτα το επώνυμο"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Λογαριασμοί"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Προεπιλεγμένος λογαριασμός για νέες επαφές"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Τα στοιχεία μου"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Ρυθμίστε το προφίλ σας"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Σχετικά με τις Επαφές"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Κοινοποίηση αγαπημένων επαφών"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Κοινή χρήση όλων των επαφών"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Αποτυχία κοινής χρήσης επαφών."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Εξαγωγή επαφών"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Εισαγωγή επαφών από"</string>
+ <string name="share_error" msgid="948429331673358107">"Δεν είναι δυνατή η κοινή χρήση αυτής της επαφής."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Δεν υπάρχουν επαφές για κοινοποίηση."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Επαφές για εμφάνιση"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Επαφές για προβολή"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Προσαρμογή προβολής"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Αποθήκευση"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Αναζήτηση στις επαφές"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Αγαπ."</string>
+ <string name="menu_import" msgid="6107961135813836467">"Εισαγωγή"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Εξαγωγή"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Αποκλεισμένοι αριθμοί"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"μέσω <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> μέσω <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"τέλος αναζήτησης"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Διαγραφή αναζητήσεων"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Λογαριασμός"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Χρήση πάντα για κλήσεις"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Κλήση με σημείωση"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Πληκτρολογήστε μια σημείωση για αποστολή με την κλήση…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ΑΠΟΣΤΟΛΗ ΚΑΙ ΚΛΗΣΗ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Έκδοση build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Άδειες λογισμικού ανοικτού κώδικα"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Λεπτομέρειες άδειας λογισμικού ανοικτού κώδικα"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Πολιτική απορρήτου"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Όροι παροχής υπηρεσιών"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Άδειες λογισμικού ανοικτού κώδικα"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Αποτυχία ανοίγματος url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ελέγχθηκε"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> δεν ελέγχθηκε"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Πραγματοποίηση βιντεοκλήσης"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Πλήκτρο Delete"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Αποσιωπητικά"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> δ."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> λ <xliff:g id="SECONDS">%2$s</xliff:g> δ."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ώ. <xliff:g id="MINUTES_1">%2$s</xliff:g> λ. <xliff:g id="SECONDS">%3$s</xliff:g> δ."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Η συντόμευση απενεργοποιήθηκε"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Η επαφή καταργήθηκε"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Εισαγωγή"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Επιλογή επαφών"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Δεν υπάρχουν επαφές στην κάρτα SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Η επαφή υπάρχει ήδη στη λίστα σας"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Έγινε εισαγωγή <xliff:g id="COUNT">%d</xliff:g> επαφών από τη SIM</item>
+ <item quantity="one">Έγινε εισαγωγή 1 επαφής από τη SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Απέτυχε η εισαγωγή των επαφών από τη SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Εισαγωγή από SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Ακύρωση"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Ο αυτόματος συγχρονισμός είναι ανενεργός. Πατήστε για να τον ενεργοποιήσετε."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Παράβλεψη"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Ο συγχρονισμός λογαριασμού είναι ανενεργός. Πατήστε για να τον ενεργοποιήσετε."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Ενεργοποίηση αυτόματου συγχρονισμού;"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Θα γίνει συγχρονισμός όλων των αλλαγών που πραγματοποιείτε σε όλες τις εφαρμογές και τους λογαριασμούς, όχι μόνο στις Επαφές Google, τόσο στον ιστό όσο και στις συσκευές σας."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ενεργοποίηση"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Δεν υπάρχει σύνδεση"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Εμφάνιση περισσότερων"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Ολοκληρώθηκε εισαγωγή από κάρτα SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Αποτυχία εισαγωγής"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Δεν ήταν δυνατή η εισαγωγή επαφών από την κάρτα SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Εισαγωγή από SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Ειδοποιήσεις"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 787459a6f..d31ce21d0 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"View contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edit Contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direct dial"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direct message"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choose a contact short cut"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choose a number to call"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choose a number to message"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Starred"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequent"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favourites"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edit contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Create contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edit group"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Create group"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"About"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
<string name="searchHint" msgid="8482945356247760701">"Search contacts"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"View contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Add to favourites"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remove from favourites"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removed from favourites"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Create shortcut"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Delete"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Add Contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Delete label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Add contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Save and Unlink"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Would you like to save the changes that you already made and link with the contact selected?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Save and Link"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linking"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Unlinking"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Link"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"View linked contacts"</string>
<string name="menu_save" msgid="1727844363591825909">"Save"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link with <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all contacts"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> and <xliff:g id="NAME_1">%2$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… deleted"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contacts deleted</item>
<item quantity="one">Contact deleted</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Hide"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"The contact to be deleted has details from multiple accounts. Details from read-only accounts will be hidden, not deleted."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"You need at least two contacts selected to perform a link."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Link selected contacts?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Link"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Route to voicemail"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Don\'t route to voicemail"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"This contact is read-only. It can\'t be deleted, but you can hide it."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Hide contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Read-only accounts in this contact will be hidden, not deleted."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Delete this contact?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Delete selected contacts?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Note"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No pictures are available on the tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No pictures are available on the phone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"There are no pictures available on the device."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contact photo"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom label name"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send calls directly to voicemail"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remove photo"</string>
- <string name="noContacts" msgid="4955659076981974652">"No contacts"</string>
- <string name="noGroups" msgid="8614664663561385253">"No groups."</string>
- <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"No people in this group."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"To add some, edit the group."</string>
- <string name="savingContact" msgid="4075751076741924939">"Saving contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Your contacts list is empty"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> saved"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
- <item quantity="one">1 contact with phone number</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Some contacts do not have email addresses."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Some contacts do not have phone numbers."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Send email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"All"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
- <string name="callBack" msgid="5498224409038809224">"Call back"</string>
- <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
- <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No app was found to handle this action."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Click to return to previous screen"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Add phone number"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Add email"</string>
<string name="missing_app" msgid="1466111003546611387">"No app was found to handle this action."</string>
<string name="menu_share" msgid="943789700636542260">"Share"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Add to contacts"</string>
- <string name="share_via" msgid="563121028023030093">"Share contact via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Create group under account"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Add"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Share contacts via</item>
+ <item quantity="one">Share contact via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Choose account"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Create label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Rename label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Label name"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</string>
<string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
- <string name="connections" msgid="8098440723172028350">"Connections"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Add connection"</string>
- <string name="recent" msgid="2659189233141493004">"Recent"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Recent updates"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Not editable from this app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Not editable on this device"</string>
<string name="take_photo" msgid="7496128293167402354">"Take photo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Take new photo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Choose photo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Select all"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Unselect all"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Add new"</string>
- <string name="add_organization" msgid="7311893231158291197">"Add organisation"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Group name"</string>
- <string name="change_photo" msgid="8530597935483526383">"Change"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
- <string name="description_star" msgid="2605854427360036550">"favourite"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link the current contact with the selected contact?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Add to My Contacts"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
<string name="menu_settings" msgid="377929915873428211">"Settings"</string>
<string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Add to contacts"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Add to contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Close"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Include year"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Loading…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Create a new contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Add account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
- <item quantity="one">1 group</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Delete the label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Type contact name before linking with another."</string>
<string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Set default"</string>
<string name="clear_default" msgid="7193185801596678067">"Clear default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copied"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Discard your changes and quit editing?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Discard changes?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Keep editing"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Set up my profile"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Type person\'s name"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Group\'s name"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</string>
<string name="local_profile_title" msgid="2021416826991393684">"My local profile"</string>
<string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profile"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Displaying all contacts"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Keep your contacts safe even if you lose your phone: synchronise with an online service."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Add an account"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Your new contact won\'t be backed up. Add an account that backs up contacts online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Add new contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Create new contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit contact"</string>
- <string name="keep_local" msgid="1258761699192993322">"Keep locally"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"View only"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Choose contact to edit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Linked contacts"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Add"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Unlink"</string>
<string name="add_account" msgid="8201790677994503186">"Add account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Add new account"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Export database files"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"add new contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Create new contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"See more"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"See all"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
<string name="about_card_title" msgid="2920942314212825637">"About"</string>
- <string name="send_message" msgid="8938418965550543196">"Send message"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creating a personal copy..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Yesterday"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creating a personal copy…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Tomorrow"</string>
<string name="today" msgid="8041090779381781781">"Today"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Today at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Tomorrow at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Untitled event)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Set"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Event"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
<string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to respond"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to respond"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"outgoing"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missed"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to call back"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"More fields"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Linked contact</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Contact photo"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
- <item quantity="one">1 Possible duplicate</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
- <item quantity="one">1 linked contact</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Linked contacts"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Take a photo"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"All photos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Contact list is being updated to reflect the change of language.\n\nPlease wait..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Close navigation drawer"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> label"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Labels"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Accounts"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"See your history together"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Events and messages"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Events"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messages"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggestions"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Keep your contacts organised and useful"</string>
+ <string name="undo" msgid="1425165101664071422">"Undo"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Call home"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Call mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Call work"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Call work fax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Call home fax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Call pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Call"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Call callback"</string>
+ <string name="call_car" msgid="3280537320306436445">"Call car"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Call company main"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Call ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Call main"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Call fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Call radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Call telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Call TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Call work mobile"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Call work pager"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Call MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Call)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Text <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Text home"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Text mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Text work"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Text work fax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Text home fax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Text pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Text"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Text callback"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Text car"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Text company main"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Text ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Text main"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Text fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Text radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Text telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Text TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Text work mobile"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Text work pager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Text <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Text MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Message)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Make video call"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Clear frequently contacted?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"You\'ll clear the frequently contacted list in the Contacts and Phone apps, and force email apps to learn your addressing preferences from scratch."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Clearing frequently contacted…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Available"</string>
+ <string name="status_away" msgid="1838861100379804730">"Away"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Busy"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Other"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Device"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
+ <string name="name_given" msgid="4280790853455320619">"First name"</string>
+ <string name="name_family" msgid="7466985689626017037">"Surname"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Middle name"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Name suffix"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Phonetic name"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Phonetic first name"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Phonetic middle name"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Phonetic surname"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Phone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Address"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relationship"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Special date"</string>
+ <string name="sms" msgid="1756857139634224222">"Text message"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Address"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Company"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Title"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Custom"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Labels"</string>
+ <string name="email_home" msgid="8573740658148184279">"Email home"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Email mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Email work"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Street"</string>
+ <string name="postal_city" msgid="6597491300084895548">"City"</string>
+ <string name="postal_region" msgid="6045263193478437672">"County"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Country"</string>
+ <string name="map_home" msgid="1243547733423343982">"View home address"</string>
+ <string name="map_work" msgid="1360474076921878088">"View work address"</string>
+ <string name="map_other" msgid="3817820803587012641">"View address"</string>
+ <string name="map_custom" msgid="8761800628069473526">"View <xliff:g id="CUSTOM_LABEL">%s</xliff:g> address"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat using AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat using Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat using Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat using Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat using QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat using Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat using ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Show more name fields"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Show more phonetic name fields"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"All other contacts"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"All contacts"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remove sync group"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Add sync group"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contacts</item>
+ <item quantity="one">1 contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf file"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nothing to import"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Import contacts from vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancel import of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tap to share contacts."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exporting <xliff:g id="FILENAME">%s</xliff:g> cancelled."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Export to .vcf file"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Phonetic name"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Always show"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Hide if empty"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Surname"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Name format"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"First name first"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Surname first"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Accounts"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Default account for new contacts"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
+ <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Export contacts"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Import contacts from"</string>
+ <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Import"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Export"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privacy Policy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Terms of Service"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open-source licences"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Failed to open the URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> checked"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> not checked"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Place video call"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Select contacts"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No contacts on your SIM card"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Contact already exists on your list"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM contacts imported</item>
+ <item quantity="one">1 SIM contact imported</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import from SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancel"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Dismiss"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Account sync is off. Tap to turn on."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Turn on auto-sync?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Changes made to all apps and accounts, not just Google Contacts, will be kept up to date between the web and your devices."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Turn on"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifications"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 787459a6f..d31ce21d0 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"View contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edit Contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direct dial"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direct message"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choose a contact short cut"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choose a number to call"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choose a number to message"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Starred"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequent"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favourites"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edit contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Create contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edit group"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Create group"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"About"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
<string name="searchHint" msgid="8482945356247760701">"Search contacts"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"View contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Add to favourites"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remove from favourites"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removed from favourites"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Create shortcut"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Delete"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Add Contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Delete label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Add contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Save and Unlink"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Would you like to save the changes that you already made and link with the contact selected?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Save and Link"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linking"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Unlinking"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Link"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"View linked contacts"</string>
<string name="menu_save" msgid="1727844363591825909">"Save"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link with <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all contacts"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> and <xliff:g id="NAME_1">%2$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… deleted"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contacts deleted</item>
<item quantity="one">Contact deleted</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Hide"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"The contact to be deleted has details from multiple accounts. Details from read-only accounts will be hidden, not deleted."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"You need at least two contacts selected to perform a link."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Link selected contacts?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Link"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Route to voicemail"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Don\'t route to voicemail"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"This contact is read-only. It can\'t be deleted, but you can hide it."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Hide contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Read-only accounts in this contact will be hidden, not deleted."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Delete this contact?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Delete selected contacts?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Note"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No pictures are available on the tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No pictures are available on the phone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"There are no pictures available on the device."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contact photo"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom label name"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send calls directly to voicemail"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remove photo"</string>
- <string name="noContacts" msgid="4955659076981974652">"No contacts"</string>
- <string name="noGroups" msgid="8614664663561385253">"No groups."</string>
- <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"No people in this group."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"To add some, edit the group."</string>
- <string name="savingContact" msgid="4075751076741924939">"Saving contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Your contacts list is empty"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> saved"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
- <item quantity="one">1 contact with phone number</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Some contacts do not have email addresses."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Some contacts do not have phone numbers."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Send email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"All"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
- <string name="callBack" msgid="5498224409038809224">"Call back"</string>
- <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
- <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No app was found to handle this action."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Click to return to previous screen"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Add phone number"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Add email"</string>
<string name="missing_app" msgid="1466111003546611387">"No app was found to handle this action."</string>
<string name="menu_share" msgid="943789700636542260">"Share"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Add to contacts"</string>
- <string name="share_via" msgid="563121028023030093">"Share contact via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Create group under account"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Add"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Share contacts via</item>
+ <item quantity="one">Share contact via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Choose account"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Create label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Rename label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Label name"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</string>
<string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
- <string name="connections" msgid="8098440723172028350">"Connections"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Add connection"</string>
- <string name="recent" msgid="2659189233141493004">"Recent"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Recent updates"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Not editable from this app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Not editable on this device"</string>
<string name="take_photo" msgid="7496128293167402354">"Take photo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Take new photo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Choose photo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Select all"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Unselect all"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Add new"</string>
- <string name="add_organization" msgid="7311893231158291197">"Add organisation"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Group name"</string>
- <string name="change_photo" msgid="8530597935483526383">"Change"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
- <string name="description_star" msgid="2605854427360036550">"favourite"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link the current contact with the selected contact?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Add to My Contacts"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
<string name="menu_settings" msgid="377929915873428211">"Settings"</string>
<string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Add to contacts"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Add to contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Close"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Include year"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Loading…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Create a new contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Add account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
- <item quantity="one">1 group</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Delete the label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Type contact name before linking with another."</string>
<string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Set default"</string>
<string name="clear_default" msgid="7193185801596678067">"Clear default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copied"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Discard your changes and quit editing?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Discard changes?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Keep editing"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Set up my profile"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Type person\'s name"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Group\'s name"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</string>
<string name="local_profile_title" msgid="2021416826991393684">"My local profile"</string>
<string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profile"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Displaying all contacts"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Keep your contacts safe even if you lose your phone: synchronise with an online service."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Add an account"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Your new contact won\'t be backed up. Add an account that backs up contacts online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Add new contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Create new contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit contact"</string>
- <string name="keep_local" msgid="1258761699192993322">"Keep locally"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"View only"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Choose contact to edit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Linked contacts"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Add"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Unlink"</string>
<string name="add_account" msgid="8201790677994503186">"Add account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Add new account"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Export database files"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"add new contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Create new contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"See more"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"See all"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
<string name="about_card_title" msgid="2920942314212825637">"About"</string>
- <string name="send_message" msgid="8938418965550543196">"Send message"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creating a personal copy..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Yesterday"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creating a personal copy…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Tomorrow"</string>
<string name="today" msgid="8041090779381781781">"Today"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Today at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Tomorrow at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Untitled event)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Set"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Event"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
<string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to respond"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to respond"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"outgoing"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missed"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to call back"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"More fields"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Linked contact</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Contact photo"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
- <item quantity="one">1 Possible duplicate</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
- <item quantity="one">1 linked contact</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Linked contacts"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Take a photo"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"All photos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Contact list is being updated to reflect the change of language.\n\nPlease wait..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Close navigation drawer"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> label"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Labels"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Accounts"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"See your history together"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Events and messages"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Events"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messages"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggestions"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Keep your contacts organised and useful"</string>
+ <string name="undo" msgid="1425165101664071422">"Undo"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Call home"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Call mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Call work"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Call work fax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Call home fax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Call pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Call"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Call callback"</string>
+ <string name="call_car" msgid="3280537320306436445">"Call car"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Call company main"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Call ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Call main"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Call fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Call radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Call telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Call TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Call work mobile"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Call work pager"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Call MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Call)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Text <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Text home"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Text mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Text work"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Text work fax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Text home fax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Text pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Text"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Text callback"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Text car"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Text company main"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Text ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Text main"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Text fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Text radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Text telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Text TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Text work mobile"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Text work pager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Text <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Text MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Message)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Make video call"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Clear frequently contacted?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"You\'ll clear the frequently contacted list in the Contacts and Phone apps, and force email apps to learn your addressing preferences from scratch."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Clearing frequently contacted…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Available"</string>
+ <string name="status_away" msgid="1838861100379804730">"Away"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Busy"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Other"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Device"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
+ <string name="name_given" msgid="4280790853455320619">"First name"</string>
+ <string name="name_family" msgid="7466985689626017037">"Surname"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Middle name"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Name suffix"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Phonetic name"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Phonetic first name"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Phonetic middle name"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Phonetic surname"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Phone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Address"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relationship"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Special date"</string>
+ <string name="sms" msgid="1756857139634224222">"Text message"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Address"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Company"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Title"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Custom"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Labels"</string>
+ <string name="email_home" msgid="8573740658148184279">"Email home"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Email mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Email work"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Street"</string>
+ <string name="postal_city" msgid="6597491300084895548">"City"</string>
+ <string name="postal_region" msgid="6045263193478437672">"County"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Country"</string>
+ <string name="map_home" msgid="1243547733423343982">"View home address"</string>
+ <string name="map_work" msgid="1360474076921878088">"View work address"</string>
+ <string name="map_other" msgid="3817820803587012641">"View address"</string>
+ <string name="map_custom" msgid="8761800628069473526">"View <xliff:g id="CUSTOM_LABEL">%s</xliff:g> address"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat using AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat using Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat using Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat using Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat using QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat using Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat using ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Show more name fields"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Show more phonetic name fields"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"All other contacts"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"All contacts"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remove sync group"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Add sync group"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contacts</item>
+ <item quantity="one">1 contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf file"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nothing to import"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Import contacts from vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancel import of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tap to share contacts."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exporting <xliff:g id="FILENAME">%s</xliff:g> cancelled."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Export to .vcf file"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Phonetic name"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Always show"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Hide if empty"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Surname"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Name format"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"First name first"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Surname first"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Accounts"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Default account for new contacts"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
+ <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Export contacts"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Import contacts from"</string>
+ <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Import"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Export"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privacy Policy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Terms of Service"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open-source licences"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Failed to open the URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> checked"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> not checked"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Place video call"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Select contacts"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No contacts on your SIM card"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Contact already exists on your list"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM contacts imported</item>
+ <item quantity="one">1 SIM contact imported</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import from SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancel"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Dismiss"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Account sync is off. Tap to turn on."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Turn on auto-sync?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Changes made to all apps and accounts, not just Google Contacts, will be kept up to date between the web and your devices."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Turn on"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifications"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 787459a6f..d31ce21d0 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"View contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edit Contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direct dial"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direct message"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choose a contact short cut"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choose a number to call"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choose a number to message"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Starred"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequent"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favourites"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edit contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Create contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edit group"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Create group"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"About"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
<string name="searchHint" msgid="8482945356247760701">"Search contacts"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"View contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Add to favourites"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remove from favourites"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removed from favourites"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Delete"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Change photo"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Place on Home screen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Create shortcut"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Delete"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Add Contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Add Group"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Delete label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Add contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Save and Unlink"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Would you like to save the changes that you already made and link with the contact selected?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Save and Link"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linking"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Unlinking"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Link"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"View linked contacts"</string>
<string name="menu_save" msgid="1727844363591825909">"Save"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link with <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Show all contacts"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Suggested Contacts"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"All contacts"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> and <xliff:g id="NAME_1">%2$s</xliff:g> deleted"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… deleted"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contacts deleted</item>
<item quantity="one">Contact deleted</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Set ringtone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"All calls to voicemail"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Hide"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"The contact to be deleted has details from multiple accounts. Details from read-only accounts will be hidden, not deleted."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"You need at least two contacts selected to perform a link."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Link selected contacts?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Link"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Route to voicemail"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Don\'t route to voicemail"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"This contact is read-only. It can\'t be deleted, but you can hide it."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Hide contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Read-only accounts in this contact will be hidden, not deleted."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Delete this contact?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Delete selected contacts?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Contacts from your read-only accounts cannot be deleted, but they can be hidden."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Note"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No pictures are available on the tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No pictures are available on the phone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"There are no pictures available on the device."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contact photo"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom label name"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send calls directly to voicemail"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remove photo"</string>
- <string name="noContacts" msgid="4955659076981974652">"No contacts"</string>
- <string name="noGroups" msgid="8614664663561385253">"No groups."</string>
- <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"No people in this group."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"To add some, edit the group."</string>
- <string name="savingContact" msgid="4075751076741924939">"Saving contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Your contacts list is empty"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> saved"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact saved"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts unlinked"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Couldn\'t save contact changes."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Couldn\'t unlink contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Couldn\'t link contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error while saving contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Couldn\'t save contact photo changes."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Group saved."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Couldn\'t save group changes."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts with phone numbers</item>
- <item quantity="one">1 contact with phone number</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No contacts with phone numbers"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Couldn\'t save contact changes"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Couldn\'t unlink contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Couldn\'t link contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label updated"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removed from label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Added to label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Couldn\'t save label changes"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"That label already exists"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Some contacts do not have email addresses."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Some contacts do not have phone numbers."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Send email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No contacts"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> found</item>
- <item quantity="one">1 found</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"All"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favourites"</string>
- <string name="callBack" msgid="5498224409038809224">"Call back"</string>
- <string name="callAgain" msgid="3197312117049874778">"Call again"</string>
- <string name="returnCall" msgid="8171961914203617813">"Return call"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Add \"<xliff:g id="EMAIL">%s</xliff:g>\" to contacts?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"contact photo"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> of <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Names of your contacts"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No app was found to handle this action."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Click to return to previous screen"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Add phone number"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Add email"</string>
<string name="missing_app" msgid="1466111003546611387">"No app was found to handle this action."</string>
<string name="menu_share" msgid="943789700636542260">"Share"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Add to contacts"</string>
- <string name="share_via" msgid="563121028023030093">"Share contact via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Create group under account"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Add"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Share contacts via</item>
+ <item quantity="one">Share contact via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Choose account"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Create label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Rename label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Label name"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</string>
<string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
- <string name="connections" msgid="8098440723172028350">"Connections"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Add connection"</string>
- <string name="recent" msgid="2659189233141493004">"Recent"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Recent updates"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Not editable from this app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Not editable on this device"</string>
<string name="take_photo" msgid="7496128293167402354">"Take photo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Take new photo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Choose photo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Select new photo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Contact list is being updated."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Searching…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Show selected"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Show all"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Select all"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Unselect all"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Add new"</string>
- <string name="add_organization" msgid="7311893231158291197">"Add organisation"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Group name"</string>
- <string name="change_photo" msgid="8530597935483526383">"Change"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primary photo"</string>
- <string name="description_star" msgid="2605854427360036550">"favourite"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link the current contact with the selected contact?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Switch to editing the selected contact? Information that you\'ve entered so far will be copied."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copy to My Contacts"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Add to My Contacts"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Customised"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Settings"</string>
<string name="menu_settings" msgid="377929915873428211">"Settings"</string>
<string name="menu_help" msgid="1680178646764069976">"Help &amp; feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Display options"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Phone number"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Add to contacts"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Add to contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Close"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Include year"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Loading…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Create a new contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Add account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import contacts"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Create new group"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Create new group"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groups</item>
- <item quantity="one">1 group</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Delete the group \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> people from <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person from <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> people</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Delete the label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Contacts themselves will not be deleted.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Type contact name before linking with another."</string>
<string name="copy_text" msgid="3257145021583508761">"Copy to clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Set default"</string>
<string name="clear_default" msgid="7193185801596678067">"Clear default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copied"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Discard your changes and quit editing?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Discard changes?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Keep editing"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Set up my profile"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Type person\'s name"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Group\'s name"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</string>
<string name="local_profile_title" msgid="2021416826991393684">"My local profile"</string>
<string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profile"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Displaying all contacts"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Keep your contacts safe even if you lose your phone: synchronise with an online service."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Add an account"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Your new contact won\'t be backed up. Add an account that backs up contacts online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Add new contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Create new contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit contact"</string>
- <string name="keep_local" msgid="1258761699192993322">"Keep locally"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"View only"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Choose contact to edit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Linked contacts"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Add"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Unlink"</string>
<string name="add_account" msgid="8201790677994503186">"Add account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Add new account"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Export database files"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"add new contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Create new contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"See more"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"See all"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
<string name="about_card_title" msgid="2920942314212825637">"About"</string>
- <string name="send_message" msgid="8938418965550543196">"Send message"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creating a personal copy..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Yesterday"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creating a personal copy…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Tomorrow"</string>
<string name="today" msgid="8041090779381781781">"Today"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Today at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Tomorrow at <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Untitled event)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Set"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Event"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Phone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Click to expand contact editor."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Click to collapse contact editor."</string>
<string name="content_description_directions" msgid="2686791825798189335">"directions to location"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to respond"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to respond"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"outgoing"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missed"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. click to call back"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. click to call back"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"You: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"More fields"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Change photo"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Failed to open editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saving to"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to pick a different account."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Linked contact</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Contact photo"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
- <item quantity="one">1 Possible duplicate</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
- <item quantity="one">1 linked contact</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Linked contacts"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Take a photo"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"All photos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Contact list is being updated to reflect the change of language.\n\nPlease wait..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Close navigation drawer"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> label"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Labels"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Accounts"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"See your history together"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Events and messages"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Events"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messages"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggestions"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Keep your contacts organised and useful"</string>
+ <string name="undo" msgid="1425165101664071422">"Undo"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Call home"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Call mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Call work"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Call work fax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Call home fax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Call pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Call"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Call callback"</string>
+ <string name="call_car" msgid="3280537320306436445">"Call car"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Call company main"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Call ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Call main"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Call fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Call radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Call telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Call TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Call work mobile"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Call work pager"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Call <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Call MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Call)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Text <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Text home"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Text mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Text work"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Text work fax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Text home fax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Text pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Text"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Text callback"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Text car"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Text company main"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Text ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Text main"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Text fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Text radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Text telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Text TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Text work mobile"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Text work pager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Text <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Text MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Message)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Make video call"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Clear frequently contacted?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"You\'ll clear the frequently contacted list in the Contacts and Phone apps, and force email apps to learn your addressing preferences from scratch."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Clearing frequently contacted…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Available"</string>
+ <string name="status_away" msgid="1838861100379804730">"Away"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Busy"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Other"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Device"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
+ <string name="name_given" msgid="4280790853455320619">"First name"</string>
+ <string name="name_family" msgid="7466985689626017037">"Surname"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Middle name"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Name suffix"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Phonetic name"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Phonetic first name"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Phonetic middle name"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Phonetic surname"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Phone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Address"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relationship"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Special date"</string>
+ <string name="sms" msgid="1756857139634224222">"Text message"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Address"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Company"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Title"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Custom"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Labels"</string>
+ <string name="email_home" msgid="8573740658148184279">"Email home"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Email mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Email work"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Street"</string>
+ <string name="postal_city" msgid="6597491300084895548">"City"</string>
+ <string name="postal_region" msgid="6045263193478437672">"County"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Country"</string>
+ <string name="map_home" msgid="1243547733423343982">"View home address"</string>
+ <string name="map_work" msgid="1360474076921878088">"View work address"</string>
+ <string name="map_other" msgid="3817820803587012641">"View address"</string>
+ <string name="map_custom" msgid="8761800628069473526">"View <xliff:g id="CUSTOM_LABEL">%s</xliff:g> address"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat using AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat using Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat using Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat using Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat using QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat using Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat using ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat using Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"delete"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Show more name fields"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Collapse name fields"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Show more phonetic name fields"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Collapse phonetic name fields"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expand"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Collapse"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expanded"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Collapsed"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"All contacts"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Starred"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Customise"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"All other contacts"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"All contacts"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remove sync group"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Add sync group"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contacts</item>
+ <item quantity="one">1 contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf file"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nothing to import"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Import contacts from vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancel import of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tap to share contacts."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exporting <xliff:g id="FILENAME">%s</xliff:g> cancelled."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Export to .vcf file"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Phonetic name"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Always show"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Hide if empty"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Surname"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Name format"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"First name first"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Surname first"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Accounts"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Default account for new contacts"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
+ <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Export contacts"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Import contacts from"</string>
+ <string name="share_error" msgid="948429331673358107">"This contact cannot be shared."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Import"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Export"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privacy Policy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Terms of Service"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open-source licences"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Failed to open the URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> checked"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> not checked"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Place video call"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Select contacts"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No contacts on your SIM card"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Contact already exists on your list"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM contacts imported</item>
+ <item quantity="one">1 SIM contact imported</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Failed to import SIM contacts"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import from SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancel"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Auto-sync is off. Tap to turn on."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Dismiss"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Account sync is off. Tap to turn on."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Turn on auto-sync?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Changes made to all apps and accounts, not just Google Contacts, will be kept up to date between the web and your devices."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Turn on"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifications"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 95d6f629f..deb32e9c1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contactos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contacto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contacto"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Agregar contacto"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Marcado directo"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaje directo"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Seleccionar acceso directo"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Seleccionar un número para la llamada"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Seleccionar un número para el mensaje"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Elegir contacto"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Agregar al contacto"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Seleccionar un contacto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear contacto nuevo"</string>
- <string name="starredList" msgid="4817256136413959463">"Destacados"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frecuente"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalles de contacto"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contacto"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Crear contacto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Crear grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizaciones"</string>
<string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Agregar a favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de favoritos"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Borrar"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar en pantalla principal"</string>
- <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar texto al contacto"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crear acceso directo"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Borrar"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Agregar contacto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Agregar grupo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Quitar contactos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nombre de la etiqueta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Borrar etiqueta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Agregar contacto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Agregar contactos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Quitar de la etiqueta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"¿Deseas desvincular este contacto en múltiples contactos?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"¿Deseas guardar los cambios que realizaste y desvincular este contacto en múltiples contactos?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Guardar y desvincular"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"¿Deseas guardar los cambios que realizaste y vincular al contacto seleccionado?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Guardar y vincular"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Vinculando"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Desvinculando"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Vincular"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contactos vinculados"</string>
<string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contactos"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona el contacto que quieres vincular con <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Se vinculó a <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Se vincularon los contactos"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Se borró a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Se borró a <xliff:g id="NAME_0">%1$s</xliff:g> y a <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Se borró a <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contactos borrados</item>
<item quantity="one">Contacto borrado</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Llamadas al buzón de voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Los contactos de las cuentas de solo lectura no se pueden borrar, pero pueden ocultarse."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"El contacto que se borrará tiene información de múltiples cuentas. La información de la cuentas de solo lectura se ocultarán, pero no se borrarán."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Debes seleccionar al menos dos contactos para poder vincularlos."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"¿Deseas vincular los contactos seleccionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Vincular"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Dirigir al buzón de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"No dirigir al buzón de voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contacto es de solo lectura. No puedes borrarlo, pero puedes ocultarlo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contacto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Las cuentas de solo lectura de este contacto se ocultarán, no se borrarán."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"¿Deseas borrar este contacto?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"¿Deseas borrar los contactos seleccionados?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Los contactos de las cuentas de solo lectura no se pueden borrar, pero pueden ocultarse."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Borrar este contacto suprimirá la información de múltiples cuentas."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"¿Deseas borrar este contacto?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Borrar"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"El contacto no existe."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Se agregó el contacto a la pantalla principal."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> se agregó a la pantalla principal."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear nuevo contacto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Crear contacto nuevo"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organización"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay imágenes disponibles en el tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hay imágenes disponibles en el dispositivo."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"No hay imágenes disponibles en el dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre personalizado de etiqueta"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al correo de voz"</string>
<string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"No hay contactos"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ningún grupo"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Para crear grupos, necesitas una cuenta."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"No hay contactos en este grupo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para agregar alguno, edita el grupo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Guardando contacto..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Tu lista de contactos está vacía"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No hay contactos con esta etiqueta."</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No hay contactos en esta cuenta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Tu lista de contactos está vacía"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Se guardó a <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desvinculados"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se pudieron guardar los cambios realizados al contacto."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No se pudo desvincular el contacto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"No se pudo vincular el contacto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Se produjo un error al guardar el contacto."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No se pudieron guardar los cambios que se realizaron en la foto de contacto."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"No se pudieron guardar los cambios realizados al grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
- <item quantity="one">1 contacto con número de teléfono</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"No hay contactos con números de dispositivo"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">Se encontraron <xliff:g id="COUNT">%d</xliff:g>.</item>
- <item quantity="one">Se encontró 1.</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"No se pudieron guardar los cambios en el contacto"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No se pudo desvincular el contacto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"No se pudo vincular el contacto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Se produjo un error al guardar el contacto"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se pudieron guardar los cambios en la foto del contacto"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se pudo cargar la etiqueta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Se borró la etiqueta"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Se creó la etiqueta"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"No se puede crear la etiqueta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Se actualizó la etiqueta"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminado de la etiqueta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Agregado a la etiqueta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"No se pudieron guardar los cambios en la etiqueta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esa etiqueta ya existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Algunos contactos no tienen correo electrónico."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Algunos contactos no tienen número de teléfono."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar correo electrónico"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaje"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Elegir contactos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No hay contactos"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">Se encontraron <xliff:g id="COUNT">%d</xliff:g>.</item>
- <item quantity="one">Se encontró 1.</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Volver a llamar"</string>
- <string name="callAgain" msgid="3197312117049874778">"Llamar nuevamente"</string>
- <string name="returnCall" msgid="8171961914203617813">"Regresar llamada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Deseas agregar \"<xliff:g id="EMAIL">%s</xliff:g>\" a los contactos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"más"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No se encontró ninguna aplicación que pueda realizar esta acción."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Haz clic para volver a la pantalla anterior."</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Agregar número de teléfono"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Agregar correo electrónico"</string>
<string name="missing_app" msgid="1466111003546611387">"No se encontró ninguna aplicación que pueda realizar esta acción."</string>
<string name="menu_share" msgid="943789700636542260">"Compartir"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Agregar a contactos"</string>
- <string name="share_via" msgid="563121028023030093">"Compartir un contacto a través de"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Crear un grupo en la cuenta"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Agregar"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Compartir contactos a través de</item>
+ <item quantity="one">Compartir contacto a través de</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Elegir cuenta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Crear etiqueta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Cambiar nombre de etiqueta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nombre de la etiqueta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nombre de etiq."</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat de video"</string>
- <string name="connections" msgid="8098440723172028350">"Conexiones"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Agregar conexión"</string>
- <string name="recent" msgid="2659189233141493004">"Recientes"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Actualiz. recientes"</string>
<string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Cuenta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"No se puede editar desde esta aplicación"</string>
- <string name="group_read_only" msgid="1061762906115697637">"No se puede editar en este dispositivo."</string>
<string name="take_photo" msgid="7496128293167402354">"Tomar foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Tomar nueva foto"</string>
<string name="pick_photo" msgid="2129509985223564942">"Elegir una foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar una foto nueva"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"La lista de contactos se está actualizando."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar los seleccionados"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Agregar nuevo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Agregar organización"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nombre de grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favorito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"¿Deseas vincular el contacto actual con el contacto seleccionado?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Atrás"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Optar por modificar contacto seleccionado? Se copiará la información que ingresaste hasta ahora."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en Mis contactos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Agregar a Mis contactos"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
<string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
<string name="menu_help" msgid="1680178646764069976">"Ayuda y comentarios"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Núm. de tel."</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Agregar a contactos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Agregar al contacto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Cerrar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Incluir el año"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto nuevo"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Agregar cuenta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear grupo nuevo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Crear grupo nuevo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- <item quantity="one">1 grupo</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"¿Deseas borrar el grupo \" <xliff:g id="GROUP_LABEL">%1$s</xliff:g> \"? (No se borrarán los contactos)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Crear nueva…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"¿Quieres quitar la etiqueta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Los contactos en sí no se borrarán)."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Escribe el nombre del contacto antes de vincularlo con otro."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiar en el portapapeles"</string>
<string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
<string name="clear_default" msgid="7193185801596678067">"Eliminar predeterminado"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"¿Deseas descartar los cambios y salir del editor?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"¿Deseas descartar los cambios?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Seguir editando"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar mi perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Escribe el nombre de la persona."</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nombre del grupo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"¿Deseas descartar las personalizaciones?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Buscar contactos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Quitar contactos"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mi perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mi perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrar todos los contactos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén tus contactos a salvo aunque pierdas el dispositivo: sincronízalos con un servicio online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Agregar una cuenta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"No se hará una copia de seguridad del contacto nuevo. ¿Quieres agregar una cuenta para hacer copias de seguridad en línea de los contactos?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Tómate un minuto para agregar una cuenta desde la que se creará una copia de seguridad de tus contactos en Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Se guardarán los contactos nuevos en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Elige una cuenta predeterminada para los contactos nuevos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Agregar contacto"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Crear contacto nuevo"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contacto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Copia local"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Solo lectura"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Selecciona un contacto para editar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contactos vinculados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Agregar"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desvincular"</string>
<string name="add_account" msgid="8201790677994503186">"Agregar una cuenta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Agregar cuenta"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportar archivos de base de datos"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"agregar contacto nuevo"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Crear contacto nuevo"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver más"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver todo"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Reciente"</string>
<string name="about_card_title" msgid="2920942314212825637">"Información"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensaje"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creando una copia personal…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Ayer"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando una copia personal..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Mañana"</string>
<string name="today" msgid="8041090779381781781">"Hoy"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hoy a la hora <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañana a la hora <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento sin título)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Establecer"</string>
<string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Cuenta"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic aquí para expandir el editor de contacto."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic aquí para contraer el editor de contacto."</string>
<string name="content_description_directions" msgid="2686791825798189335">"instrucciones sobre cómo llegar a la ubicación"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS reciente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Haz clic para responder."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS reciente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Haz clic para responder."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrante"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"realizada"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Llamada reciente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Haz clic para devolver la llamada."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Llamada reciente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Haz clic para devolver la llamada."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Tú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mejor si ingresas el identificador de Hangouts de la persona en el campo de correo electrónico o teléfono."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Más campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"No se pudo abrir el editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se guarda en"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualmente los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Presiona dos veces para elegir otra cuenta."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Contactos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Contacto vinculado</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos vinculados"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Más campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar foto de contacto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Agregar foto de contacto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto de contacto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"No se pudo abrir el editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Guardar en"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"No se puede editar la información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTACTOS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">Hay <xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
- <item quantity="one">Hay 1 posible duplicado</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Se vincularon <xliff:g id="COUNT">%d</xliff:g> contactos</item>
- <item quantity="one">Se vinculó 1 contacto</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Es posible que estos contactos sean de la misma persona. Puedes vincularlos como un solo contacto."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contactos vinculados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"De tus cuentas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tomar una foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas las fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Elegir foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Desde <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Borrar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Borrar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Borrar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"No se seleccionó la foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Se seleccionó la foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No se seleccionó la foto de una cuenta desconocida"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Se seleccionó la foto de una cuenta desconocida"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"La lista de contactos se está actualizando para reflejar el cambio de idioma.\n\n Espera."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugerencias"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuevo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel lateral de navegación"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Cerrar panel lateral de navegación"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiqueta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiquetas"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Cuentas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Interacciones con este contacto"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos y mensajes"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensajes"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugerencias"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantén los contactos organizados y útiles"</string>
+ <string name="undo" msgid="1425165101664071422">"Deshacer"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Llamar a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Llamar a casa"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Llamar al celular"</string>
+ <string name="call_work" msgid="5328785911463744028">"Llamar al trabajo"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Llamar al fax del trabajo"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Llamar al fax personal"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Llamar a localizador"</string>
+ <string name="call_other" msgid="8563753966926932052">"Llamar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Llamar a devolución de llamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Llamar al auto"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Llamar empresa principal"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Llamar a ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Llamada principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Llamar a fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Llamar a la radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Llamar a télex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Llamar a TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Llamar al celular del trabajo"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Llamar al localizador del trabajo"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Llamar a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Llamar a MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Llamar)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar SMS a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar texto al hogar"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar texto a celular"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar texto al trabajo"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar texto a fax laboral"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar texto a fax personal"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar texto a localizador"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar texto"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar texto a devolución de llamada"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar texto a auto"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar texto a empresa principal"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN de texto"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Texto principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar texto a radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar texto a télex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar texto a TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar texto al celular del trabajo"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar texto a localizador del trabajo"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar texto a <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar texto MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Enviar mensaje)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Realizar una videollamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"¿Borrar los contactos frecuentes?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Borrarás de las apps Contactos y Teléfono la lista de personas con las que te comunicas frecuentemente. Además, las apps de correo deberán volver a establecer tus preferencias."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Borrando contactos frecuentes…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Otro"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de trabajo"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos los contactos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sin nombre)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactado con frecuencia"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos los contactos con número de teléfono"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos del perfil de trabajo"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizaciones"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apodo"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nombre"</string>
+ <string name="name_family" msgid="7466985689626017037">"Apellido"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefijo del nombre"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Segundo nombre"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Título académico o profesional"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nombre fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nombre fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nombre fonético"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Apellido fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Teléfono"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Correo electrónico"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Dirección"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Mensajería instantánea"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organización"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relación"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Fecha especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensaje de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Dirección"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notas"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Sitio web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiquetas"</string>
+ <string name="email_home" msgid="8573740658148184279">"Correo personal"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Correo celular"</string>
+ <string name="email_work" msgid="2807430017302722689">"Correo laboral"</string>
+ <string name="email_other" msgid="3454004077967657109">"Enviar correo"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar correo electrónico a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Correo"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Dirección postal"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Ciudad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Código POSTAL"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver dirección principal"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver dirección laboral"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver dirección"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver la dirección de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat mediante AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat mediante Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat mediante Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat mediante Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat mediante QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat mediante Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat mediante ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat mediante Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"Eliminar"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar más campos de nombre"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Contraer campos de nombre"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar más campos de nombre fonético"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Contraer campos de nombre fonético"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Contraer"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Contraído"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos los contactos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacado"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacto"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos los demás contactos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos los contactos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Eliminar grupo de sincronización"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Agregar grupo de sincronización"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Más grupos…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"La eliminación de \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronización también eliminará de la sincronización todos los contactos que no estén agrupados."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar los contactos importados en la siguiente ubicación:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Tarjeta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contactos</item>
+ <item quantity="one">1 contacto</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Archivo .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nada para importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"¿Importar los contactos desde una vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"¿Deseas cancelar la importación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Deseas cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No se canceló la impor./expor. de vCard."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Error desconocido"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se pudo abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No se pudo iniciar el exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hay contactos para exportar."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Inhabilitaste un permiso necesario."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Se produjo un error durante la exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria insuficiente (es probable que el archivo sea muy grande)."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"El formato no es compatible."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finalizó la exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finalizó la exportación de contactos."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Se completó la exportación de los contactos. Haz clic en la notificación para compartirlos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Presiona para compartir contactos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Se canceló la exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se están exportando los datos de contacto."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No se pudo obtener la información de la base de datos."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hay contactos para exportar."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"El compositor de la vCard no se inició correctamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"No se pudo exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No se exportaron los datos del contacto.\nMotivo: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No se pudieron leer los datos de vCard."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finalizó la importación de la vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Se canceló la importación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> se importará en breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"El archivo se importará en breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Se rechazó la solicitud de importación de la vCard. Vuelve a intentarlo más tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Los contactos se exportarán en breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Se rechazó la solicitud de exportación de la vCard. Vuelve a intentarlo más tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Almacenando vCard(s) en caché local temporal. La importación comenzará pronto."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"No se pudo importar archivo de vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contac recib NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando en caché"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar al archivo .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nombre fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar siempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar si está vacío"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nombre"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Apellido"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato del nombre"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nombre primero"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Apellido primero"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Cuentas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Cuenta predeterminada para los contactos nuevos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mi información"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configura tu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Acerca de Contactos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"No se pudieron compartir los contactos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contactos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contactos de"</string>
+ <string name="share_error" msgid="948429331673358107">"No es posible compartir este contacto."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos para compartir."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos para mostrar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos para mostrar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Buscar contactos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"a través de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"detener la búsqueda"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Cuenta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Usar siempre para llamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Llamada con una nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Escribe una nota para enviar con la llamada…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR Y LLAMAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versión de compilación"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencias de código abierto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles de la licencia de software de código abierto"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privacidad"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Condiciones del servicio"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licencias de código abierto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"No se pudo abrir la URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> marcada"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> no marcada"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Iniciar una videollamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Borrar"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este acceso directo se inhabilitó"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Se quitó el contacto"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Seleccionar contactos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No hay contactos en la tarjeta SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"El contacto ya está en la lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Se importaron <xliff:g id="COUNT">%d</xliff:g> contactos de la SIM</item>
+ <item quantity="one">Se importó 1 contacto de la SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"No se pudieron importar los contactos de la SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar desde la tarjeta SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La sincronización automática está desactivada. Presiona para activarla."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Descartar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La sincronización de la cuenta está desactivada. Presiona para activarla."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"¿Activar la sincronización automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Los cambios que hagas en todas las apps y cuentas, no solo en los Contactos de Google, se mantendrán actualizados entre la Web y tus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sin conexión"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar más"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Terminó la importación de la tarjeta SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Error al importar"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"No se pudieron importar los contactos de la tarjeta SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando la tarjeta SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificaciones."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ff24df54c..07335dea9 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contactos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contacto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contacto"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Añadir contacto"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Llamada directa"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaje directo"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Elegir acceso directo contacto"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Elegir número para llamar"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Elegir un número para el mensaje"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Elegir contacto"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Añadir al contacto"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Elige un contacto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear nuevo contacto"</string>
- <string name="starredList" msgid="4817256136413959463">"Destacados"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frecuentes"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalles del contacto"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contacto"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Crear contacto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Crear grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Información de"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Actividad"</string>
<string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Añadir a Favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de Favoritos"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Añadir a la pantalla de inicio"</string>
- <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS al contacto"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crear acceso directo"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Eliminar"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Añadir contacto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Añadir grupo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Quitar contactos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nombre de etiqueta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Eliminar etiqueta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Añadir contacto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Añadir contactos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminar de la etiqueta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"¿Desvincular este contacto en varios contactos?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"¿Quieres guardar los cambios que has hecho y desvincular este contacto en varios contactos?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Guardar y desvincular"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"¿Quieres guardar los cambios que has hecho y vincular este contacto con el contacto seleccionado?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Guardar y vincular"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Vinculando"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Desvinculando"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Vincular"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contactos enlazados"</string>
<string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contactos"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona el contacto que quieras vincular con <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos los contactos"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos los contactos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> enlazado"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contactos enlazados"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Se ha eliminado a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Se ha eliminado a <xliff:g id="NAME_0">%1$s</xliff:g> y a <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Se ha eliminado a <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contactos eliminados</item>
<item quantity="one">Contacto eliminado</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Establecer tono"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Al buzón de voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Los contactos de las cuentas de solo lectura no se pueden eliminar, pero se pueden ocultar."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"El contacto que se va a eliminar incluye detalles de varias cuentas. Los detalles de las cuentas de solo lectura se ocultarán, no se eliminarán."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Debes seleccionar al menos dos contactos para enlazarlos."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"¿Vincular contactos seleccionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Vincular"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Redirigir al buzón de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"No redirigir al buzón de voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contacto es de solo lectura. No se puede eliminar, pero sí ocultar."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contacto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Se ocultarán las cuentas de solo lectura de este contacto, pero no se eliminarán."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"¿Eliminar este contacto?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"¿Eliminar contactos seleccionados?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Los contactos de las cuentas de solo lectura no se pueden eliminar, pero se pueden ocultar."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Si se elimina este contacto, se eliminarán detalles de varias cuentas."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"¿Eliminar este contacto?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Este contacto no existe."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contacto añadido a la pantalla inicio."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> añadido a la pantalla de inicio."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear nuevo contacto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Crear nuevo contacto"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organización"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay ninguna imagen disponible en el tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hay ninguna imagen disponible en el teléfono."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"No hay ninguna imagen disponible en el dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre del campo personalizado"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al buzón de voz"</string>
<string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"No hay contactos"</string>
- <string name="noGroups" msgid="8614664663561385253">"No hay grupos"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Para poder crear grupos, necesitas una cuenta."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Este grupo está vacío."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para añadir contactos al grupo, edítalo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Guardando contacto…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"La lista de contactos está vacía"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"No hay ningún contacto con esta etiqueta"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"No hay contactos en esta cuenta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"La lista de contactos está vacía"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Se ha guardado <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desvinculados"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"No se han guardado los cambios del contacto."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"No se ha podido desvincular el contacto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"No se ha podido vincular el contacto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error al guardar contacto."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"No se han podido guardar los cambios de la foto de contacto."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"No se han guardado los cambios del grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con número de teléfono</item>
- <item quantity="one">1 contacto con número de teléfono</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ningún contacto con número de teléfono"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
- <item quantity="one">1 contacto encontrado</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"No se han podido guardar los cambios en el contacto"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"No se ha podido desvincular el contacto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"No se ha podido enlazar el contacto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"No se ha podido guardar el contacto"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se han podido guardar los cambios en la foto del contacto"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se ha podido cargar la etiqueta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiqueta creada"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"No se puede crear la etiqueta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiqueta actualizada"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminado(s) de la etiqueta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Añadido a la etiqueta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"No se han podido guardar los cambios en la etiqueta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esta etiqueta ya existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Algunos contactos no tienen correo electrónico."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Algunos contactos no tienen número de teléfono."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar correo electrónico"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaje"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Seleccionar contactos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"No hay contactos"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
- <item quantity="one">1 contacto encontrado</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Llamar"</string>
- <string name="callAgain" msgid="3197312117049874778">"Volver a llamar"</string>
- <string name="returnCall" msgid="8171961914203617813">"Devolver llamada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Quieres añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"más"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"No se ha detectado ninguna aplicación que pueda hacer esta acción."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Haz clic para volver a la pantalla anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Añadir número de teléfono"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Añadir correo electrónico"</string>
<string name="missing_app" msgid="1466111003546611387">"No se ha detectado ninguna aplicación que pueda hacer esta acción."</string>
<string name="menu_share" msgid="943789700636542260">"Compartir"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Añadir a contactos"</string>
- <string name="share_via" msgid="563121028023030093">"Compartir contacto a través de"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Crear grupo en cuenta"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Añadir"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Compartir contactos a través de</item>
+ <item quantity="one">Compartir contacto a través de</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Seleccionar una cuenta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Crear etiqueta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Cambiar nombre de etiqueta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nombre de etiqueta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nombre etiqueta"</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Conexiones"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Añadir conexión"</string>
- <string name="recent" msgid="2659189233141493004">"Reciente"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Actualizaciones recientes"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Cuenta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"No se puede editar desde la aplicación."</string>
- <string name="group_read_only" msgid="1061762906115697637">"No se puede editar en este dispositivo."</string>
<string name="take_photo" msgid="7496128293167402354">"Hacer una foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Hacer una foto nueva"</string>
<string name="pick_photo" msgid="2129509985223564942">"Elegir foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nueva foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"La lista de contactos se está actualizando."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar seleccionados"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todo"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Añadir nuevo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Añadir organización"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nombre del grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favoritos"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"¿Quieres vincular el contacto actual con el contacto seleccionado?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Atrás"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"¿Quieres editar el contacto seleccionado? Se copiará la información que hayas introducido hasta el momento."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en mis contactos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Añadir a Mis contactos"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizar"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Ajustes"</string>
<string name="menu_settings" msgid="377929915873428211">"Ajustes"</string>
<string name="menu_help" msgid="1680178646764069976">"Ayuda y sugerencias"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opciones de visualización"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Número de teléfono"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Añadir a contactos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Añadir al contacto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Cerrar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Incluir año"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Añadir cuenta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear nuevo grupo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Crear nuevo grupo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- <item quantity="one">1 grupo</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"¿Seguro que quieres eliminar el grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Los contactos no se eliminarán."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Crear…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"¿Seguro que quieres eliminar la etiqueta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Los contactos no se eliminarán."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Para vincular el contacto, escribe el nombre del otro contacto."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiar en el portapapeles"</string>
<string name="set_default" msgid="4417505153468300351">"Establecer como predeterminado"</string>
<string name="clear_default" msgid="7193185801596678067">"Borrar predeterminado"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"¿Descartar los cambios y dejar de editar?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"¿Descartar cambios?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Seguir editando"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar mi perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Escribe el nombre de la persona"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nombre del grupo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"¿Quieres descartar las personalizaciones?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Buscar contactos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Quitar contactos"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mi perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mi perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrando todos los contactos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén tus contactos a salvo aunque pierdas el teléfono: sincronízalos con un servicio online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Añadir una cuenta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"No se hará copia de seguridad del nuevo contacto. ¿Quieres añadir una cuenta para hacer copias de seguridad online de los contactos?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minuto a añadir una cuenta que hará copias de seguridad de tus contactos en Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Los nuevos contactos se guardan en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Selecciona una cuenta predeterminada para los contactos nuevos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Añadir contacto"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Crear contacto"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contacto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Copia local"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Solo lectura"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Seleccionar contacto para editarlo"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contactos enlazados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Añadir"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desvincular"</string>
<string name="add_account" msgid="8201790677994503186">"Añadir cuenta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Añadir cuenta"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportar archivos de base de datos"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"añadir nuevo contacto"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Crear un contacto"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver más"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver todo"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recientes"</string>
<string name="about_card_title" msgid="2920942314212825637">"Información"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensaje"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creando una copia personal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ayer"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando una copia personal..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Mañana"</string>
<string name="today" msgid="8041090779381781781">"Hoy"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hoy a las <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañana a las <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento sin título)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Establecer"</string>
<string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Cuenta"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic para ampliar el editor de contactos."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic para contraer el editor de contactos."</string>
<string name="content_description_directions" msgid="2686791825798189335">"indicaciones para llegar a la ubicación"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms reciente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. haz clic para responder"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms reciente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. haz clic para responder"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"recibida"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"realizada"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"llamada reciente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. haz clic para devolver la llamada"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"llamada reciente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. haz clic para devolver la llamada"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Tú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mejor si se introduce el identificador de Hangouts de la persona en el campo del correo electrónico o en el campo del teléfono."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Más campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Error al abrir el editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se guardará en"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Actualmente los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dos veces para seleccionar otra cuenta."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Contactos enlazados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Contacto enlazado</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos enlazados"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Más campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar la foto del contacto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Añadir una foto del contacto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto del contacto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"No se ha podido abrir el editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Se guardará en"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"No se puede editar la información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTACTOS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
- <item quantity="one">1 posible duplicado</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos enlazados</item>
- <item quantity="one">1 contacto enlazado</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Es posible que estos contactos se correspondan a la misma persona. Puedes enlazarlos y crear un único contacto."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contactos enlazados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"De tus cuentas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Hacer una foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas las fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Elegir foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> no seleccionada"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> seleccionada"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No se ha seleccionado una foto de una fuente desconocida"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Se ha seleccionado una foto de una fuente desconocida"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"La lista de contactos se está actualizando para reflejar el cambio de idioma.\n\nPor favor, espera..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugerencias"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuevo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel de navegación"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Cerrar panel de navegación"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiqueta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiquetas"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Cuentas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Interacciones con este contacto"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos y mensajes"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensajes"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugerencias"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantén tus contactos organizados de manera que te resulten útiles"</string>
+ <string name="undo" msgid="1425165101664071422">"Deshacer"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Llamar a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Llamar a casa"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Llamar al móvil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Llamar al trabajo"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Llamar al fax del trabajo"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Llamar a fax de casa"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Llamar al busca"</string>
+ <string name="call_other" msgid="8563753966926932052">"Llamar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Llamar a un número de devolución de llamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Llamar al coche"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Llamar al teléfono principal de la empresa"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Llamar a RDSI"</string>
+ <string name="call_main" msgid="6082900571803441339">"Llamar al teléfono principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Llamar a fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Llamar a la radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Llamar al télex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Llamar a TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Llamar al móvil del trabajo"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Llamar al busca del trabajo"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Llamar a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Llamar a MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Llamar)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar un SMS a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar SMS a casa"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar SMS a móvil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar SMS a trabajo"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar SMS al fax del trabajo"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar SMS al fax de casa"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar SMS al busca"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar SMS a devolución de llamada"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar SMS al coche"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar SMS al teléfono principal de la empresa"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Enviar SMS a RDSI"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Enviar SMS al teléfono principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar SMS a fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar SMS a la radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar SMS al télex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar SMS a TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar SMS al móvil del trabajo"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar SMS al busca del trabajo"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar un mensaje de texto a <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar SMS a MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Enviar SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Hacer videollamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"¿Borrar contactos frecuentes?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Vas a borrar la lista de contactos frecuentes de las aplicaciones Contactos y Teléfono, por lo que las aplicaciones de correo electrónico tendrán que memorizar tus preferencias de nuevo."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Borrando contactos frecuentes…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Otro"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de trabajo"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos los contactos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sin nombre)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frecuentes"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos los contactos con número"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos del perfil de trabajo"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizaciones"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"Tarjeta SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Mote"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nombre"</string>
+ <string name="name_family" msgid="7466985689626017037">"Apellidos"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefijo del nombre"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Segundo nombre"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufijo del nombre"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nombre fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nombre fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nombre fonético"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Apellido fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Teléfono"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Correo electrónico"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Dirección"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organización"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relación"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Fecha especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensaje de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Dirección"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Cargo"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notas"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Sitio web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiquetas"</string>
+ <string name="email_home" msgid="8573740658148184279">"Enviar correo a casa"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Enviar correo al móvil"</string>
+ <string name="email_work" msgid="2807430017302722689">"Enviar correo al trabajo"</string>
+ <string name="email_other" msgid="3454004077967657109">"Enviar correo"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar un correo a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Correo electrónico"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Calle"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Ciudad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Provincia/Estado"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver dirección de casa"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver dirección del trabajo"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver dirección"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver la dirección postal de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatear con AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatear con Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatear con Yahoo!"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatear con Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatear con QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatear con Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatear con ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatear con Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar más campos de nombre"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ocultar los campos de nombre"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar más campos de nombre fonético"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ocultar los campos de nombre fonético"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Mostrar"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Ocultar"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Mostrados"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ocultados"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos los contactos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Destacados"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacto"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos los demás contactos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos los contactos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Eliminar grupo de sincronización"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Añadir grupo de sincronización"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Más grupos…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Si eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" de las sincronización, también se eliminarán todos los contactos no agrupados."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar contactos importados en:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Tarjeta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contactos</item>
+ <item quantity="one">1 contacto</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Archivo .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"No hay nada que importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"¿Importar contactos de vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"¿Seguro que quieres cancelar la importación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Seguro que quieres cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Error al cancelar la importación/exportación de vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Error desconocido"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se ha podido abrir el archivo \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" (<xliff:g id="EXACT_REASON">%2$s</xliff:g>)."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No se ha podido iniciar la exportación: (\"<xliff:g id="EXACT_REASON">%s</xliff:g>\")."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hay contactos que exportar."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Has inhabilitado un permiso necesario."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Se ha producido un error durante la exportación (\"<xliff:g id="EXACT_REASON">%s</xliff:g>\")."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"No hay suficiente espacio de memoria (el archivo puede ser demasiado grande)."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"No se admite este formato."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportación de <xliff:g id="FILENAME">%s</xliff:g> finalizada"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Los contactos se han exportado."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Los contactos se han exportado; haz clic en la notificación para compartirlos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toca para compartir los contactos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Se ha cancelado la exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se están exportando los datos de los contactos."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No se ha podido obtener información de la base de datos."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hay contactos que se puedan exportar."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"El redactor de vCard no se ha iniciado correctamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Error al exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No se han exportado los datos de contactos (\nmotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No se han podido leer los datos de la vCard."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importación de <xliff:g id="FILENAME">%s</xliff:g> de vCard finalizada"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Se ha cancelado la importación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> se importará en breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"El archivo se importará en breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Se ha rechazado la solicitud de importación de vCard. Inténtalo de nuevo más tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Los contactos se van a exportar en breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Se ha rechazado la solicitud de exportación de vCard. Inténtalo de nuevo más tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Se están almacenando los archivos vCard en la caché. La importación empezará pronto."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Error al importar el archivo vCard"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recibido por NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando en caché"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar a archivo .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nombre fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar siempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar si está vacío"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nombre"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Apellidos"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato de nombre"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nombre primero"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Apellido primero"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Cuentas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Cuenta predeterminada para nuevos contactos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mi información"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configura tu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Información sobre Contactos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"No se han podido compartir contactos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contactos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contactos de"</string>
+ <string name="share_error" msgid="948429331673358107">"No se puede compartir este contacto."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos que compartir."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos que mostrar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos que mostrar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Buscar contactos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"con <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> con <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"dejar de buscar"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Cuenta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Usar siempre esta para llamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Llamada con una nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Escribe una nota para enviarla con la llamada…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR Y LLAMAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versión de la compilación"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencias de código abierto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles de las licencias de software libre"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de Privacidad"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Condiciones de Servicio"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licencias de código abierto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"No se ha podido abrir la URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Se ha seleccionado <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"No se ha seleccionado <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Hacer videollamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Puntos suspensivos"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Se ha inhabilitado este acceso directo"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"El contacto se ha eliminado"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Seleccionar contactos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"No hay ningún contacto en la tarjeta SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"El contacto ya existe en tu lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Se han importado <xliff:g id="COUNT">%d</xliff:g> contactos de la SIM</item>
+ <item quantity="one">Se ha importado 1 contacto de la SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"No se han podido importar los contactos de la SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar de la SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La sincronización automática está desactivada. Toca para activarla."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Descartar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La sincronización de la cuenta está desactivada. Toca para activarla."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"¿Activar la sincronización automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Los cambios que realices en todas las aplicaciones y cuentas, no solo en Contactos de Google, se actualizarán en la Web y en tus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"No hay conexión"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar más"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Se ha importado la tarjeta SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"No se ha podido realizar la importación"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"No se han podido importar los contactos de la tarjeta SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Se está importando la tarjeta SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificaciones"</string>
</resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
deleted file mode 100644
index 531935f63..000000000
--- a/res/values-et-rEE/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontaktid"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktid"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kuva kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Muuda kontakti"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontaktid"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Otsevalimine"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Otsesõnum"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakti otsetee valimine"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Valige helistamiseks number"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Valige sõnumi jaoks number"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontaktile lisamine"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakti valimine"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Loo uus kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Tärniga"</string>
- <string name="frequentList" msgid="7154768136473953056">"Sagedane"</string>
- <string name="strequentList" msgid="5640192862059373511">"Lemmikud"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontakti üksikasjad"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Muuda kontakti"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Looge kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Grupi muutmine"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Grupi loomine"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Teave:"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Värskendused"</string>
- <string name="searchHint" msgid="8482945356247760701">"Otsige kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Kuva kontakt"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Lisa lemmikutesse"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Eemalda lemmikutest"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Lemmikutest eemaldatud"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Lemmikutesse lisatud"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Muuda"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Kustuta"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Foto vahetamine"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Paiguta avalehele"</string>
- <string name="menu_call" msgid="3992595586042260618">"Helista kontaktile"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Saada kontaktile SMS"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Tühista linkimine"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Muuda"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Kustuta"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Kontaktisiku lisamine"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Rühma lisamine"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Kas tühistada selle kontakti linkimine ja jagada see mitmeks kontaktiks?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Tühista linkimine"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Kas soovite tehtud muudatused salvestada, tühistada selle kontakti linkimise ja jagada selle mitmeks kontaktiks?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salvesta ja tühista linkimine"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Kas soovite tehtud muudatused salvestada ja linkida need valitud kontaktiga?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salvesta ja lingi"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Lingi"</string>
- <string name="menu_save" msgid="1727844363591825909">"Salvesta"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktide linkimine"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Valige kontakt, kelle soovite linkida kontaktiga <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Kuva kõik kontaktid"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Soovitatud kontaktid"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kõik kontaktid"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktid lingiti"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Kontaktid kustutati</item>
- <item quantity="one">Kontakt kustutati</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Määra helin"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kõik kõned kõneposti"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kirjutuskaitsega kontodel olevaid kontakte ei saa kustutada, kuid need saab peita."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Peida"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kustutataval kontaktil on andmeid mitmelt kontolt. Kirjutuskaitsega kontode andmed peidetakse, mitte ei kustutata."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Linkimiseks peate valima vähemalt kaks kontakti."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Kas linkida valitud kontaktid?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Lingi"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Kas kustutada see kontakt?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Kas kustutada valitud kontaktid?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kirjutuskaitsega kontodel olevaid kontakte ei saa kustutada, kuid need saab peita."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kustutatavatel kontaktidel on andmeid mitmelt kontolt. Kirjutuskaitsega kontode andmed peidetakse, mitte ei kustutata."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Selle kontakti kustutamisel kustutatakse andmed mitmelt kontolt."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Kas kustutada see kontakt?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Kustuta"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Loobu muudatustest"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti ei ole olemas."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt lisati avaekraanile."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> lisati avaekraanile."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Loo uus kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Loo uus kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisatsioon"</item>
- <item msgid="7196592230748086755">"Märkus"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tahvelarvutis pole ühtegi pilti saadaval."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonis pole ühtegi pilti saadaval."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakti foto"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Kohandatud sildi nimi"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Saada kõned otse kõneposti"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Eemalda foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Kontaktid puuduvad"</string>
- <string name="noGroups" msgid="8614664663561385253">"Grupid puuduvad."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Rühmade loomiseks vajate kontot."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Selles rühmas pole inimesi."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Lisamiseks muutke rühma."</string>
- <string name="savingContact" msgid="4075751076741924939">"Kontakti salvestamine ..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt on salvestatud."</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktide linkimine tühistati"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontaktide muudatuste salvestamine ebaõnnestus."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontakti linkimist ei saanud tühistada."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakti ei saanud linkida."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Viga kontakti salvestamisel."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakti foto muudatusi ei õnnestunud salvestada."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupp on salvestatud."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Rühmade muudatuste salvestamine ebaõnnestus."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> telefoninumbriga kontakti</item>
- <item quantity="one">1 telefoninumbriga kontakt</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefoninumbritega kontakte pole"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">Leiti <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Leiti 1</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakte pole"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">Leiti <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">Leiti 1</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Kõik"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Lemmikud"</string>
- <string name="callBack" msgid="5498224409038809224">"Helista tagasi"</string>
- <string name="callAgain" msgid="3197312117049874778">"Helista uuesti"</string>
- <string name="returnCall" msgid="8171961914203617813">"Tagasihelistamine"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kas lisada „<xliff:g id="EMAIL">%s</xliff:g>” kontaktidesse?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontakti foto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktist"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Teie kontaktide nimed"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Selle toimingu käsitsemiseks ei leitud ühtegi rakendust."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klõpsake eelmisele ekraanikuvale naasmiseks"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lisage telefoninumber"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Lisage e-posti aadress"</string>
- <string name="missing_app" msgid="1466111003546611387">"Selle toimingu käsitlemiseks ei leitud ühtegi rakendust."</string>
- <string name="menu_share" msgid="943789700636542260">"Jaga"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Lisa kontaktide hulka"</string>
- <string name="share_via" msgid="563121028023030093">"Kontakti jagamisvalikud"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Kontopõhise grupi loomine"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Häälvestlus"</string>
- <string name="video_chat" msgid="1872255818640336072">"Videovestlus"</string>
- <string name="connections" msgid="8098440723172028350">"Ühendused"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Lisa ühendus"</string>
- <string name="recent" msgid="2659189233141493004">"Hiljutised"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Uusimad värskendused"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Teenuse <xliff:g id="SOURCE">%1$s</xliff:g> konto"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ei saa muuta selles rakenduses."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ei saa muuta selles seadmes."</string>
- <string name="take_photo" msgid="7496128293167402354">"Tee foto"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Tee uus foto"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Vali foto"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Vali uus foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktiloendit värskendatakse."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Otsimine ..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Kuva valitud"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Kuva kõik"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Vali kõik"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Tühista kõikide valik"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lisa uus"</string>
- <string name="add_organization" msgid="7311893231158291197">"Lisa organisatsioon"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Kuupäev"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Grupi nimi"</string>
- <string name="change_photo" msgid="8530597935483526383">"Muuda"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Põhifoto"</string>
- <string name="description_star" msgid="2605854427360036550">"lemmik"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Muuda kontakti"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Kas linkida praegune kontakt valitud kontaktiga?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Kas lülituda valitud kontakti muutmisse? Seni sisestatud andmed kopeeritakse."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopeeri valikusse Minu kontaktid"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Lisa lehele Minu kontaktid"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Kataloog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Kohandatud"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Seaded"</string>
- <string name="menu_settings" msgid="377929915873428211">"Seaded"</string>
- <string name="menu_help" msgid="1680178646764069976">"Abi ja tagasiside"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Kuvamisvalikud"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Telefoninumber"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lisa kontaktidesse"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kontaktile lisamine"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Sule"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Kaasa aasta"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Laadimine ..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Loo uus kontakt"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Konto lisamine"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impordi kontaktid"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Uue grupi loomine"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Loo uus rühm"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> rühma</item>
- <item quantity="one">1 rühm</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Kas kustutada rühm „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Kontakte ei kustutata.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> inimest kontolt <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> inimene kontolt <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> inimest</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> inimene</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Enne teise kontaktiga linkimist sisestage kontakti nimi."</string>
- <string name="copy_text" msgid="3257145021583508761">"Kopeeri lõikelauale"</string>
- <string name="set_default" msgid="4417505153468300351">"Määra vaikeseadeks"</string>
- <string name="clear_default" msgid="7193185801596678067">"Kustuta vaikeseaded"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Tekst on kopeeritud"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Kas soovite muudatustest loobuda ja muutmise lõpetada?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Loobu"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Jätka muutmist"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Minu profiili seadistamine"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Sisestage isiku nimi"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Rühma nimi"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Minu kohalik profiil"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Minu profiil: <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kõigi kontaktide kuvamine"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hoidke oma kontaktid turvalisena ka siis, kui kaotate telefoni: sünkroonige need võrguteenusega."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konto lisamine"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Teie uut kontakti ei varundata. Kas lisada konto, mis varundab kontakte veebis?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Uued kontaktid salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Valige uute kontaktide jaoks vaikekonto:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Kontakti lisamine"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontakti muutmine"</string>
- <string name="keep_local" msgid="1258761699192993322">"Hoia kohalikuna"</string>
- <string name="add_account" msgid="8201790677994503186">"Konto lisamine"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Lisa uus konto"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Andmebaasi failide eksportimine"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"uue kontakti lisamine"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Lisateave"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kuva vähem"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Kuva kõik"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Hiljutine"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Teave"</string>
- <string name="send_message" msgid="8938418965550543196">"Saada sõnum"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Isikliku koopia loomine ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Eile"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Homme"</string>
- <string name="today" msgid="8041090779381781781">"Täna"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Täna kell <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Homme kell <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Pealkirjata sündmus)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Määra"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Kiirsuhtlus"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Organisatsioon"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Hüüdnimi"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Märge"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Veebisait"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Sündmus"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Seos"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klõpsake kontaktiredigeerija laiendamiseks."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klõpsake kontaktiredigeerija ahendamiseks."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"juhised asukohta"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"viimane SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klõpsake vastamiseks"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sissetulevad"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"väljaminevad"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"vastamata"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"viimane kõne. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klõpsake tagasihelistamiseks"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Teie: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts toimib paremini, kui sisestate isiku Hangoutsi koodi e-posti aadressi või telefoninumbri väljale."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Rohkem välju"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto vahetamine"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Redigeerija avamine nurjus."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvestamine asukohta"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Praegu salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Teise konto valimiseks topeltpuudutage."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Lingitud kontaktid (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Lingitud kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> lingitud kontakti"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINGI KONTAKTID"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"TÜHISTA"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> võimalikku duplikaati</item>
- <item quantity="one">1 võimalik duplikaat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> lingitud kontakti</item>
- <item quantity="one">1 lingitud kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"See kontakt"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Võimalikud duplikaadid"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Need kontaktid võivad olla sama isik. Saate need linkida üheks kontaktiks."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Lingitud kontaktid"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Teie kontodelt"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Foto jäädvustamine"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Kõik fotod"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Foto valimine"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Kontolt <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Kustuta <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Kustuta <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto kasutajalt <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> pole märgitud"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto kasutajalt <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> on märgitud"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Tundmatult kontolt pärinev foto pole märgitud"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Tundmatult kontolt pärinev foto on märgitud"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktiloendit värskendatakse keele muutmise kajastamiseks.\n\nPalun oodake ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeeritud numbrid"</string>
-</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
new file mode 100644
index 000000000..5a0f51f9e
--- /dev/null
+++ b/res/values-et/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontaktid"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontaktid"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakti lisamine"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Otsevalimine"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Otsesõnum"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakti valimine"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontaktile lisamine"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakti valimine"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Valimine"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Loo uus kontakt"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Otsige kontakte"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Lisa lemmikutesse"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Eemalda lemmikutest"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Lemmikutest eemaldatud"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Lemmikutesse lisatud"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Muuda"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Kustuta"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Foto vahetamine"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Loo otsetee"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Tühista linkimine"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Eemalda kontaktid"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Nimeta silt ümber"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Kustuta silt"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Kontakti lisamine"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Vali kontaktid"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lisa kontakte"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eemalda sildilt"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sildi loomine"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Kas tühistada selle kontakti linkimine ja jagada see mitmeks kontaktiks?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Tühista linkimine"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Kas soovite tehtud muudatused salvestada, tühistada selle kontakti linkimise ja jagada selle mitmeks kontaktiks?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salvesta ja tühista linkimine"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Kas soovite tehtud muudatused salvestada ja linkida need valitud kontaktiga?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salvesta ja lingi"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linkimine"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Linkimise tühistamine"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Lingi"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Kuva lingitud kontaktid"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Salvesta"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktide linkimine"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Valige kontakt, kelle soovite linkida kontaktiga <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Soovitatud kontaktid"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kõik kontaktid"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> on lingitud"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktid lingiti"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> on kustutatud"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ja <xliff:g id="NAME_1">%2$s</xliff:g> on kustutatud"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> … on kustutatud"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Kontaktid kustutati</item>
+ <item quantity="one">Kontakt kustutati</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakti</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakti · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google\'ilt"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Kontolt <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Määra helin"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Suuna kõneposti"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Tühista kõneposti suunamine"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Kontakt on kirjutuskaitstud. Seda ei saa kustutada, ent saate selle peita."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Peida kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Kontakti kirjutuskaitstud kontod peidetakse ja neid ei kustutata."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Kas kustutada see kontakt?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Kas kustutada valitud kontaktid?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kirjutuskaitsega kontodel olevaid kontakte ei saa kustutada, kuid need saab peita."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kustutatavatel kontaktidel on andmeid mitmelt kontolt. Kirjutuskaitsega kontode andmed peidetakse, mitte ei kustutata."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Selle kontakti kustutamisel kustutatakse andmed mitmelt kontolt."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Kas kustutada see kontakt?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Kustuta"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti ei ole olemas."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt lisati avaekraanile."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> lisati avaekraanile."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Seadmes pole ühtegi pilti saadaval."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakti foto"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Kohandatud sildi nimi"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Eemalda foto"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Teie kontaktiloend on tühi"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Selle sildiga kontakte pole"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Kontol ei ole ühtki kontakti"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Teie kontaktiloend on tühi"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> on salvestatud"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt on salvestatud."</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktide linkimine tühistati"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakti muudatusi ei õnnestunud salvestada"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontakti linkimist ei õnnestunud tühistada"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakti ei saanud linkida"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Viga kontakti salvestamisel"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakti foto muudatusi ei õnnestunud salvestada"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Sildi laadimine ebaõnnestus"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Silt on kustutatud"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Silt on loodud"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Silti ei saa luua"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Silt on värskendatud"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eemaldatud sildilt"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lisati sildile"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Sildi muudatusi ei õnnestunud salvestada"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"See silt on juba olemas"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Mõnel kontaktil pole e-posti aadressi."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Mõnel kontaktil pole telefoninumbrit."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Saada meil"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Saada sõnum"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktide valimine"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Saada"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakte pole"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kas lisada „<xliff:g id="EMAIL">%s</xliff:g>” kontaktidesse?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Teie kontaktide nimed"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klõpsake eelmisele ekraanikuvale naasmiseks"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lisage telefoninumber"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Lisage e-posti aadress"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Selle toimingu käsitlemiseks ei leitud ühtegi rakendust."</string>
+ <string name="menu_share" msgid="943789700636542260">"Jaga"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Lisa kontaktide hulka"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Lisamine"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kontaktide jagamine rakendusega</item>
+ <item quantity="one">Kontakti jagamine rakendusega</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Konto valimine"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Sildi loomine"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Sildi ümbernimetamine"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Sildi nimi"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Sildi nimi"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Häälvestlus"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Videovestlus"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Teenuse <xliff:g id="SOURCE">%1$s</xliff:g> konto"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Tee foto"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Tee uus foto"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Vali foto"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Vali uus foto"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Otsimine ..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Kuupäev"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Silt"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Tühista"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Tagasi"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sule"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Kas lülituda valitud kontakti muutmisse? Seni sisestatud andmed kopeeritakse."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Kataloog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Seaded"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Seaded"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Abi ja tagasiside"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Telefoninumber"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lisa kontaktidesse"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Sule"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Kaasa aasta"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Konto lisamine"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importimine"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Uue loomine …"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Kas kustutada silt „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Kontakte ei kustutata.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Enne teise kontaktiga linkimist sisestage kontakti nimi."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Kopeeri lõikelauale"</string>
+ <string name="set_default" msgid="4417505153468300351">"Määra vaikeseadeks"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Kustuta vaikeseaded"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Tekst on kopeeritud"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Kas soovite muudatustest loobuda?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Loobu"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Tühista"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Kas soovite kohandamistest loobuda?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Otsige kontakte"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kontaktide eemaldamine"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Minu kohalik profiil"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Minu profiil: <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Leidke pisut aega ja lisage konto, mis varundab teie kontaktid Google\'is."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Uued kontaktid salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Valige uute kontaktide jaoks vaikekonto:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Uue kontakti loomine"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontakti muutmine"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Vaid vaatamiseks"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Valige kontakt, mida soovite muuta"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Lingitud kontaktid"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Lisamine"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Link. tühistam."</string>
+ <string name="add_account" msgid="8201790677994503186">"Konto lisamine"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Lisa uus konto"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Andmebaasi failide eksportimine"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Loo uus kontakt"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Lisateave"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kuva vähem"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Hiljutine"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Teave"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Isikliku koopia loomine ..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Homme"</string>
+ <string name="today" msgid="8041090779381781781">"Täna"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Täna kell <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Homme kell <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Pealkirjata sündmus)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Määra"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Kiirsuhtlus"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Organisatsioon"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Hüüdnimi"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Märge"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Veebisait"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Sündmus"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Seos"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"juhised asukohta"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"viimane SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klõpsake vastamiseks"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sissetulevad"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"väljaminevad"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"vastamata"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"viimane kõne. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klõpsake tagasihelistamiseks"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Teie: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Rohkem välju"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakti foto muutmine"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakti foto lisamine"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontakti foto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Redigeerija avamine ebaõnnestus."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvestamine kontole"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktiteavet kontol <xliff:g id="ACCOUNT">%s</xliff:g> ei saa muuta"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINGI KONTAKTID"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"TÜHISTA"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"See kontakt"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Võimalikud duplikaadid"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Need kontaktid võivad olla sama isik. Saate need linkida üheks kontaktiks."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Kustuta <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Kustuta <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Soovitused"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Uus"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Ava navigeerimissahtel"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Sule navigeerimissahtel"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Silt <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Sildid"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Kontod"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Ajaloo koos kuvamine"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Sündmused ja sõnumid"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Sündmused"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Sõnumid"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Soovitused"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Hoidke kontaktid korrastatute ja kasulikena"</string>
+ <string name="undo" msgid="1425165101664071422">"Võta tagasi"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Helista: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Helista kodu telefoninumbrile"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Helista mobiilinumbrile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Helista töönumbrile"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Helista tööfaksinumbrile"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Helista kodu faksinumbrile"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Helista piiparinumbrile"</string>
+ <string name="call_other" msgid="8563753966926932052">"Helista"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Helista tagasihelistusnumbrile"</string>
+ <string name="call_car" msgid="3280537320306436445">"Helista autotelefoninumbrile"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Helista ettevõtte põhinumbrile"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Helista ISDN-telefoninumbrile"</string>
+ <string name="call_main" msgid="6082900571803441339">"Helista põhinumbrile"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Helista faksinumbrile"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Helista raadiotelefoninumbrile"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Helista teleksinumbrile"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Helista TTY-/TDD-numbrile"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Helista töömobiilinumbrile"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Helista tööpiiparinumbrile"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Helista: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Helista MMS-i numbrile"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (helistamine)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Saada SMS: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Saada SMS kodu telefoninumbrile"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Saada SMS mobiilinumbrile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Saada SMS töönumbrile"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Saada SMS tööfaksinumbrile"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Saada SMS kodusele faksinumbrile"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Saada SMS piiparinumbrile"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Saada SMS tagasihelistusnumbrile"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Saada SMS autotelefoninumbrile"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Saada SMS ettevõtte peamisele telefoninumbrile"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Saada SMS ISDN-telefoninumbrile"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Saada SMS põhinumbrile"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Saada SMS faksinumbrile"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Saada SMS raadiotelefoninumbrile"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Saada SMS teleksinumbrile"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Saada SMS TTY-/TDD-numbrile"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Saada SMS töömobiilinumbrile"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Saada SMS tööpiiparinumbrile"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Saada SMS numbrile <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Saada MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (sõnum)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Videokõne tegemine"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Kas kustutada sagedased kontaktid?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Kustutate rakendustes Kontaktid ja Telefon sagedaste kontaktide loendi, mistõttu meilirakendused peavad teie adresseerimiseelistused uuesti omandama."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Saged. kontaktide kustutamine ..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Saadaval"</string>
+ <string name="status_away" msgid="1838861100379804730">"Eemal"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Hõivatud"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Muu"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Kataloog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Töökontaktide kataloog"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Kõik kontaktid"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Kiirkontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Nimi puudub)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sageli valitud kontaktid"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Kõik telefoninumbritega kontaktid"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Tööprofiili kontaktid"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Kuva värskendused"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Seade"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-kaart"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Hüüdnimi"</string>
+ <string name="name_given" msgid="4280790853455320619">"Eesnimi"</string>
+ <string name="name_family" msgid="7466985689626017037">"Perekonnanimi"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Nime eesliide"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Teine nimi"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Nime järelliide"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Foneetiline nimi"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Foneetiline eesnimi"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Foneetiline keskmine nimi"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Foneetiline perekonnanimi"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-post"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Aadress"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM (Kiirsuhtlus)"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisatsioon"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Suhe"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Erikuupäev"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstsõnum"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Aadress"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Ettevõte"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Pealkiri"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Märkused"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Kohandatud"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Veebisait"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Sildid"</string>
+ <string name="email_home" msgid="8573740658148184279">"Saada meilisõnum kodusele aadressile"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Saada meilisõnum mobiilile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Saada meiliaadress tööaadressile"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-post"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Saada meil: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-post"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Tänav"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Linn"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Riik"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Sihtnumber"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Riik"</string>
+ <string name="map_home" msgid="1243547733423343982">"Vaata kodu aadressi"</string>
+ <string name="map_work" msgid="1360474076921878088">"Vaata tööaadressi"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vaata aadressi"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Kuva aadress: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Vestle AIM-i kasutades"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Vestle Windows Live\'i abil"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Vestle Yahoo abil"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Vestle Skype\'i abil"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Vestle QQ abil"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Vestle Google Talki kasutades"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Vestle ICQ-d kasutades"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Vestle Jabberi abil"</string>
+ <string name="chat" msgid="9025361898797412245">"Vestlus"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"kustutamine"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Kuva rohkem nimevälju"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Nimeväljade ahendamine"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Kuva rohkem foneetiliste nimede välju"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Foneetiliste nimede väljade ahendamine"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Laiendamine"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Ahendamine"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Laiendatud"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Ahendatud"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kõik kontaktid"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Tärniga tähistatud"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Kohanda"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Kõik teised kontaktid"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Kõik kontaktid"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Eemalda sünkroonimisrühm"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Lisa sünkroonimisrühm"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Rohkem rühmi ..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Rühma „<xliff:g id="GROUP">%s</xliff:g>” eemaldamisel sünkroonimisest eemaldatakse sünkroonimisest ka kõik rühmitamata kontaktid."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Kuvavalikute salvestamine ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Kohandatud vaade"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Imporditud kontaktid salvestatakse kontole:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kaart"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-kaart <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakti</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakti • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-fail"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Midagi pole importida"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Kas importida kontaktid vCardist?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kas tühistada faili <xliff:g id="FILENAME">%s</xliff:g> importimine?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kas tühistada faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardi impordi/ekspordi tühist. ebaõnn."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Tundmatu viga."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Faili „<xliff:g id="FILE_NAME">%1$s</xliff:g>” ei saa avada: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportijat ei saa lähtestada: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksporditavad kontaktid puuduvad."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Olete nõutud loa keelanud."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Viga eksportimisel: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O viga"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Pole piisavalt mälu. Fail võib olla liiga suur."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Vormingut ei toetata."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine on lõpetatud."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktide eksportimine lõpetati."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktide eksportimine lõpetati. Kontaktide jagamiseks klõpsake märguandel."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Puudutage kontaktide jagamiseks."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine tühistati."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktandmete eksportimine"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktandmed eksporditakse."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Andmebaasiteabe hankimine ebaõnnestus."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Eksporditavaid kontakte ei ole."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCardi helilooja ei käivitunud korralikult."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport ebaõnnestus"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktandmeid ei eksporditud.\nPõhjus: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importimine: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCardi andmete lugemine ebaõnnestus"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCardi faili <xliff:g id="FILENAME">%s</xliff:g> importimine on lõpetatud"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Faili <xliff:g id="FILENAME">%s</xliff:g> importimine tühistati"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fail <xliff:g id="FILENAME">%s</xliff:g> imporditakse peagi."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fail imporditakse peagi."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCardi importimistaotlus lükati tagasi. Proovige hiljem uuesti."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktid eksporditakse peagi."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCardi eksportimistaotlus lükati tagasi. Proovige hiljem uuesti."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCardi(de) vahemälustamine kohalikku ajutisse mäluruumi. Tegelik importimine algab peagi."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCardi importimine ebaõnnestus."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt võeti vastu NFC kaudu"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Vahemällu salvestamine"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importimine: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportimine VCF-faili"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortimisalus:"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Foneetiline nimi"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Kuva alati"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Peida, kui see on tühi"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Eesnimi"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Perekonnanimi"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Nimevorming"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Eesnimi enne"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Perekonnanimi enne"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Kontod"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Vaikekonto uute kontaktide jaoks"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Minu teave"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Seadistage oma profiil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Teave rakenduse Kontaktid kohta"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaga lemmikkontakte"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Jaga kõiki kontakte"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktide jagamine ebaõnnestus."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kontaktide eksportimine"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontaktide importimine asukohast"</string>
+ <string name="share_error" msgid="948429331673358107">"Seda kontakti ei saa jagada."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Jagamiseks ei ole ühtki kontakti."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kuvatavad kontaktisikud"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kuvatavad kontaktid"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Vaate kohandamine"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvesta"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Otsi kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Lemmikud"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importimine"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportimine"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeeritud numbrid"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"allika <xliff:g id="SOURCE">%1$s</xliff:g> kaudu"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> allika <xliff:g id="SOURCE">%2$s</xliff:g> kaudu"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"otsimise peatamine"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Otsingu kustutamine"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Kasuta helistamiseks alati seda"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Kõne koos märkusega"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Sisestage märkus, mis koos kõnega saata …"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SAADA JA HELISTA"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Järguversioon"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Avatud lähtekoodi litsentsid"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Avatud lähtekoodiga tarkvara litsentsi üksikasjad"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privaatsuseeskirjad"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Teenusetingimused"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Avatud lähtekoodi litsentsid"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL-i avamine ebaõnnestus."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Üksus <xliff:g id="ACCOUNT_INFO">%s</xliff:g> on märgitud"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Üksus <xliff:g id="ACCOUNT_INFO">%s</xliff:g> pole märgitud"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Videokõne tegemine"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Kustuta"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Mõttepunktid"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"See otsetee on keelatud"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt eemaldati"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Impordi"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kontaktide valimine"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Teie SIM-kaardil pole ühtegi kontakti"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt on teie loendis juba olemas"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-kaardi kontakti imporditi</item>
+ <item quantity="one">1 SIM-kaardi kontakt imporditi</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-kaardi kontaktide importimine ebaõnnestus"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM-kaardilt importimine"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Tühista"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automaatne sünkroonimine on välja lülitatud. Puudutage sisselülitamiseks."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Loobu"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Automaatne sünkroonimine on välja lülitatud. Puudutage sisselülitamiseks."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Kas soovite automaatse sünkroonimise sisse lülitada?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Kõikides rakendustes ja kontodel tehtud muudatused (mitte ainult Google\'i kontaktid) sünkroonitakse ajakohasena hoidmiseks veebi ning teie seadmete vahel."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Lülita sisse"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ühendus puudub"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kaart"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Kuva rohkem"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kaardi importimine viidi lõpule"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importimine ebaõnnestus"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakte ei õnnestunud SIM-kaardilt importida"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kaardi importimine"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Märguanded"</string>
+</resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
deleted file mode 100644
index 7f5182826..000000000
--- a/res/values-eu-rES/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontaktuak"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktuak"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ikusi kontaktua"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editatu kontaktua"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontaktuak"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontaktua"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Markatze zuzena"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Mezu zuzena"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Aukeratu lasterbidea"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Aukeratu deitzeko zenbaki bat"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Aukeratu mezua bidaltzeko zenbaki bat"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Gehitu kontaktu batean"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Aukeratu kontaktu bat"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Sortu kontaktua"</string>
- <string name="starredList" msgid="4817256136413959463">"Izardunak"</string>
- <string name="frequentList" msgid="7154768136473953056">"Sarri"</string>
- <string name="strequentList" msgid="5640192862059373511">"Gogokoak"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktuaren xehetasunak"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editatu kontaktua"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Sortu kontaktua"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editatu taldea"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Sortu taldea"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Honi buruz"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Eguneratzeak"</string>
- <string name="searchHint" msgid="8482945356247760701">"Bilatu kontaktuetan"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ikusi kontaktua"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Gehitu gogokoetan"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Kendu gogokoetatik"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Gogokoetatik kendu da"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Gogokoetan gehitu da"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Editatu"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Ezabatu"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Aldatu argazkia"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Jarri hasierako pantailan"</string>
- <string name="menu_call" msgid="3992595586042260618">"Deitu kontaktuari"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Bidali testu-mezua kontaktuari"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Desestekatu"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editatu"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Ezabatu"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Gehitu kontaktua"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Gehitu taldea"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Kontaktuaren loturak desegin eta hainbat kontaktutan banandu nahi duzu?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Banandu"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Egin dituzun aldaketak gorde, eta hautatutako kontaktua hainbat kontaktutan banandu nahi duzu?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Gorde eta banandu"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Egin dituzun aldaketak gorde, eta hautatutako kontaktuarekin lotu nahi duzu?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Gorde eta lotu"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Lotu"</string>
- <string name="menu_save" msgid="1727844363591825909">"Gorde"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lotu kontaktuak"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Aukeratu <xliff:g id="NAME">%s</xliff:g> kontaktuarekin lotu nahi duzuna:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Erakutsi kontaktu guztiak"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Gomendatutako kontaktuak"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kontaktu guztiak"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Estekatu dira kontaktuak"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Ezabatu dira kontaktuak</item>
- <item quantity="one">Ezabatu da kontaktua</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ezarri tonua"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Dei guztiak erantzungailura"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Irakurtzeko soilik diren kontuetako kontaktuak ezin dira ezabatu, baina ezkutatu egin daitezke."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ezkutatu"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Ezabatzeko hautatu duzun kontaktuak hainbat kontutako informazioa du. Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Gutxienez bi kontaktu behar dituzu estekatu ahal izateko."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Hautatutako kontaktuak lotu nahi dituzu?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Lotu"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Kontaktua ezabatu nahi duzu?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Hautatutako kontaktuak ezabatu nahi dituzu?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Irakurtzeko soilik diren kontuetako kontaktuak ezin dira ezabatu, baina ezkutatu egin daitezke."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Ezabatzeko hautatu dituzun kontaktuek hainbat kontutako informazioa dute. Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kontaktua ezabatzen baduzu, hainbat kontutatik ezabatuko da informazioa."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Kontaktua ezabatu nahi duzu?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ezabatu"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Baztertu aldaketak"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Ez dago horrelako kontakturik."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Hasierako pantailan gehitu da kontaktua."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Hasierako pantailan gehitu da <xliff:g id="NAME">%s</xliff:g>."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Sortu kontaktua"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Sortu kontaktua"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Erakundea"</item>
- <item msgid="7196592230748086755">"Oharra"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Ez dago irudi erabilgarririk tabletan."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Ez dago irudi erabilgarririk telefonoan."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktuaren argazkia"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Etiketa pertsonalizatuaren izena"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Bidali deiak zuzenean erantzungailura"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Kendu argazkia"</string>
- <string name="noContacts" msgid="4955659076981974652">"Ez dago kontakturik"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ez dago talderik."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Taldeak sortzeko, kontu bat behar duzu."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ez dago jenderik talde honetan."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Batzuk gehitzeko, editatu taldea."</string>
- <string name="savingContact" msgid="4075751076741924939">"Kontaktua gordetzen…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Gorde da kontaktua"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kendu dira kontaktuaren loturak"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ezin izan dira gorde kontaktuari egindako aldaketak."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ezin izan da kendu kontaktuaren lotura."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ezin izan da lotu kontaktua."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Errore bat gertatu da kontaktua gordetzean."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ezin izan dira gorde kontaktuaren argazkiari egindako aldaketak."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Taldea gorde da."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ezin izan dira gorde taldeari egindako aldaketak."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktuk telefono-zenbakia dute</item>
- <item quantity="one">Kontaktu batek telefono-zenbakia du</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ez dago telefono-zenbakirik duen kontakturik"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aurkitu dira</item>
- <item quantity="one">Bat aurkitu da</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ez dago kontakturik"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aurkitu dira</item>
- <item quantity="one">Bat aurkitu da</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Guztiak"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Gogokoak"</string>
- <string name="callBack" msgid="5498224409038809224">"Itzuli deia"</string>
- <string name="callAgain" msgid="3197312117049874778">"Deitu berriro"</string>
- <string name="returnCall" msgid="8171961914203617813">"Itzuli deia"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktuetan gehitu?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontaktuaren argazkia"</string>
- <string name="description_plus_button" msgid="515164827856229880">"gehi"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktu"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Kontaktuen izenak"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Ez da ekintza kudeatzeko aplikaziorik aurkitu."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Egin klik hemen aurreko pantailara itzultzeko"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Gehitu telefono-zenbakia"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Gehitu helbide elektronikoa"</string>
- <string name="missing_app" msgid="1466111003546611387">"Ez da ekintza kudeatzeko aplikaziorik aurkitu."</string>
- <string name="menu_share" msgid="943789700636542260">"Partekatu"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Gehitu kontaktuetan"</string>
- <string name="share_via" msgid="563121028023030093">"Partekatu kontaktua honen bidez:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Sortu taldea kontuaren barruan"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Ahots-txata"</string>
- <string name="video_chat" msgid="1872255818640336072">"Bideo-txata"</string>
- <string name="connections" msgid="8098440723172028350">"Konexioak"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Gehitu konexioa"</string>
- <string name="recent" msgid="2659189233141493004">"Azkenak"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Azken berritasunak"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktua"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> kontua"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ezin da aplikazio honen bidez editatu."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ezin da gailu honetan editatu."</string>
- <string name="take_photo" msgid="7496128293167402354">"Atera argazkia"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Atera beste argazki bat"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Aukeratu argazkia"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Hautatu beste argazki bat"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktuen zerrenda eguneratzen ari da."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Bilatzen…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Erakutsi hautatutakoak"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Erakutsi guztiak"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Hautatu guztiak"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desautatu guztiak"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Gehitu beste bat"</string>
- <string name="add_organization" msgid="7311893231158291197">"Gehitu erakundea"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Taldearen izena"</string>
- <string name="change_photo" msgid="8530597935483526383">"Aldatu"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Argazki nagusia"</string>
- <string name="description_star" msgid="2605854427360036550">"gogokoa"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editatu kontaktua"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Uneko kontaktua eta hautatutako kontaktua lotu nahi dituzu?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Hautatutako kontaktua editatu nahi duzu? Orain arte idatzi duzun informazioa kopiatu egingo da."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiatu Nire kontaktuetan"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Gehitu Nire kontaktuak atalean"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> direktorioa"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Pertsonalizatua"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Ezarpenak"</string>
- <string name="menu_settings" msgid="377929915873428211">"Ezarpenak"</string>
- <string name="menu_help" msgid="1680178646764069976">"Laguntza eta iritziak"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Bistaratze-aukerak"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Telefono-zenbakia"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Gehitu kontaktuetan"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Gehitu kontaktuan"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Itxi"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Sartu urtea"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontaktua"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Kargatzen…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Sortu kontaktua"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Gehitu kontua"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Inportatu kontaktuak"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Sortu taldea"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Sortu taldea"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> talde</item>
- <item quantity="one">Talde bat</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" taldea ezabatu nahi duzu? (Ez dira kontaktuak ezabatuko.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> taldeko <xliff:g id="COUNT_2">%1$d</xliff:g> pertsona</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> taldeko <xliff:g id="COUNT_0">%1$d</xliff:g> pertsona</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pertsona</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pertsona</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Beste batekin lotu aurretik, idatzi kontaktuaren izena."</string>
- <string name="copy_text" msgid="3257145021583508761">"Kopiatu arbelean"</string>
- <string name="set_default" msgid="4417505153468300351">"Ezarri lehenetsi gisa"</string>
- <string name="clear_default" msgid="7193185801596678067">"Garbitu metodo lehenetsia"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Testua kopiatu da"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Aldaketak baztertu eta editatzeko modutik irten nahi duzu?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Baztertu"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Jarraitu editatzen"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> (<xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>)"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Konfiguratu nire profila"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Idatzi pertsonaren izena"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Taldearen izena"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Gailuko profila"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Nire <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profila"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kontaktu guztiak bistaratzen"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Izan kontaktuak seguru telefonoa galduta ere: sinkronizatu sareko zerbitzu batekin."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Gehitu kontu bat"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Ez da kontaktu berriaren babeskopiarik egingo. Kontaktuen babeskopia sarean gordetzeko kontua gehitu nahi duzu?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> kontuan gordeko dira kontaktu berriak."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Aukeratu kontaktu berriak gordetzeko erabili nahi duzun kontua:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Gehitu kontaktu berria"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editatu kontaktua"</string>
- <string name="keep_local" msgid="1258761699192993322">"Mantendu gailuan"</string>
- <string name="add_account" msgid="8201790677994503186">"Gehitu kontua"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Gehitu beste kontu bat"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Esportatu datu-baseko fitxategiak"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"gehitu kontaktu berri bat"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ikusi gehiago"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ikusi gutxiago"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ikusi guztiak"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Azkenak"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Honi buruz"</string>
- <string name="send_message" msgid="8938418965550543196">"Bidali mezua"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Kopia pertsonala sortzen…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Atzo"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Bihar"</string>
- <string name="today" msgid="8041090779381781781">"Gaur"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Gaur (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Bihar (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g> (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Izenik gabeko gertaera)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Ezarri"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Erakundea"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Goitizena"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Oharra"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Webgunea"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Gertaera"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Erlazioa"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Kontua"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Izena"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Helbide elektronikoa"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefonoa"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Argazkia"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Egin klik kontaktuen editorea zabaltzeko."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Egin klik kontaktuen editorea tolesteko."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"kokapenerako jarraibideak"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"duela gutxiko SMSa. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. sakatu erantzuteko"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sarrerakoa"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"irteerakoa"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"galdua"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"duela gutxiko deia. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. sakatu deitzeko"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Zu: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts-ek hobeto funtzionatzen du pertsonaren Hangouts identifikatzailea idazten baduzu helbide elektronikoaren edo telefonoaren eremuan."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Eremu gehiago"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Aldatu argazkia"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Ezin izan da ireki editorea."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Hemen gordeko da:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> kontuan gordetzen dira kontaktuak. Beste kontu bat hautatzeko, sakatu birritan."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Lotutako kontaktuak (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Lotutako kontaktu bat</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontaktu lotuta"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LOTU KONTAKTUAK"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"UTZI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> bikoiztu posible</item>
- <item quantity="one">Bikoiztu posible bat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Lotutako <xliff:g id="COUNT">%d</xliff:g> kontaktu</item>
- <item quantity="one">Lotutako kontaktu bat</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kontaktu hau"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Baliteke bikoiztuak egotea"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kontaktu hauek pertsona bera izan daitezke. Lotu egin ditzakezu, informazioa kontaktu bakarrean bilduta izateko."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Estekatutako kontaktuak"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Zure kontuetatik"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Atera argazkia"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Argazki guztiak"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Aukeratu argazkia"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Kontua: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Ezabatu <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ezabatu <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Ez da hautatu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> erabiltzailearen kontuko argazkia"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Hautatu da <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> erabiltzailearen kontuko argazkia"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Kontu ezezaguneko argazkia hautatu gabe dago"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Kontu ezezaguneko argazkia hautatu da"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktuen zerrenda eguneratzen ari da hizkuntzaren aldaketa aplikatzeko.\n\nItxaron, mesedez…"</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeatutako zenbakiak"</string>
-</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
new file mode 100644
index 000000000..d9f6e64f0
--- /dev/null
+++ b/res/values-eu/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontaktuak"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontaktuak"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Gehitu kontaktua"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontaktua"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Markatze zuzena"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Mezu zuzena"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Aukeratu kontaktua"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Gehitu kontaktu batean"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Aukeratu kontaktu bat"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Hautatu"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Sortu kontaktua"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Bilatu kontaktuetan"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Gehitu gogokoetan"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Kendu gogokoetatik"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Gogokoetatik kendu da"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Gogokoetan gehitu da"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Editatu"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Ezabatu"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Aldatu argazkia"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Sortu lasterbidea"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Desestekatu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Kendu kontaktuak"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Aldatu etiketaren izena"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Ezabatu etiketa"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Gehitu kontaktua"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Hautatu kontaktuak"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Gehitu kontaktuak"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Kendu etiketatik"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sortu etiketa"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Kontaktuaren loturak desegin eta hainbat kontaktutan banandu nahi duzu?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Banandu"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Egin dituzun aldaketak gorde, eta hautatutako kontaktua hainbat kontaktutan banandu nahi duzu?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Gorde eta banandu"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Egin dituzun aldaketak gorde, eta hautatutako kontaktuarekin lotu nahi duzu?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Gorde eta lotu"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Lotzen"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Lotura kentzen"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Lotu"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ikusi lotutako kontaktuak"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Gorde"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lotu kontaktuak"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Aukeratu <xliff:g id="NAME">%s</xliff:g> kontaktuarekin lotu nahi duzuna:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Gomendatutako kontaktuak"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kontaktu guztiak"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Lotu da <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Estekatu dira kontaktuak"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Ezabatu da <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Ezabatu dira <xliff:g id="NAME_0">%1$s</xliff:g> eta <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Ezabatu dira <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Ezabatu dira kontaktuak</item>
+ <item quantity="one">Ezabatu da kontaktua</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontaktu</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google-koak"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> kontukoak"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ezarri tonua"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Desbideratu erantzungailura"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ez desbideratu erantzungailura"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Soilik irakurtzekoa da kontaktu hau. Ezin da ezabatu, baina ezkutatu egin dezakezu."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ezkutatu kontaktua"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Ezkutatu egingo dira soilik irakurtzekoak diren kontuak kontaktu honetan; ez dira ezabatuko."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Kontaktua ezabatu nahi duzu?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Hautatutako kontaktuak ezabatu nahi dituzu?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Irakurtzeko soilik diren kontuetako kontaktuak ezin dira ezabatu, baina ezkutatu egin daitezke."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Ezabatzeko hautatu dituzun kontaktuek hainbat kontutako informazioa dute. Irakurtzeko soilik diren kontuetako informazioa kontaktuen zerrendatik ezkutatuko da, baina ez da ezabatuko."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kontaktua ezabatzen baduzu, hainbat kontutatik ezabatuko da informazioa."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Kontaktua ezabatu nahi duzu?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ezabatu"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Ez dago horrelako kontakturik."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Hasierako pantailan gehitu da kontaktua."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Hasierako pantailan gehitu da <xliff:g id="NAME">%s</xliff:g>."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Ez dago irudi erabilgarririk gailuan."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktuaren argazkia"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Etiketa pertsonalizatuaren izena"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Kendu argazkia"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Hutsik dago kontaktuen zerrenda"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Ez dago etiketa hau duen kontakturik"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Ez dago kontakturik kontu honetan"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Hutsik dago kontaktuen zerrenda"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Gorde da <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Gorde da kontaktua"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kendu dira kontaktuaren loturak"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ezin izan dira gorde kontaktuari egindako aldaketak"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ezin izan da kendu kontaktuaren lotura"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ezin izan da lotu kontaktua"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore bat gertatu da kontaktua gordetzean"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ezin izan dira gorde kontaktuaren argazkiari egindako aldaketak"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ezin izan da kargatu etiketa"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Ezabatu da etiketa"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Sortu da etiketa"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ezin da sortu etiketa"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Eguneratu da etiketa"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Kendu zaie etiketa"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Gehitu zaie etiketa"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ezin izan dira gorde etiketen aldaketak"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Badago etiketa"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Kontaktu batzuek ez dute helbide elektronikorik."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Kontaktu batzuek ez dute telefono-zenbakirik."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Bidali mezu elektronikoa"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Bidali mezua"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Aukeratu kontaktuak"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Bidali"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Ez dago kontakturik"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktuetan gehitu?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Kontaktuen izenak"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Egin klik hemen aurreko pantailara itzultzeko"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Gehitu telefono-zenbakia"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Gehitu helbide elektronikoa"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Ez da ekintza kudeatzeko aplikaziorik aurkitu."</string>
+ <string name="menu_share" msgid="943789700636542260">"Partekatu"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Gehitu kontaktuetan"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Gehitu"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Partekatu kontaktuak honen bidez</item>
+ <item quantity="one">Partekatu kontaktua honen bidez</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Aukeratu kontua"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Sortu etiketa"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Aldatu etiketaren izena"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiketaren izena"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketa-izena"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Ahots-txata"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Bideo-txata"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktua"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> kontua"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Atera argazkia"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Atera beste argazki bat"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Aukeratu argazkia"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Hautatu beste argazki bat"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Bilatzen…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketa"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Utzi"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Atzera"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"itxi"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Hautatutako kontaktua editatu nahi duzu? Orain arte idatzi duzun informazioa kopiatu egingo da."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> direktorioa"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Ezarpenak"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Ezarpenak"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Laguntza eta iritziak"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Telefono-zenbakia"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Gehitu kontaktuetan"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Itxi"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Sartu urtea"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Gehitu kontua"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Inportatu"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Sortu…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" taldea ezabatu nahi duzu? (Ez dira kontaktuak ezabatuko.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Beste batekin lotu aurretik, idatzi kontaktuaren izena."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Kopiatu arbelean"</string>
+ <string name="set_default" msgid="4417505153468300351">"Ezarri lehenetsi gisa"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Garbitu metodo lehenetsia"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Testua kopiatu da"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Aldaketak baztertu nahi dituzu?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Baztertu"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Utzi"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Pertsonalizazioak baztertu nahi dituzu?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Bilatu kontaktuetan"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kendu kontaktuak"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Gailuko profila"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Nire <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profila"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Hartu minutu pare bat Google-ko kontaktuen babeskopiak gordeko dituen kontu bat gehitzeko."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> kontuan gordeko dira kontaktu berriak."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Aukeratu kontaktu berriak gordetzeko erabili nahi duzun kontua:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Sortu kontaktua"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editatu kontaktua"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Ikusi soilik"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Aukeratu editatu beharreko kontaktua"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Lotutako kontaktuak"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Gehitu"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Kendu lotura"</string>
+ <string name="add_account" msgid="8201790677994503186">"Gehitu kontua"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Gehitu beste kontu bat"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Esportatu datu-baseko fitxategiak"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Sortu kontaktua"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ikusi gehiago"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ikusi gutxiago"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Azkenak"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Honi buruz"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Kopia pertsonala sortzen…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Bihar"</string>
+ <string name="today" msgid="8041090779381781781">"Gaur"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Gaur (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Bihar (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> (<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>)"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Izenik gabeko gertaera)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Ezarri"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Erakundea"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Goitizena"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Oharra"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Webgunea"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Gertaera"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Erlazioa"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Izena"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Helbide elektronikoa"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefonoa"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"kokapenerako jarraibideak"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"duela gutxiko SMSa. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. sakatu erantzuteko"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sarrerakoa"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"irteerakoa"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"galdua"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"duela gutxiko deia. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. sakatu deitzeko"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Zu: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Eremu gehiago"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Aldatu kontaktuaren argazkia"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Gehitu kontaktuaren argazkia"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontaktuaren argazkia"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Ezin izan da ireki editorea."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Kontu honetan gordeko da:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ezin da editatu <xliff:g id="ACCOUNT">%s</xliff:g> kontuko kontaktuaren informazioa"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LOTU KONTAKTUAK"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"UTZI"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kontaktu hau"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Baliteke bikoiztuak egotea"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kontaktu hauek pertsona bera izan daitezke. Lotu egin ditzakezu, informazioa kontaktu bakarrean bilduta izateko."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Ezabatu <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ezabatu <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Iradokizunak"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Berriak"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Ireki nabigazio-panel lerrakorra"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Itxi nabigazio-panel lerrakorra"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> etiketa"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketak"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Kontuak"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Ikusi hemen historia osoa"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Gertaerak eta mezuak"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Gertaerak"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mezuak"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Iradokizunak"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Izan kontaktuak antolatuta, erabilgarriak izan daitezen"</string>
+ <string name="undo" msgid="1425165101664071422">"Desegin"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Deitu <xliff:g id="CUSTOM_LABEL">%s</xliff:g> zenbakira"</string>
+ <string name="call_home" msgid="1990519474420545392">"Deitu etxera"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Deitu mugikorrera"</string>
+ <string name="call_work" msgid="5328785911463744028">"Deitu lanera"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Deitu laneko faxera"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Deitu etxeko faxera"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Deitu bilagailura"</string>
+ <string name="call_other" msgid="8563753966926932052">"Deitu"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Dei bidezko erantzuna"</string>
+ <string name="call_car" msgid="3280537320306436445">"Deitu autoko telefonora"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Deitu enpresaren zenbaki nagusira"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Deitu ISDN zenbakira"</string>
+ <string name="call_main" msgid="6082900571803441339">"Deitu zenbaki nagusira"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Deitu faxera"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Deitu irratira"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Deitu telexera"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Deitu TTY/TDD zenbakira"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Deitu laneko mugikorrera"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Deitu laneko bilagailura"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Deitu <xliff:g id="CUSTOM_LABEL">%s</xliff:g> zenbakira"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Deitu MMS zenbakira"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (deitu)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Bidali testu-mezu bat <xliff:g id="CUSTOM_LABEL">%s</xliff:g> zenbakira"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Bidali testu-mezua etxera"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Bidali testu-mezua mugikorrera"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Bidali testu-mezua lanera"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Bidali testu-mezua laneko faxera"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Bidali testu-mezua etxeko faxera"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Bidali testu-mezua bilagailura"</string>
+ <string name="sms_other" msgid="806127844607642331">"Bidali testu-mezua"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Testu bidezko erantzuna"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Bidali testu-mezua autora"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Bidali testu-mezua enpresako zenbaki nagusira"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Bidali testu-mezua ISDN zenbakira"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Bidali testu-mezua zenbaki nagusira"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Bidali testu-mezua faxera"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Bidali testu-mezua irratira"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Bidali testu-mezua telexera"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Bidali testu-mezua TTY/TDD zenbakira"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Bidali testu-mezua laneko mugikorrera"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Bidali testu-mezua laneko bilagailura"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Bidali testu-mezua <xliff:g id="ASSISTANT">%s</xliff:g> zenbakira"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Bidali testu-mezua MMS zenbakira"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (bidali SMS mezua)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Egin bideo-deia"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Sarri erabilitako kontaktuak garbitu?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Kontaktuak eta Telefonoa aplikazioetako maiz erabilitako kontaktuen zerrenda garbituko duzu. Beraz, berriro ikasi beharko dituzte helbideen hobespenak posta elektronikoaren aplikazioek."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Sarri erabilitako kontaktuak garbitzen…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Libre"</string>
+ <string name="status_away" msgid="1838861100379804730">"Kanpoan"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Okupatuta"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Bestelakoak"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktorioa"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Laneko kontaktuak"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Kontaktu guztiak"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Honen kontaktu bizkorra: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Izenik ez)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sarri kontaktatutakoak"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Telefono-zenbakiak dituzten kontaktu guztiak"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Laneko profileko kontaktuak"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ikusi berritasunak"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Gailua"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM txartela"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Izena"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Goitizena"</string>
+ <string name="name_given" msgid="4280790853455320619">"Izena"</string>
+ <string name="name_family" msgid="7466985689626017037">"Abizena"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Izenaren aurrizkia"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Bigarren izena"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Izenaren atzizkia"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Izen fonetikoa"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Izen fonetikoa"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Bigarren izen fonetikoa"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Abizen fonetikoa"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefonoa"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Helbide elektronikoa"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Helbidea"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Erakundea"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Harremana"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data berezia"</string>
+ <string name="sms" msgid="1756857139634224222">"Testu-mezua"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Helbidea"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Enpresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Lanpostua"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Oharrak"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Pertsonalizatua"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Webgunea"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketak"</string>
+ <string name="email_home" msgid="8573740658148184279">"Bidali mezu elektronikoa etxera"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Bidali mezu elektronikoa mugikorrera"</string>
+ <string name="email_work" msgid="2807430017302722689">"Bidali mezu elektronikoa lanera"</string>
+ <string name="email_other" msgid="3454004077967657109">"Bidali mezu elektronikoa"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Bidali mezu elektroniko bat <xliff:g id="CUSTOM_LABEL">%s</xliff:g> helbidera"</string>
+ <string name="email" msgid="5668400997660065897">"Bidali mezu elektronikoa"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Kalea"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Hiria"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estatua"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Posta-kodea"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Herrialdea"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ikusi etxeko helbidea"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ikusi laneko helbidea"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ikusi helbidea"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ikusi <xliff:g id="CUSTOM_LABEL">%s</xliff:g> helbidea"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Txateatu AIM bidez"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Txateatu Windows Live bidez"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Txateatu Yahoo bidez"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Txateatu Skype bidez"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Txateatu QQ bidez"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Txateatu Google Talk bidez"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Txateatu ICQ bidez"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Txateatu Jabber bidez"</string>
+ <string name="chat" msgid="9025361898797412245">"Txata"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ezabatu"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Erakutsi izenen eremu gehiago"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Tolestu izenen eremuak"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Erakutsi izen fonetikoen eremu gehiago"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Tolestu izen fonetikoen eremuak"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Zabaldu"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Tolestu"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Zabaldu da"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Tolestu da"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kontaktu guztiak"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Izardunak"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Pertsonalizatua"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Hautatutako kontaktua"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Gainerako kontaktuak"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Kontaktu guztiak"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Kendu sinkronizazio-taldea"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Gehitu sinkronizazio-taldea"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Talde gehiago…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" sinkronizaziotik kentzen baduzu, talderik gabeko kontaktu guztiak ere ezabatuko dira."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Bistaratze-aukerak gordetzen…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Ikuspegi pertsonalizatua"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gorde inportatutako kontaktuak hemen:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM txartela"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM txartela"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontaktu</item>
+ <item quantity="one">1 kontaktu</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktu • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontaktu • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf fitxategia"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ez dago ezer inportatzeko"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard fitxategitik inportatu nahi dituzu kontaktuak?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> fitxategiaren inportazioa bertan behera utzi nahi duzu?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> fitxategiaren esportazioa bertan behera utzi nahi duzu?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Ezin da vCard inportazioa edo esportazioa utzi"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Errore ezezaguna."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ezin izan da \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ireki. Arrazoia: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ezin izan da esportatzailea hasi. Arrazoia: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ez dago esporta daitekeen kontakturik."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Beharrezkoa den baimen bat desgaitu duzu."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Errore bat gertatu da esportatu bitartean. Arrazoia: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Sarrera- edo irteera-errorea"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ez dago behar adina memoria. Baliteke fitxategia handiegia izatea."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatua ez da bateragarria."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Amaitu da <xliff:g id="FILENAME">%s</xliff:g> esportatzen."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Esportatu dira kontaktuak."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Esportatu dira kontaktuak. Haiek partekatzeko, egin klik jakinarazpenean."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Sakatu kontaktuak partekatzeko."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> fitxategia esportatzeari utzi zaio."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktuen datuak esportatzen"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktuen datuak esportatzen ari dira."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ezin izan da datu-baseko informazioa lortu."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ez dago esporta daitekeen kontakturik."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard txartelen idazlea ez da behar bezala hasi."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Ezin izan da esportatu"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Ez dira kontaktuaren datuak esportatu.\nArrazoia: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> inportatzen"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ezin izan dira vCard datuak irakurri"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard fitxategia inportatzen amaitu da"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> fitxategiaren inportazioa utzi egin da"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> fitxategia laster inportatuko da."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fitxategia laster inportatuko da."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard fitxategia inportatzeko eskaera ukatu da. Saiatu geroago."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Laster esportatuko dira kontaktuak."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard fitxategia esportatzeko eskaera ukatu da. Saiatu berriro geroago."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktua"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-ak aldi baterako biltegi lokalaren cachean gordetzen ari dira. Inportazioa bera laster hasiko da."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Ezin izan da vCard fitxategia inportatu."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontaktua NFC bidez jaso da"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Cachean gordetzen"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> inportatzen: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Esportatu .vcf gisa"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenatzeko irizpidea"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Izen fonetikoa"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Erakutsi beti"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Hutsik badago, ezkutatu"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Izena"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Abizena"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Izenaren formatua"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Izena lehenengo"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Abizena lehenengo"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Kontuak"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Kontaktu berriak gordetzeko kontu lehenetsia"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Nire informazioa"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Konfiguratu profila"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Kontaktuak zerbitzuari buruz"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Partekatu gogoko kontaktuak"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Partekatu kontaktu guztiak"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Ezin izan dira partekatu kontaktuak."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Esportatu kontaktuak"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Inportatu kontaktuak hemendik:"</string>
+ <string name="share_error" msgid="948429331673358107">"Ezin da kontaktua partekatu."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Ez dago parteka daitekeen kontakturik."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Bistaratu beharreko kontaktuak"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Bistaratu beharrekoak"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Pertsonalizatu ikuspegia"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gorde"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Bilatu kontaktuetan"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gogokoak"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Inportatu"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Esportatu"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeatutako zenbakiak"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> bidez"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="SOURCE">%2$s</xliff:g> bidez"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"gelditu bilaketa"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Garbitu bilaketa"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Kontua"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Erabili beti hau deietarako"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Egin deia ohar batekin"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Idatzi deiarekin batera bidali beharreko oharra…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"BIDALI ETA DEITU"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Konpilazioaren bertsioa"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Kode irekiko lizentziak"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Kode irekiko softwarearen lizentziaren xehetasunak"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Pribatutasun-gidalerroak"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Zerbitzu-baldintzak"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Kode irekiko lizentziak"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Ezin izan da ireki URLa."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> hautatu da"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Ez da hautatu <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Egin bideo-deia"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Ezabatu"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsia"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Lasterbidea desgaitu egin da"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kendu da kontaktua"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Inportatu"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Hautatu kontaktuak"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Ez duzu kontakturik SIM txartelean"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontaktua lehendik duzu zerrendan"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">SIM txarteleko <xliff:g id="COUNT">%d</xliff:g> kontaktu inportatu dira</item>
+ <item quantity="one">SIM txarteleko 1 kontaktu inportatu da</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ezin izan dira inportatu SIM txarteleko kontaktuak"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Inportatu SIM txarteletik"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Utzi"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Desaktibatuta dago sinkronizazio automatikoa. Sakatu aktibatzeko."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Baztertu"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Desaktibatuta dago kontuaren sinkronizazioa. Sakatu aktibatzeko."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Sinkronizazio automatikoa aktibatu nahi duzu?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Webgunearekin eta gailuekin sinkronizatuko dira aplikazio eta kontu guztietan egiten dituzun aldaketak, ez bakarrik Google Kontaktuak aplikazioan egiten dituzunak."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktibatu"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ez dago konexiorik"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM txart."</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Erakutsi gehiago"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Inportatu da SIM txartela"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Ezin izan da inportatu"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Ezin izan dira inportatu SIM txarteleko kontaktuak"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM txartela inportatzen"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Jakinarazpenak"</string>
+</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0241f2095..12a153f7b 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"مخاطبین"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"مخاطبین"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"مشاهده مخاطب"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"ویرایش مخاطب"</string>
<string name="contactsList" msgid="8661624236494819731">"مخاطبین"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"افزودن مخاطب"</string>
<string name="shortcutContact" msgid="749243779392912958">"مخاطب"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"شماره گیری مستقیم"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"پیام جدید"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"انتخاب میان‌بر برای مخاطب"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"انتخاب یک شماره برای تماس"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"انتخاب یک شماره برای پیام"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"انتخاب مخاطب"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"افزودن به مخاطب"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"انتخاب مخاطب"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"انتخاب"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ایجاد مخاطب جدید"</string>
- <string name="starredList" msgid="4817256136413959463">"ستاره‌دار"</string>
- <string name="frequentList" msgid="7154768136473953056">"همیشگی"</string>
- <string name="strequentList" msgid="5640192862059373511">"موارد دلخواه"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"اطلاعات تماس"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ویرایش مخاطب"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ایجاد مخاطب"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ویرایش گروه"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ایجاد گروه"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"درباره"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"نسخه‌های به روز"</string>
<string name="searchHint" msgid="8482945356247760701">"جستجوی مخاطبین"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"مشاهده مخاطب"</string>
<string name="menu_addStar" msgid="2908478235715404876">"افزودن به موارد دلخواه"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"حذف از موارد دلخواه"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"از موارد دلخواه حذف می‌شود"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"ویرایش"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"تغییر عکس"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"گذاشتن روی صفحه اصلی"</string>
- <string name="menu_call" msgid="3992595586042260618">"تماس با مخاطب"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ارسال متن به مخاطب"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ایجاد میان‌بر"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"لغو ارتباط"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ویرایش"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"حذف"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"افزودن مخاطب"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"افزودن گروه"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"حذف مخاطبین"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"تغییر نام برچسب"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"حذف برچسب"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"افزودن مخاطب"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"انتخاب مخاطبین"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"افزودن مخاطبین"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"حذف از برچسب"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ایجاد برچسب"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"این مخاطب به چند مخاطب لغو پیوند شود؟"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"لغو پیوند"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"می‌خواهید تغییراتی را که قبلاً ایجاد کرده‌اید، ذخیره کنید و این مخاطب را به چند مخاطب لغو پیوند کنید؟"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ذخیره و لغو پیوند"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"می‌خواهید تغییراتی را که قبلاً ایجاد کرده‌اید، ذخیره کنید و با مخاطب انتخاب‌شده پیوند دهید؟"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ذخیره و پیوند کردن"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"درحال پیوند دادن"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"درحال لغو پیوند"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"پیوند"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"مشاهده مخاطبین پیوندداده‌شده"</string>
<string name="menu_save" msgid="1727844363591825909">"ذخیره‌"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"پیوند دادن مخاطبین"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"مخاطبی را که می‌خواهید با <xliff:g id="NAME">%s</xliff:g> پیوند دهید، انتخاب کنید:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"نمایش همه مخاطبین"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مخاطبین پیشنهادی"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"همه مخاطبین"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> پیوند داده شد"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"مخاطبین پیوند داده شدند"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> حذف شد"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> و <xliff:g id="NAME_1">%2$s</xliff:g> حذف شدند"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>، <xliff:g id="NAME_1">%2$s</xliff:g>، <xliff:g id="NAME_2">%3$s</xliff:g>... حذف شد"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">مخاطب حذف شد</item>
<item quantity="other">مخاطب حذف شد</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> مخاطب</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> مخاطب</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"‏از Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"از <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"تنظیم آهنگ زنگ"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"همه تماس‌ها به پست صوتی"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"مخاطبین از حساب‌های فقط خواندنی شما قابل حذف نیستند، اما می‌توان آن‌ها را پنهان کرد."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"پنهان کردن"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"مخاطبی که برای حذف انتخاب کرده‌اید، جزئیاتی از چند حساب دارد. جزئیات از حساب‌های فقط خواندنی حذف نمی‌شود، بلکه پنهان می‌شود."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"برای پیوند دادن، حداقل باید دو مخاطب انتخاب شوند."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"مخاطبین انتخاب‌شده پیوند داده شوند؟"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"پیوند کردن"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"هدایت به پست صوتی"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"لغو هدایت به پست صوتی"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"این مخاطب فقط‌خواندنی است. نمی‌توانید آن را حذف کنید اما می‌توانید پنهان کنید."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"پنهان کردن مخاطب"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"حساب‌های فقط‌خواندنی این مخاطب، پنهان هستند اما حذف نمی‌شوند."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"این مخاطب حذف شود؟"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"مخاطبین انتخاب‌شده حذف شوند؟"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"مخاطبین از حساب‌های فقط خواندنی شما قابل حذف نیستند، اما می‌توان آن‌ها را پنهان کرد."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"حذف این مخاطب، جزئیات از چند حساب را حذف می‌کند."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"این مخاطب حذف شود؟"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف"</string>
- <string name="menu_discard" msgid="6854657936970228164">"صرف‌نظر از تغییرات"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"مخاطبی موجود نیست."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"مخاطب به صفحه اصلی اضافه شد."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> به صفحه اصلی اضافه شد."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"ایجاد مخاطب جدید"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"ایجاد مخاطب جدید"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"سازمان"</item>
- <item msgid="7196592230748086755">"توجه"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"عکسی در رایانهٔ لوحی موجود نیست."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"عکسی در گوشی موجود نیست."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"هیچ عکسی در دستگاه موجود نیست."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"عکس مخاطب"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"نام برچسب سفارشی"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ارسال تماس به صورت مستقیم به پست صوتی"</string>
<string name="removePhoto" msgid="4898105274130284565">"حذف عکس"</string>
- <string name="noContacts" msgid="4955659076981974652">"مخاطبی موجود نیست"</string>
- <string name="noGroups" msgid="8614664663561385253">"گروهی وجود ندارد."</string>
- <string name="noAccounts" msgid="7768267764545265909">"برای ایجاد گروه‌ها، نیاز به یک حساب دارید."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"هیچ فردی در این گروه نیست."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"برای افزودن چند عضو، گروه را ویرایش کنید."</string>
- <string name="savingContact" msgid="4075751076741924939">"در حال ذخیره مخاطب..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"فهرست مخاطبینتان خالی است"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"هیچ مخاطبی با این برچسب وجود ندارد"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"هیچ مخاطبی در این حساب نیست"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"فهرست مخاطبینتان خالی است"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ذخیره شد"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"مخاطب ذخیره شد"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"ارتباط مخاطبین لغو شد."</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ذخیره تغییرات مخاطب انجام نشد."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"مخاطب جدا نشد."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"مخاطب پیوند داده نشد."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"خطا هنگام ذخیره مخاطب."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ذخیره تغییرات عکس مخاطب انجام نشد."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"گروه ذخیره شد."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ذخیرهٔ تغییرات گروه انجام نشد."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب با شماره تلفن</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب با شماره تلفن</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"مخاطبی با شماره تلفن موجود نیست"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"تغییرات مخاطب ذخیره نشد"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"مخاطب لغو پیوند نشد"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"مخاطب پیوند داده نشد"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"خطا در ذخیره مخاطب"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تغییرات عکس مخاطب ذخیره نشد"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"برچسب بار نشد"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"برچسب حذف شد"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"برچسب ایجاد شد"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"برچسب ایجاد نشد"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"برچسب به‌روزرسانی شد"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"از برچسب حذف شد"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"به برچسب اضافه شد"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"تغییرات برچسب ذخیره نشد"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"این برچسب از قبل موجود است"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"بعضی از مخاطبین رایانامه ندارند."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"بعضی از مخاطبین شماره تلفن ندارند."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ارسال رایانامه"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ارسال پیام"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"انتخاب مخاطبین"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ارسال"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"مخاطبی موجود نیست"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"همه"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"موارد دلخواه"</string>
- <string name="callBack" msgid="5498224409038809224">"بازگرداندن تماس"</string>
- <string name="callAgain" msgid="3197312117049874778">"تماس مجدد"</string>
- <string name="returnCall" msgid="8171961914203617813">"برگرداندن تماس"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" به مخاطبین افزوده شود؟"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"عکس مخاطب"</string>
- <string name="description_plus_button" msgid="515164827856229880">"به اضافه"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> مخاطب"</string>
<string name="search_settings_description" msgid="2675223022992445813">"نام‌های مخاطبین شما"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"برنامه‌ای برای انجام این عملکرد یافت نشد."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"برای بازگشت به صفحه قبلی کلیک کنید"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"افزودن شماره تلفن"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"افزودن رایانامه"</string>
<string name="missing_app" msgid="1466111003546611387">"برنامه‌ای برای انجام این عملکرد یافت نشد."</string>
<string name="menu_share" msgid="943789700636542260">"اشتراک‌گذاری"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"افزودن به مخاطبین"</string>
- <string name="share_via" msgid="563121028023030093">"اشتراک‌گذاری مخاطب از طریق"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ایجاد گروه تحت حساب کاربری"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"افزودن"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">اشتراک‌گذاری مخاطبین از طریق</item>
+ <item quantity="other">اشتراک‌گذاری مخاطبین از طریق</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"انتخاب حساب"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ایجاد برچسب"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"تغییر نام برچسب"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"نام برچسب"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"نام برچسب"</string>
<string name="audio_chat" msgid="2535716629358298691">"گپ صوتی"</string>
<string name="video_chat" msgid="1872255818640336072">"گپ ویدئویی"</string>
- <string name="connections" msgid="8098440723172028350">"اتصال‌ها"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"افزودن اتصال"</string>
- <string name="recent" msgid="2659189233141493004">"اخیر"</string>
- <string name="recent_updates" msgid="4267258535615860710">"به‌روزرسانی‌های اخیر"</string>
<string name="account_type_format" msgid="718948015590343010">"مخاطب <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"حساب <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"از این برنامه قابل ویرایش نیست."</string>
- <string name="group_read_only" msgid="1061762906115697637">"در این دستگاه قابل ویرایش نیست."</string>
<string name="take_photo" msgid="7496128293167402354">"عکس گرفتن"</string>
<string name="take_new_photo" msgid="7341354729436576304">"عکس جدید گرفتن"</string>
<string name="pick_photo" msgid="2129509985223564942">"انتخاب عکس"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"انتخاب عکس جدید"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"فهرست مخاطبین در حال به‌روزرسانی است."</string>
<string name="search_results_searching" msgid="3984833028938569930">"در حال جستجو..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"نمایش موارد انتخاب شده"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"نمایش همه"</string>
- <string name="menu_select_all" msgid="621719255150713545">"انتخاب همه"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"لغو انتخاب همهٔ موارد"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"افزودن مورد جدید"</string>
- <string name="add_organization" msgid="7311893231158291197">"افزودن سازمان"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"تاریخ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"نام گروه"</string>
- <string name="change_photo" msgid="8530597935483526383">"تغییر"</string>
- <string name="primary_photo" msgid="8517942231868516999">"عکس اصلی"</string>
- <string name="description_star" msgid="2605854427360036550">"مورد دلخواه"</string>
- <string name="edit_contact" msgid="7529281274005689512">"ویرایش مخاطب"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"مخاطب فعلی به مخاطب انتخاب شده پیوند داده شود؟"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"برچسب"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"لغو"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"برگشت"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بستن"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"به ویرایش مخاطب انتخابی می‌روید؟ اطلاعاتی که تا حال وارد کرده‌اید کپی خواهد شد."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"کپی در مخاطبین من"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"افزودن به مخاطبین من"</string>
<string name="contact_directory_description" msgid="683398073603909119">"دایرکتوری <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"سفارشی"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"تنظیمات"</string>
<string name="menu_settings" msgid="377929915873428211">"تنظیمات"</string>
<string name="menu_help" msgid="1680178646764069976">"راهنما و بازخورد"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"گزینه‌های نمایش"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"شماره تلفن"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"افزودن به مخاطبین"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"افزودن به مخاطب"</string>
<string name="non_phone_close" msgid="7608506439725515667">"بستن"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"سال لحاظ شود"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"مخاطب"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"در حال بارکردن…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ایجاد مخاطب جدید"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"افزودن حساب"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"وارد کردن مخاطبین"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"ایجاد گروه جدید"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"ایجاد گروه جدید"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> گروه</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> گروه</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"مطمئنید می‌خواهید گروه \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" حذف شود؟ (مخاطبین خودشان حذف نخواهند شد.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> نفر از <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> نفر</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> نفر</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"وارد کردن"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"ایجاد مورد جدید..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"برچسب «<xliff:g id="GROUP_LABEL">%1$s</xliff:g>» حذف شود؟ (مخاطبین حذف نخواهند شد.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"قبل از پیوند دادن با مخاطب دیگر، نام مخاطب را تایپ کنید."</string>
<string name="copy_text" msgid="3257145021583508761">"کپی در بریده‌دان"</string>
<string name="set_default" msgid="4417505153468300351">"تنظیم پیش‌فرض"</string>
<string name="clear_default" msgid="7193185801596678067">"پاک کردن پیش فرض‌ها"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"متن کپی شده"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"از تغییراتتان صرف‌نظر می‌کنید و از ویرایش خارج می‌شوید؟"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"از تغییرات صرف‌نظر شود؟"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"صرف‌نظر کردن"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"حفظ ویرایش"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"راه‌اندازی نمایه من"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"نام شخص را تایپ کنید"</string>
- <string name="group_name_hint" msgid="238359485263401293">"نام گروه"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"لغو"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"از موارد سفارشی صرف‌نظر شود؟"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"جستجوی مخاطبین"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"حذف مخاطبین"</string>
<string name="local_profile_title" msgid="2021416826991393684">"نمایه محلی من"</string>
<string name="external_profile_title" msgid="8034998767621359438">"نمایه <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> من"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"نمایش همه مخاطبان"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"مخاطبین خود را ایمن نگهدارید حتی اگر گوشی شما گم شود: با یک سرویس آنلاین همگام‌سازی کنید."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"افزودن یک حساب"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"از مخاطب جدیدتان نسخه پشتبان تهیه نمی‌شود. حسابی را اضافه می‌کنید که از مخاطبین به‌صورت آنلاین نسخه پشتیبان تهیه کند؟"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏کمی وقت بگذارید و حسابی را اضافه کنید تا از مخاطبینتان در Google نسخه پشتیبان تهیه شود."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"مخاطب‌های جدید در <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ذخیره می‌شوند."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"انتخاب حساب پیش‌فرض برای مخاطبین جدید:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"افزودن مخاطب جدید"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"ایجاد مخاطب جدید"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ویرایش مخاطب"</string>
- <string name="keep_local" msgid="1258761699192993322">"ذخیره به‌صورت محلی"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"فقط مشاهده"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"انتخاب مخاطب برای ویرایش"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"مخاطبین پیوندداده‌شده"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"افزودن"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"لغو پیوند"</string>
<string name="add_account" msgid="8201790677994503186">"افزودن حساب"</string>
<string name="add_new_account" msgid="5748627740680940264">"افزودن حساب جدید"</string>
<string name="menu_export_database" msgid="2659719297530170820">"صدور فایل‌های پایگاه داده"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"افزودن مخاطب جدید"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"ایجاد مخاطب جدید"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"مشاهده موارد بیشتر"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"مشاهده موارد کمتر"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"مشاهده همه"</string>
<string name="recent_card_title" msgid="8982782042698001695">"اخیر"</string>
<string name="about_card_title" msgid="2920942314212825637">"درباره"</string>
- <string name="send_message" msgid="8938418965550543196">"ارسال پیام"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"در حال ایجاد یک کپی شخصی..."</string>
- <string name="yesterday" msgid="6840858548955018569">"دیروز"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ایجاد یک کپی شخصی..."</string>
<string name="tomorrow" msgid="6241969467795308581">"فردا"</string>
<string name="today" msgid="8041090779381781781">"امروز"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"امروز در <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"فردا در <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>، ‏<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>، ‏<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(رویداد بدون عنوان)"</string>
<string name="date_time_set" msgid="4761419824439606690">"تنظیم"</string>
<string name="header_im_entry" msgid="3581720979640225615">"پیام فوری"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"وب‌سایت"</string>
<string name="header_event_entry" msgid="6738250422744401460">"رویداد"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"رابطه"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"حساب"</string>
<string name="header_name_entry" msgid="1592791008096288306">"نام"</string>
<string name="header_email_entry" msgid="8666093061171624478">"رایانامه"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"تلفن"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"عکس"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"برای بزرگ کردن ویرایشگر مخاطب کلیک کنید."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"برای کوچک کردن ویرایشگر مخاطب کلیک کنید."</string>
<string name="content_description_directions" msgid="2686791825798189335">"مسیرها به مکان"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"پیامک اخیر. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. ‏<xliff:g id="PHONE_NUMBER">%s</xliff:g>. ‏<xliff:g id="DATE">%s</xliff:g>. برای پاسخ دادن کلیک کنید"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"پیامک اخیر. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. ‏<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. ‏<xliff:g id="DATE">%3$s</xliff:g>. برای پاسخ دادن کلیک کنید"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ورودی"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"خروجی"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"بی‌پاسخ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"تماس اخیر. <xliff:g id="CALL_TYPE">%s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%s</xliff:g>‏. ‏<xliff:g id="DATE">%s</xliff:g>. برای بازگرداندن تماس کلیک کنید"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"تماس اخیر. <xliff:g id="CALL_TYPE">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. ‏<xliff:g id="DATE">%3$s</xliff:g>. برای بازگرداندن تماس کلیک کنید"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"شما: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏وقتی شناسه Hangouts شخص را در فیلد رایانامه یا فیلد تلفن وارد کنید، Hangouts بهتر کار می‌کند."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"فیلدهای بیشتر"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تغییر عکس"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ویرایشگر باز نشد."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ذخیره در"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"درحال‌ حاضر در <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ذخیره می‌شود. برای انتخاب حساب دیگری، دوضربه سریع بزنید."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">مخاطبین پیوند داده شده (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">مخاطبین پیوند داده شده (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"فیلدهای بیشتر"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"تغییر عکس مخاطب"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"افزودن عکس مخاطب"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"عکس مخاطب"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ویرایشگر باز نشد."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ذخیره در"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"اطلاعات تماس از <xliff:g id="ACCOUNT">%s</xliff:g> قابل ویرایش نیست"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"پیوند دادن مخاطبین"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"لغو"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب تکراری احتمالی</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب تکراری احتمالی</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"این مخاطب"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"مخاطبین تکراری ممکن"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"ممکن است این مخاطب‌ها یک نفر باشند. می‌توانید آن‌ها را به‌عنوان یک مخاطب به هم پیوند دهید."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"مخاطب‌های پیوند داده شده"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"از حساب‌های شما"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"عکس گرفتن"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"همه عکس‌ها"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"انتخاب عکس"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"از <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"حذف <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"عکس <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> انتخاب نشد"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"عکس <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> انتخاب شد"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"عکس از حساب نامشخص انتخاب نشده است"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"عکس از حساب نامشخص انتخاب شده است"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"فهرست مخاطبین جهت اعمال تغییر زبان در حال به‌روزرسانی است.\n\nلطفاً منتظر بمانید..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"پیشنهادها"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"جدید"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"بازکردن کشوی پیمایش"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"بستن کشوی پیمایش"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"برچسب «<xliff:g id="LABEL_NAME">%s</xliff:g>»"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"برچسب‌ها"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"حساب‌ها"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"سابقه‌تان را با یکدیگر ببینید"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"رویدادها و پیام‌ها"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"رویدادها"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"پیام‌ها"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"پیشنهادها"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"مخاطبینی منظم و مفید داشته باشید"</string>
+ <string name="undo" msgid="1425165101664071422">"واگرد"</string>
+ <string name="call_custom" msgid="6385303130912713318">"تماس با <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"تماس با خانه"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"تماس با تلفن همراه"</string>
+ <string name="call_work" msgid="5328785911463744028">"تماس با محل کار"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"تماس با نمابر محل کار"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"تماس با نمابر خانه"</string>
+ <string name="call_pager" msgid="9003902812293983281">"تماس با پیجو"</string>
+ <string name="call_other" msgid="8563753966926932052">"تماس"</string>
+ <string name="call_callback" msgid="1910165691349426858">"تماس با شماره بازگرداندن تماس"</string>
+ <string name="call_car" msgid="3280537320306436445">"تماس با تلفن خودرو"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"تماس با خط اصلی شرکت"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"‏تماس با ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"تماس با خط اصلی"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"تماس با نمابر"</string>
+ <string name="call_radio" msgid="8296755876398357063">"تماس با تلفن رادیویی"</string>
+ <string name="call_telex" msgid="2223170774548648114">"تماس با تلکس"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"‏تماس با TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"تماس با تلفن همراه محل کار"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"تماس با پی‌جوی محل کار"</string>
+ <string name="call_assistant" msgid="670941612175068337">"تماس با <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"تماس با فراپیام"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (تماس)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ارسال پیام نوشتاری به <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ارسال متن به تلفن خانه"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ارسال متن به تلفن همراه"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ارسال متن به محل کار"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ارسال متن به نمابر محل کار"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ارسال متن به نمابر خانه"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ارسال متن به پی‌جو"</string>
+ <string name="sms_other" msgid="806127844607642331">"ارسال متن"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ارسال متن برگرداندن پاسخ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ارسال متن به تلفن خودرو"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ارسال متن به خط اصلی شرکت"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"‏ارسال متن به ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ارسال متن به خط اصلی"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ارسال متن به نمابر"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ارسال متن به تلفن رادیویی"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ارسال متن به تلکس"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"‏ارسال متن به TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ارسال متن به تلفن همراه محل کار"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ارسال متن به پی‌جوی محل کار"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"ارسال متن به <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"ارسال متن به فراپیام"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (پیام)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"برقراری تماس ویدئویی"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"فهرست تماس مکرر با مخاطب پاک شود؟"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"با این کار فهرست افرادی که بیشتر با آنها تماس گرفته‌اید در برنامه‌های «مخاطبین» و «تلفن» پاک می‌کنید و برنامه‌های رایانامه را وادار می‌کنید تنظیمات برگزیده مخاطبینتان را از اول یاد بگیرند."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"در حال پاک کردن فهرست تماس مکرر..."</string>
+ <string name="status_available" msgid="5586870015822828392">"در دسترس"</string>
+ <string name="status_away" msgid="1838861100379804730">"غایب"</string>
+ <string name="status_busy" msgid="9147992455450257136">"مشغول"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"سایر موارد"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"دایرکتوری"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"فهرست کار"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"همه مخاطبین"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"تماس سریع برای <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(بدون نام)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"اغلب تماس گرفته شده"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"همه مخاطبین دارای شماره تلفن"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"مخاطبین نمایه کاری"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"مشاهده به‌روزرسانی‌ها"</string>
+ <string name="account_phone" msgid="7128032778471187553">"دستگاه"</string>
+ <string name="account_sim" msgid="6519016427905087952">"سیم کارت"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"نام"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"نام مستعار"</string>
+ <string name="name_given" msgid="4280790853455320619">"نام"</string>
+ <string name="name_family" msgid="7466985689626017037">"نام خانوادگی"</string>
+ <string name="name_prefix" msgid="59756378548779822">"پیشوند نام"</string>
+ <string name="name_middle" msgid="8467433655992690326">"نام میانی"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"پسوند نام"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"تلفظ نام"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"تلفظ نام"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"تلفظ نام میانی"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"تلفظ نام خانوادگی"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"تلفن"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"رایانامه"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"آدرس"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"سازمان"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"رابطه"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"تاریخ ویژه"</string>
+ <string name="sms" msgid="1756857139634224222">"پیام نوشتاری"</string>
+ <string name="postal_address" msgid="8765560217149624536">"آدرس"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"شرکت"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"عنوان"</string>
+ <string name="label_notes" msgid="8337354953278341042">"یادداشت‌ها"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"سفارشی"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"وب سایت"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"برچسب‌ها"</string>
+ <string name="email_home" msgid="8573740658148184279">"رایانامه به خانه"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"رایانامه به تلفن همراه"</string>
+ <string name="email_work" msgid="2807430017302722689">"رایانامه به محل کار"</string>
+ <string name="email_other" msgid="3454004077967657109">"رایانامه"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ارسال رایانامه به <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"رایانامه"</string>
+ <string name="postal_street" msgid="8133143961580058972">"خیابان"</string>
+ <string name="postal_city" msgid="6597491300084895548">"شهر"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ایالت"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"کد پستی"</string>
+ <string name="postal_country" msgid="7638264508416368690">"کشور"</string>
+ <string name="map_home" msgid="1243547733423343982">"مشاهده آدرس منزل"</string>
+ <string name="map_work" msgid="1360474076921878088">"مشاهده آدرس محل کار"</string>
+ <string name="map_other" msgid="3817820803587012641">"مشاهده آدرس"</string>
+ <string name="map_custom" msgid="8761800628069473526">"مشاهده آدرس <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"‏گپ با استفاده از AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"‏گپ با استفاده از Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"‏گپ با استفاده از Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"‏گپ با استفاده از Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"‏گپ با استفاده از QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"‏گپ با استفاده از Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"‏گپ با استفاده از ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"‏گپ با استفاده از Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"گپ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"حذف"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"نمایش فیلدهای نام بیشتر"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"کوچک کردن فیلدهای نام"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"نمایش فیلدهای نام‌آوای بیشتر"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"کوچک کردن فیلدهای نام‌آوا"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"بزرگ کردن"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"کوچک کردن"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"بزرگ شد"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"کوچک شد"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"همه مخاطبین"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ستاره‌دار"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"سفارشی کردن"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"مخاطب"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"همهٔ مخاطبین دیگر"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"همه مخاطبین"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"حذف گروه همگام‌سازی"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"افزودن گروه همگام‌سازی"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"گروه‌های بیشتر..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"حذف \"<xliff:g id="GROUP">%s</xliff:g>\" از همگام‌سازی نیز هر گونه مخاطب گروه‌بندی نشده‌ای را از همگام‌سازی حذف می‌کند."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"در حال ذخیره گزینه‌های نمایش..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"نمای سفارشی‌شده"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ذخیره مخاطبین واردشده در:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"سیم کارت"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"سیم کارت <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">‏‎%1$d مخاطب</item>
+ <item quantity="other">‏‎%1$d مخاطب</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> مخاطب • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> مخاطب • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"‏فایل vcf."</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"چیزی برای وارد کردن نیست"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"‏مخاطبین از vCard وارد شوند؟"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"وارد کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شود؟"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شود؟"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"نمی‌توان وارد کردن/ صادر کردن کارت ویزیت را لغو کرد"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"خطای ناشناس."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" باز نشد: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"صادر کننده راه‌اندازی نشد: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"هیچ مخاطب قابل صدوری موجود نیست."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"یک اجازه الزامی را غیرفعال کردید."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"خطایی در هنگام صادر کردن روی داد: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"خطای ورودی/خروجی"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"حافظه کافی نیست. ممکن است فایل بسیار بزرگ باشد."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"قالب پشتیبانی نمی‌شود."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> پایان یافت."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"صادر کردن مخاطبین تمام شد."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"مخاطبین صادر شدند؛ برای اشتراک‌گذاری مخاطبین، روی اعلان کلیک کنید."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"برای اشتراک‌گذاری مخاطبین ضربه بزنید."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شد."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"صدور اطلاعات مخاطب"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"داده‌های مخاطب در حال صادر شدن است."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"نمی‌توان اطلاعات پایگاه داده را دریافت کرد."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"هیچ مخاطب قابل صدوری وجود ندارد."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"سازنده فایل کارت ویزیت به درستی اجرا نشد."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"صادر نمی‌شود"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"‏داده‎های مخاطب صادر نشد.\nعلت: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"وارد کردن <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"خواندن داده‌های کارت ویزیت ممکن نیست"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"وارد کردن کارت ویزیت <xliff:g id="FILENAME">%s</xliff:g> پایان یافت"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"واردکردن <xliff:g id="FILENAME">%s</xliff:g> لغو شد"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> به زودی وارد می‌شود."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"فایل پس از مدت کوتاهی وارد می‌شود."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"درخواست وارد کردن کارت ویزیت رد شد. لطفاً بعداً امتحان کنید."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"مخاطبین به‌زودی صادر می‌شوند."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"درخواست صدور کارت ویزیت رد شد. لطفاً بعداً امتحان کنید."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"مخاطب"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"در حال ذخیره کارت‌های ویزیت در حافظه موقت محلی است. وارد کردن واقعی به زودی آغاز خواهد شد."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"وارد کردن کارت ویزیت انجام نشد."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏مخاطب از طریق NFC رسید"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"در حال ذخیره در حافظهٔ پنهان"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"وارد کردن <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"‏صادر کردن به فایل ‎.vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"مرتب‌سازی براساس"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"تلفظ نام"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"همیشه نشان داده شود"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"اگر خالی است پنهان شود"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"نام"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"نام خانوادگی"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"قالب نام"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ابتدا نام"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ابتدا نام خانوادگی"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"حساب‌ها"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"حساب پیش‌فرض برای مخاطبین جدید"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"اطلاعات من"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"تنظیم نمایه"</string>
+ <string name="setting_about" msgid="7014388749752042863">"درباره مخاطبین"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"اشتراک‌گذاری مخاطبین دلخواه"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"اشتراک‌گذاری همه مخاطبین"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"مخاطبین به اشتراک گذاشته نشدند."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"صادر کردن مخاطبین"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"وارد کردن مخاطبین از"</string>
+ <string name="share_error" msgid="948429331673358107">"این مخاطب قابل اشتراک‌گذاری نیست."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"مخاطبی برای اشتراک‌گذاری وجود ندارد."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"مخاطبین جهت نمایش"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"مخاطبین جهت نمایش"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"سفارشی ساختن نما"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"ذخیره"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"جستجوی مخاطبین"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"موارد دلخواه"</string>
+ <string name="menu_import" msgid="6107961135813836467">"وارد کردن"</string>
+ <string name="menu_export" msgid="2658783911863503902">"صادر کردن"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"شماره‌های مسدودشده"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"از طریق <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> از طریق <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"توقف جستجو"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"پاک کردن جستجو"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"حساب"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"همیشه برای تماس‌ استفاده شود"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"تماس به همراه یادداشت"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"یادداشتی بنویسید که همراه تماس ارسال شود…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ارسال و تماس"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / ‏<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"نسخه ساخت"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"مجوزهای منبع آزاد"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"جزئیات مجوز برای نرم‌افزار منبع آزاد"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"خط‌مشی رازداری"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"شرایط و ضوابط"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"مجوزهای منبع آزاد"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"نشانی وب باز نشد."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> علامت‌گذاری شد"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> بدون علامت"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"برقراری تماس ویدئویی"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"حذف"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"سه نقطه"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> دقیقه <xliff:g id="SECONDS">%2$s</xliff:g> ثانیه"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ساعت <xliff:g id="MINUTES_1">%2$s</xliff:g> دقیقه <xliff:g id="SECONDS">%3$s</xliff:g> ثانیه"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"میان‌بر غیرفعال شده است"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"محاطب حذف شد"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"وارد کردن"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"انتخاب مخاطبین"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"مخاطبی در سیم کارت نیست"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"مخاطب از قبل در فهرستتان است"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب سیم کارت وارد شد</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب سیم کارت وارد شد</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"مخاطبین سیم کارت وارد نشدند"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"وارد کردن از سیم کارت"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"لغو"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"همگام‌سازی خودکار غیرفعال است. برای فعال کردن ضربه بزنید."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"نپذیرفتن"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"همگام‌سازی خودکار غیرفعال است. برای فعال کردن ضربه بزنید."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"همگام‌سازی خودکار را فعال می‌کنید؟"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"‏تغییراتی که در همه برنامه‌ها و حساب‌ها، نه فقط در Google Contacts، ایجاد می‌کنید، بین وب و دستگاه‌هایتان به‌روز نگه داشته می‌شوند."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"فعال کردن"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"اتصال برقرار نیست"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"سیم کارت"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"نمایش موارد بیشتر"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"وارد کردن سیم کارت تمام شد"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"وارد نشد"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"مخاطبین از سیم کارت وارد نشدند"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"وارد کردن سیم کارت"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"اعلان‌ها"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 4c6aa058f..a2f4a5fc0 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Yhteystiedot"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Yhteystiedot"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Näytä yhteystieto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Muokkaa kontaktia"</string>
<string name="contactsList" msgid="8661624236494819731">"Yhteystiedot"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Lisää yhteystieto"</string>
<string name="shortcutContact" msgid="749243779392912958">"Yhteystieto"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Puhelu"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Tekstiviesti"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Valitse kuvakkeen yhteystieto"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Valitse vastaanottajan numero"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Valitse vastaanottajan numero"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Yhteystiedon valitseminen"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Lisää yhteystietoon"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Valitse yhteystieto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Valitse"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Luo uusi yhteystieto"</string>
- <string name="starredList" msgid="4817256136413959463">"Tähdelliset"</string>
- <string name="frequentList" msgid="7154768136473953056">"Usein käytetyt"</string>
- <string name="strequentList" msgid="5640192862059373511">"Suosikit"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Yhteystiedot"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Muokkaa kontaktia"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Luo yhteystieto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Muokkaa ryhmää"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Luo ryhmä"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Tietoja"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Päivitykset"</string>
<string name="searchHint" msgid="8482945356247760701">"Hae yhteystiedoista"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Näytä yhteystieto"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Lisää suosikkeihin"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Poista suosikeista"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Poistettu suosikeista"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Muokkaa"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Poista"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Vaihda kuva"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Aloitusnäytöksi"</string>
- <string name="menu_call" msgid="3992595586042260618">"Soita"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Lähetä tekstiviesti yhteystiedolle"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Luo pikakuvake"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Poista linkitys"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Muokkaa"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Poista"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Lisää yhteystieto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Lisää ryhmä"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Poista yhteystiedot"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Nimeä tunniste uudelleen"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Poista tunniste"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Lisää yhteystieto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktien valitseminen"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lisää yhteystietoja"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Poista tunnisteesta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Luo tunniste"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Poistetaanko tämän yhteystiedon linkitys useisiin yhteystietoihin?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Poista linkitys"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Haluatko tallentaa jo tekemäsi muutokset ja poistaa tämän yhteystiedon linkityksen useisiin yhteystietoihin?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Tallenna muutokset ja poista linkitys"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Haluatko tallentaa jo tekemäsi muutokset ja linkittää valitun yhteystiedon?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Tallenna ja linkitä"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linkitetään."</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Linkkiä poistetaan."</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Linkitä"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Näytä linkitetyt yhteystiedot"</string>
<string name="menu_save" msgid="1727844363591825909">"Tallenna"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Linkitä yhteystiedot"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Valitse yhteystieto, jonka haluat yhdistää yhteystietoon <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Näytä kaikki yhteystiedot"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ehdotetut yhteystiedot"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Kaikki yhteystiedot"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> liitetty"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Yhteystiedot on linkitetty"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> poistettu."</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ja <xliff:g id="NAME_1">%2$s</xliff:g> poistettu."</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… poistettu."</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Yhteystiedot poistettu</item>
<item quantity="one">Yhteystieto poistettu</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> yhteystietoa</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> yhteystieto</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> yhteystietoa, <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> yhteystieto, <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Googlelta"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Tililtä <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Aseta soittoääni"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Kaikki puhelut vastaajaan"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Vain luku -tilassa olevien tiliesi yhteystietoja ei voida poistaa, mutta ne voidaan piilottaa."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Piilota"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Poistettava yhteystieto sisältää tietoja useilta tileiltä. Vain luku -tilassa olevien tilien tiedot piilotetaan, eikä niitä poisteta."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Linkittäminen edellyttää vähintään kahden yhteystiedon valintaa."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Linkitetäänkö valitut yhteystiedot?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Linkitä"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Ohjaa suoraan vastaajaan"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Kumoa vastaajaan ohjaaminen"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Yhteystieto on vain luku ‑tilassa. Sitä ei voi poistaa, mutta voit piilottaa sen."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Piilota yhteystieto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Yhteystiedon vain luku ‑tilassa olevat tilit piilotetaan, ei poisteta."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Poistetaanko yhteystieto?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Poistetaanko valitut yhteystiedot?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Vain luku -tilassa olevien tiliesi yhteystietoja ei voida poistaa, mutta ne voidaan piilottaa."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Jos poistat tämän yhteystiedon, tietoja poistetaan useilta tileiltä."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Poistetaanko yhteystieto?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Poista"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Hylkää muutokset"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Yhteystietoa ei ole olemassa."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Yhteystieto lisättiin aloitusnäytölle."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> lisättiin aloitusnäytölle."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Luo uusi yhteystieto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Luo uusi yhteystieto"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisaatio"</item>
- <item msgid="7196592230748086755">"Muistiinpano"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tablet-laitteella ei ole kuvia."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tässä puhelimessa ei ole käytettäviä kuvia."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Laitteella ei ole kuvia."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Yhteyshenkilön valokuva"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Oman luokituksen nimi"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Ohjaa puheluja suoraan vastaajaan"</string>
<string name="removePhoto" msgid="4898105274130284565">"Poista kuva"</string>
- <string name="noContacts" msgid="4955659076981974652">"Ei yhteystietoja"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ei ryhmiä."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Tarvitset tilin ryhmien luomiseen."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Tässä ryhmässä ei ole ihmisiä."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Muokkaa ryhmää, niin voit lisätä ihmisiä."</string>
- <string name="savingContact" msgid="4075751076741924939">"Tallennetaan yhteystietoa…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Yhteystietoluettelo on tyhjä."</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Tässä tunnisteessa ei ole yhteystietoja."</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Tällä tilillä ei ole yhteystietoja."</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Yhteystietoluettelo on tyhjä."</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> tallennettiin."</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Yhteystieto tallennettu"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Yhteystietojen linkitys on poistettu."</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ei voitu tallentaa yhteystietojen muutoksia."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktien erottaminen epäonnistui."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktien yhdistäminen epäonnistui."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontaktin tallennus epäonnistui"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Yhteystietojen kuvien muutosten tallentaminen epäonnistui."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Ryhmä tallennettu."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ryhmän muutoksia ei voitu tallentaa."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> yhteystietoa, jossa puhelinnumero</item>
- <item quantity="one">1 yhteystieto, jossa puhelinnumero</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ei yhteystietoja, joissa on puhelinnumero"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> löytyi</item>
- <item quantity="one">1 löytyi</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ei voitu tallentaa yhteystietojen muutoksia."</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Yhteystietojen linkityksen poisto epäonnistui."</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Yhteystietojen yhdistäminen epäonnistui."</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Virhe tallennettaessa yhteystietoa"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Yhteystietojen kuvien muutosten tallentaminen epäonnistui."</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Tunnisteen lataus epäonnistui."</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Tunniste poistettiin."</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Tunniste luotiin."</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tunnisteen luominen ei onnistu."</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Tunniste päivitettiin."</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Poistettu tunnisteesta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lisätty tunnisteeseen"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tunnisteen muutosten tallennus epäonnistui."</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Tunniste on jo olemassa."</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Joiltain yhteistiedoilta puuttuu sähköpostiosoite."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Joiltain yhteistiedoilta puuttuu puhelinnumero."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Lähetä sähköpostia"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Lähetä viesti"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Valitse yhteystiedot"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Lähetä"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Ei yhteystietoja"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> löytyi</item>
- <item quantity="one">1 löytyi</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Kaikki"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Suosikit"</string>
- <string name="callBack" msgid="5498224409038809224">"Soita takaisin"</string>
- <string name="callAgain" msgid="3197312117049874778">"Soita uudelleen"</string>
- <string name="returnCall" msgid="8171961914203617813">"Soita takaisin"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Lisätäänkö <xliff:g id="EMAIL">%s</xliff:g> yhteystietoihin?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"yhteystiedon valokuva"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> yhteystietoa"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Yhteystietojen nimet"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Tätä toimintoa käsittelevää sovellusta ei löydy."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Palaa edelliseen näyttöön klikkaamalla"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lisää puhelinnumero"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Lisää sähköposti"</string>
<string name="missing_app" msgid="1466111003546611387">"Tätä toimintoa käsittelevää sovellusta ei löydy."</string>
<string name="menu_share" msgid="943789700636542260">"Jaa"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Lisää yhteystietoihin"</string>
- <string name="share_via" msgid="563121028023030093">"Jaa yhteystieto"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Luo ryhmä tilissä"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Lisää"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Jaa yhteystiedot sovelluksella</item>
+ <item quantity="one">Jaa yhteystieto sovelluksella</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Valitse tili"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Luo tunniste"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Nimeä tunniste uudelleen"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Tunnisteen nimi"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Tunnisteen nimi"</string>
<string name="audio_chat" msgid="2535716629358298691">"Äänikeskustelu"</string>
<string name="video_chat" msgid="1872255818640336072">"Videokeskustelu"</string>
- <string name="connections" msgid="8098440723172028350">"Yhteydet"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Lisää yhteys"</string>
- <string name="recent" msgid="2659189233141493004">"Viimeisimmät"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Uusimmat päivitykset"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-osoite"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-tili"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ei muokattavissa tästä sovelluksesta."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ei muokattavissa tällä laitteella."</string>
<string name="take_photo" msgid="7496128293167402354">"Ota valokuva"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Ota uusi kuva"</string>
<string name="pick_photo" msgid="2129509985223564942">"Valitse valokuva"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Valitse uusi valokuva"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Yhteystietoluetteloa päivitetään."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Haetaan..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Näytä valitut"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Näytä kaikki"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Valitse kaikki"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Poista kaikki valinnat"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lisää uusi"</string>
- <string name="add_organization" msgid="7311893231158291197">"Lisää organisaatio"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Päivämäärä"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Ryhmän nimi"</string>
- <string name="change_photo" msgid="8530597935483526383">"Muuta"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Kontaktin kuva"</string>
- <string name="description_star" msgid="2605854427360036550">"lisää suosikkeihin"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Muokkaa kontaktia"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Yhdistetäänkö valittu kontakti nykyiseen kontaktiin?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Tunniste"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Peruuta"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Takaisin"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sulje"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Haluatko muokata valittuja yhteystietoja? Antamasi tiedot kopioidaan."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopioi yhteystietoihini"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Lisää yhteystietoihin"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Hakemisto <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Oma"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Asetukset"</string>
<string name="menu_settings" msgid="377929915873428211">"Asetukset"</string>
<string name="menu_help" msgid="1680178646764069976">"Ohje ja palaute"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Näyttövalinnat"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Puhelinnumero"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lisää yhteystietoihin"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Lisää yhteystietoon"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Sulje"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Näytä vuosi"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Yhteystiedot"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Ladataan..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Luo uusi yhteystieto"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Lisää tili"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Tuo yhteystietoja"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Luo uusi ryhmä"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Luo uusi ryhmä"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ryhmää</item>
- <item quantity="one">1 ryhmä</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Poistetaanko ryhmä <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Ryhmään kuuluvia yhteystietoja ei poisteta.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> henkilöä tilistä <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> henkilö tilistä <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> henkilöä</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> henkilö</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Tuo"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Luo uusi…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Poistetaanko tunniste <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Yhteystietoja ei poisteta.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Kirjoita kontaktin nimi ennen kuin yhdistät sen toiseen."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopioi leikepöydälle"</string>
<string name="set_default" msgid="4417505153468300351">"Aseta oletukseksi"</string>
<string name="clear_default" msgid="7193185801596678067">"Poista oletus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teksti kopioitu"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Hylätäänkö muutokset ja lopetetaan muokkaaminen?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Hylätäänkö muutokset?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hylkää"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Jatka muokkausta"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Luo profiili"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Kirjoita henkilön nimi"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Ryhmän nimi"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Peruuta"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Hylätäänkö muokkaukset?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Hae yhteystiedoista"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Poista yhteystiedot"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Oma paikallinen profiili"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Oma <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profiili"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kaikki kontaktit"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Pidä kontaktisi turvassa, vaikka puhelimesi katoaisi: synkronoi ne verkkopalvelun avulla."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Lisää tili"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Uutta kontaktiasi ei varmuuskopioida. Lisätäänkö tili, joka varmuuskopioi uudet kontaktit verkossa?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Lisää Google-tili, jolle yhteystiedot voidaan varmuuskopioida. Se vie vain hetken."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Uudet yhteystiedot tallennetaan tilille <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Valitse uusien yhteystietojen oletustili:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Lisää yhteystieto"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Luo uusi yhteystieto"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Muokkaa kontaktia"</string>
- <string name="keep_local" msgid="1258761699192993322">"Säilytä paikallisena"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Vain lukuoikeus"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Valitse muokattava yhteystieto"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Linkitetyt yhteystiedot"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Lisää"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Poista linkitys"</string>
<string name="add_account" msgid="8201790677994503186">"Lisää tili"</string>
<string name="add_new_account" msgid="5748627740680940264">"Lisää uusi tili"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Vie tietokantatiedostot"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"lisää uusi kontakti"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Luo uusi yhteystieto"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Näytä enemmän"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Näytä vähemmän"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Näytä kaikki"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Viimeisimmät"</string>
<string name="about_card_title" msgid="2920942314212825637">"Tietoja"</string>
- <string name="send_message" msgid="8938418965550543196">"Lähetä viesti"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Luodaan oma kopio…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Eilen"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Luodaan kopio..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Huomenna"</string>
<string name="today" msgid="8041090779381781781">"Tänään"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Tänään klo <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Huomenna klo <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Nimetön tapahtuma)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Käytä"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Pikaviesti"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Sivusto"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Tapahtuma"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Suhde"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Tili"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Sähköposti"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Puhelin"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Valokuva"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Laajenna yhteystietojen muokkausnäkymä klikkaamalla."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Tiivistä yhteystietojen muokkausnäkymä klikkaamalla."</string>
<string name="content_description_directions" msgid="2686791825798189335">"reittiohjeet sijaintiin"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Viimeisin tekstiviesti. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Vastaa klikkaamalla."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Viimeisin tekstiviesti. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Vastaa klikkaamalla."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"saapuva"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"lähtevä"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"vastaamaton"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Viimeisin puhelu. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Soita takaisin klikkaamalla."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Viimeisin puhelu. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Soita takaisin klikkaamalla."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Sinä: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts toimii paremmin, kun kirjoitat käyttäjän Hangouts-tunnuksen sähköposti- tai puhelinnumerokenttään."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Lisää kenttiä"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Vaihda kuva"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Muokkausnäkymän avaaminen epäonnistui."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Tallennetaan tiliin"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Tälle hetkellä tallennetaan tilille <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Valitse eri tili kaksoisnapauttamalla."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Yhdistetyt kontaktit (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Yhdistetty kontakti</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> yhdistettyä kontaktia"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Lisää kenttiä"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Vaihda yhteystiedon valokuvaa"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Lisää yhteystiedon valokuva"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Yhteystiedon valokuva"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Muokkausnäkymän avaaminen epäonnistui."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Tallennetaan tilille"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Tilin <xliff:g id="ACCOUNT">%s</xliff:g> yhteystietoja ei voi muokata."</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINKITÄ YHTEYSTIEDOT"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"PERUUTA"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mahdollista kaksoiskappaletta</item>
- <item quantity="one">1 mahdollinen kaksoiskappale</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Yhdistä <xliff:g id="COUNT">%d</xliff:g> kontaktin tiedot</item>
- <item quantity="one">Yhdistä 1 kontaktin tiedot</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tämä kontakti"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mahdolliset kaksoiskappaleet"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Nämä yhteystiedot saattavat kuulua samalle henkilölle. Voit linkittää ne yhdeksi yhteystiedoksi."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Linkitetyt yhteystiedot"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Omista tileistäsi"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Ota kuva"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Kaikki kuvat"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Valitse valokuva"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Tili: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Poista <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Poista <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Poista <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Tilin <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> kuvaa ei ole valittuna."</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Tilin <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> kuva on valittuna."</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Tuntemattoman tilin kuva ei ole valittuna."</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Tuntemattoman tilin kuva on valittuna."</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Yhteystietoluetteloa päivitetään vaihdetun kielen mukaiseksi.\n\nOdota…"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Ehdotukset"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Uusi"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Avaa navigoinnin vetopaneeli"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Sulje navigoinnin vetopaneeli"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Tunniste <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Tunnisteet"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Tilit"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Näytä yhteiset historiatiedot"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Tapahtumat ja viestit"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Tapahtumat"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Viestit"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Ehdotukset"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Pidä yhteystiedot järjestettynä ja hyödyllisinä"</string>
+ <string name="undo" msgid="1425165101664071422">"Kumoa"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Soita: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Soita kotinumeroon"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Soita matkapuhelimeen"</string>
+ <string name="call_work" msgid="5328785911463744028">"Soita työnumeroon"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Soita faksinumeroon (työ)"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Soita faksinumeroon (koti)"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Soita hakulaitteeseen"</string>
+ <string name="call_other" msgid="8563753966926932052">"Soita"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Soita takaisinsoittonumeroon"</string>
+ <string name="call_car" msgid="3280537320306436445">"Soita autopuhelimeen"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Soita yrityksen ensisijaiseen numeroon"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Soita ISDN-numeroon"</string>
+ <string name="call_main" msgid="6082900571803441339">"Soita ensisijaiseen numeroon"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Soita faksinumeroon"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Soita radiopuhelimeen"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Soita teleksinumeroon"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Soita tekstipuhelimeen"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Soita matkapuhelimeen (työ)"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Soita hakulaitteeseen (työ)"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Soita: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Soita MMS-numeroon"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (soita)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Lähetä tekstiviesti: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Lähetä tekstiviesti kotinumeroon"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Lähetä tekstiviesti matkapuhelimeen"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Lähetä tekstiviesti työnumeroon"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Lähetä tekstiviesti faksinumeroon (työ)"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Lähetä tekstiviesti faksinumeroon (koti)"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Lähetä tekstiviesti hakulaitteeseen"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekstiviesti"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Lähetä tekstiviesti takaisinsoittonumeroon"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Lähetä tekstiviesti autopuhelimeen"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Lähetä tekstiviesti yrityksen ensisijaiseen numeroon"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Lähetä tekstiviesti ISDN-numeroon"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Lähetä tekstiviesti ensisijaiseen numeroon"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Lähetä tekstiviesti faksinumeroon"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Lähetä tekstiviesti radiopuhelimeen"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Lähetä tekstiviesti teleksinumeroon"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Lähetä tekstiviesti tekstipuhelimeen"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Lähetä tekstiviesti matkapuhelimeen (työ)"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Lähetä tekstiviesti hakulaitteeseen (työ)"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Lähetä tekstiviesti: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Lähetä tekstiviesti MMS-numeroon"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (lähetä viesti)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Soita videopuhelu"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Tyhjennetäänkö usein käytetyt?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Toiminto tyhjentää Yhteystiedot- ja Puhelin-sovellusten usein käytettyjen yhteystietojen luettelon. Lisäksi sähköpostisovellukset pakotetaan opettelemaan osoiteasetuksesi uudestaan."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Tyhjennetään usein käytetyt..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Tavoitettavissa"</string>
+ <string name="status_away" msgid="1838861100379804730">"Poissa"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Varattu"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Muu"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Hakemisto"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Työhakemisto"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Kaikki yhteystiedot"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Pikayhteys henkilöön <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Ei nimeä)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Usein käytetyt"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Kaikki kontaktit puhelinnumeroineen"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Työprofiilin yhteystiedot"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Näytä päivitykset"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Laite"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-kortti"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Lempinimi"</string>
+ <string name="name_given" msgid="4280790853455320619">"Etunimi"</string>
+ <string name="name_family" msgid="7466985689626017037">"Sukunimi"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Nimen etuliite"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Toinen nimi"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Nimen jälkiliite"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nimen ääntämistapa"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Etunimen ääntämistapa"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Toisen nimen ääntämistapa"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Sukunimen ääntämistapa"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Puhelin"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Sähköposti"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Osoite"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Pikaviestitili"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisaatio"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Suhde"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Erityispäivämäärä"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstiviesti"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Osoite"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Yritys"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Nimi"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Muistiinpanot"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Muokattu"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Sivusto"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Tunnisteet"</string>
+ <string name="email_home" msgid="8573740658148184279">"Lähetä sähköpostia kotiosoitteeseen"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Lähetä sähköpostia mobiiliosoitteeseen"</string>
+ <string name="email_work" msgid="2807430017302722689">"Lähetä sähköpostia työosoitteeseen"</string>
+ <string name="email_other" msgid="3454004077967657109">"Sähköposti"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Lähetä sähköpostia: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Sähköposti"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Katuosoite"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Kaupunki"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Lääni"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postinumero"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Maa"</string>
+ <string name="map_home" msgid="1243547733423343982">"Näytä kotiosoite"</string>
+ <string name="map_work" msgid="1360474076921878088">"Näytä työosoite"</string>
+ <string name="map_other" msgid="3817820803587012641">"Näytä osoite"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Näytä osoite: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Keskustele AIM:n avulla"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Keskustele Windows Liven avulla"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Keskustele Yahoon avulla"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Keskustele Skypen avulla"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Keskustele QQ:n avulla"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Keskustele Google Talkin avulla"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Keskustele ICQ:n avulla"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Keskustele Jabberin avulla"</string>
+ <string name="chat" msgid="9025361898797412245">"Pikaviesti"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"poista"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Näytä lisää nimikenttiä"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Tiivistä nimikentät"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Näytä lisää foneettisia nimikenttiä"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Tiivistä foneettiset nimikentät"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Laajenna"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Kutista"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Laajennettu"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Tiivistetty"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Kaikki yhteystiedot"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Tähdelliset"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Muokkaa"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Yhteystiedot"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Kaikki muut yhteystiedot"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Kaikki yhteystiedot"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Poista synkronointiryhmä"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Lisää synkronointiryhmä"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Lisää ryhmiä…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ryhmän <xliff:g id="GROUP">%s</xliff:g> poistaminen synkronoinnista lopettaa myös ryhmittelemättömien yhteystietojen synkronoinnin."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Tallennetaan näyttövalintoja…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Muokattu näkymä"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Tallenna tuodut yhteystiedot kohteeseen"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kortti"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-kortti <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d yhteystietoa</item>
+ <item quantity="one">1 yhteystieto</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> yhteystietoa • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> yhteystieto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-tiedosto"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ei tuotavia tietoja"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Tuodaanko yhteystiedot vCard-tiedostosta?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Peruuta kohteen <xliff:g id="FILENAME">%s</xliff:g> tuonti?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Peruuta kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardin tuonnin/viennin peruutus epäonn."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Tuntematon virhe."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tiedostoa \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ei voi avata: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Vientiohjelman käynnistys epäonnistui: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ei vietäviä yhteystietoja."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Olet poistanut käytöstä tarvittavan käyttöoikeuden."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Virhe viennin aikana: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-virhe"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Muisti ei riitä. Tiedosto voi olla liian suuri."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Muotoa ei tueta."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti valmis."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Yhteystiedot vietiin"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Yhteystiedot vietiin. Jaa yhteystiedot klikkaamalla ilmoitusta."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Jaa yhteystiedot napauttamalla."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti peruutettu."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Viedään yhteystietoja"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Yhteystietoja viedään."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tietokannan tietojen hakeminen epäonnistui."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Vietäviä yhteystietoja ei ole."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-luonti ei käynnistynyt oikein."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Vieminen epäonnistui"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Yhteystietoja ei viety.\nSyy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Tuodaan <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard-tietojen luku epäonnistui."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCardin <xliff:g id="FILENAME">%s</xliff:g> tuonti valmis"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> tuonti peruttu"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tuodaan pian."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Tiedosto tuodaan pian."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-tuontipyyntö hylättiin. Yritä myöhemmin uudelleen."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Yhteystiedot viedään hetken kuluttua."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-vientipyyntö hylättiin. Yritä myöhemmin uudelleen."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"yhteystieto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Lisätään vCard-tietojen välimuistiversiot paikalliseen väliaikaistallennustilaan. Tuonti alkaa pian."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-tietojen tuominen epäonnistui."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakti saatu (NFC)"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Vie välimuistiin"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Tuodaan <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Vie .vcf-tiedostoon"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Lajitteluperuste"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nimen ääntämistapa"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Näytä aina"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Piilota, jos tyhjä"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Etunimi"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Sukunimi"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Nimen muoto"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Etunimi ensin"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Sukunimi ensin"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Tilit"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Uusien yhteystietojen oletustili"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Omat tiedot"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Luo profiili"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Tietoja yhteystiedoista"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaa suosikkiyhteystiedot"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Jaa kaikki yhteystiedot"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Yhteystietojen jakaminen epäonnistui."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Vie yhteystiedot"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Tuo yhteystiedot lähteestä"</string>
+ <string name="share_error" msgid="948429331673358107">"Yhteystieto ei jaettavissa"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Jaettavia yhteystietoja ei ole."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Näytettävät yhteystiedot"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Näytettävät yhteystiedot"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Näkymän muokkaaminen"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Tallenna"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Hae yhteystietoja"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Suosikit"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Tuo"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Vie"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Estetyt numerot"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"lähteestä: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> lähteestä: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"lopeta haku"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Tyhjennä haku"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Tili"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Käytä kaikille puheluille"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Soita ja lähetä muistiinpano"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Kirjoita muistiinpano, joka lähetetään puhelun yhteydessä…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"LÄHETÄ ja SOITA"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Koontiversio"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Avoimen lähdekoodin käyttöluvat"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Avoimen lähdekoodin ohjelmiston käyttöluvan tiedot"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Tietosuojakäytäntö"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Käyttöehdot"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Avoimen lähdekoodin käyttöluvat"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL-osoitteen avaus epäonnistui."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>, valittu"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>, ei valittu"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Soita videopuhelu"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Poista"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsi"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pikakuvake on poistettu käytöstä"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Yhteystieto poistettiin"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Tuo"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Valitse yhteystiedot"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM-kortilla ei ole yhteystietoja."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Yhteystieto on jo luettelossasi."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-yhteystietoa tuotiin.</item>
+ <item quantity="one">Yksi SIM-yhteystieto tuotiin.</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-yhteystietojen tuonti epäonnistui."</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Tuo SIM-kortilta"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Peruuta"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automaattinen synkronointi ei ole käytössä. Ota toiminto käyttöön napauttamalla."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Hylkää"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Tilin synkronointi ei ole käytössä. Ota toiminto käyttöön napauttamalla."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Otetaanko automaattinen synkronointi käyttöön?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Yhteystietoihin ja kaikkiin muihin sovelluksiin ja tileihin tekemäsi muutokset synkronoidaan verkon ja laitteidesi välillä."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ota käyttöön"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ei yhteyttä"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kortti"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Näytä lisää"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kortin tuominen valmis"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Tuonti epäonnistui."</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Yhteystietojen tuominen SIM-kortilta epäonnistui."</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Tuodaan SIM-kortin yhteystietoja"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Ilmoitukset"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0ec5ef66f..688e0cd54 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Afficher le contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Modifier le contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Ajouter un contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Raccourci appel"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Raccourci message"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choisir un contact"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choisissez le numéro"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choisissez le numéro auquel envoyer le message"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Sélectionner un contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ajouter au contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Sélectionner un contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Sélectionner"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Créer un contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Favoris"</string>
- <string name="frequentList" msgid="7154768136473953056">"Contacts fréquents"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoris"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Détails du contact"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Modifier un contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Créer un contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Modifier le groupe"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Créer un groupe"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"À propos"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Mises à jour"</string>
<string name="searchHint" msgid="8482945356247760701">"Rech. des contacts"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Afficher le contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Ajouter aux favoris"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Supprimer des favoris"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Supprimé des favoris"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Modifier"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Supprimer"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Changer de photo"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer sur l\'écran d\'accueil"</string>
- <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Créer un raccourci"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Annuler la fusion"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Modifier"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Supprimer"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Ajouter un contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ajouter un groupe"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Supprimer les contacts"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Renommer l\'étiquette"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Supprimer l\'étiquette"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Ajouter un contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Sélectionner des contacts"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ajouter des contacts"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Supprimer de l\'étiquette"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Créer une étiquette"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Annuler la fusion et diviser ce contact en plusieurs contacts?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Annuler la fusion"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et diviser ce contact en plusieurs contacts?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Enregistrer et annuler la fusion"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et les associer au contact sélectionné?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Enregistrer et fusionner"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Association en cours…"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Dissociation en cours…"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Fusionner"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Afficher les contacts associés"</string>
<string name="menu_save" msgid="1727844363591825909">"Enregistrer"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associer les contacts"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choisissez le contact que vous souhaitez associer à <xliff:g id="NAME">%s</xliff:g> :"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afficher tous les contacts"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> associés"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts associés"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> supprimé"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> et <xliff:g id="NAME_1">%2$s</xliff:g> supprimés"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… supprimés"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Contact supprimé</item>
<item quantity="other">Contacts supprimés</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Régler sonnerie"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tous appels vers messag. voc."</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Les contacts issus de vos comptes en lecture seule ne peuvent pas être supprimés, mais ils peuvent être masqués."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Masquer"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Le contact à supprimer contient des renseignements issus de plusieurs comptes. Les détails issus des comptes en lecture seule seront masqués, mais pas supprimés."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Au moins deux contacts doivent être sélectionnés pour effectuer une fusion."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Fusionner les contacts sélectionnés?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Fusionner"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Diriger vers messagerie vocale"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ne plus rediriger"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ce contact est en lecture seule. Il ne peut pas être supprimé, mais vous pouvez le masquer."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Masquer le contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Les comptes en lecture seule de ce contact seront masqués, mais non supprimés."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Supprimer ce contact?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Supprimer les contacts sélectionnés?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Les contacts issus de vos comptes en lecture seule ne peuvent pas être supprimés, mais ils peuvent être masqués."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"La suppression de ce contact entraînera la suppression de renseignements dans plusieurs comptes."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Supprimer ce contact?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Supprimer"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Ce contact n\'existe pas."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Le contact a été ajouté à l\'écran d\'accueil."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"« <xliff:g id="NAME">%s</xliff:g> » a été ajouté à l\'écran d\'accueil."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Créer un nouveau contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Créer un nouveau contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"NOTE"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Aucune image n\'est disponible sur la tablette."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Aucune image disponible sur le téléphone"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Aucune image n\'est disponible sur l\'appareil."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Photo du contact"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Étiquette personnalisée"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale"</string>
<string name="removePhoto" msgid="4898105274130284565">"Retirer la photo"</string>
- <string name="noContacts" msgid="4955659076981974652">"Aucun contact"</string>
- <string name="noGroups" msgid="8614664663561385253">"Aucun groupe"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Vous devez posséder un compte pour créer des groupes."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ce groupe est vide."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Pour ajouter des membres, veuillez le modifier."</string>
- <string name="savingContact" msgid="4075751076741924939">"Enregistrement du contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Votre liste de contacts est vide"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Aucun contact avec cette étiquette"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Aucun contact dans ce compte"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> enregistré"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact enregistré."</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"La fusion des contacts a été annulée"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossible de dissocier le contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossible d\'associer le contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erreur lors de l\'enregistrement du contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossible d\'enregistrer les changements apportés à la photo du contact."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Groupe enregistré"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Impossible d\'enregistrer les modifications apportées au groupe."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec un numéro de téléphone</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts avec un numéro de téléphone</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Aucun contact disposant d\'un numéro de téléphone"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> résultat</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> résultats</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossible d\'enregistrer les modifications apportées au contact"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossible de dissocier le contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossible d\'associer le contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les changements apportés à la photo du contact"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Échec du chargement de l\'étiquette"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Étiquette supprimée"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Étiquette créée"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossible de créer une étiquette"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Étiquette mise à jour"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Supprimé de l\'étiquette"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ajouté à l\'étiquette"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossible d\'enregistrer l\'étiquette modifiée"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Cette étiquette existe déjà"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Certains contacts n\'ont pas d\'adresse de courriel."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Certains contacts n\'ont pas de numéro de téléphone."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Envoyer un courriel"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envoyer un message"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Sélectionner des contacts"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Envoyer"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Aucun contact"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> résultat</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> résultats</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tout"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoris"</string>
- <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
- <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
- <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Aucune application pouvant gérer cette action n\'a été trouvée."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Cliquez ici pour revenir à l\'écran précédent"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ajouter un numéro de téléphone"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Ajouter une adresse de courriel"</string>
<string name="missing_app" msgid="1466111003546611387">"Aucune application pouvant gérer cette action n\'a été trouvée."</string>
<string name="menu_share" msgid="943789700636542260">"Partager"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Ajouter aux contacts"</string>
- <string name="share_via" msgid="563121028023030093">"Partager contact via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Sélectionner le compte associé au groupe"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Ajouter"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Partager le contact par</item>
+ <item quantity="other">Partager les contacts par</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Choisir un compte"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Créer une étiquette"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Renommer l\'étiquette"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nom de l\'étiquette"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom de l\'étiquette"</string>
<string name="audio_chat" msgid="2535716629358298691">"Clavardage audio"</string>
<string name="video_chat" msgid="1872255818640336072">"Clavardage vidéo"</string>
- <string name="connections" msgid="8098440723172028350">"Liens"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Ajouter un contact"</string>
- <string name="recent" msgid="2659189233141493004">"Fichiers récents"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Mises à jour récentes"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Compte <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Non modifiable depuis cette application."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Non modifiable sur cet appareil."</string>
<string name="take_photo" msgid="7496128293167402354">"Prendre une photo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Prendre une autre photo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Choisir une photo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"La liste de contacts est en cours de mise à jour."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Recherche…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Afficher la sélection"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Tout afficher"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Tout sélectionner"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Tout désélectionner"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ajouter"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ajouter une entreprise"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nom du groupe"</string>
- <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Photo principale"</string>
- <string name="description_star" msgid="2605854427360036550">"favori"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Modifier un contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Associer ce contact au contact sélectionné?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Étiquette"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuler"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Précédent"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Modifier le contact sélectionné? Les informations saisies jusqu\'ici seront copiées."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copier dans \"Mes contacts\""</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Ajouter à \"Mes contacts\""</string>
<string name="contact_directory_description" msgid="683398073603909119">"Annuaire <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personnaliser"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Paramètres"</string>
<string name="menu_settings" msgid="377929915873428211">"Paramètres"</string>
<string name="menu_help" msgid="1680178646764069976">"Aide et commentaires"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Options d\'affichage"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Numéro de téléphone"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ajouter aux contacts"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ajouter au contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Fermer"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inclure l\'année"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Chargement en cours..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Créer un contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ajouter un compte"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer des contacts"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Créer un groupe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Créer un groupe"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> groupe</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groupes</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Supprimer le groupe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Les contacts ne seront pas supprimés."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> personne à partir de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personnes à partir de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> personne</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personnes</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importer"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Créer…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Supprimer l\'étiquette « <xliff:g id="GROUP_LABEL">%1$s</xliff:g> »? (Les contacts ne seront pas supprimés.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Entrez le nom du contact avant de l\'associer à un autre."</string>
<string name="copy_text" msgid="3257145021583508761">"Copier dans le presse-papiers"</string>
<string name="set_default" msgid="4417505153468300351">"Définir par défaut"</string>
<string name="clear_default" msgid="7193185801596678067">"Effacer les valeurs par défaut"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texte copié."</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Annuler les modifications et quitter le mode d\'édition?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Supprimer les modifications?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignorer"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continuer les modifications"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurer mon profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Saisissez le nom de la personne"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nom du groupe"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuler"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Supprimer les personnalisations?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Rechercher dans les contacts"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Supprimer les contacts"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mon profil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mon profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Affichage de tous les contacts"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Assurez la sécurité de vos contacts, même si vous perdez votre téléphone en effectuant une synchronisation avec un service en ligne."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ajouter un compte"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Votre nouveau contact ne sera pas sauvegardé. Ajouter un compte qui sauvegarde les contacts en ligne?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Prenez une minute pour ajouter un compte qui sauvegardera vos contacts sur Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Les nouveaux contacts seront enregistrés dans le compte <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choisissez un compte par défaut pour les nouveaux contacts :"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Ajouter un contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Créer un contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Modifier"</string>
- <string name="keep_local" msgid="1258761699192993322">"Enreg. copie locale"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Lecture seule"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Choisissez le contact à modifier"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contacts associés"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Ajouter"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Dissocier"</string>
<string name="add_account" msgid="8201790677994503186">"Ajouter un compte"</string>
<string name="add_new_account" msgid="5748627740680940264">"Ajouter un nouveau compte"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exporter les fichiers de la base de données"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ajouter un contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Créer un contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"En voir plus"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"En voir moins"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Tout afficher"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Récents"</string>
<string name="about_card_title" msgid="2920942314212825637">"À propos"</string>
- <string name="send_message" msgid="8938418965550543196">"Envoyer un message"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Création d\'une copie personnelle en cours..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Hier"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Création d\'une copie personnelle…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Demain"</string>
<string name="today" msgid="8041090779381781781">"Aujourd\'hui"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Aujourd\'hui à <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demain à <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Événement sans titre)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Définir"</string>
<string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Site Web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Événement"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Courriel"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Téléphone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
<string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Texto récent : « <xliff:g id="MESSAGE_BODY">%s</xliff:g> », de <xliff:g id="PHONE_NUMBER">%s</xliff:g>, le <xliff:g id="DATE">%s</xliff:g>. Touchez l\'écran pour répondre à ce message."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Texto récent : « <xliff:g id="MESSAGE_BODY">%1$s</xliff:g> », de <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, le <xliff:g id="DATE">%3$s</xliff:g>. Touchez l\'écran pour répondre à ce message."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortant"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"manqué"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Touchez l\'écran pour rappeler ce numéro."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Touchez l\'écran pour rappeler ce numéro."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vous : <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Google Hangout fonctionne mieux lorsque vous entrez l\'identifiant Hangout de la personne dans le champ de l\'adresse de courriel ou du numéro de téléphone."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Autres champs"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Changer de photo"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Échec d\'ouverture de l\'éditeur."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Enregistrer dans le compte"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Enregistrement en cours dans le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Touchez deux fois pour choisir un autre compte."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Contacts associés (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contacts associés"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Autres champs"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Modifier la photo du contact"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ajouter une photo du contact"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Photo du contact"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Échec de l\'ouverture de l\'éditeur."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Enregistrer dans le compte"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Les coordonnées de <xliff:g id="ACCOUNT">%s</xliff:g> ne peuvent pas être modifiées"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIER LES CONTACTS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULER"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> doublon possible</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> doublons possibles</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact associé</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts associés</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one"> (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other"> (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ce contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Doublons possibles"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Ces contacts correspondent peut-être à la même personne. Vous pouvez les regrouper dans un seul contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contacts associés"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"De vos comptes"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Prendre une photo"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Toutes les photos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Sélectionner une photo"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Effacer <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Effacer <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Effacer <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> non cochée"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> cochée"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo d\'un compte inconnu non sélectionnée"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo d\'un compte inconnu sélectionnée"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Mise à jour de la liste des contacts en cours suite au changement de langue.\n\nVeuillez patienter..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nouveau"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Ouvrir le panneau de navigation"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Fermer le panneau de navigation"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Étiquette <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Étiquettes"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Comptes"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Rassembler vos historiques"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Événements et messages"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Événements"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messages"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggestions"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Gardez vos contacts organisés et utiles"</string>
+ <string name="undo" msgid="1425165101664071422">"Annuler"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Appeller <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Appeler le numéro de téléphone du domicile"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Appeler le numéro de téléphone mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Appeler le numéro de téléphone professionnel"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Appeler le numéro de télécopie professionnel"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Appeler le numéro de télécopie du domicile"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Appeler le téléavertisseur"</string>
+ <string name="call_other" msgid="8563753966926932052">"Appeler"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Appeler le numéro de rappel"</string>
+ <string name="call_car" msgid="3280537320306436445">"Appeler le numéro de télphone de la voiture"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Appeler le numéro de téléphone principal de l\'entreprise"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Appeler le numéro de téléphone RNIS"</string>
+ <string name="call_main" msgid="6082900571803441339">"Appeler le numéro de téléphone principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Appeler le numéro de télécopie"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Appeler par signal radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Appeler par télex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Appeler le numéro TTY/TDD (malentendants)"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Appeler le numéro de téléphone mobile professionnel"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Appeler le téléavertisseur professionnel"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Appeller <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Appeler le numéro de téléphone MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (appeler)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Envoyer un texto à <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Envoyer un SMS au numéro de téléphone du domicile"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Envoyer un SMS au numéro de téléphone mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Envoyer un SMS au numéro de téléphone professionnel"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Envoyer un SMS au numéro de télécopie professionnel"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Envoyer un SMS au numéro de télécopie du domicile"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Envoyer un SMS au téléavertisseur"</string>
+ <string name="sms_other" msgid="806127844607642331">"Texte"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Envoyer un SMS au numéro de rappel"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Envoyer un SMS au numéro de téléphone de la voiture"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Envoyer un SMS au numéro de téléphone principal de l\'entreprise"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Envoyer un SMS au numéro de téléphone RNIS"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Envoyer un SMS au numéro de téléphone principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Envoyer un SMS au numéro de télécopie"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Envoyer un SMS par signal radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Envoyer un SMS par télex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Envoyer un SMS au numéro TTY/TDD (malentendants)"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Envoyer un SMS au numéro de téléphone mobile professionnel"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Envoyer un SMS au téléavertisseur professionnel"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Envoyer un SMS au <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Envoyer un SMS au numéro de téléph MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (envoyer un message texte)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Faire un appel vidéo"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Effacer les contacts fréquents?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Cette opération efface la liste des personnes avec qui vous communiquez le plus souvent dans les applications Contacts et Téléphone. Elle oblige vos applications de courriel à mémoriser de nouveau les adresses que vous utilisez le plus."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Suppression des contacts fréquents…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Absent"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Occupé(e)"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Autre"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Répertoire"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Annuaire professionnel"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tous les contacts"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Lien rapide vers <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sans nom)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contacts fréquents"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Tous les contacts disposant d\'un numéro de téléphone"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacts du profil professionnel"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Afficher les mises à jour"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Appareil"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonyme"</string>
+ <string name="name_given" msgid="4280790853455320619">"Prénom"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nom de famille"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Préfixe du nom"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Deuxième prénom"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Suffixe du nom"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nom phonétique"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Prénom phonétique"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Deuxième prénom phonétique"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nom de famille phonétique"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Téléphone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Adresse de courriel"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresse"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Messagerie instantanée"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relation"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Date spéciale"</string>
+ <string name="sms" msgid="1756857139634224222">"Message texte"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresse"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Entreprise"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titre"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Remarques"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personnalisé"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Site Web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Étiquettes"</string>
+ <string name="email_home" msgid="8573740658148184279">"Envoyer un courriel au domicile"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Envoyer un courriel sur le mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Envoyer un courriel au bureau"</string>
+ <string name="email_other" msgid="3454004077967657109">"Envoyer un courriel"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Envoyer un courriel à <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Envoyer un courriel"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rue"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Ville"</string>
+ <string name="postal_region" msgid="6045263193478437672">"État/province"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Code postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Pays"</string>
+ <string name="map_home" msgid="1243547733423343982">"Afficher l\'adresse personnelle"</string>
+ <string name="map_work" msgid="1360474076921878088">"Afficher l\'adresse professionnelle"</string>
+ <string name="map_other" msgid="3817820803587012641">"Afficher l\'adresse"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Afficher l\'adresse de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Clavarder via AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Clavarder via Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Clavarder via Yahoo!"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Clavarder via Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Clavarder via QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Clavarder via Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Clavarder via ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Clavarder via Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Clavardage"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"suppr"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Afficher plus de champs de nom"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Réduire les champs de nom"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Afficher plus de champs de nom phonétique"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Réduire les champs de nom phonétique"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Développer"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Réduire"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Développés"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Réduits"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tous les contacts"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Marqués d\'une étoile"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personnaliser"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Tous les autres contacts"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tous les contacts"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Supprimer le groupe de synchronisation"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Ajouter groupe de synchronisation"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Autres groupes…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Le retrait du groupe \"<xliff:g id="GROUP">%s</xliff:g>\" de la synchronisation entraîne également le retrait des contacts n\'appartenant à aucun groupe."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Enregistrement des options d\'affichage en cours…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Affichage personnalisé"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Enregistrer les contacts importés dans le compte :"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Carte SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Carte SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contact</item>
+ <item quantity="other">%1$d contacts</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Fichier .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Rien à importer"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importer les contacts de vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Annuler l\'importation du fichier <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annuler l\'exportation du fichier <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Impossible annuler import./export. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erreur inconnue."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir le fichier <xliff:g id="FILE_NAME">%1$s</xliff:g> pour la raison suivante : <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Impossible de démarrer le programme d\'exportation pour la raison suivante : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Aucun contact ne peut être exporté."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Vous avez désactivé une autorisation obligatoire."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Une erreur s\'est produite lors de l\'exportation : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erreur d\'E/S."</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Mémoire insuffisante. Le fichier est peut-être trop volumineux."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Le format n\'est pas compatible."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportation du fichier <xliff:g id="FILENAME">%s</xliff:g> terminée"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Les contacts ont été exportés."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Les contacts ont été exportés. Cliquez sur la notification pour les partager."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Touchez ici pour partager des contacts."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exportation du fichier <xliff:g id="FILENAME">%s</xliff:g> annulée"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportation des données des contacts en cours"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Les données des contacts sont en cours d\'exportation."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Impossible d\'obtenir les informations concernant la base de données."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Aucun contact ne peut être exporté."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Le système de composition vCard n\'a pas démarré correctement."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Échec exportation"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Les données du contact n\'ont pas été exportées.\nMotif : <xliff:g id="FAIL_REASON">%s</xliff:g>."</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importation (<xliff:g id="NAME">%s</xliff:g>)"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Impossible de lire les données vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Le fichier vCard <xliff:g id="FILENAME">%s</xliff:g> a bien été importé"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importation du fichier <xliff:g id="FILENAME">%s</xliff:g> annulée"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Le fichier <xliff:g id="FILENAME">%s</xliff:g> va bientôt être importé."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Le fichier va bientôt être importé."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"La demande d\'importation du fichier vCard a été rejetée. Veuillez réessayer plus tard."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Les contacts seront exportés sous peu."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"La demande d\'exportation du fichier vCard a été rejetée. Veuillez réessayer plus tard."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Mise en cache des fichiers vCard dans l\'espace de stockage temporaire local. L\'importation va bientôt démarrer."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Impossible d\'importer le fichier vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact reçu par NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Mise en cache…"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importation <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> (<xliff:g id="NAME">%3$s</xliff:g>)"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exporter en format .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Trier par"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nom phonétique"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Toujours afficher"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Masquer si vide"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prénom"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nom de famille"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format de nom"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Prénom en premier"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nom de famille en premier"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Comptes"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Compte par défaut pour nouveaux contacts"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mon profil"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurer votre profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"À propos de Contacts"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exporter des contacts"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importer des contacts de"</string>
+ <string name="share_error" msgid="948429331673358107">"Impossible de partager ce contact."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Il n\'y a aucun contact à partager."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts à afficher"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts à afficher"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personnaliser l\'affichage"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Enregistrer"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Rechercher dans les contacts"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importer"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exporter"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"arrêter la recherche"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Effacer les termes de recherche"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Toujours l\'utiliser pour les appels"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Envoyez une note pour accompagner l\'appel"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Tapez une note pour accompagner l\'appel…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVOYER ET APPELER"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Version"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licences de logiciels libres"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Renseignements sur les licences de logiciels libres"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Politique de confidentialité"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Conditions d\'utilisation"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licences de logiciels libres"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Échec de l\'ouverture de l\'URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Contact « <xliff:g id="ACCOUNT_INFO">%s</xliff:g> » coché"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Contact « <xliff:g id="ACCOUNT_INFO">%s</xliff:g> » non coché"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Faire un appel vidéo"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Supprimer"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ce raccourci a été désactivé"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Le contact a été supprimé"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importer"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Sélectionner des contacts"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Aucun contact n\'a été trouvé sur votre carte SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Ce contact existe déjà dans votre liste"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact importé de la carte SIM</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts importés de la carte SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Échec de l\'importation des contacts de la carte SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importer à partir de la carte SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Annuler"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La synchronisation automatique est désactivée. Touchez ici pour l\'activer."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignorer"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La synchronisation des comptes est désactivée. Touchez ici pour l\'activer."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Activer la synchronisation automatique?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Les modifications que vous apportez dans l\'ensemble des applications et des comptes, non seulement dans Contacts Google, sont synchronisées avec le Web et avec vos appareils."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activer"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Aucune connexion"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"Carte SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Afficher plus"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importation de la carte SIM terminée"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Échec de l\'importation"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossible d\'importer des contacts à partir de la carte SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importation des contacts SIM en cours…"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Avis"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index affbabae1..20e412b5a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacts"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Afficher le contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Modifier le contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Ajouter le contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Raccourci appel"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Raccourci message"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choisissez un contact"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choisissez le numéro à appeler"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choisissez un numéro"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Choisir un contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ajouter au contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Sélectionner un contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Sélectionner"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Créer un contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Favoris"</string>
- <string name="frequentList" msgid="7154768136473953056">"Contacts fréquents"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoris"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Détails du contact"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Modifier le contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Créer un contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Modifier le groupe"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Créer un groupe"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"À propos de"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Mises à jour"</string>
<string name="searchHint" msgid="8482945356247760701">"Rech. des contacts"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Afficher le contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Ajouter aux favoris"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Supprimer des favoris"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Supprimé des favoris"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Modifier"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Supprimer"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Changer de photo"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placer sur l\'écran d\'accueil"</string>
- <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Créer un raccourci"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Dissocier"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Modifier"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Supprimer"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Ajouter un contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ajouter un groupe"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Supprimer les contacts"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Renommer le libellé"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Supprimer le libellé"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Ajouter un contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Sélectionner des contacts"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ajouter des contacts"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Retirer du libellé"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Créer un libellé"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Diviser ce contact en plusieurs contacts ?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Dissocier"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et diviser ce contact en plusieurs contacts ?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Enregistrer et dissocier"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et les associer au contact sélectionné ?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Enregistrer et associer"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Association des contacts..."</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Dissociation des contacts..."</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Associer"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Afficher les contacts associés"</string>
<string name="menu_save" msgid="1727844363591825909">"Enregistrer"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associer les contacts"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Sélectionnez le contact que vous souhaitez associer avec <xliff:g id="NAME">%s</xliff:g> :"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afficher tous les contacts"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contacts suggérés"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tous les contacts"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> associé"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Les contacts ont bien été associés."</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Contact <xliff:g id="NAME">%1$s</xliff:g> supprimé"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Contacts <xliff:g id="NAME_0">%1$s</xliff:g> et <xliff:g id="NAME_1">%2$s</xliff:g> supprimés"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Contacts <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… supprimés"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Contact supprimé.</item>
<item quantity="other">Contacts supprimés.</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Contacts Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Contacts de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Régler sonnerie"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tous appels vers messag. voc."</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Les contacts issus de vos comptes en lecture seule ne peuvent pas être supprimés, mais ils peuvent être masqués."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Masquer"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Le contact à supprimer contient des informations détaillées issues de plusieurs comptes. Les informations détaillées issues des comptes en lecture seule seront masquées, mais pas supprimées."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Vous ne pouvez pas associer un seul et même contact. Veuillez en sélectionner au moins deux."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Associer les contacts sélectionnés ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Associer"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Rediriger vers la messagerie"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ne plus rediriger"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ce contact est en lecture seule. Il ne peut pas être supprimé, mais vous pouvez le masquer."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Masquer le contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Les comptes en lecture seule de ce contact seront masqués, mais pas supprimés."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Supprimer ce contact ?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Supprimer les contacts sélectionnés ?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Les contacts issus de vos comptes en lecture seule ne peuvent pas être supprimés, mais ils peuvent être masqués."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"La suppression de ce contact entraînera la suppression d\'informations détaillées issues de plusieurs comptes."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Supprimer ce contact ?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Supprimer"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Ce contact n\'existe pas."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Le contact a bien été ajouté à l\'écran d\'accueil."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"\"<xliff:g id="NAME">%s</xliff:g>\" a bien été ajouté à l\'écran d\'accueil."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Créer un nouveau contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Créer un nouveau contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Remarque"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Aucune image n\'est disponible sur la tablette."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Aucune image disponible sur le téléphone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Aucune image n\'est disponible sur l\'appareil."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Photo d\'un contact"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Libellé personnalisé"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale"</string>
<string name="removePhoto" msgid="4898105274130284565">"Supprimer la photo"</string>
- <string name="noContacts" msgid="4955659076981974652">"Aucun contact"</string>
- <string name="noGroups" msgid="8614664663561385253">"Aucun groupe"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Vous devez posséder un compte pour créer des groupes."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ce groupe est vide."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Pour ajouter des membres, veuillez le modifier."</string>
- <string name="savingContact" msgid="4075751076741924939">"Enregistrement du contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Votre liste de contacts est vide"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Aucun contact n\'est associé à ce libellé"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Aucun contact dans ce compte"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> enregistré"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact enregistré."</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacts dissociés"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Impossible d\'enregistrer les modifications apportées au contact."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossible de dissocier le contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossible d\'associer le contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erreur lors de l\'enregistrement du contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossible d\'enregistrer les modifications apportées à la photo du contact."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Groupe enregistré"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Impossible d\'enregistrer les modifications apportées au groupe."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec numéro de téléphone</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts avec numéro de téléphone</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Aucun contact disposant d\'un numéro de téléphone"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact trouvé</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts trouvés</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossible d\'enregistrer les modifications apportées au contact"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossible de dissocier le contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossible d\'associer le contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les modifications apportées à la photo du contact"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossible de charger le libellé"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Libellé supprimé"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Libellé créé"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossible de créer le libellé"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Libellé mis à jour"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Contact retiré du libellé"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ajout au libellé effectué"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossible d\'enregistrer les changements apportés au libellé"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ce libellé existe déjà"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Certains contacts n\'ont pas d\'adresse e-mail."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Certains contacts n\'ont pas de numéro de téléphone."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Envoyer un e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envoyer un message"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Sélectionner des contacts"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Envoyer"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Aucun contact"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact trouvé</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts trouvés</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tous"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoris"</string>
- <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
- <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
- <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"photo du contact"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Aucune application pouvant gérer cette action n\'a été trouvée."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Cliquez pour revenir à l\'écran précédent."</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ajouter un numéro de téléphone"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Ajouter une adresse e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Aucune application trouvée pour gérer cette action."</string>
<string name="menu_share" msgid="943789700636542260">"Partager"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Ajouter aux contacts"</string>
- <string name="share_via" msgid="563121028023030093">"Partager contact via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Sélectionner le compte associé au groupe"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Ajouter"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Partager un contact via</item>
+ <item quantity="other">Partager des contacts via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Sélectionner un compte"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Créer un libellé"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Renommer un libellé"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nom du libellé"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom du libellé"</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat audio"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat vidéo"</string>
- <string name="connections" msgid="8098440723172028350">"Contacts"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Ajouter un contact"</string>
- <string name="recent" msgid="2659189233141493004">"Récentes"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Mises à jour récentes"</string>
<string name="account_type_format" msgid="718948015590343010">"Contact <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Compte <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Non modifiable depuis cette application."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Non modifiable sur cet appareil."</string>
<string name="take_photo" msgid="7496128293167402354">"Prendre une photo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Prendre une autre photo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Sélectionner une photo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"La liste de contacts est en cours de mise à jour."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Recherche…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Afficher la sélection"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Tout afficher"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Tout sélectionner"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Tout désélectionner"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ajouter"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ajouter une entreprise"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nom du groupe"</string>
- <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Photo principale"</string>
- <string name="description_star" msgid="2605854427360036550">"favori"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Modifier le contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Associer ce contact au contact sélectionné ?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ajouter libellé"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuler"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Retour"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Modifier le contact sélectionné ? Les informations saisies jusqu\'ici seront copiées."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copier dans \"Mes contacts\""</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Ajouter à \"Mes contacts\""</string>
<string name="contact_directory_description" msgid="683398073603909119">"Annuaire <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personnalisé"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Paramètres"</string>
<string name="menu_settings" msgid="377929915873428211">"Paramètres"</string>
<string name="menu_help" msgid="1680178646764069976">"Aide et commentaires"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Options d\'affichage"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Numéro de téléphone"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ajouter aux contacts"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ajouter au contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Fermer"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inclure l\'année"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Chargement…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Créer un contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ajouter un compte"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importer des contacts"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Créer un groupe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Créer un groupe"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> groupe</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groupes</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Supprimer le groupe \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ? Les contacts ne seront pas supprimés."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact dans <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts dans <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> contact</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> contacts</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importer"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Créer…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Supprimer le libellé \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" (les contacts associés ne seront pas supprimés) ?"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Saisissez le nom du contact avant de l\'associer à un autre."</string>
<string name="copy_text" msgid="3257145021583508761">"Copier dans le presse-papiers"</string>
<string name="set_default" msgid="4417505153468300351">"Définir par défaut"</string>
<string name="clear_default" msgid="7193185801596678067">"Effacer les valeurs par défaut"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texte copié"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Supprimer les modifications et quitter le mode d\'édition ?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Ignorer les modifications ?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Supprimer"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Poursuivre les modifications"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurer mon profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Saisissez le nom de la personne"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nom du groupe"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuler"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Supprimer les personnalisations ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Rechercher des contacts"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Supprimer les contacts"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mon profil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mon profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Affichage de tous les contacts"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Assurez la sécurité de vos contacts, même si vous perdez votre téléphone en effectuant une synchronisation avec un service en ligne."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ajouter un compte"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Votre nouveau contact ne sera pas sauvegardé. Ajouter un compte permettant de sauvegarder les contacts en ligne ?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Prenez le temps d\'ajouter un compte afin de sauvegarder vos contacts sur Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Les nouveaux contacts seront enregistrés dans le compte <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Sélectionnez un compte par défaut pour les nouveaux contacts :"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Ajouter un contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Créer un contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Modifier contact"</string>
- <string name="keep_local" msgid="1258761699192993322">"Enregistrer localement"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Lecture seule"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Choisir le contact à modifier"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contacts associés"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Ajouter"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Dissocier"</string>
<string name="add_account" msgid="8201790677994503186">"Ajouter un compte"</string>
<string name="add_new_account" msgid="5748627740680940264">"Ajouter un compte"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exporter les fichiers de la base de données"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ajouter un contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Créer un contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Plus"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Moins"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Tout afficher"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Récents"</string>
<string name="about_card_title" msgid="2920942314212825637">"À propos de"</string>
- <string name="send_message" msgid="8938418965550543196">"Envoyer le message"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Création d\'une copie personnelle en cours..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Hier"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Création d\'une copie personnelle…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Demain"</string>
<string name="today" msgid="8041090779381781781">"Aujourd\'hui"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Aujourd\'hui, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demain, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Événement sans titre)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Définir"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Messagerie instantanée"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Site Web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Événement"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Adresse e-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Numéro de téléphone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Photo"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
<string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS récent : \"<xliff:g id="MESSAGE_BODY">%s</xliff:g>\", <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Appuyez sur l\'écran pour répondre à ce message."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS récent : \"<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>\", <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Appuyez sur l\'écran pour répondre à ce message."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortant"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"manqué"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Appuyez sur l\'écran pour rappeler ce numéro."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Appuyez sur l\'écran pour rappeler ce numéro."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vous : <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Les Hangouts fonctionnent mieux si vous saisissez l\'identifiant Hangouts de la personne concernée dans le champ de l\'adresse e-mail ou du numéro de téléphone."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Autres champs"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Changer de photo"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Échec de l\'ouverture de l\'éditeur."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Enregistrement sur le compte"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Enregistrement en cours sur le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-cliquez pour choisir un autre compte."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Contacts associés (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contacts associés"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Autres champs"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Modifier la photo du contact"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ajouter une photo pour le contact"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Photo du contact"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Échec de l\'ouverture de l\'éditeur."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Enregistrement sur le compte"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Les coordonnées de <xliff:g id="ACCOUNT">%s</xliff:g> ne sont pas modifiables."</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIER LES CONTACTS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULER"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact potentiellement en double</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts potentiellement en double</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact associé</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts associés</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> – <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ce contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Doublons potentiels"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Ces contacts correspondent peut-être à la même personne. Vous pouvez les regrouper dans un seul contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contacts associés"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"De vos comptes"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Prendre une photo"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Toutes les photos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Sélectionner une photo"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Du compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Supprimer l\'élément \"<xliff:g id="DATA_TYPE">%s </xliff:g> – <xliff:g id="DATA_KIND">%s</xliff:g>\""</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Supprimer l\'élément \"<xliff:g id="DATA_TYPE">%1$s </xliff:g> – <xliff:g id="DATA_KIND">%2$s</xliff:g>\""</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Supprimer l\'élément \"<xliff:g id="DATA_KIND">%s</xliff:g>\""</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> non cochée"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> cochée"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo d\'un compte inconnu non sélectionnée"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo d\'un compte inconnu sélectionnée"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Mise à jour de la liste des contacts en cours suite au changement de langue.\n\nVeuillez patienter..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nouveau"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Ouvrir le panneau de navigation"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Fermer le panneau de navigation"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Libellé <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Libellés"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Comptes"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Rassembler vos historiques"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Événements et messages"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Événements"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messages"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggestions"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Organisez vos contacts et faites en sorte qu\'ils vous soient utiles"</string>
+ <string name="undo" msgid="1425165101664071422">"Annuler"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Appeler le <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Appeler domicile"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Appeler mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Appeler bureau"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Composer télécopie (bureau)"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Composer fax (domicile)"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Appeler téléavertisseur"</string>
+ <string name="call_other" msgid="8563753966926932052">"Appeler"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Appeler numéro de rappel"</string>
+ <string name="call_car" msgid="3280537320306436445">"Appeler voiture"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Appeler entreprise (principal)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Appeler numéro RNIS"</string>
+ <string name="call_main" msgid="6082900571803441339">"Appeler numéro principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Appeler numéro de fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Appeler par signal radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Appeler par télex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Appeler TTY/TTD (malentendants)"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Appeler mobile bureau"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Appeler téléavertisseur bureau"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Appeler le <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Appeler MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (appeler)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Envoyer un SMS au <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Envoyer un SMS au domicile"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Envoyer un SMS vers mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Envoyer un SMS au bureau"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Envoyer un SMS vers télécopie (bureau)"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Envoyer un SMS vers télécopie (domicile)"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Envoyer un SMS vers téléavertisseur"</string>
+ <string name="sms_other" msgid="806127844607642331">"Envoyer un SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Envoyer un SMS au numéro de rappel"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Envoyer un SMS vers voiture"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Envoyer un SMS à entreprise (principal)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Envoyer un SMS vers numéro RNIS"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Envoyer un SMS au numéro principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Envoyer un SMS à ce numéro de fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Envoyer un SMS vers radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Envoyer un SMS par télex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Envoyer SMS vers numéro TTY/TTD (malentendants)"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Envoyer un SMS sur le mobile professionnel"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Envoyer un SMS vers téléavertisseur (bureau)"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Envoyer un SMS à <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Envoyer un MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (envoyer un SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Passer un appel vidéo"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Effacer les contacts fréquents ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Cette opération efface la liste des personnes que vous contactez le plus souvent dans les applications Contacts et Téléphone, et entraîne une réinitialisation des adresses mémorisées comme celles que vous utilisez le plus fréquemment dans vos applications de messagerie électronique."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Suppression des contacts fréquents"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Absent"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Occupé"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Autre"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Annuaire"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Annuaire professionnel"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tous les contacts"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Liens rapides vers <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sans nom)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contacts fréquents"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Tous les contacts disposant d\'un numéro de téléphone"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacts du profil professionnel"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Afficher mises à jour"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Appareil"</string>
+ <string name="account_sim" msgid="6519016427905087952">"Carte SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudo"</string>
+ <string name="name_given" msgid="4280790853455320619">"Prénom"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nom"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Titre"</string>
+ <string name="name_middle" msgid="8467433655992690326">"2e prénom"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Suffixe"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nom phonétique"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Prénom phonétique"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"2e prénom phonétique"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nom phonétique"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Téléphone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresse"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relation"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Occasion spéciale"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresse"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Entreprise"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titre"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personnalisé"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"Adresse SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Site Web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Libellés"</string>
+ <string name="email_home" msgid="8573740658148184279">"Env. e-mail domicile"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Envoyer un e-mail sur le mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Env. e-mail bureau"</string>
+ <string name="email_other" msgid="3454004077967657109">"Envoyer un e-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Envoyer un e-mail à <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Envoyer un e-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rue"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Ville"</string>
+ <string name="postal_region" msgid="6045263193478437672">"État"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Code postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Pays"</string>
+ <string name="map_home" msgid="1243547733423343982">"Afficher adresse perso"</string>
+ <string name="map_work" msgid="1360474076921878088">"Afficher adresse prof."</string>
+ <string name="map_other" msgid="3817820803587012641">"Afficher l\'adresse"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Afficher l\'adresse de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatter via AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatter via Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatter via Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatter via Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatter via QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatter via Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatter via ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatter via Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chatter"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"supprimer"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Afficher plus de champs pour la saisie du nom"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Réduire les champs de nom"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Afficher plus de champs pour la saisie du nom phonétique"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Réduire les champs de nom phonétique"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Développer"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Réduire"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Vue développée"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Vue réduite"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tous les contacts"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Contacts favoris"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personnaliser"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Tous les autres contacts"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tous les contacts"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Supprimer le groupe de synchronisation"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Ajouter groupe de synchronisation"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Autres groupes..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Le retrait de \"<xliff:g id="GROUP">%s</xliff:g>\" de la synchronisation entraînera également le retrait des contacts n\'appartenant à aucun groupe."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Enregistrement des options d\'affichage..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vue personnalisée"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Enregistrer les contacts importés sur :"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Carte SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contact</item>
+ <item quantity="other">%1$d contacts</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Fichier .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Aucun contact à importer"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importer les contacts de la vCard ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Annuler l\'importation de \"<xliff:g id="FILENAME">%s</xliff:g>\" ?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annuler l\'exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" ?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Impossible annuler import./export. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erreur inconnue."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" pour la raison suivante : <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Impossible de démarrer le programme d\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Aucun contact ne peut être exporté."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Vous avez désactivé une autorisation obligatoire."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Une erreur s\'est produite lors de l\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erreur d\'E/S."</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Mémoire insuffisante. Le fichier est peut-être trop volumineux."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ce format n\'est pas compatible."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" terminée"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Les contacts ont bien été exportés"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Les contacts ont bien été exportés. Cliquez sur la notification pour les partager."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Appuyez pour partager les contacts."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" annulée"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportation des données des contacts"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Les données de contact sont en cours d\'exportation."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Impossible d\'obtenir les informations concernant la base de données."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Aucun contact à exporter."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Le système de composition vCard n\'a pas démarré correctement."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Échec exportation"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Les données du contact n\'ont pas été exportées.\nMotif : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\"."</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importation en cours : <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Impossible de lire les données vCard."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Fichier vCard <xliff:g id="FILENAME">%s</xliff:g> importé"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importation de \"<xliff:g id="FILENAME">%s</xliff:g>\" annulée"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Importation du fichier <xliff:g id="FILENAME">%s</xliff:g> imminente"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Le fichier va bientôt être importé."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"La demande d\'importation du fichier vCard a été rejetée. Veuillez réessayer ultérieurement."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Les contacts seront bientôt exportés."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"La demande d\'exportation du fichier vCard a été rejetée. Veuillez réessayer ultérieurement."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Mise en cache des fichiers vCard dans l\'espace de stockage temporaire local. L\'importation va bientôt démarrer."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Impossible d\'importer le fichier vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact reçu via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Mise en cache…"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importation en cours <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exporter vers fichier VCF"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Trier par"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nom phonétique"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Toujours afficher"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Masquer si non disponible"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prénom"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nom"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format du nom"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Prénom en premier"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nom en premier"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Comptes"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Compte par défaut pour les nouveaux contacts"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mes infos"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurer votre profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"À propos de Contacts"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exporter les contacts"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importer des contacts depuis"</string>
+ <string name="share_error" msgid="948429331673358107">"Impossible de partager ce contact."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Aucun contact à partager."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts à afficher"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts à afficher"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personnaliser la vue"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Enregistrer"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Rechercher dans vos contacts"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importer"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exporter"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"arrêter la recherche"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Effacer la recherche"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Toujours l\'utiliser pour les appels"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Appeler avec une note"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Saisissez une note pour accompagner l\'appel..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVOYER L\'OBJET ET APPELER"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Version de build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licences Open Source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Informations sur les licences des logiciels Open Source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Règles de confidentialité"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Conditions d\'utilisation"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licences Open Source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Impossible d\'ouvrir l\'URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Élément \"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>\" coché"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Élément \"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>\" non coché"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Passer un appel vidéo"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Supprimer"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min et <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min et <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ce raccourci a été désactivé."</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Le contact a été supprimé."</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importer"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Sélectionner des contacts"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Aucun contact n\'a été trouvé sur votre carte SIM."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Le contact figure déjà dans votre liste."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact importé depuis la carte SIM</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts importés depuis la carte SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Impossible d\'importer les contacts de la carte SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importer à partir de la carte SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Annuler"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La synchronisation automatique est désactivée. Appuyez pour l\'activer."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignorer"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La synchronisation de votre compte est désactivée. Appuyez pour l\'activer."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Activer la synchronisation automatique ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Les modifications que vous apportez sur l\'ensemble des applications et des comptes, pas seulement dans l\'application Contacts, sont actualisées entre le Web et vos appareils."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activer"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Aucune connexion"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"Carte SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Afficher plus"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importation depuis la carte SIM terminée"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Échec lors de l\'importation"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossible d\'importer les contacts depuis la carte SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importation depuis la carte SIM..."</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifications"</string>
</resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
deleted file mode 100644
index de6296b4b..000000000
--- a/res/values-gl-rES/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contactos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contacto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contacto"</string>
- <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Marcación directa"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaxe directa"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Elixe contacto para atallo"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Elixe número para chamadas"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Elixe número para mensaxes"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Engadir a un contacto"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Seleccionar un contacto"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear novo contacto"</string>
- <string name="starredList" msgid="4817256136413959463">"Marcados con asterisco"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frecuentes"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalles do contacto"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contacto"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Crear contacto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Crear grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizacións"</string>
- <string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Engadir a favoritos"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Eliminar dos favoritos"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Engadido a favoritos"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar na pantalla de inicio"</string>
- <string name="menu_call" msgid="3992595586042260618">"Chamar ao contacto"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar mensaxe ao contacto"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Desligar"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Eliminar"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Engadir contacto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Engadir grupo"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Queres desligar este contacto en varios contactos?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desligar"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Queres gardar os cambios que xa fixeches e desligar este contacto en varios contactos?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Gardar e desligar"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Queres gardar os cambios que xa fixeches e ligalos co contacto seleccionado?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Gardar e ligar"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Ligar"</string>
- <string name="menu_save" msgid="1727844363591825909">"Gardar"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Ligar contactos"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona o contacto que queres ligar con <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contactos"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos suxeridos"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Ligáronse os contactos"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Elimináronse os contactos</item>
- <item quantity="one">Eliminouse o contacto</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir ton"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Chamadas ao correo de voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Non se poden eliminar os contactos das túas contas de só lectura, pero poden ocultarse."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"O contacto que se vai eliminar contén detalles de varias contas. Ocultaranse os detalles das contas de só lectura, pero non se eliminarán."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Necesitas seleccionar polo menos dous contactos para poder ligalos."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Queres ligar os contactos seleccionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Ligar"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Queres eliminar este contacto?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Queres eliminar os contactos seleccionados?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Non se poden eliminar os contactos das túas contas de só lectura, pero poden ocultarse."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Os contactos que se van eliminar teñen detalles de varias contas. Ocultaranse os detalles das contas de só lectura, pero non se eliminarán."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A eliminación deste contacto eliminará detalles de varias contas."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Queres eliminar este contacto?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"O contacto non existe."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Engadiuse o contacto á pantalla de inicio."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Engadiuse a <xliff:g id="NAME">%s</xliff:g> á pantalla de inicio."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear novo contacto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Crear novo contacto"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organización"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Non hai imaxes dispoñibles na tableta."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Non hai imaxes dispoñibles no teléfono."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome de etiqueta personalizada"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas directamente ao correo de voz"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Non hai contactos"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ningún grupo"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Para crear grupos precisas unha conta."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Non hai ninguén neste grupo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para engadir algo, edita o grupo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Gardando contacto..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Gardouse o contacto"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Desligáronse os contactos"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Non se puideron gardar os cambios nos contactos."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Non foi posible desligarse do contacto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Non se puido ligar o contacto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Produciuse un erro ao gardar o contacto."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Non se puideron gardar os cambios na foto do contacto."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo gardado"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Non se puideron gardar os cambios no grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
- <item quantity="one">Un contacto con número de teléfono</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ningún contacto ten número de teléfono"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
- <item quantity="one">Un contacto encontrado</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Non hai contactos"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos encontrados</item>
- <item quantity="one">Un contacto encontrado</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Devolver chamada"</string>
- <string name="callAgain" msgid="3197312117049874778">"Chamar de novo"</string>
- <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Engadir \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto de contacto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"máis"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos teus contactos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Non se encontrou ningunha aplicación para procesar esta acción."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fai clic para volver á pantalla anterior"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Engadir número de teléfono"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Engadir correo electrónico"</string>
- <string name="missing_app" msgid="1466111003546611387">"Non se encontrou ningunha aplicación para procesar esta acción."</string>
- <string name="menu_share" msgid="943789700636542260">"Compartir"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Engadir a contactos"</string>
- <string name="share_via" msgid="563121028023030093">"Compartir contacto mediante"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Crear grupo na conta"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
- <string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Conexións"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Engadir conexión"</string>
- <string name="recent" msgid="2659189233141493004">"Recente"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Actualizac. recentes"</string>
- <string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Conta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Non editable desde esta aplicación."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Non editable neste dispositivo"</string>
- <string name="take_photo" msgid="7496128293167402354">"Facer foto"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Facer foto nova"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Escoller foto"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nova foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Estase actualizando a lista de contactos."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar selección"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todo"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Anular toda a selección"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Engadir nova"</string>
- <string name="add_organization" msgid="7311893231158291197">"Engadir organización"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nome do grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favorito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Queres ligar o contacto actual co contacto seleccionado?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Cambiar para editar o contacto seleccionado? Copiarase a información introducida ata o momento."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar en Os meus contactos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Engadir a Os meus contactos"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizados"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
- <string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
- <string name="menu_help" msgid="1680178646764069976">"Axuda e suxestións"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcións de visualización"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Número de teléfono"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Engadir a contactos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Engadir ao contacto"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Pechar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Incluír ano"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto novo"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Engadir conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Crear novo grupo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Crear novo grupo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- <item quantity="one">Un grupo</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Queres eliminar o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos non se eliminarán)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoa de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persoas</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoa</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Escribe o nome do contacto antes de ligalo con outro."</string>
- <string name="copy_text" msgid="3257145021583508761">"Copiar no portapapeis"</string>
- <string name="set_default" msgid="4417505153468300351">"Definir como predeterminado"</string>
- <string name="clear_default" msgid="7193185801596678067">"Borrar valores predeterminados"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Queres descartar os teus cambios e deixar de editar?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Seguir editando"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar o meu perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Escribe o nome da persoa"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nome do grupo"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"O meu perfil local"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"O meu perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrando todos os contactos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén os teus contactos seguros aínda que perdas o teléfono: sincroniza cun servizo en liña."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Engadir unha conta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Non se creará unha copia de seguranza do teu novo contacto. Queres engadir unha conta que cree unha copia de seguranza dos contactos en liña?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Os contactos novos gardaranse en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolle unha conta predeterminada para novos contactos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Engadir contacto"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contacto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Gardar localmente"</string>
- <string name="add_account" msgid="8201790677994503186">"Engadir conta"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Engadir conta nova"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Exportar ficheiros da base de datos"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"engadir novo contacto"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver máis"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver todo"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Acerca de"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensaxe"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creando unha copia persoal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Onte"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Mañá"</string>
- <string name="today" msgid="8041090779381781781">"Hoxe"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Hoxe ás <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañá ás <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Evento sen título)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Configurar"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Organización"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Alcume"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Nota"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic para ampliar o editor de contactos."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic para contraer o editor de contactos."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"indicacións para a localización"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic para responder"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrante"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saínte"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic para devolver a chamada"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funciona mellor se introduces o identificador de Hangouts da persoa no campo do correo electrónico ou do teléfono."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Máis campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambiar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Produciuse un erro ao abrir o editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Gardando en"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Gardando actualmente en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dúas veces para seleccionar unha conta diferente."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Ligáronse os contactos (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Ligouse o contacto</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Ligáronse <xliff:g id="COUNT">%d</xliff:g> contactos"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIGAR CONTACTOS"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
- <item quantity="one">1 posible duplicado</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Ligáronse <xliff:g id="COUNT">%d</xliff:g> contactos</item>
- <item quantity="one">Ligouse 1 contacto</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Estes contactos poden referirse á mesma persoa. Podes ligalos nun contacto único."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contactos ligados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Das túas contas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tirar unha foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas as fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Escoller foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Non se seleccionou a foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Seleccionouse a foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Non se seleccionou a foto dunha conta descoñecida"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Seleccionouse a foto dunha conta descoñecida"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contactos estase actualizando para reflectir o cambio do idioma.\n\nAgarda..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
-</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
new file mode 100644
index 000000000..6cd2b618b
--- /dev/null
+++ b/res/values-gl/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Engadir contacto"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Marcación directa"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaxe directa"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escoller contacto"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Engadir a un contacto"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Seleccionar un contacto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear novo contacto"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Engadir a favoritos"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Eliminar dos favoritos"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Engadido a favoritos"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crear acceso directo"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Desligar"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Eliminar contactos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nome da etiqueta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Eliminar etiqueta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Engadir contacto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Engadir contactos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminar da etiqueta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Queres desligar este contacto en varios contactos?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desligar"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Queres gardar os cambios que xa fixeches e desligar este contacto en varios contactos?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Gardar e desligar"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Queres gardar os cambios que xa fixeches e ligalos co contacto seleccionado?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Gardar e ligar"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Ligando"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Desligando"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Ligar"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contactos ligados"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Gardar"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Ligar contactos"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona o contacto que queres ligar con <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos suxeridos"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ligou os contactos"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Ligáronse os contactos"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Eliminouse a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Eliminouse a <xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Eliminouse a <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Elimináronse os contactos</item>
+ <item quantity="one">Eliminouse o contacto</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir ton"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Encamiñar ao correo de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Desencamiñar ao correo de voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contacto é de só lectura. Non se pode eliminar, pero podes ocultalo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contacto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"As contas de só lectura neste contacto ocultaranse, pero non se eliminarán."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Queres eliminar este contacto?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Queres eliminar os contactos seleccionados?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Non se poden eliminar os contactos das túas contas de só lectura, pero poden ocultarse."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Os contactos que se van eliminar teñen detalles de varias contas. Ocultaranse os detalles das contas de só lectura, pero non se eliminarán."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A eliminación deste contacto eliminará detalles de varias contas."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Queres eliminar este contacto?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"O contacto non existe."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Engadiuse o contacto á pantalla de inicio."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Engadiuse a <xliff:g id="NAME">%s</xliff:g> á pantalla de inicio."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Non hai imaxes dispoñibles no dispositivo."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome de etiqueta personalizada"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
+ <string name="noContacts" msgid="2228592924476426108">"A túa lista de contactos está baleira"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Non hai ningún contacto con esta etiqueta"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Non hai ningún contacto nesta conta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"A túa lista de contactos está baleira"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Gardouse a <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Gardouse o contacto"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Desligáronse os contactos"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Non se puideron gardar os cambios no contacto"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Non se puido desligar o contacto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Non se puido ligar o contacto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Produciuse un erro ao gardar o contacto"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Non se puideron gardar os cambios na foto do contacto"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Produciuse un erro ao cargar a etiqueta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Eliminouse a etiqueta"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Creouse a etiqueta"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Non se pode crear a etiqueta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Actualizouse a etiqueta"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminouse da etiqueta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Engadiuse á etiqueta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Non se puideron gardar os cambios na etiqueta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Esa etiqueta xa existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Hai contactos sen ningún correo electrónico."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Hai contactos sen ningún número de teléfono."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar correo electrónico"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaxe"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escoller contactos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Non hai contactos"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Engadir \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos teus contactos"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fai clic para volver á pantalla anterior"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Engadir número de teléfono"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Engadir correo electrónico"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Non se encontrou ningunha aplicación para procesar esta acción."</string>
+ <string name="menu_share" msgid="943789700636542260">"Compartir"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Engadir a contactos"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Engadir"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Compartir contactos mediante</item>
+ <item quantity="one">Compartir contacto mediante</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Escoller conta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Crear etiqueta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Cambiar nome da etiqueta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nome da etiqueta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etiqueta"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
+ <string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Conta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Facer foto"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Facer foto nova"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Escoller foto"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nova foto"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Buscando..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Volver"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"pechar"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Cambiar para editar o contacto seleccionado? Copiarase a información introducida ata o momento."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Configuración"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Configuración"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Axuda e suxestións"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Número de teléfono"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Engadir a contactos"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Pechar"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Incluír ano"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Engadir conta"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Crear nova…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Queres eliminar a etiqueta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos non se eliminarán.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Escribe o nome do contacto antes de ligalo con outro."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Copiar no portapapeis"</string>
+ <string name="set_default" msgid="4417505153468300351">"Definir como predeterminado"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Borrar valores predeterminados"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Queres descartar os cambios?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Queres descartar as personalizacións?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Busca nos contactos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Eliminar contactos"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"O meu perfil local"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"O meu perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Engade unha conta para facer a copia de seguranza dos teus contactos en Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Os contactos novos gardaranse en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolle unha conta predeterminada para novos contactos:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Crear novo contacto"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contacto"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Só visualización"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Escoller contacto para editar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contactos ligados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Engadir"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desligar"</string>
+ <string name="add_account" msgid="8201790677994503186">"Engadir conta"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Engadir conta nova"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Exportar ficheiros da base de datos"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Crear novo contacto"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver máis"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Acerca de"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando unha copia persoal..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Mañá"</string>
+ <string name="today" msgid="8041090779381781781">"Hoxe"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Hoxe ás <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañá ás <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Evento sen título)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Configurar"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Organización"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Alcume"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Nota"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"indicacións para a localización"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic para responder"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrante"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saínte"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic para devolver a chamada"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Máis campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar foto de contacto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Engadir foto de contacto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto de contacto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Produciuse un erro ao abrir o editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Gardando en"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g> non se pode editar"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIGAR CONTACTOS"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Estes contactos poden referirse á mesma persoa. Podes ligalos nun contacto único."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suxestións"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel de navegación"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Pechar panel de navegación"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiqueta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiquetas"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Contas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Consultar o teu historial"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos e mensaxes"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensaxes"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suxestións"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantén os teus contactos organizados e de modo que sexan útiles"</string>
+ <string name="undo" msgid="1425165101664071422">"Desfacer"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Chamar a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Chamar á casa"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Chamar ao móbil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Chamar ao traballo"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Chamar ao número de fax do traballo"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Chamar ao número de fax da casa"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Chamar ao buscapersoas"</string>
+ <string name="call_other" msgid="8563753966926932052">"Chamar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Chamar ao número de devolución de chamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Chamar ao coche"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Chamar ao número principal da empresa"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Chamar ao número de RDSI"</string>
+ <string name="call_main" msgid="6082900571803441339">"Chamar ao número principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Chamar ao fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Chamar á radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Chamar ao télex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Chamar ao número de TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Chamar ao móbil do traballo"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Chamar ao buscapersoas do traballo"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Chamar a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Chamar ao número de teléfono de MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (chamar)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar unha mensaxe a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar unha mensaxe á casa"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar unha mensaxe ao teléfono móbil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar unha mensaxe ao traballo"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar unha mensaxe ao fax do traballo"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar unha mensaxe ao fax da casa"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar unha mensaxe ao buscapersoas"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar unha mensaxe"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar unha mensaxe ao número de devolución da chamada"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar unha mensaxe ao coche"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar unha mensaxe ao teléfono principal da empresa"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Enviar unha mensaxe ao teléfono de RDSI"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Enviar unha mensaxe ao teléfono principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar unha mensaxe ao fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar unha mensaxe á radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar unha mensaxe ao télex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar unha mensaxe ao TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar unha mensaxe ao móbil do traballo"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar unha mensaxe ao buscapersoas do traballo"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar unha mensaxe a <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar unha mensaxe ao MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (enviar mensaxe)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Realizar videochamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Borrar contactados con frecuencia?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Borrarás a lista de persoas coas que contactas frecuentemente das aplicacións Contactos e Teléfono, e obrigarás as aplicacións de correo electrónico a que memoricen as túas preferencias de enderezos desde cero."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Borrando contactados frecuencia..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Dispoñible"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Outro"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de traballo"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos os contactos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido para <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sen nome)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactados frecuentemente"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos os contactos con números de teléfono"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos do perfil de traballo"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizacións"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Alcume"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nome"</string>
+ <string name="name_family" msgid="7466985689626017037">"Apelidos"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Tratamento do nome"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Segundo nome"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Información profesional do nome"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nome fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nome fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Segundo nome fonético"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Apelido fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Teléfono"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Correo electrónico"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Enderezo"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"MI"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organización"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relación"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensaxe de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Enderezo"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Cargo"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notas"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Sitio web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiquetas"</string>
+ <string name="email_home" msgid="8573740658148184279">"Enviar correo electrónico á casa"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Enviar correo electrónico ao móbil"</string>
+ <string name="email_work" msgid="2807430017302722689">"Enviar correo electrónico ao traballo"</string>
+ <string name="email_other" msgid="3454004077967657109">"Correo electrónico"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar correo electrónico a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Correo electrónico"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rúa"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver enderezo da casa"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver enderezo do traballo"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver enderezo"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver enderezo de: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatear con AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatear con Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatear con Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatear con Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatear con QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatear con Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatear con ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatear con Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chatear"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar máis campos de nome"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Contraer campos de nome"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar máis campos de nome fonético"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Contraer campos de nome fonético"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Despregar"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Contraer"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Despregado"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Contraído"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contactos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Marcados con estrela"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacto"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos os demais contactos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos os contactos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Eliminar grupo de sincronización"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Engadir grupo de sincronización"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Máis grupos..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Se eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronización, tamén eliminarás os contactos non agrupados da sincronización."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Gardando opcións de visualización..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gardar contactos importados en:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Tarxeta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%d contactos</item>
+ <item quantity="one">1 contacto</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Ficheiro .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Non hai nada para importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Queres importar contactos de vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Queres cancelar importación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Queres cancelar a exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Imposible cancelar import./export. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro descoñecido."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Non se puido abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Non se puido iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Non hai ningún contacto exportable."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Desactivaches un permiso necesario."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Produciuse un erro durante a exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro de E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Non hai memoria suficiente. É posible que o ficheiro sexa demasiado grande."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato non é compatible."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finalizou a exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finalizou a exportación dos contactos."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finalizou a exportación dos contactos. Fai clic na notificación para compartilos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toca para compartir os contactos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Cancelouse a exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contactos"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Estanse exportando os datos dos contactos."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Non se puido obter a información da base de datos."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Non hai ningún contacto exportable."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"O redactor de vCard non se iniciou correctamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Imposible exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Non se exportaron os datos dos contactos.\n Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Non se puideron ler os datos de vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importación de <xliff:g id="FILENAME">%s</xliff:g> de vCard finalizada"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importación de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importarase en breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O ficheiro importarase en breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Rexeitouse a solicitude de importación do ficheiro vCard. Téntao de novo máis tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Exportaranse os contactos en breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Rexeitouse a solicitude de exportación de vCard. Téntao de novo máis tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Estanse almacenando as vCard na memoria caché do almacenamento temporal local. A importación real comezará en breve."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Non se puido importar o ficheiro vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recibido por NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando na caché"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar a ficheiro .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nome fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar se está baleiro"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Apelidos"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato do nome"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Primeiro o nome"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Primeiro os apelidos"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Contas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Conta predeterminada para novos contactos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"A miña información"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurar perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Acerca de Contactos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Compartir todos os contactos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Erro ao compartir os contactos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contactos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contactos de"</string>
+ <string name="share_error" msgid="948429331673358107">"Non se pode compartir este contacto."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Non hai ningún contacto para compartir."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos para mostrar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos para mostrar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gardar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Busca nos contactos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"a través de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"deter busca"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Borrar busca"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Usar sempre esta tarxeta para as chamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Chamar cunha nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Escribe unha nota para enviala coa chamada…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR e CHAMAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versión de compilación"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenzas de código aberto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles da licenza para software de código aberto"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privacidade"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Condicións de servizo"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenzas de código aberto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Produciuse un erro ao abrir o URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Marcouse <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Non se marcou <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Facer videochamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Puntos suspensivos"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Desactivouse o atallo"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Eliminouse o contacto"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Seleccionar contactos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Non hai ningún contacto na tarxeta SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"O contacto xa está na túa lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Importáronse <xliff:g id="COUNT">%d</xliff:g> contactos da SIM</item>
+ <item quantity="one">Importouse 1 contacto da SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Produciuse un erro ao importar contactos da SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar da SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"A sincronización automática está desactivada. Toca para activala."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignorar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"A sincronización da conta está desactivada. Toca para activala."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Queres activar a sincronización automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Os cambios que fas en todas as aplicacións e contas, non só en Contactos de Google, gardaranse actualizados entre a web e os teus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sen conexión"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar máis"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finalizou a importación da tarxeta SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Produciuse un erro na importación"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Non se puideron importar os contactos da tarxeta SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificacións"</string>
+</resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
deleted file mode 100644
index fa6714727..000000000
--- a/res/values-gu-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"સંપર્કો"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"સંપર્કો"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"સંપર્ક જુઓ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"સંપર્ક સંપાદિત કરો"</string>
- <string name="contactsList" msgid="8661624236494819731">"સંપર્કો"</string>
- <string name="shortcutContact" msgid="749243779392912958">"સંપર્ક"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"સીધું જ ડાયલ"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"સીધો જ સંદેશ"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"સંપર્ક શોર્ટકટ પસંદ કરો"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"કૉલ કરવા માટે નંબર પસંદ કરો"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"સંદેશ કરવા માટે નંબર પસંદ કરો"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"સંપર્કમાં ઉમેરો"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"સંપર્ક પસંદ કરો"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"નવો સંપર્ક બનાવો"</string>
- <string name="starredList" msgid="4817256136413959463">"તારાંકિત"</string>
- <string name="frequentList" msgid="7154768136473953056">"વારંવાર"</string>
- <string name="strequentList" msgid="5640192862059373511">"મનપસંદ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"સંપર્ક વિગતો"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"સંપર્ક સંપાદિત કરો"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"સંપર્ક બનાવો"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"જૂથ સંપાદિત કરો"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"જૂથ બનાવો"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"વિશે"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"અપડેટ્સ"</string>
- <string name="searchHint" msgid="8482945356247760701">"સંપર્કો શોધો"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"સંપર્ક જુઓ"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"મનપસંદમાં ઉમેરો"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"મનપસંદમાંથી દૂર કરો"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"મનપસંદમાંથી દૂર કર્યું"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"મનપસંદમાં ઉમેર્યું"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"સંપાદન"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"કાઢી નાખો"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ફોટો બદલો"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"હોમ સ્ક્રીન પર સ્થાન"</string>
- <string name="menu_call" msgid="3992595586042260618">"સંપર્કને કૉલ કરો"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"સંપર્કને ટેક્સ્ટ કરો"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"અનલિંક કરો"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"સંપાદન"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"કાઢી નાખો"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"સંપર્ક ઉમેરો"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"જૂથ ઉમેરો"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરીએ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"અનલિંક કરો"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"તમે પહેલેથી કરેલા ફેરફારોને સાચવવા અને આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરવા ઈચ્છો છો?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"સાચવો અને અનલિંક કરો"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"તમે પહેલેથી કરેલા ફેરફારોને સાચવવા અને પસંદ કરેલાં સંપર્ક સાથે લિંક કરવા ઈચ્છો છો?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"સાચવો અને લિંક કરો"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"લિંક કરો"</string>
- <string name="menu_save" msgid="1727844363591825909">"સાચવો"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"સંપર્કો લિંક કરો"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"તમે <xliff:g id="NAME">%s</xliff:g> સાથે લિંક કરવા માંગતા હોય તે સંપર્ક પસંદ કરો:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"તમામ સંપર્કો બતાવો"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"સૂચવેલા સંપર્કો"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"તમામ સંપર્કો"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"સંપર્કો લિંક કર્યાં"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">સંપર્કો કાઢી નાખ્યા</item>
- <item quantity="other">સંપર્કો કાઢી નાખ્યા</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"રિંગટોન સેટ કરો"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"વૉઇસમેઇલ પરના બધા કૉલ્સ"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"તમારા માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરના સંપર્કોને કાઢી નાખી શકાતાં નથી, પરંતુ તેઓને છુપાવી શકાય છે."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"છુપાવો"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"કાઢી નાખવા માટેનો સંપર્ક બહુવિધ એકાઉન્ટ્સ પરની વિગતો ધરાવે છે. માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરની વિગતો છુપાવવામાં આવશે, કાઢી નાખવામાં આવશે નહિ."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"લિંક કરવા માટે તમારે ઓછામાં ઓછા બે સંપર્કો પસંદ કરવાની જરૂર છે."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"પસંદ કરેલાં સંપર્કોને લિંક કરીએ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"લિંક કરો"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"આ સંપર્કને કાઢી નાખીએ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"પસંદ કરેલા સંપર્કોને કાઢી નાખીએ?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"તમારા માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરના સંપર્કોને કાઢી નાખી શકાતાં નથી, પરંતુ તેઓને છુપાવી શકાય છે."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"કાઢી નાખવાના સંપર્કો બહુવિધ એકાઉન્ટ્સ પરની વિગતો ધરાવે છે. માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરની વિગતો છુપાવવામાં આવશે, કાઢી નાખવામાં આવશે નહિ."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"આ સંપર્કને કાઢી નાખવું બહુવિધ એકાઉન્ટ્સમાંથી વિગતો કાઢી નાખશે."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"આ સંપર્કને કાઢી નાખીએ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"કાઢી નાખો"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ફેરફારો છોડી દો"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"સંપર્ક અસ્તિત્વમાં નથી."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"સંપર્કને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યો."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યું."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"નવો સંપર્ક બનાવો"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"નવો સંપર્ક બનાવો"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"સંગઠન"</item>
- <item msgid="7196592230748086755">"નોંધ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ટેબ્લેટ પર કોઈ ચિત્રો ઉપલબ્ધ નથી."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ફોન પર કોઈ ચિત્રો ઉપલબ્ધ નથી."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"સંપર્ક ફોટો"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"કસ્ટમ લેબલ નામ"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"કૉલ્સને સીધા જ વૉઇસમેઇલ પર મોકલો"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ફોટો દૂર કરો"</string>
- <string name="noContacts" msgid="4955659076981974652">"કોઈ સંપર્કો નથી"</string>
- <string name="noGroups" msgid="8614664663561385253">"કોઈ જૂથ નથી."</string>
- <string name="noAccounts" msgid="7768267764545265909">"જૂથો બનાવવા માટે તમને એકાઉન્ટની જરૂર છે."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"આ જૂથમાં કોઈ લોકો નથી."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"કોઈને ઉમેરવા માટે, જૂથ સંપાદિત કરો."</string>
- <string name="savingContact" msgid="4075751076741924939">"સંપર્ક સાચવી રહ્યાં છે…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"સંપર્ક સાચવ્યો"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"સંપર્કો અનલિંક કર્યા"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ફેરફારો સાચવી શકાયાં નથી."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"સંપર્કને અનલિંક કરી શક્યા નથી."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"સંપર્ક લિંક કરી શક્યાં નથી."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"સંપર્ક સાચવવામાં ભૂલ."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"સંપર્ક ફોટાના ફેરફારો સાચવી શક્યાં નથી."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"જૂથ સાચવ્યુ."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"જૂથ ફેરફારો સાચવી શકાયાં નથી."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">ફોન નંબર્સ સાથેના <xliff:g id="COUNT">%d</xliff:g> સંપર્કો</item>
- <item quantity="other">ફોન નંબર્સ સાથેના <xliff:g id="COUNT">%d</xliff:g> સંપર્કો</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ફોન નંબર્સ સાથે કોઈ સંપર્કો નથી"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"સંપર્કો નથી"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> મળ્યાં</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"તમામ"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"મનપસંદ"</string>
- <string name="callBack" msgid="5498224409038809224">"કૉલ બૅક કરો"</string>
- <string name="callAgain" msgid="3197312117049874778">"ફરી કૉલ કરો"</string>
- <string name="returnCall" msgid="8171961914203617813">"વળતો કૉલ"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ને સંપર્કોમાં ઉમેરીએ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"સંપર્ક ફોટો"</string>
- <string name="description_plus_button" msgid="515164827856229880">"પ્લસ"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> માંથી <xliff:g id="CURRENT_NUMBER">%s</xliff:g> સંપર્કો"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"તમારા સંપર્કોના નામ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"આ ક્રિયાને હેન્ડલ કરવા માટે કોઈ ઍપ્લિકેશન મળી નહીં."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"પાછલી સ્ક્રીન પર પાછા આવવા માટે ક્લિક કરો"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ફોન નંબર ઉમેરો"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ઇમેઇલ ઉમેરો"</string>
- <string name="missing_app" msgid="1466111003546611387">"આ ક્રિયાને હેન્ડલ કરવા માટે કોઈ ઍપ્લિકેશન મળી નહીં."</string>
- <string name="menu_share" msgid="943789700636542260">"શેર કરો"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"સંપર્કોમાં ઉમેરો"</string>
- <string name="share_via" msgid="563121028023030093">"આના દ્વારા સંપર્ક શેર કરો"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"એકાઉન્ટ હેઠળ જૂથ બનાવો"</string>
- <string name="audio_chat" msgid="2535716629358298691">"વોઇસ ચેટ"</string>
- <string name="video_chat" msgid="1872255818640336072">"વિડિઓ ચેટ"</string>
- <string name="connections" msgid="8098440723172028350">"કનેક્શંસ"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"કનેક્શન ઉમેરો"</string>
- <string name="recent" msgid="2659189233141493004">"તાજેતરના"</string>
- <string name="recent_updates" msgid="4267258535615860710">"તાજેતરનાં અપડેટ્સ"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> સંપર્ક"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> એકાઉન્ટ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"આ એપ્લિકેશનથી સંપાદનયોગ્ય નથી."</string>
- <string name="group_read_only" msgid="1061762906115697637">"આ ઉપકરણ પર સંપાદનયોગ્ય નથી."</string>
- <string name="take_photo" msgid="7496128293167402354">"ફોટો લો"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"નવો ફોટો લો"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ફોટો પસંદ કરો"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"નવો ફોટો પસંદ કરો"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"સંપર્ક સૂચિ અપડેટ કરવામાં આવી રહી છે."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"શોધી રહ્યું છે..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"પસંદ કરેલ બતાવો"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"બધું બતાવો"</string>
- <string name="menu_select_all" msgid="621719255150713545">"બધા પસંદ કરો"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"બધા નાપસંદ કરો"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"નવું ઉમેરો"</string>
- <string name="add_organization" msgid="7311893231158291197">"સંગઠન ઉમેરો"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"તારીખ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"જૂથ નામ"</string>
- <string name="change_photo" msgid="8530597935483526383">"બદલો"</string>
- <string name="primary_photo" msgid="8517942231868516999">"પ્રાથમિક ફોટો"</string>
- <string name="description_star" msgid="2605854427360036550">"મનપસંદ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"સંપર્ક સંપાદિત કરો"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"પસંદ કરેલ સંપર્ક સાથે વર્તમાન સંપર્કને લિંક કરીએ?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"પસંદ કરેલ સંપર્કોને સંપાદિત કરવા પર સ્વિચ કરીએ? તમે અત્યાર સુધીમાં દાખલ કરેલી માહિતીને કૉપિ કરાશે."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"મારા સંપર્કો પર કૉપિ કરો"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"મારા સંપર્કોમાં ઉમેરો"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"નિર્દેશિકા <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"કસ્ટમ"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"સેટિંગ્સ"</string>
- <string name="menu_settings" msgid="377929915873428211">"સેટિંગ્સ"</string>
- <string name="menu_help" msgid="1680178646764069976">"સહાય અને પ્રતિસાદ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"પ્રદર્શન વિકલ્પો"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ફોન નંબર"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"સંપર્કોમાં ઉમેરો"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"સંપર્કમાં ઉમેરો"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"બંધ કરો"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"વર્ષ શામેલ કરો"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"સંપર્ક"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"લોડ કરી રહ્યું છે..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"એક નવો સંપર્ક બનાવો"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"એકાઉન્ટ ઉમેરો"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"સંપર્કો આયાત કરો"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"નવું જૂથ બનાવો"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"નવું જૂથ બનાવો"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> જૂથ</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> જૂથ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" જૂથ કાઢી નાખીએ? (તેમાં રહેલા સંપર્કો કાઢી નાખવામાં આવશે નહીં.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> માંથી <xliff:g id="COUNT_2">%1$d</xliff:g> લોકો</item>
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> માંથી <xliff:g id="COUNT_2">%1$d</xliff:g> લોકો</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> લોકો</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> લોકો</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"બીજા સાથે લિંક કરતાં પહેલાં સંપર્કનું નામ લખો."</string>
- <string name="copy_text" msgid="3257145021583508761">"ક્લિપબોર્ડ પર કૉપિ કરો"</string>
- <string name="set_default" msgid="4417505153468300351">"ડિફોલ્ટ સેટ કરો"</string>
- <string name="clear_default" msgid="7193185801596678067">"ડિફોલ્ટ સાફ કરો"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"ટેક્સ્ટ કૉપિ કર્યો"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"તમારા ફેરફારોને નિકાળીને સંપાદન છોડી દઈએ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"નિકાળો"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"સંપાદન ચાલુ રાખો"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"મારી પ્રોફાઇલ સેટ કરો"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"વ્યક્તિનું નામ લખો"</string>
- <string name="group_name_hint" msgid="238359485263401293">"જૂથનું નામ"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"મારી સ્થાનિક પ્રોફાઇલ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"મારી <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> પ્રોફાઇલ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"તમામ સંપર્કો દર્શાવી રહ્યાં છે"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"તમે તમારો ફોન ગુમાવી દો તો પણ તમારા સંપર્કોને સુરક્ષિત રાખો: ઓનલાઇન સેવા સાથે સમન્વયિત કરો."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"એક એકાઉન્ટ ઉમેરો"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"તમારા નવા સંપર્કનો બેક અપ લેવાશે નહીં. સંપર્કોનો ઓનલાઇન બેક અપ લેતાં એકાઉન્ટને ઉમેરીએ?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"નવા સંપર્કોને <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> પર સાચવવામાં આવશે."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"નવા સંપર્કો માટે એક ડીફોલ્ટ એકાઉન્ટ પસંદ કરો:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"નવો સંપર્ક ઉમેરો"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"સંપર્ક સંપાદિત કરો"</string>
- <string name="keep_local" msgid="1258761699192993322">"સ્થાનિક રાખો"</string>
- <string name="add_account" msgid="8201790677994503186">"એકાઉન્ટ ઉમેરો"</string>
- <string name="add_new_account" msgid="5748627740680940264">"નવું એકાઉન્ટ ઉમેરો"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ડેટાબેસ ફાઇલોનો નિકાસ કરો"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"નવો સંપર્ક ઉમેરો"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"વધુ જુઓ"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ઓછું જુઓ"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"બધું જુઓ"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"તાજેતરના"</string>
- <string name="about_card_title" msgid="2920942314212825637">"વિશે"</string>
- <string name="send_message" msgid="8938418965550543196">"સંદેશ મોકલો"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"વ્યક્તિગત કૉપિ બનાવી રહ્યાં છે..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ગઈ કાલે"</string>
- <string name="tomorrow" msgid="6241969467795308581">"આવતીકાલે"</string>
- <string name="today" msgid="8041090779381781781">"આજે"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> વાગ્યે આજે"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> વાગ્યે આવતીકાલે"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(અનામાંકિત ઇવેન્ટ)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"સેટ કરો"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"સંગઠન"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ઉપનામ"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"નોંધ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"વેબસાઇટ"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ઇવેન્ટ"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"સંબંધ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"એકાઉન્ટ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"નામ"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ઇમેઇલ"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ફોન"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ફોટો"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"સંપર્ક સંપાદક વિસ્તૃત કરવા માટે ક્લિક કરો."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"સંપર્ક સંપાદકને સંકુચિત કરવા માટે ક્લિક કરો."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"સ્થાન માટેનાં દિશા નિર્દેશો"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"તાજેતરનો sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. પ્રતિસાદ આપવા ક્લિક કરો"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"આવનારા"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"આઉટગોઇંગ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"છૂટેલ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"તાજેતરનો કૉલ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. કૉલ બેક કરવા ક્લિક કરો"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"તમે: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"જ્યારે તમે વ્યક્તિના Hangouts ઓળખકર્તાને ઇમેઇલ ફીલ્ડ અથવા ફોન ફીલ્ડમાં દાખલ કરો છો ત્યારે Hangouts વધુ સારું કામ કરે છે."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"વધુ ફીલ્ડ્સ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ફોટો બદલો"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"સંપાદક ખોલવામાં નિષ્ફળ થયાં."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"આમાં સાચવી રહ્યાં છે"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"વર્તમાનમાં <xliff:g id="ACCOUNT_NAME">%s</xliff:g> પર સાચવી રહ્યાં છે. ભિન્ન એકાઉન્ટ ચૂંટવા માટે બે વાર ટેપ કરો."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">લિંક કરેલ સંપર્કો (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">લિંક કરેલ સંપર્કો (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"સંપર્કો લિંક કરો"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"રદ કરો"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> સંભવિત ડુપ્લિકેટ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> સંભવિત ડુપ્લિકેટ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"આ સંપર્ક"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"સંભવિત ડુપ્લિકેટ્સ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"આ સંપર્કો એક જ વ્યક્તિ હોઈ શકે છે. તમે તેઓને એકલ સંપર્ક તરીકે એકસાથે લિંક કરી શકો છો."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"લિંક કરેલ સંપર્કો"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"તમારા એકાઉન્ટ્સમાંથી"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"એક ફોટો લો"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"બધા ફોટા"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ફોટો પસંદ કરો"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> માંથી"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> કાઢી નાખો"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> કાઢી નાખો"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ની તસ્વીર ચેક કરી નથી"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ની તસ્વીર ચેક કરી"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"અજાણ્યાં એકાઉન્ટનો ફોટો ચેક ન કર્યો"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"અજાણ્યાં એકાઉન્ટનો ફોટો ચેક કર્યો"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ભાષામાં ફેરફાર પ્રતિબિંબિત કરવા માટે સંપર્ક સૂચિને અપડેટ કરવામાં આવી રહી છે.\n\nકૃપા કરીને રાહ જુઓ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"અવરોધિત નંબરો"</string>
-</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
new file mode 100644
index 000000000..70ee15049
--- /dev/null
+++ b/res/values-gu/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"સંપર્કો"</string>
+ <string name="contactsList" msgid="8661624236494819731">"સંપર્કો"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"સંપર્ક ઉમેરો"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"સંપર્ક"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"સીધું જ ડાયલ"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"સીધો જ સંદેશ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"સંપર્ક પસંદ કરો"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"સંપર્કમાં ઉમેરો"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"સંપર્ક પસંદ કરો"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"પસંદ કરો"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"નવો સંપર્ક બનાવો"</string>
+ <string name="searchHint" msgid="8482945356247760701">"સંપર્કો શોધો"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"મનપસંદમાં ઉમેરો"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"મનપસંદમાંથી દૂર કરો"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"મનપસંદમાંથી દૂર કર્યું"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"મનપસંદમાં ઉમેર્યું"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"સંપાદન"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"કાઢી નાખો"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ફોટો બદલો"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"શૉર્ટકટ બનાવો"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"અનલિંક કરો"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"સંપર્કો દૂર કરો"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"લેબલનું નામ બદલો"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"લેબલ કાઢી નાખો"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"સંપર્ક ઉમેરો"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"સંપર્કો પસંદ કરો"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"સંપર્કો ઉમેરો"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"લેબલમાંથી દૂર કરો"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"લેબલ બનાવો"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરીએ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"અનલિંક કરો"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"તમે પહેલેથી કરેલા ફેરફારોને સાચવવા અને આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરવા ઈચ્છો છો?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"સાચવો અને અનલિંક કરો"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"તમે પહેલેથી કરેલા ફેરફારોને સાચવવા અને પસંદ કરેલાં સંપર્ક સાથે લિંક કરવા ઈચ્છો છો?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"સાચવો અને લિંક કરો"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"લિંક કરી રહ્યું છે"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"અનલિંક કરી રહ્યું છે"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"લિંક કરો"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"લિંક કરેલ સંપર્કો જુઓ"</string>
+ <string name="menu_save" msgid="1727844363591825909">"સાચવો"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"સંપર્કો લિંક કરો"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"તમે <xliff:g id="NAME">%s</xliff:g> સાથે લિંક કરવા માંગતા હોય તે સંપર્ક પસંદ કરો:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"સૂચવેલા સંપર્કો"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"તમામ સંપર્કો"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ને લિંક કર્યાં"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"સંપર્કો લિંક કર્યાં"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ને કાઢી નાખ્યાં"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> અને <xliff:g id="NAME_1">%2$s</xliff:g> ને કાઢી નાખ્યાં"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ને કાઢી નાખ્યાં"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">સંપર્કો કાઢી નાખ્યા</item>
+ <item quantity="other">સંપર્કો કાઢી નાખ્યા</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> સંપર્ક</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> સંપર્ક</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google થી"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> થી"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"રિંગટોન સેટ કરો"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"વૉઇસમેઇલ પર રૂટ કરો"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"વૉઇસમેઇલથી અનરૂટ કરો"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"આ સંપર્ક ફક્ત-વાંચવા માટે છે. તેને કાઢી નાખી શકતાં નથી, પરંતુ તમે તેને છુપાવી શકો છો."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"સંપર્ક છુપાવો"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"આ સંપર્કમાંના ફક્ત-વાંચવા માટેના એકાઉન્ટ્સ છુપાવવામાં આવશે, કાઢી નાખવામાં નહીં."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"આ સંપર્કને કાઢી નાખીએ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"પસંદ કરેલા સંપર્કોને કાઢી નાખીએ?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"તમારા માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરના સંપર્કોને કાઢી નાખી શકાતાં નથી, પરંતુ તેઓને છુપાવી શકાય છે."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"કાઢી નાખવાના સંપર્કો બહુવિધ એકાઉન્ટ્સ પરની વિગતો ધરાવે છે. માત્ર-વાંચવા માટેનાં એકાઉન્ટ્સ પરની વિગતો છુપાવવામાં આવશે, કાઢી નાખવામાં આવશે નહિ."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"આ સંપર્કને કાઢી નાખવું બહુવિધ એકાઉન્ટ્સમાંથી વિગતો કાઢી નાખશે."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"આ સંપર્કને કાઢી નાખીએ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"કાઢી નાખો"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"સંપર્ક અસ્તિત્વમાં નથી."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"સંપર્કને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યો."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યું."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ઉપકરણ પર કોઈ ચિત્રો ઉપલબ્ધ નથી."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"સંપર્ક ફોટો"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"કસ્ટમ લેબલ નામ"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ફોટો દૂર કરો"</string>
+ <string name="noContacts" msgid="2228592924476426108">"તમારી સંપર્કોની સૂચિ ખાલી છે"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"આ લેબલ સાથે કોઈ સંપર્કો નથી"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"આ એકાઉન્ટમાંં કોઈ સંંપર્કો નથી"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"તમારી સંપર્કોની સૂચિ ખાલી છે"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> સાચવ્યો"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"સંપર્ક સાચવ્યો"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"સંપર્કો અનલિંક કર્યા"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"ફેરફારો સાચવી શક્યાં નથી"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"સંપર્કને અનલિંક કરી શક્યા નથી"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"સંપર્ક લિંક કરી શક્યાં નથી"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"સંપર્ક સાચવવામાં ભૂલ"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"સંપર્ક ફોટાના ફેરફારો સાચવી શક્યાં નથી"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"લેબલ લોડ કરવામાં નિષ્ફળ થયાં"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"લેબલ કાઢી નાખ્યું"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"લેબલ બનાવ્યું"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"લેબલ બનાવી શકતાં નથી"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"લેબલ અપડેટ કર્યું"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"લેબલમાંથી દૂર કર્યાં"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"લેબલમાં ઉમેર્યા"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"લેબલ ફેરફારો સાચવી શક્યાં નથી"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"તે લેબલ પહેલાંથી અસ્તિત્વમાં છે"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"કેટલાક સંપર્કોની પાસે ઇમેઇલ્સ નથી."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"કેટલાક સંપર્કોની પાસે ફોન નંબર્સ નથી."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ઇમેઇલ મોકલો"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"સંદેશ મોકલો"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"સંપર્કો પસંદ કરો"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"મોકલો"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"સંપર્કો નથી"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ને સંપર્કોમાં ઉમેરીએ?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"તમારા સંપર્કોના નામ"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"પાછલી સ્ક્રીન પર પાછા આવવા માટે ક્લિક કરો"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ફોન નંબર ઉમેરો"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ઇમેઇલ ઉમેરો"</string>
+ <string name="missing_app" msgid="1466111003546611387">"આ ક્રિયાને હેન્ડલ કરવા માટે કોઈ ઍપ્લિકેશન મળી નહીં."</string>
+ <string name="menu_share" msgid="943789700636542260">"શેર કરો"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"સંપર્કોમાં ઉમેરો"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ઉમેરો"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">આના દ્વારા સંપર્કો શેર કરો</item>
+ <item quantity="other">આના દ્વારા સંપર્કો શેર કરો</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"એકાઉન્ટ પસંદ કરો"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"લેબલ બનાવો"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"લેબલનું નામ બદલો"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"લેબલનું નામ"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"લેબલનું નામ"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"વોઇસ ચેટ"</string>
+ <string name="video_chat" msgid="1872255818640336072">"વિડિઓ ચેટ"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> સંપર્ક"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> એકાઉન્ટ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ફોટો લો"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"નવો ફોટો લો"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ફોટો પસંદ કરો"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"નવો ફોટો પસંદ કરો"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"શોધી રહ્યું છે..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"તારીખ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"લેબલ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"રદ કરો"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"પાછળ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"બંધ કરો"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"પસંદ કરેલ સંપર્કોને સંપાદિત કરવા પર સ્વિચ કરીએ? તમે અત્યાર સુધીમાં દાખલ કરેલી માહિતીને કૉપિ કરાશે."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"નિર્દેશિકા <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"સેટિંગ્સ"</string>
+ <string name="menu_settings" msgid="377929915873428211">"સેટિંગ્સ"</string>
+ <string name="menu_help" msgid="1680178646764069976">"સહાય અને પ્રતિસાદ"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ફોન નંબર"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"સંપર્કોમાં ઉમેરો"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"બંધ કરો"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"વર્ષ શામેલ કરો"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"એકાઉન્ટ ઉમેરો"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"આયાત કરો"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"નવું બનાવો…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" લેબલ કાઢી નાખીએ? (સંપર્કો સ્વયં કાઢી નાખવામાં આવશે નહીં.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"બીજા સાથે લિંક કરતાં પહેલાં સંપર્કનું નામ લખો."</string>
+ <string name="copy_text" msgid="3257145021583508761">"ક્લિપબોર્ડ પર કૉપિ કરો"</string>
+ <string name="set_default" msgid="4417505153468300351">"ડિફોલ્ટ સેટ કરો"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ડિફોલ્ટ સાફ કરો"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"ટેક્સ્ટ કૉપિ કર્યો"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ફેરફારો નિકાળીએ?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"નિકાળો"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"રદ કરો"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"કસ્ટમાઇઝેશન્સ નિકાળીએ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"સંપર્કો શોધો"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"સંપર્કો દૂર કરો"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"મારી સ્થાનિક પ્રોફાઇલ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"મારી <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> પ્રોફાઇલ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"તે એકાઉન્ટ ઉમેરવા માટે થોડો સમય આપો કે જે Google પર તમારા સંપર્કોનું બેક અપ લેશે."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"નવા સંપર્કોને <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> પર સાચવવામાં આવશે."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"નવા સંપર્કો માટે એક ડીફોલ્ટ એકાઉન્ટ પસંદ કરો:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"નવો સંપર્ક બનાવો"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"સંપર્ક સંપાદિત કરો"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ફક્ત જુઓ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"સંપાદિત કરવા માટે સંપર્ક પસંદ કરો"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"લિંક કરેલ સંપર્કો"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ઉમેરો"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"અનલિંક કરો"</string>
+ <string name="add_account" msgid="8201790677994503186">"એકાઉન્ટ ઉમેરો"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"નવું એકાઉન્ટ ઉમેરો"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ડેટાબેસ ફાઇલોનો નિકાસ કરો"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"નવો સંપર્ક બનાવો"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"વધુ જુઓ"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ઓછું જુઓ"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"તાજેતરના"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"વિશે"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"વ્યક્તિગત કૉપિ બનાવી રહ્યાં છે…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"આવતીકાલે"</string>
+ <string name="today" msgid="8041090779381781781">"આજે"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> વાગ્યે આજે"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> વાગ્યે આવતીકાલે"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(અનામાંકિત ઇવેન્ટ)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"સેટ કરો"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"સંગઠન"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ઉપનામ"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"નોંધ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"વેબસાઇટ"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ઇવેન્ટ"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"સંબંધ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"નામ"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ઇમેઇલ"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ફોન"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"સ્થાન માટેનાં દિશા નિર્દેશો"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"તાજેતરનો sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. પ્રતિસાદ આપવા ક્લિક કરો"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"આવનારા"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"આઉટગોઇંગ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"છૂટેલ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"તાજેતરનો કૉલ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. કૉલ બેક કરવા ક્લિક કરો"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"તમે: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"વધુ ફીલ્ડ્સ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"સંપર્ક ફોટો બદલો"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"સંપર્ક ફોટો ઉમેરો"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"સંપર્ક ફોટો"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"સંપાદક ખોલવામાં નિષ્ફળ થયાં."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"આમાં સાચવી રહ્યાં છે"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> તરફથી સંપર્ક માહિતી સંપાદનક્ષમ નથી"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"સંપર્કો લિંક કરો"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"રદ કરો"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"આ સંપર્ક"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"સંભવિત ડુપ્લિકેટ્સ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"આ સંપર્કો એક જ વ્યક્તિ હોઈ શકે છે. તમે તેઓને એકલ સંપર્ક તરીકે એકસાથે લિંક કરી શકો છો."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> કાઢી નાખો"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> કાઢી નાખો"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"સૂચનો"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"નવું"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"નેવિગેશન ડ્રોઅર ખોલો"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"નેવિગેશન ડ્રોઅર બંધ કરો"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> લેબલ"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"લેબલ્સ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"એકાઉન્ટ્સ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"તમારા ઇતિહાસને એકસાથે જુઓ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ઇવેન્ટ્સ અને સંદેશા"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ઇવેન્ટ્સ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"સંદેશા"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"સૂચનો"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"તમારા સંપર્કો ગોઠવાયેલ અને ઉપયોગી રાખો"</string>
+ <string name="undo" msgid="1425165101664071422">"પૂર્વવત્ કરો"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> પર કૉલ કરો"</string>
+ <string name="call_home" msgid="1990519474420545392">"ઘરે કૉલ કરો"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"મોબાઇલ પર કૉલ કરો"</string>
+ <string name="call_work" msgid="5328785911463744028">"કાર્યાલય પર કૉલ કરો"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"કાર્યાલયના ફૅક્સ પર કૉલ કરો"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ઘરના ફૅક્સ પર કૉલ કરો"</string>
+ <string name="call_pager" msgid="9003902812293983281">"પેજર પર કૉલ કરો"</string>
+ <string name="call_other" msgid="8563753966926932052">"કૉલ કરો"</string>
+ <string name="call_callback" msgid="1910165691349426858">"કૉલબેક પર કૉલ કરો"</string>
+ <string name="call_car" msgid="3280537320306436445">"કાર પર કૉલ કરો"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"કંપની મુખ્ય પર કૉલ કરો"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN પર કૉલ કરો"</string>
+ <string name="call_main" msgid="6082900571803441339">"મુખ્ય પર કૉલ કરો"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ફૅક્સ પર કૉલ કરો"</string>
+ <string name="call_radio" msgid="8296755876398357063">"રેડિઓ પર કૉલ કરો"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ટેલેક્સ પર કૉલ કરો"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD પર કૉલ કરો"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"કાર્યાલયના મોબાઇલ પર કૉલ કરો"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"કાર્યાલયના પેજર પર કૉલ કરો"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> પર કૉલ કરો"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS પર કૉલ કરો"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (કૉલ કરો)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> પર ટેક્સ્ટ મોકલો"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ઘરે ટેક્સ્ટ કરો"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"મોબાઇલ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_work" msgid="2269624156655267740">"કાર્યાલય પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"કાર્યાલયના ફૅક્સ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ઘરના ફૅક્સ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"પેજર પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_other" msgid="806127844607642331">"ટેક્સ્ટ કરો"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"કૉલબેક પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_car" msgid="7444227058437359641">"કાર પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"કંપની મુખ્ય પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_main" msgid="8621625784504541679">"મુખ્ય પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ફૅક્સ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"રેડિઓ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ટેલેક્સ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"કાર્યાલયના મોબાઇલ પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"કાર્યાલયના પેજર પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> ને ટેક્સ્ટ કરો"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS પર ટેક્સ્ટ કરો"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (સંદેશ મોકલો)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"વિડિઓ કૉલ કરો"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"વારંવાર સંપર્ક કરેલા સાફ કરીએ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"તમે સંપર્કો અને ફોન ઍપ્લિકેશનોમાં વારંવાર સંપર્ક કરેલ સૂચિને સાફ કરશો અને ઇમેઇલ ઍપ્લિકેશનોને તમારી સંબોધન પસંદગીઓને શરૂઆતથી જાણવા માટે ફરજ પાડશો."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"વારંવાર સંપર્ક કરેલા સાફ કરે છે…"</string>
+ <string name="status_available" msgid="5586870015822828392">"ઉપલબ્ધ"</string>
+ <string name="status_away" msgid="1838861100379804730">"દૂર"</string>
+ <string name="status_busy" msgid="9147992455450257136">"વ્યસ્ત"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"અન્ય"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"નિર્દેશિકા"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"કાર્ય નિર્દેશિકા"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"તમામ સંપર્કો"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> માટે ઝડપી સંપર્ક"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(નામ નથી)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"વારંવાર સંપર્ક કરેલા લોકો"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ફોન નંબર્સ સાથેના તમામ સંપર્કો"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"કાર્ય પ્રોફાઇલના સંપર્કો"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"અપડેટ્સ જુઓ"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ઉપકરણ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"નામ"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ઉપનામ"</string>
+ <string name="name_given" msgid="4280790853455320619">"નામ"</string>
+ <string name="name_family" msgid="7466985689626017037">"અટક"</string>
+ <string name="name_prefix" msgid="59756378548779822">"નામ ઉપસર્ગ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"પિતા/પતિનું નામ"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"નામ પ્રત્યય"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ધ્વન્યાત્મક નામ"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ધ્વન્યાત્મક નામ"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ધ્વન્યાત્મક પિતા/પતિનું નામ"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ધ્વન્યાત્મક અટક"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ફોન"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ઇમેઇલ"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"સરનામું"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"સંસ્થા"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"સંબંધ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"વિશિષ્ટ તારીખ"</string>
+ <string name="sms" msgid="1756857139634224222">"ટેક્સ્ટ સંદેશ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"સરનામું"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"કંપની"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"શીર્ષક"</string>
+ <string name="label_notes" msgid="8337354953278341042">"નોંધ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"કસ્ટમ"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"વેબસાઇટ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"લેબલ્સ"</string>
+ <string name="email_home" msgid="8573740658148184279">"ઘરે ઇમેઇલ કરો"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"મોબાઇલ પર ઇમેઇલ કરો"</string>
+ <string name="email_work" msgid="2807430017302722689">"કાર્યાલય પર ઇમેઇલ કરો"</string>
+ <string name="email_other" msgid="3454004077967657109">"ઇમેઇલ"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> પર ઇમેઇલ મોકલો"</string>
+ <string name="email" msgid="5668400997660065897">"ઇમેઇલ"</string>
+ <string name="postal_street" msgid="8133143961580058972">"શેરી"</string>
+ <string name="postal_city" msgid="6597491300084895548">"શહેર"</string>
+ <string name="postal_region" msgid="6045263193478437672">"રાજ્ય"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"પિન કોડ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"દેશ"</string>
+ <string name="map_home" msgid="1243547733423343982">"ઘરનું સરનામું જુઓ"</string>
+ <string name="map_work" msgid="1360474076921878088">"કાર્યાલયનું સરનામું જુઓ"</string>
+ <string name="map_other" msgid="3817820803587012641">"સરનામું જુઓ"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> સરનામું જુઓ"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber નો ઉપયોગ કરીને ચેટ કરો"</string>
+ <string name="chat" msgid="9025361898797412245">"ચેટ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"કાઢી નાખો"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"વધુ નામ ફીલ્ડ્સ બતાવો"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"નામ ફીલ્ડ્સ સંકુચિત કરો"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"વધુ ધ્વન્યાત્મક નામ ફીલ્ડ્સ બતાવો"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ધ્વન્યાત્મક નામ ફીલ્ડ્સ સંકુચિત કરો"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"વિસ્તૃત કરો"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"સંકુચિત કરો"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"વિસ્તૃત કર્યું"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"સંકુચિત કર્યું"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"તમામ સંપર્કો"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"તારાંકિત કરેલ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"કસ્ટમાઇઝ કરો"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"સંપર્ક"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"તમામ અન્ય સંપર્કો"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"તમામ સંપર્કો"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"સમન્વયન જૂથ દૂર કરો"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"સમન્વયન જૂથ ઉમેરો"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"વધુ જૂથો…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"સમન્વયનમાંથી \"<xliff:g id="GROUP">%s</xliff:g>\" ને દૂર કરવું, સમન્વયનમાંથી કોઇપણ જૂથ વિનાના સંપર્કોને પણ દૂર કરશે."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"પ્રદર્શન વિકલ્પો સાચવી રહ્યું છે…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"કસ્ટમાઇઝ કરેલ દૃશ્ય"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"આયાત કરેલ સંપર્કોને આની પર સાચવો:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM કાર્ડ"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d સંપર્ક</item>
+ <item quantity="other">%1$d સંપર્ક</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> સંપર્ક • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> સંપર્ક • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ફાઇલ"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"આયાત કરવા માટે કંઇ નથી"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard માંથી સંપર્કો આયાત કરીએ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> ની આયાત રદ કરીએ?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> ની નિકાસ રદ કરીએ?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard આયાત/નિકાસને રદ કરી શક્યાં નહીં"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"અજાણી ભૂલ."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ખોલી શક્યાં નથી: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"નિકાસકર્તા શરૂ કરી શક્યાં નહીં: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"કોઈ નિકાસયોગ્ય સંપર્ક નથી."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"તમે આવશ્યક પરવાનગી અક્ષમ કરી છે."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"નિકાસ દરમિયાન ભૂલ આવી: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ભૂલ"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"પર્યાપ્ત મેમરી નથી. આ ફાઇલ ખૂબ મોટી હોઈ શકે છે."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ફોર્મેટ સમર્થિત નથી."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ને નિકાસ કરવું સમાપ્ત થયું."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"સંપર્કોને નિકાસ કરવાનું સમાપ્ત થયું."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"નિકાસ કરવાનું સમાપ્ત થયું, સંપર્કો શેર કરવા માટે સૂચના ક્લિક કરો."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"સંપર્કો શેર કરવા માટે ટૅપ કરો."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> ને નિકાસ કરવું રદ કર્યું."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"સંપર્ક ડેટા નિકાસ કરી રહ્યાં છે"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"સંપર્ક ડેટાનો નિકાસ કરવામાં આવી રહ્યો છે."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ડેટાબેઝ માહિતી મેળવી શક્યાં નથી."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"કોઇ નિકાસયોગ્ય સંપર્કો નથી."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard કમ્પોઝર ઠીકથી પ્રારંભ થયું નથી."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"નિકાસ કરી શક્યાં નથી"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"સંપર્ક ડેટા નિકાસ કર્યો નહોતો.\nકારણ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ને આયાત કરે છે"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ડેટા વાંચી શકાયો નથી"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ને આયાત કરવું સમાપ્ત થયું"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ને આયાત કરવું રદ કર્યું"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ને ટૂંક સમયમાં આયાત કરવામાં આવશે."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ફાઇલ ટૂંક સમયમાં આયાત કરવામાં આવશે."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard આયાતની વિનંતી નકારી હતી. પછીથી ફરી પ્રયાસ કરો."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"સંપર્કોનો ટૂંક સમયમાં નિકાસ કરવામાં આવશે."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard નિકાસની વિનંતી નકારી હતી. પછીથી ફરી પ્રયાસ કરો."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"સંપર્ક"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"સ્થાનિક અસ્થાયી સ્ટોરેજ પર vCard કેશ કરી રહ્યાં છે. વાસ્તવિક આયાત ટૂંક સમયમાં શરૂ થશે."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard આયાત કરી શકાયો નથી."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC પર સંપર્ક પ્રાપ્ત"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"કેશ કરી રહ્યાં છે"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> આયાત કરે છે: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ફાઇલ પર નિકાસ કરો"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"આ પ્રમાણે સૉર્ટ કરો"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ધ્વન્યાત્મક નામ"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"હંમેશા બતાવો"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"જો ખાલી હોય તો છુપાવો"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"નામ"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"અટક"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"નામ ફોર્મેટ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"પ્રથમ નામ પહેલા"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"છેલ્લું નામ પહેલા"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"એકાઉન્ટ્સ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"નવા સંપર્કો માટે ડિફોલ્ટ એકાઉન્ટ"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"મારી માહિતી"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"તમારી પ્રોફાઇલ સેટ કરો"</string>
+ <string name="setting_about" msgid="7014388749752042863">"સંપર્કો વિશે"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"મનપસંદ સંપર્કોને શેર કરો"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"તમામ સંપર્કોને શેર કરો"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"સંપર્કોને શેર કરવામાં નિષ્ફળ થયાં."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"સંપર્કો નિકાસ કરો"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"આમાંથી સંપર્કો આયાત કરો"</string>
+ <string name="share_error" msgid="948429331673358107">"આ સંપર્ક શેર કરી શકાતો નથી."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"શેર કરવા માટે કોઇ સંપર્કો નથી"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"પ્રદર્શિત કરવાના સંપર્કો"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"પ્રદર્શિત કરવાના સંપર્કો"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"કસ્ટમાઇઝ દૃશ્ય"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"સાચવો"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"સંપર્કો શોધો"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"મનપસંદ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"આયાત કરો"</string>
+ <string name="menu_export" msgid="2658783911863503902">"નિકાસ કરો"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"અવરોધિત નંબરો"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> મારફતે"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> મારફતે <xliff:g id="DATE">%1$s</xliff:g> ના રોજ"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"શોધવાનું રોકો"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"શોધ સાફ કરો"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"એકાઉન્ટ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"કૉલ્સ માટે આનો ઉપયોગ હંમેશાં કરો"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"નોંધ સાથે કૉલ કરો"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"કૉલ સાથે મોકલવા માટે એક નોંધ લખો…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"મોકલો અને કૉલ કરો"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"બિલ્ડ સંસ્કરણ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ઓપન સોર્સ લાઇસન્સીસ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ખુલ્લા સ્ત્રોતના સોફ્ટવેર માટે લાઇસન્સની વિગતો"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"ગોપનીયતા નીતિ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"સેવાની શરતો"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ઓપન સોર્સ લાઇસન્સીસ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url ખોલવામાં નિષ્ફળ થયાં."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ચેક કર્યું"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ચેક કરેલ નથી"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"વિડિઓ કૉલ કરો"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"કાઢી નાખો"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"અધ્યાહાર"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> મિનિટ <xliff:g id="SECONDS">%2$s</xliff:g> સેકંડ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> કલાક <xliff:g id="MINUTES_1">%2$s</xliff:g> મિનિટ <xliff:g id="SECONDS">%3$s</xliff:g> સેકંડ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"આ શૉર્ટકટ અક્ષમ કરવામાંં આવેલ છે"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"સંપર્ક દૂર કર્યો હતો"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"આયાત કરો"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"સંપર્કો પસંદ કરો"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"તમારા SIM કાર્ડ પર કોઈ સંપર્કો નથી"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"સંપર્ક પહેલાંથી જ તમારી સૂચિમાં અસ્તિત્વમાં છે"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> SIM સંપર્કો આયાત કર્યાં</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM સંપર્કો આયાત કર્યાં</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM સંપર્કો આયાત કરવામાં નિષ્ફળ થયાં"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM માંથી આયાત કરો"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"રદ કરો"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"સ્વતઃ સમન્વયન બંધ છે. ચાલુ કરવા માટે ટૅપ કરો."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"છોડી દો"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"એકાઉન્ટ સમન્વયન બંધ છે. ચાલુ કરવા માટે ટૅપ કરો."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"સ્વતઃસમન્વયન ચાલુ કરીએ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"તમે બધી ઍપ્લિકેશનો અને એકાઉન્ટ્સમાં જે ફેરફારો કરો છો, માત્ર Google સંપર્કોમાં નહીં, તે વેબ અને તમારા ઉપકરણો વચ્ચે અપ ટુ ડેટ રાખવામાં આવશે."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ચાલુ કરો"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"કોઈ કનેક્શન નથી"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"વધુ બતાવો"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM કાર્ડ આયાત કરવાનું સમાપ્ત થયું"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"આયાત કરવું નિષ્ફળ થયું"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM કાર્ડમાંથી સંપર્કો આયાત કરી શક્યાં નથી"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM આયાત કરી રહ્યાં છે"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"સૂચનાઓ"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f50577f0c..4f4f7e1fc 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"संपर्क"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"संपर्क"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"संपर्क देखें"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"संपर्क संपादित करें"</string>
<string name="contactsList" msgid="8661624236494819731">"संपर्क"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"संपर्क जोड़ें"</string>
<string name="shortcutContact" msgid="749243779392912958">"संपर्क"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"कॉल करें"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"मैसेज भेजें"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"कोई संपर्क शॉर्टकट चुनें"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"कॉल करने के लिए कोई नंबर चुनें"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"संदेश भेजने के लिए कोई नंबर चुनें"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"संपर्क चुनें"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"संपर्क में जोड़ें"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"कोई संपर्क चुनें"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"चुनें"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नया संपर्क बनाएं"</string>
- <string name="starredList" msgid="4817256136413959463">"तारांकित"</string>
- <string name="frequentList" msgid="7154768136473953056">"बार-बार"</string>
- <string name="strequentList" msgid="5640192862059373511">"पसंदीदा"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"संपर्क विवरण"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"संपर्क संपादित करें"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"संपर्क बनाएं"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"समूह संपादित करें"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"समूह बनाएं"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"इस बारे में"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"नई जानकारी"</string>
<string name="searchHint" msgid="8482945356247760701">"संपर्क खोजें"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"संपर्क देखें"</string>
<string name="menu_addStar" msgid="2908478235715404876">"पसंदीदा में जोड़ें"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"पसंदीदा से निकालें"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"पसंदीदा से निकाल दिया गया"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"संपादित करें"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"हटाएं"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"फ़ोटो बदलें"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"मुख्यपृष्ठ स्क्रीन पर रखें"</string>
- <string name="menu_call" msgid="3992595586042260618">"संपर्क को कॉल करें"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"इस संपर्क को SMS भेजें"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"शॉर्टकट बनाएं"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"अनलिंक करें"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"संपादित करें"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"हटाएं"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"संपर्क जोड़ें"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"समूह जोड़ें"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"संपर्क निकालें"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"लेबल का नाम बदलें"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"लेबल हटाएं"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"संपर्क जोड़ें"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"संपर्कों को चुनें"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"संपर्क जोड़ें"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबल से निकालें"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल बनाएं"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"एकाधिक खातों में इन संपर्कों को अनलिंक करें?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"अनलिंक करें"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"क्या आप पहले से किए गए बदलावों को सहेजना और इस संपर्क को एकाधिक संपर्कों में अनलिंक करना चाहते हैं?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"सहेजें और अनलिंक करें"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"क्या आप पहले से किए गए बदलावों को सहेजना और चयनित संपर्कों से लिंक करना चाहते हैं?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"सहेजें और लिंक करें"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"लिंक किए जा रहे हैं"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"अनलिंक कर रहे हैं"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"लिंक करें"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"लिंक किए गए संपर्क देखें"</string>
<string name="menu_save" msgid="1727844363591825909">"सहेजें"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"संपर्क लिंक करें"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"वह संपर्क चुनें जिसे आप <xliff:g id="NAME">%s</xliff:g> के साथ लिंक करना चाहते हैं:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सभी संपर्क दिखाएं"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाए गए संपर्क"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सभी संपर्क"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> लिंक किया गया"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"संपर्क लिंक कर दिए गए"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> को हटाया गया"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> और <xliff:g id="NAME_1">%2$s</xliff:g> को हटाया गया"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… को हटाया गया"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">संपर्क हटा दिए गए</item>
<item quantity="other">संपर्क हटा दिए गए</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google से"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> से"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करें"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ध्‍वनि‍मेल से सभी कॉल"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"आपके केवल पढ़े जाने वाले खातों के संपर्क हटाए नहीं जा सकते, लेकिन उन्हें छिपाया जा सकता है."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"छिपाएं"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"जिस संपर्क को हटाया जाना है उसमें एकाधिक खातों के विवरण हैं. केवल पढ़े जाने वाले खातों के विवरण छिपाए जाएंगे, उन्हें हटाया नहीं जाएगा."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"लिंक करने के लिए आपको कम से कम दो संपर्कों को चुनना होगा."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"चयनित संपर्कों को लिंक करें?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"लिंक करें"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"वॉइसमेल पर रूट करें"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"वॉइसमेल से रूट हटाएं"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"यह संपर्क केवल पढ़ने के लिए है. इसे हटाया नहीं जा सकता है, लेकिन आप इसे छिपा सकते हैं."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"संपर्क छिपाएं"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"इस संपर्क के उन खातों को बस छिपाया जाएगा जो सिर्फ़ पढ़ने के लिए हैं, हटाया नहीं जाएगा."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"यह संपर्क हटाएं?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"चयनित संपर्क हटाएं?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"आपके केवल पढ़े जाने वाले खातों के संपर्क हटाए नहीं जा सकते, लेकिन उन्हें छिपाया जा सकता है."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"इस संपर्क को हटाने से एकाधिक खातों से विवरण हट जाएंगे."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"यह संपर्क हटाएं?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"हटाएं"</string>
- <string name="menu_discard" msgid="6854657936970228164">"परिवर्तन हटा दें"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"संपर्क मौजूद नहीं है."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"संपर्कों को होम स्क्रीन में जोड़ा गया."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> को होम स्क्रीन में जोड़ा गया."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"नया संपर्क बनाएं"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"नया संपर्क बनाएं"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"संगठन"</item>
- <item msgid="7196592230748086755">"नोट"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"टेबलेट पर कोई चित्र उपलब्ध नहीं है."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"फ़ोन पर कोई चित्र उपलब्ध नहीं है."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"डिवाइस पर कोई चित्र उपलब्ध नहीं है."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"संपर्क का फ़ोटो"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"कस्टम लेबल नाम"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"सीधे वॉयस मेल पर कॉल भेजें"</string>
<string name="removePhoto" msgid="4898105274130284565">"फ़ोटो निकालें"</string>
- <string name="noContacts" msgid="4955659076981974652">"कोई संपर्क नहीं"</string>
- <string name="noGroups" msgid="8614664663561385253">"कोई समूह नहीं."</string>
- <string name="noAccounts" msgid="7768267764545265909">"समूह बनाने के लिए आपको किसी खाते की आवश्‍यकता होती है."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"इस समूह में कोई व्‍यक्ति नहीं."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"कुछ जोड़ने के लिए, समूह संपादित करें."</string>
- <string name="savingContact" msgid="4075751076741924939">"संपर्क सहेज रहा है…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"आपकी संपर्क सूची खाली है"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"इस लेबल वाला कोई संपर्क नहीं"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"इस खाते में कोई संपर्क नहीं"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"आपकी संपर्क सूची खाली है"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> सहेजा गया"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"संपर्क सहेजा गया"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"संपर्क अनलिंक किए गए"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क परिवर्तन सहेजे नहीं जा सके."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"संपर्क को अनलिंक नहीं किया जा सका."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"संपर्क को लिंक नहीं किया जा सका."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"संपर्क सहेजने में त्रुटि हुई."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"संपर्क फ़ोटो के बदलाव नहीं सहेजे जा सके."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"समूह सहेजा गया."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"समूह परिवर्तन सहेजे नहीं जा सके."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- <item quantity="other">फ़ोन नंबर वाले <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फ़ोन नंबर वाले कोई संपर्क नहीं"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"संपर्क परिवर्तन सहेजे नहीं जा सके"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"संपर्क को अनलिंक नहीं किया जा सका"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"संपर्क को लिंक नहीं किया जा सका"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क सहेजने में गड़बड़ी"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फ़ोटो के बदलाव नहीं सहेजे जा सके"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करने में विफल रहा"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटाया गया"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल बनाया गया"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल नहीं बनाया जा सकता"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबल अपडेट किया गया"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबल से निकाला गया"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबल में जोड़ा गया"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबल के बदलाव सहेजे नहीं जा सके"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"वह लेबल पहले से मौजूद है"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"कुछ संपर्कों में ईमेल नहीं हैं."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"कुछ संपर्कों में फ़ोन नंबर नहीं हैं."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ईमेल भेजें"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"संदेश भेजें"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"संपर्क चुनें"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"भेजें"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"कोई संपर्क नहीं"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> मिले</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"सभी"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"पसंदीदा"</string>
- <string name="callBack" msgid="5498224409038809224">"कॉल बैक करें"</string>
- <string name="callAgain" msgid="3197312117049874778">"फिर से कॉल करें"</string>
- <string name="returnCall" msgid="8171961914203617813">"रिटर्न कॉल"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" को संपर्कों में जोड़ें?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"संपर्क का फ़ोटो"</string>
- <string name="description_plus_button" msgid="515164827856229880">"जोड़ें"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> में से <xliff:g id="CURRENT_NUMBER">%s</xliff:g> संपर्क"</string>
<string name="search_settings_description" msgid="2675223022992445813">"आपके संपर्कों के नाम"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"यह कार्यवाही प्रबंधित करने के लिए कोई ऐप्स नहीं मिला."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"पिछली स्क्रीन पर लौटने के लिए क्लिक करें"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"फ़ोन नंबर जोड़ें"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"ईमेल जोड़ें"</string>
<string name="missing_app" msgid="1466111003546611387">"यह कार्यवाही प्रबंधित करने के लिए कोई ऐप्स नहीं मिला."</string>
<string name="menu_share" msgid="943789700636542260">"साझा करें"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"संपर्कों में जोड़ें"</string>
- <string name="share_via" msgid="563121028023030093">"इसके द्वारा संपर्क साझा करें"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"खाते के तहत समूह बनाएं"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"जोड़ें"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">इसके द्वारा संपर्कों को साझा करें</item>
+ <item quantity="other">इसके द्वारा संपर्कों को साझा करें</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"खाता चुनें"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"लेबल बनाएं"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"लेबल का नाम बदलें"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"लेबल नाम"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबल नाम"</string>
<string name="audio_chat" msgid="2535716629358298691">"ध्वनि बातचीत"</string>
<string name="video_chat" msgid="1872255818640336072">"वीडियो बातचीत"</string>
- <string name="connections" msgid="8098440723172028350">"कनेक्शन"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"कनेक्शन जोड़ें"</string>
- <string name="recent" msgid="2659189233141493004">"हाल ही के"</string>
- <string name="recent_updates" msgid="4267258535615860710">"हाल ही के नई जानकारी"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> संपर्क"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाता"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"इस ऐप्स द्वारा संपादन-योग्‍य नहीं."</string>
- <string name="group_read_only" msgid="1061762906115697637">"इस डिवाइस पर संपादन योग्‍य नहीं."</string>
<string name="take_photo" msgid="7496128293167402354">"फ़ोटो लें"</string>
<string name="take_new_photo" msgid="7341354729436576304">"नई फ़ोटो लें"</string>
<string name="pick_photo" msgid="2129509985223564942">"फ़ोटो चुनें"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"नई फ़ोटो चुनें"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"संपर्क सूची से नई जानकारी मिल रही है."</string>
<string name="search_results_searching" msgid="3984833028938569930">"खोज रहा है…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"चयनित दिखाएं"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"सभी दिखाएं"</string>
- <string name="menu_select_all" msgid="621719255150713545">"सभी को चुनें"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"कुछ भी ना चुनें"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"नया जोड़ें"</string>
- <string name="add_organization" msgid="7311893231158291197">"संगठन जोड़ें"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"दि‍नांक"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"समूह नाम"</string>
- <string name="change_photo" msgid="8530597935483526383">"बदलें"</string>
- <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फ़ोटो"</string>
- <string name="description_star" msgid="2605854427360036550">"पसंदीदा"</string>
- <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करें"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"वर्तमान संपर्क को चयनित संपर्क से लिंक करें?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द करें"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"वापस जाएं"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करें"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित संपर्क के संपादन पर जाएं? आपके द्वारा अभी तक दर्ज की गई जानकारी की प्रतिलिपि बनाई जाएगी."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"मेरे संपर्क में प्रतिलिपि बनाएं"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"मेरे संपर्क में जोड़ें"</string>
<string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"कस्टम"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग"</string>
<string name="menu_settings" msgid="377929915873428211">"सेटिंग"</string>
<string name="menu_help" msgid="1680178646764069976">"सहायता और फ़ीडबैक"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"प्रदर्शन विकल्प"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"फ़ोन नंबर"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"संपर्कों में जोड़ें"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"संपर्क में जोड़ें"</string>
<string name="non_phone_close" msgid="7608506439725515667">"बंद करें"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"वर्ष शामिल करें"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"संपर्क करें"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"लोड हो रहा है..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"एक नया संपर्क बनाएं"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"खाता जोड़ें"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"संपर्क आयात करें"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"नया समूह बनाएं"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"नया समूह बनाएं"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> समूह</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> समूह</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"समूह \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" को हटाएं? (संपर्क स्वयं नहीं हटाए जाएंगे.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> से <xliff:g id="COUNT_2">%1$d</xliff:g> लोग</item>
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> से <xliff:g id="COUNT_2">%1$d</xliff:g> लोग</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> व्‍यक्‍ति</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> लोग</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात करें"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"नया बनाएं…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"लेबल \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" हटाएं? (संपर्क स्वयं नहीं हटाए जाएंगे.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"अन्‍य संपर्क से लिंक करने से पहले संपर्क नाम लिखें."</string>
<string name="copy_text" msgid="3257145021583508761">"क्‍लिपबोर्ड पर प्रतिलिपि बनाएं"</string>
<string name="set_default" msgid="4417505153468300351">"सामान्य सेट करें"</string>
<string name="clear_default" msgid="7193185801596678067">"सामान्य साफ़ करें"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"लेख की प्रतिलिपि बनाई गई"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"अपने बदलावों को ख़ारिज करें और संपादन से बाहर निकलें?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"क्या परिवर्तनों को छोड़ना चाहते हैं?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"अभी नहीं"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"संपादित करते रहें"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"मेरी प्रोफ़ाइल सेट करें"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"व्‍यक्ति‍ का नाम लिखें"</string>
- <string name="group_name_hint" msgid="238359485263401293">"समूह का नाम"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द करें"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"कस्‍टमाइज़ेशन छोड़ें?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"संपर्क खोजें"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"संपर्क निकालें"</string>
<string name="local_profile_title" msgid="2021416826991393684">"मेरी स्थानीय प्रोफ़ाइल"</string>
<string name="external_profile_title" msgid="8034998767621359438">"मेरी <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफ़ाइल"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सभी संपर्क प्रदर्शित कर रहा है"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"अपना फ़ोन खो देने पर भी अपने संपर्क सुरक्षित रखें: किसी ऑनलाइन सेवा से समन्‍वयित करें."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"कोई खाता जोड़ें"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"आपके नए संपर्क का बैक अप नहीं लिया जाएगा. ऐसा खाता जोड़ें जो संपर्कों का ऑन‍लाइन बैक अप ले?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"कुछ समय निकालें और Google में आपके संपर्कों का बैकअप लेने के लिए एक खाता जोड़ें."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नए संपर्कों को <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> में सहेजा जाएगा."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नए संपर्कों के लिए डिफ़ॉल्ट खाता चुनें:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"नया संपर्क जोड़ें"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"नया संपर्क बनाएं"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"संपर्क संपादित करें"</string>
- <string name="keep_local" msgid="1258761699192993322">"स्‍थानीय रखें"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"केवल देखने के लिए"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"संपादित करने के लिए संपर्क चुनें"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"लिंक किए गए संपर्क"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"जोड़ें"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"अनलिंक करें"</string>
<string name="add_account" msgid="8201790677994503186">"खाता जोड़ें"</string>
<string name="add_new_account" msgid="5748627740680940264">"नया खाता जोड़ें"</string>
<string name="menu_export_database" msgid="2659719297530170820">"डेटाबेस फ़ाइलें निर्यात करें"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"नया संपर्क जोड़ें"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"नया संपर्क बनाएं"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"अधिक देखें"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम देखें"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"सभी देखें"</string>
<string name="recent_card_title" msgid="8982782042698001695">"हाल ही का"</string>
<string name="about_card_title" msgid="2920942314212825637">"संक्षिप्त विवरण"</string>
- <string name="send_message" msgid="8938418965550543196">"संदेश भेजें"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"व्यक्तिगत प्रति बनाई जा रही है..."</string>
- <string name="yesterday" msgid="6840858548955018569">"कल"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"एक व्‍यक्तिगत प्रतिलिपि बना रहा है…"</string>
<string name="tomorrow" msgid="6241969467795308581">"कल"</string>
<string name="today" msgid="8041090779381781781">"आज"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"आज <xliff:g id="TIME_INTERVAL">%s</xliff:g> बजे"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"कल <xliff:g id="TIME_INTERVAL">%s</xliff:g> बजे"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(शीर्षक रहित इवेंट)"</string>
<string name="date_time_set" msgid="4761419824439606690">"सेट करें"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"वेबसाइट"</string>
<string name="header_event_entry" msgid="6738250422744401460">"इवेंट"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"संबंध"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"खाता"</string>
<string name="header_name_entry" msgid="1592791008096288306">"नाम"</string>
<string name="header_email_entry" msgid="8666093061171624478">"ईमेल"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"फ़ोन"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"फ़ोटो"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"संपर्क संपादक को विस्‍तृत करने के लिए क्‍लिक करें."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"संपर्क संपादक को संक्षिप्‍त करने के लिए क्‍लिक करें."</string>
<string name="content_description_directions" msgid="2686791825798189335">"स्थान के लिए दिशा निर्देश"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"हाल ही का एसएमएस. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. जवाब देने के लिए क्लिक करें"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"हाल ही का एसएमएस. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. जवाब देने के लिए क्लिक करें"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"इनकमिंग"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"आउटगोइंग"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"छूटा"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"हाल ही का कॉल. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. पुनः कॉल करने के लिए क्लिक करें"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"हाल ही का कॉल. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. पुनः कॉल करने के लिए क्लिक करें"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"आप: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts तब बेहतर कार्य करता है जब आप व्‍यक्‍ति के Hangouts पहचानकर्ता को ईमेल फ़ील्‍ड या फ़ोन फ़ील्‍ड में डालते हैं."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"अधिक फ़ील्‍ड"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"फ़ोटो बदलें"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"संपादक को खोलने में विफल रहा."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"इसमें सहेजें"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"वर्तमान में <xliff:g id="ACCOUNT_NAME">%s</xliff:g> में सहेजा जा रहा है. भिन्न खाता चुनने के लिए डबल-टैप करें."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">लिंक किए गए संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">लिंक किए गए संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> लिंक किए गए संपर्क"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"अधिक फ़ील्‍ड"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"संपर्क की फ़ोटो बदलें"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"संपर्क की फ़ोटो जोड़ें"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"संपर्क की फ़ोटो"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"संपादक को खोलने में विफल रहा."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"इसमें सहेजा जा रहा है"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> की संपर्क जानकारी संपादित नहीं की जा सकती है"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्क लिंक करें"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"अभी नहीं"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> संभावित प्रतिलिपि</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> संभावित प्रतिलिपि</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one">लिंक किए गए <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- <item quantity="other">लिंक किए गए <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यह संपर्क"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभावित प्रतिलिपि"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"हो सकता है कि ये संपर्क एक ही व्‍यक्‍ति हो. आप उन्हें एकल संपर्क के रूप में एक साथ लिंक कर सकते हैं."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"लिंक किए गए संपर्क"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"आपके खातों से"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"फ़ोटो लें"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"सभी फ़ोटो"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"फ़ोटो चुनें"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> की ओर से"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> हटाएं"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> हटाएं"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटाएं"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>की फ़ोटो चेक नहीं की गई"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>की फ़ोटो चेक की गई"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खाते की फ़ोटो नहीं जांची गई"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खाते की फ़ोटो जांची गई"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"भाषा के परिवर्तन दिखाने के लिए संपर्क सूची से नई जानकारी मिल रही है.\n\nकृपया प्रतीक्षा करें..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"सुझाव"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नया"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"मार्गदर्शक ड्रॉवर खोलें"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"मार्गदर्शक ड्रॉवर बंद करें"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> लेबल"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"लेबल"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"खाते"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"अपना इतिहास एक साथ देखें"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"इवेंट और संदेश"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"इवेंट"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"संदेश"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"सुझाव"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"अपने संपर्कों को व्यवस्थित और उपयोगी बनाए रखें"</string>
+ <string name="undo" msgid="1425165101664071422">"वापस लाएं"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> पर कॉल करें"</string>
+ <string name="call_home" msgid="1990519474420545392">"घर के फ़ोन नंबर पर कॉल करें"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"मोबाइल पर कॉल करें"</string>
+ <string name="call_work" msgid="5328785911463744028">"कार्यस्थल के फ़ोन नंबर पर कॉल करें"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"कार्यस्थल फ़ैक्स पर कॉल करें"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"घर के फ़ैक्स पर कॉल करें"</string>
+ <string name="call_pager" msgid="9003902812293983281">"पेजर पर कॉल करें"</string>
+ <string name="call_other" msgid="8563753966926932052">"कॉल करें"</string>
+ <string name="call_callback" msgid="1910165691349426858">"कॉलबैक नंबर पर कॉल करें"</string>
+ <string name="call_car" msgid="3280537320306436445">"कार फ़ोन पर कॉल करें"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"कंपनी के मुख्य नंबर पर कॉल करें"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN फ़ोन नं. को कॉल करें"</string>
+ <string name="call_main" msgid="6082900571803441339">"मुख्य फ़ोन पर कॉल करें"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"अन्य फ़ैक्स नंबर पर कॉल करें"</string>
+ <string name="call_radio" msgid="8296755876398357063">"रेडियो पर कॉल करें"</string>
+ <string name="call_telex" msgid="2223170774548648114">"इस टेलेक्स पर कॉल करें"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD फ़ोन नंबर पर कॉल करें"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"कार्यस्थल मोबाइल पर कॉल करें"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"कार्यस्थल पेजर पर कॉल करें"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> पर कॉल करें"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS फ़ोन नंबर पर कॉल करें"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (कॉल करें)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> लिखित संदेश भेजें"</string>
+ <string name="sms_home" msgid="7524332261493162995">"घर के फ़ोन पर SMS भेजें"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"मोबाइल पर SMS भेजें"</string>
+ <string name="sms_work" msgid="2269624156655267740">"कार्यस्थल के फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"कार्यस्थल फ़ैक्स नंबर पर SMS भेजें"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"घर के फ़ैक्स पर SMS भेजें"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"पेजर पर SMS भेजें"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS भेजें"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"कॉलबैक नंबर पर SMS भेजें"</string>
+ <string name="sms_car" msgid="7444227058437359641">"कार फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"कंपनी के मुख्या फ़ोन पर SMS भेजें"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_main" msgid="8621625784504541679">"मुख्य फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"इस फ़ैक्स नंबर पर SMS भेजें"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"रेडियो फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"टेलेक्स फ़ोन नंबर पर SMS भेजें"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD को SMS भेजें"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"कार्यस्थल मोबाइल को SMS भेजें"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"कार्यस्थल पेजर पर SMS भेजें"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> को SMS भेजें"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS भेजें"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (संदेश भेजें)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"वीडियो कॉल करें"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"अक्‍सर किए जाने वाले संपर्क साफ करें?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"आपको संपर्क और फ़ोन ऐप्लिकेशन से अक्सर संपर्क की जाने वाली सूची साफ़ करनी होगी, और अपने ईमेल ऐप्लिकेशन को आपकी पता प्राथमिकताओं को प्रारंभ से जानने के लिए बाध्य करना होगा."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"अक्‍सर किए जाने वाले संपर्क साफ़ कर रहा है…"</string>
+ <string name="status_available" msgid="5586870015822828392">"उपलब्ध"</string>
+ <string name="status_away" msgid="1838861100379804730">"दूर"</string>
+ <string name="status_busy" msgid="9147992455450257136">"व्यस्त"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"अन्य"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"कार्य निर्देशिका"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"सभी संपर्क"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> के लिए त्‍वरित संपर्क"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(कोई नाम नहीं)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"बार-बार संपर्क किया गया"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"फ़ोन नंबरों वाले सभी संपर्क."</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफ़ाइल के संपर्क"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"नई जानकारी देखें"</string>
+ <string name="account_phone" msgid="7128032778471187553">"डिवाइस"</string>
+ <string name="account_sim" msgid="6519016427905087952">"सिम"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"नाम"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"प्रचलित नाम"</string>
+ <string name="name_given" msgid="4280790853455320619">"नाम"</string>
+ <string name="name_family" msgid="7466985689626017037">"उपनाम"</string>
+ <string name="name_prefix" msgid="59756378548779822">"नाम उपसर्ग"</string>
+ <string name="name_middle" msgid="8467433655992690326">"मध्य नाम"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"नाम का अंतिम भाग"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"फ़ोनेटिक नाम"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"फ़ोनेटिक नाम"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"फ़ोनेटिक मध्य नाम"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"फ़ोनेटिक उपनाम"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"फ़ोन"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ईमेल"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"पता"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"संगठन"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"संबंध"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"विशेष दिनांक"</string>
+ <string name="sms" msgid="1756857139634224222">"लेख संदेश"</string>
+ <string name="postal_address" msgid="8765560217149624536">"पता"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"कंपनी"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"शीर्षक"</string>
+ <string name="label_notes" msgid="8337354953278341042">"नोट"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"कस्टम"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"वेबसाइट"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"लेबल"</string>
+ <string name="email_home" msgid="8573740658148184279">"घर का ईमेल"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"मोबाइल पर ईमेल भेजें"</string>
+ <string name="email_work" msgid="2807430017302722689">"कार्यस्थल का ईमेल"</string>
+ <string name="email_other" msgid="3454004077967657109">"ईमेल भेजें"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> को ईमेल करें"</string>
+ <string name="email" msgid="5668400997660065897">"ईमेल भेजें"</string>
+ <string name="postal_street" msgid="8133143961580058972">"मार्ग का नाम"</string>
+ <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
+ <string name="postal_region" msgid="6045263193478437672">"राज्य"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ज़िप कोड"</string>
+ <string name="postal_country" msgid="7638264508416368690">"देश"</string>
+ <string name="map_home" msgid="1243547733423343982">"घर का पता देखें"</string>
+ <string name="map_work" msgid="1360474076921878088">"कार्यस्थल का पता देखें"</string>
+ <string name="map_other" msgid="3817820803587012641">"पता देखें"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> पता देखें"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM का उपयोग करके बातचीत करें"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live का उपयोग करके बातचीत करें"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo का उपयोग करके बातचीत करें"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype का उपयोग करके बातचीत करें"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ का उपयोग करके बातचीत करें"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google टॉक का उपयोग करके बातचीत करें"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ का उपयोग करके बातचीत करें"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber का उपयोग करके बातचीत करें"</string>
+ <string name="chat" msgid="9025361898797412245">"बातचीत करें"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"हटाएं"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"अधिक नाम फ़ील्ड दिखाएं"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"नाम फ़ील्ड संक्षिप्त करें"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"अधिक फ़ोनेटिक नाम फ़ील्ड दिखाएं"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"फ़ोनेटिक नाम फ़ील्ड संक्षिप्त करें"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत करें"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"संक्षिप्त करें"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत किया गया"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"संक्षिप्त किया गया"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"सभी संपर्क"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"तारांकित"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"कस्‍टमाइज़ करें"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"संपर्क"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"अन्य सभी संपर्क"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"सभी संपर्क"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"समन्वयन समूह निकालें"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"समन्वयन समूह जोड़ें"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"अधिक समूह…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" को समन्‍वयन से निकालने से समन्‍वयन से सभी असमूहीकृत संपर्क भी निकल जाएंगे."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन विकल्प सहेज रहा है…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"कस्टमाइज़ किया गया दृश्य"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयातित संपर्कों को इसमें सहेजें:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM कार्ड"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"सिम <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d संपर्क</item>
+ <item quantity="other">%1$d संपर्क</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> संपर्क • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> संपर्क • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf फ़ाइल"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"आयात करने के लिए कुछ नहीं है"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard से संपर्कों को आयात करना चाहते हैं?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> का आयात रहने दें?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> का निर्यात रहने दें?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द नहीं हो सका"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात गड़बड़ी‍."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" नहीं खोली जा सकी: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता प्रारंभ नहीं किया जा सका: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कोई निर्यात-योग्‍य संपर्क नहीं है."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"आपने एक आवश्यक अनुमति को अक्षम कर दिया है."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"निर्यात करते समय कोई गड़बड़ी आई: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O गड़बड़ी"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"स्‍मृति पर्याप्त नहीं है. हो सकता है फ़ाइल बहुत बड़ी हो."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"प्रारूप समर्थित नहीं है."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> का निर्यात करना पूर्ण."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"संपर्कों का निर्यात किया जाना समाप्त हो गया."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"संपर्कों का निर्यात पूरा हो गया है, संपर्क साझा करने के लिए नोटिफ़िकेशन क्लिक करें."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"संपर्क साझा करने के लिए टैप करें."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> को निर्यात करना रद्द किया गया."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"संपर्क डेटा निर्यात हो रहा है"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"संपर्क डेटा निर्यात किया जा रहा है."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस जानकारी नहीं मिल सकी."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"कोई भी निर्यात-योग्‍य संपर्क नहीं है."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard कंपोज़र ठीक से शुरू नहीं हुआ."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात नहीं कर सका"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"संपर्क डेटा निर्या‍त नहीं किया गया था.\nकारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> आयात कर रहा है"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard डेटा नहीं पढ़ा जा सका"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात करना पूर्ण"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> को आयात करना रद्द किया गया"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> को जल्‍दी ही आयात किया जाएगा."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फ़ाइल शीघ्र ही आयात की जाएगी."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard आयात अनुरोध अस्‍वीकार हो गया था. बाद में पुन: प्रयास करें."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"संपर्कों को शीघ्र ही निर्यात किया जाएगा."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard आयात अनुरोध अस्‍वीकार हो गया था. बाद में पुन: प्रयास करें."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"संपर्क"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard को स्‍थानीय अस्‍थायी मेमोरी में संचित कर रहा है. वास्‍तविक आयात जल्‍दी ही प्रारंभ होगा."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard आयात नहीं कर सका."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC पर प्राप्त संपर्क"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"संचय कर रहा है"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> आयात कर रहा है: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf फाइल में निर्यात करें"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"इससे क्रमित करें"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"फ़ोनेटिक नाम"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"हमेशा दिखाएं"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"अगर खाली है तो छिपाएं"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"नाम"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"उपनाम"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"नाम प्रारूप"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"नाम पहले"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"उपनाम पहले"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"खाते"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"नए संपर्कों के लिए डिफ़ॉल्ट खाता"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"मेरी जानकारी"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"अपनी प्रोफ़ाइल सेट करें"</string>
+ <string name="setting_about" msgid="7014388749752042863">"संपर्क के बारे में"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"पसंदीदा संपर्कों को साझा करें"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"सभी संपर्कों को साझा करें"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्कों को साझा करना विफल रहा."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"संपर्क निर्यात करें"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"संपर्क यहां से आयात करें"</string>
+ <string name="share_error" msgid="948429331673358107">"यह संपर्क साझा नहीं किया जा सकता."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"साझा करने के लिए कोई भी संपर्क नहीं है."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शन के लिए संपर्क"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शन के लिए संपर्क"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"दृश्य कस्टमाइज़ करें"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"सहेजें"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"संपर्क खोजें"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"पसंदीदा"</string>
+ <string name="menu_import" msgid="6107961135813836467">"आयात करें"</string>
+ <string name="menu_export" msgid="2658783911863503902">"निर्यात करें"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित नंबर"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> द्वारा"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारा <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"खोजना बंद करें"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"खोज साफ़ करें"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"खाता"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"कॉल के लिए हमेशा इसका उपयोग करें"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"नोट के साथ कॉल करें"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"कॉल के साथ भेजने के लिए नोट लिखें..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"भेजें और कॉल करें"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"बिल्ड वर्शन"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ओपन सोर्स लाइसेंस"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ओपन सोर्स सॉफ़्टवेयर के लाइसेंस वि‍वरण"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"निजता नीति"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"सेवा की शर्तें"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ओपन सोर्स लाइसेंस"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url खोलने में विफल रहा."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> चेक किया गया"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> चेक नहीं किया गया"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"वीडियो कॉल करें"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"हटाएं"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"पदलोप चिह्न"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मि. <xliff:g id="SECONDS">%2$s</xliff:g> से."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> घंटे <xliff:g id="MINUTES_1">%2$s</xliff:g> मिनट <xliff:g id="SECONDS">%3$s</xliff:g> सेकंड"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"इस शॉर्टकट को अक्षम कर दिया गया है"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"संपर्क निकाल दिया गया था"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"आयात करें"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"संपर्कों को चुनें"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"आपके सिम कार्ड पर कोई संपर्क नहीं है"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"संपर्क पहले से ही आपकी सूची में मौजूद है"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात किए गए</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात किए गए</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"सिम संपर्कों को आयात करने में विफल रहा"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"सिम से आयात करें"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"रद्द करें"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"स्वतः समन्वयन बंद है. चालू करने के लिए टैप करें."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"खारिज करें"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"खाता समन्वयन बंद है. चालू करने के लिए टैप करें."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"ऑटो सिंक चालू करना चाहते हैं?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"आपके द्वारा न केवल Google संपर्क में, बल्कि सभी ऐप्लिकेशन और खातों में किए जाने वाले बदलाव, वेब और आपके डिवाइस के बीच अप-टू-डेट रखे जाएंगे."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"चालू करें"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"कोई कनेक्शन नहीं"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"सिम"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"और दिखाएं"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM कार्ड का आयात पूर्ण"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात करना विफल रहा"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM कार्ड से संपर्क आयात नहीं किए जा सके"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM को आयात किया जा रहा है"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"नोटिफ़िकेशन"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index a16d5152f..109bdbd20 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakti"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Prikaži kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Uredi kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodavanje kontakta"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Izravan poziv"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Izravna poruka"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Odaberite prečac kontakta"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Odaberite broj za pozivanje"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Odabir broja za poruku"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Odabir kontakta"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodavanje kontaktu"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Odaberite kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Odaberi"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Izrada novog kontakta"</string>
- <string name="starredList" msgid="4817256136413959463">"Sa zvjezdicom"</string>
- <string name="frequentList" msgid="7154768136473953056">"Često"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoriti"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Pojedinosti kontakta"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Uredi kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Izradi kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Uredi skupinu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Izradi skupinu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
<string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Prikaži kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno iz favorita"</string>
@@ -49,41 +35,59 @@
<string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Promijeni fotografiju"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Stavi na početni zaslon"</string>
- <string name="menu_call" msgid="3992595586042260618">"Nazovi kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Poruka kontaktu"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Izradi prečac"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Prekini vezu"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Uredi"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Izbriši"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodavanje kontakta"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodavanje grupe"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Uklanjanje kontakata"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Promjena naziva oznake"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Brisanje oznake"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Dodavanje kontakta"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Odabir kontakata"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodavanje kontakata"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Uklanjanje iz oznake"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Izrada oznake"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Želite li razdvojiti taj kontakt na više kontakata?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdvoji"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Želite li spremiti promjene koje ste već izvršili i razdvojiti taj kontakt na više kontakata?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Spremi i razdvoji"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Želite li spremiti promjene koje ste već izvršili i povezati ih s odabranim kontaktom?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Spremi i poveži"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Povezivanje"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Prekidanje veze"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Poveži"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Prikaz povezanih kontakata"</string>
<string name="menu_save" msgid="1727844363591825909">"Spremi"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Povezivanje kontakata"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Odaberite kontakt koji želite povezati s kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži sve kontakte"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predloženi kontakti"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Svi kontakti"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakti su povezani s imenom <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakti su povezani"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Izbrisano: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Izbrisano: <xliff:g id="NAME_0">%1$s</xliff:g> i <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Izbrisano: <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Kontakti su izbrisani</item>
<item quantity="few">Kontakti su izbrisani</item>
<item quantity="other">Kontakti su izbrisani</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"S Google računa"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"S računa: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Postavi zvuk zvona"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Svi pozivi na govornu poštu"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakti s računa koji su samo za čitanje ne mogu se izbrisati, ali se mogu sakriti."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Sakrij"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt koji želite izbrisati ima podatke s više računa. Podaci s računa koji su samo za čitanje neće se izbrisati, već samo sakriti."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Da biste izvršili povezivanje, morate odabrati barem dva kontakta."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Želite li povezati odabrane kontakte?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Poveži"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Preusmjeri na govornu poštu"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Poništ. preusm. na gov. poštu"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Taj je kontakt samo za čitanje. Ne može se izbrisati, no možete ga sakriti."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Sakrij kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Računi u ovom kontaktu koji su samo za čitanje sakrit će se, ali neće se izbrisati."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Želite li izbrisati ovaj kontakt?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Želite li izbrisati odabrane kontakte?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakti s računa koji su samo za čitanje ne mogu se izbrisati, ali se mogu sakriti."</string>
@@ -91,183 +95,125 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Brisanjem ovog kontakta izbrisat ćete podatke s više računa."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Želite li izbrisati ovaj kontakt?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Odbaci promjene"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt ne postoji."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt je dodan na početni zaslon."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> dodan je na početni zaslon."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Izrada novog kontakta"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Stvori novi kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacija"</item>
- <item msgid="7196592230748086755">"Napomena"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Na tabletnom uređaju nema dostupnih slika."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nema dostupnih slika na telefonu."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Na uređaju nema dostupnih slika."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt fotografija"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Prilagođeni naziv oznake"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pošalji pozive izravno u govornu poštu"</string>
<string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nema kontakata"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nema grupa."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Za stvaranje grupa potreban vam je račun"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"U ovoj grupi nema osoba."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Da biste dodali neke članove, uredite grupu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Spremanje kontakta..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Popis kontakata je prazan"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata s tom oznakom"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom računu"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Popis kontakata je prazan"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Spremljeno: <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt je spremljen"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Prekinuta je veza kontakata"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Promjene kontakta nije moguće spremiti."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Razdvajanje kontakata nije uspjelo."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakt nije povezan."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pogreška prilikom spremanja kontakta."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Promjene fotografije kontakta nisu spremljene."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Skupina spremljena."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Promjene grupe nije moguće spremiti."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontakt s telefonskim brojem</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakta s telefonskim brojem</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakata s telefonskim brojem</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nema kontakata s telefonskim brojevima"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> pronađeni</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> pronađena</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> pronađenih</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Promjene kontakta ne mogu se spremiti"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Prekid veze kontakta nije uspio"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt se ne može povezati"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pogreška pri spremanju kontakta"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Promjene fotografije kontakta ne mogu se spremiti"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Oznaka se ne može učitati"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je izrađena"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Oznaka se ne može izraditi"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je ažurirana"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Uklonjeno iz oznake"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano u oznaku"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Promjene oznake ne mogu se spremiti"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"To oznaka već postoji"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Neki kontakti nemaju e-adresu."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Neki kontakti nemaju telefonske brojeve."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Slanje e-poruke"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Slanje poruke"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Odabir kontakata"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Slanje"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nema kontakata"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> pronađeni</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> pronađena</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> pronađenih</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Sve"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriti"</string>
- <string name="callBack" msgid="5498224409038809224">"Povratni poziv"</string>
- <string name="callAgain" msgid="3197312117049874778">"Zovi ponovo"</string>
- <string name="returnCall" msgid="8171961914203617813">"Povratni poziv"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktima?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografija kontakta"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nazivi vaših kontakata"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nije pronađena nijedna aplikacija koja može provesti ovu radnju."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za povratak na prethodni zaslon"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodajte telefonski broj"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Dodajte e-adresu"</string>
<string name="missing_app" msgid="1466111003546611387">"Nije pronađena nijedna aplikacija koja može provesti tu radnju."</string>
<string name="menu_share" msgid="943789700636542260">"Podijeli"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Dodaj u kontakte"</string>
- <string name="share_via" msgid="563121028023030093">"Dijeli kontakt putem"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Napravite skupinu pod računom"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Dodavanje"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Dijeljenje kontakata putem</item>
+ <item quantity="few">Dijeljenje kontakata putem</item>
+ <item quantity="other">Dijeljenje kontakata putem</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Odabir računa"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Izrada oznake"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Promjena naziva oznake"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Naziv oznake"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Naziv oznake"</string>
<string name="audio_chat" msgid="2535716629358298691">"Glasovni chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
- <string name="connections" msgid="8098440723172028350">"Veze"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Dodaj vezu"</string>
- <string name="recent" msgid="2659189233141493004">"Nedavni"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nedavna ažuriranja"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> račun"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Iz ove aplikacije ne može se uređivati."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Na ovom uređaju ne može se uređivati"</string>
<string name="take_photo" msgid="7496128293167402354">"Snimi fotografiju"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Snimi novu fotografiju"</string>
<string name="pick_photo" msgid="2129509985223564942">"Odaberi fotografiju"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Odaberi novu fotografiju"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Popis kontakata ažurira se."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Pretraživanje..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Prikaži odabrano"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Pokaži sve"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Odaberi sve"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Poništi odabir svega"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Dodaj organizaciju"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Naziv grupe"</string>
- <string name="change_photo" msgid="8530597935483526383">"Promijeni"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primarna slika"</string>
- <string name="description_star" msgid="2605854427360036550">"favorit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Uredi kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Želite li povezati trenutačni kontakt s odabranim kontaktom?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Odustani"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Natrag"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvaranje"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prebaciti se na uređivanje odabranog kontakta? Informacije koje ste unijeli dosad kopirat će se."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj u Moje kontakte"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj u Moje kontakte"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Direktorij <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Prilagođeno"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
<string name="menu_settings" msgid="377929915873428211">"Postavke"</string>
<string name="menu_help" msgid="1680178646764069976">"Pomoć i povratne informacije"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcije prikaza"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Broj telefona"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj kontaktima"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodavanje kontaktu"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zatvori"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Uključi godinu"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Učitavanje..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izradi novi kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvezi kontakte"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Izrada nove grupe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Izrada nove grupe"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Izbrisati grupu \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Sami kontakti neće biti izbrisani.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osobe iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoba iz grupe <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osobe</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoba</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Izrada nove oznake…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Želite li izbrisati oznaku \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontakti se neće izbrisati.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Upišite ime kontakta da biste ga povezali s drugim kontaktom."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiraj u međuspremnik"</string>
<string name="set_default" msgid="4417505153468300351">"Postavi zadano"</string>
<string name="clear_default" msgid="7193185801596678067">"Izbriši zadano"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst kopiran"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite li odbaciti promjene i prekinuti uređivanje?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Želite li odbaciti izmjene?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nastavi uređivati"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Postavi moj profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Upišite ime osobe"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Naziv grupe"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Odustani"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite li odbaciti prilagodbe?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pretraživanje kontakata"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Uklanjanje kontakata"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Moj <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profil"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikaz svih kontakata"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte sigurnost svojih kontakata čak i ako izgubite telefon, sinkronizirajte ih mrežnom uslugom."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajte račun"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Sigurnosna kopija novog kontakta neće biti napravljena. Želite li dodati račun za pravljenje sigurnosnih kopija kontakata na mreži?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojite jednu minutu da biste dodali račun koji će na Googleu sigurnosno kopirati sve vaše kontakte."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti spremat će se na račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Odaberite zadani račun za nove kontakte:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj novi kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Izrada novog kontakta"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Uredi kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Zadrži lokalno"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Samo za prikaz"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Odabir kontakta za uređivanje"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Povezani kontakti"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Dodaj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Prekini vezu"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj račun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj novi račun"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Izvezi datoteke podatkovne baze"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodavanje novog kontakta"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Izradi novi kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pokaži više"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaži manje"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Pokaži sve"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
<string name="about_card_title" msgid="2920942314212825637">"O kartici"</string>
- <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Izrada osobne kopije..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Jučer"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Stvaranje osobne kopije..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
<string name="today" msgid="8041090779381781781">"Danas"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sutra u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Događaj bez naslova)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Postavi"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -277,66 +223,317 @@
<string name="header_website_entry" msgid="1411467850000824745">"Web-lokacija"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Događaj"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Odnos"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Račun"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-adresa"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da bi se alat za uređivanje kontakta proširio."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da bi se alat za uređivanje kontakta sažeo."</string>
<string name="content_description_directions" msgid="2686791825798189335">"upute do lokacije"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite za odgovor"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite za odgovor"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"dolazno"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odlazno"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"propušteno"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite za uzvratni poziv"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite za uzvratni poziv"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funkcionira bolje kada unesete njegov identifikator osobe u polje e-adrese ili telefona."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Više polja"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Promijeni fotografiju"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Otvaranje alata za uređivanje nije uspjelo."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Spremi na račun"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutačno se sprema na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvaput dodirnite da biste odabrali neki drugi račun."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Više polja"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Promjena fotografije kontakta"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodavanje fotografije kontakta"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotografija kontakta"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Otvaranje alata za uređivanje nije uspjelo."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Spremi na račun"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Inform. o kontaktu na računu <xliff:g id="ACCOUNT">%s</xliff:g> ne mogu se uređivati"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI KONTAKTE"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ODUSTANI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mogući duplikat</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> moguća duplikata</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mogućih duplikata</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> povezani kontakt</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> povezana kontakta</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> povezanih kontakata</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ovaj kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogući duplikati"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Ti bi se kontakti mogli odnositi na istu osobu. Možete ih povezati u jedan kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Povezani kontakti"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"S vaših računa"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Snimi fotografiju"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Sve fotografije"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Odabir fotografije"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"S računa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Slika s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nije odabrana"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografija s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> odabrana"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografija s nepoznatog računa nije odabrana"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografija s nepoznatog računa odabrana"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Popis kontakata ažurira se tako da odražava promjene jezika.\n\nPričekajte..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Prijedlozi"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvaranje ladice za navigaciju"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zatvaranje ladice za navigaciju"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Oznaka: <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Oznake"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Računi"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Pogledajte zajedničku povijest"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Događaji i poruke"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Događaji"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Poruke"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Prijedlozi"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Neka vaši kontakti budu organizirani i korisni"</string>
+ <string name="undo" msgid="1425165101664071422">"Poništavanje"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Nazovite <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Nazovi kućni"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Nazovi mobitel"</string>
+ <string name="call_work" msgid="5328785911463744028">"Nazovi poslovni"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Nazovi poslovni faks"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Nazovi faks kod kuće"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Nazovi dojavljivač"</string>
+ <string name="call_other" msgid="8563753966926932052">"Pozovi"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Pozovi povratno"</string>
+ <string name="call_car" msgid="3280537320306436445">"Nazovi automobil"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Nazovi glavni u tvrtki"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Nazovi ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Pozovi glavni"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Pozovi faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Nazovi radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Nazovi teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Nazovi TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Nazovi poslovni mobitel"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Nazovi poslovni dojavljivač"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Nazovite <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Nazovi MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (poziv)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Pošaljite SMS na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Poruka na kućni"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Poruka na mobitel"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Poruka na poslovni"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Poruka na poslovni faks"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Poruka na kućni faks"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Poruka na dojavljivač"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Poruka za povratni poziv"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Poruka u automobil"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Poruka na glavni u tvrtki"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Poruka na ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Poruka na glavni"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Poruka na faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Poruka na radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Poruka na teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Poruka za TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Poruka na poslovni mobitel"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Poruka na poslovni dojavljivač"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Poruka za <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Poruka na MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (poruka)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Uputi videopoziv"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Brisati podatke o čestim kontaktima?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Izbrisat ćete popis osoba s kojima često kontaktirate u aplikacijama Kontakti i Osobe, pa će aplikacije e-pošte morati ispočetka učiti vaše postavke adresiranja."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje često kontaktiranih..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Dostupan"</string>
+ <string name="status_away" msgid="1838861100379804730">"Odsutan"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zauzet"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Drugo"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktorij"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Poslovni direktorij"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za korisnika <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti s telefonskim brojevima"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Poslovni kontakti"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Uređaj"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+ <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefiks imena"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Srednje ime"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufiks imena"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Ime fonetski"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetski zapis imena"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetsko srednje ime"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetski zapis prezimena"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pošta"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Poseban datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstualna poruka"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Tvrtka"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Bilješke"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Prilagođeno"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web-lokacija"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-poruka na privatnu e-poštu"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-pošta na mobitel"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-pošta na poslovni"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-pošta"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Pošaljite e-poruku na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-pošta"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Država"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Zemlja"</string>
+ <string name="map_home" msgid="1243547733423343982">"Prikaz kućne adrese"</string>
+ <string name="map_work" msgid="1360474076921878088">"Prikaži adresu na poslu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Prikaz adrese"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Prikažite <xliff:g id="CUSTOM_LABEL">%s</xliff:g> adresu"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatajte koristeći AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatajte koristeći Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatanje koristeći Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatajte koristeći Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatajte koristeći QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatajte koristeći Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatajte koristeći ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatajte koristeći Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"izbriši"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Prikaži više polja s imenom"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sažmi nazive polja"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Proširi polja fonetskih imena"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sažmi polja fonetskih imena"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Proširi"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Sažmi"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Prošireno"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sažeto"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Svi kontakti"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Sa zvjezdicom"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Svi ostali kontakti"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Svi kontakti"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Ukloni grupu sinkronizacije"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupu sinkroniziranja"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Više grupa..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanje grupe \"<xliff:g id="GROUP">%s</xliff:g>\" iz sinkronizacije uklonit će i sve negrupirane kontakte iz sinkronizacije."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Spremanje opcija prikaza..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Spremite uvezene kontakte na račun:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM kartica"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d kontakt</item>
+ <item quantity="few">%1$d kontakta</item>
+ <item quantity="other">%1$d kontakata</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakta • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakata • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf datoteka"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nema ništa za uvoz"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Želite li uvesti kontakte s vCarda?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Otkazati uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Otkazati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoz/izvoz kartice vCard nije otkazan"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata pogreška."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteku \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" nije moguće otvoriti radi: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Alat za izvoz ne može se pokrenuti; razlog: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema kontakata koji se mogu izvoziti."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste obavezno dopuštenje."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Tijekom izvoza došlo je do pogreške zbog: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O pogreška"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Datoteka je možda prevelika."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Završetak izvoza datoteke <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Dovršen je izvoz kontakata."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Dovršen je izvoz kontakata. Kliknite obavijest za dijeljenje kontakata."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dodirnite za dijeljenje kontakata."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> otkazan je."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka o kontaktu"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci kontakata izvoze se."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Dohvaćanje podataka iz baze podataka nije uspjelo."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nema kontakata koji se mogu izvesti."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Sastavljač za vCard nije se ispravno pokrenuo."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz nije uspio"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci o kontaktu nisu izvezeni.\nRazlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Uvoz <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Čitanje podataka vCarda nije uspjelo"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Završetak uvoza kartice vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> otkazan je"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> uskoro će biti uvezena."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka će uskoro biti uvezena."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtjev za uvoz formata vCard odbijen je. Pokušajte ponovo kasnije."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će se uskoro izvesti."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtjev za izvoz formata vCard odbijen je. Pokušajte ponovo kasnije."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Spremanje vCard datoteka u predmemoriju za lokalnu privremenu pohranu. Stvarni uvoz uskoro će početi."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Uvoz vCard datoteke nije uspio."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC-om"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Spremanje u predmemoriju"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Uvoz <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Izvoz u .vcf datoteku"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Poredano po"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetski zapis imena"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Uvijek prikaži"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Sakrij ako je prazno"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Prezime"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Oblik imena"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Najprije ime"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Najprije prezime"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Računi"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Zadani račun za nove kontakte"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Postavite svoj profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O kontaktima"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Dijeljenje omiljenih kontakata"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Dijeljenje svih kontakata"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Dijeljenje kontakata nije uspjelo."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Izvoz kontakata"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Uvoz kontakata iz izvora"</string>
+ <string name="share_error" msgid="948429331673358107">"Ovaj kontakt nije moguće dijeliti."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za dijeljenje."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Prilagodba prikaza"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Spremanje"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pretražite kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Uvoz"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Izvoz"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"preko izvora <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> preko izvora <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavi pretraživanje"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Brisanje pretraživanja"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Uvijek upotrebljavaj za pozive"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Poziv uz bilješku"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Napišite bilješku koju ćete poslati uz poziv..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I NAZOVI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Međuverzija"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Pojedinosti o licenci za softver otvorenog koda"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Pravila o privatnosti"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Uvjeti pružanja usluge"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licence otvorenog koda"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Otvaranje URL-a nije uspjelo."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> potvrđen"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nije potvrđen"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Uputi videopoziv"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Tri točke"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ovaj je prečac onemogućen"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt je uklonjen"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Uvezi"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Odabir kontakata"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nema kontakata na vašoj SIM kartici"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt već postoji na vašem popisu"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Uvezen je <xliff:g id="COUNT">%d</xliff:g> kontakt sa SIM-a</item>
+ <item quantity="few">Uvezena su <xliff:g id="COUNT">%d</xliff:g> kontakta sa SIM-a</item>
+ <item quantity="other">Uvezeno je <xliff:g id="COUNT">%d</xliff:g> kontakata sa SIM-a</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Uvoz kontakata sa SIM kartice nije uspio"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Uvoz sa SIM-a"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Odustani"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatska sinkronizacija je isključena. Dodirnite da biste je uključili."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Odbacivanje"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinkronizacija računa je isključena. Dodirnite da biste je uključili."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Želite li uključiti automatsku sinkronizaciju?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Izmjene koje unesete u aplikacije i na račune, ne samo na Google kontakte ažurirat će se na webu i vašim uređajima."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Uključi"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nema veze"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Prikaži više"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Dovršen je uvoz SIM kartice"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspio"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Uvoz kontakata sa SIM kartice nije moguć"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvoz SIM kontakata"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obavijesti"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index b9cef667c..551e3c609 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Névjegyek"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Névjegyek"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Névjegy megtekintése"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Névjegy szerkesztése"</string>
<string name="contactsList" msgid="8661624236494819731">"Címtár"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Névjegy hozzáadása"</string>
<string name="shortcutContact" msgid="749243779392912958">"Névjegy"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Közvetlen tárcsázás"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Közvetlen üzenet"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Válasszon névjegyet"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Válasszon számot a híváshoz"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Válasszon számot az üzenethez"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Névjegy kiválasztása"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Hozzáadás névjegyhez"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Névjegy kiválasztása"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Választás"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Új névjegy létrehozása"</string>
- <string name="starredList" msgid="4817256136413959463">"Csillaggal megjelölt"</string>
- <string name="frequentList" msgid="7154768136473953056">"Gyakori"</string>
- <string name="strequentList" msgid="5640192862059373511">"Kedvencek"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Névjegy adatai"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Névjegy szerkesztése"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Névjegy létrehozása"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Csoport szerkesztése"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Csoport létrehozása"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Információ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Frissítések"</string>
<string name="searchHint" msgid="8482945356247760701">"Keresés a névjegyek között"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Névjegy megtekintése"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Hozzáadás a kedvencekhez"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eltávolítás a kedvencek közül"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eltávolítva a kedvencek közül"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Szerkesztés"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Törlés"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Fénykép lecserélése"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Kezdőképernyőre"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ismerős hívása"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"SMS küldése ismerősnek"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Parancsikon létrehozása"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Szétválasztás"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Szerkesztés"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Törlés"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Névjegy hozzáadása"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Csoport hozzáadása"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Névjegyek eltávolítása"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Címke átnevezése"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Címke törlése"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Névjegy hozzáadása"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Névjegyek kiválasztása"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Névjegyek hozzáadása"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eltávolítás a címkéről"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Címke létrehozása"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Szeretné több névjegyre szétbontani ezt a névjegyet?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Szétválasztás"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Szeretné menteni a végrehajtott módosításokat, és több névjeggyé szétbontani ezt a névjegyet?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Mentés és szétbontás"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Szeretné menteni a végrehajtott módosításokat, és társítani a kiválasztott névjegyet?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Mentés és társítás"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Összekapcsolás"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Szétválasztás"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Összekapcsolás"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Összek. névjegyek megtekintése"</string>
<string name="menu_save" msgid="1727844363591825909">"Mentés"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Névjegyek társítása"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Válassza ki a névjegyet, amelyet a következővel szeretne társítani: <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Az összes névjegy megjelenítése"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Javasolt névjegyek"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Összes névjegy"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> összekapcsolva"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Névkegyek társítva"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> törölve"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> és <xliff:g id="NAME_1">%2$s</xliff:g> törölve"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… törölve"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Névjegyek törölve.</item>
<item quantity="one">Névjegy törölve.</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> névjegy</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> névjegy</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> névjegy · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> névjegy · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"A Google rendszeréből"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Innen: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Csengőhang"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Minden hívás a hangpostára"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Az írásvédett fiókokból származó névjegyeket nem lehet törölni, de el lehet rejteni őket."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Elrejtés"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"A törlésre kijelölt névjegy több fiókból is tartalmaz információkat. Az írásvédett fiókokból származó információkat csak elrejti a rendszer, nem törli őket."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Társításhoz legalább két névjegyet kell kiválasztania."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Társítja a kiválasztott névjegyeket?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Összekapcsolás"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Átirányítás a hangpostára"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Átirányítás visszavonása"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"A névjegy írásvédett. Nem törölhető, de elrejtheti."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Névjegy elrejtése"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"A névjegyben szereplő írásvédett fiókok el lesznek rejtve, de a rendszer nem törli őket."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Törli ezt a névjegyet?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Törli a kijelölt névjegyeket?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Az írásvédett fiókokból származó névjegyeket nem lehet törölni, de el lehet rejteni őket."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A névjegy törlésével több fiókból is töröl adatokat."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Törli ezt a névjegyet?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Törlés"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Módosítások elvetése"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"A névjegy nem létezik."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Névjegy hozzáadva a kezdőképernyőhöz"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> hozzáadva a kezdőképernyőhöz"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Új névjegy létrehozása"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Új névjegy létrehozása"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Szervezet"</item>
- <item msgid="7196592230748086755">"Jegyzet"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nem állnak rendelkezésre képek a táblagépen."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nincsenek elérhető képek a telefonon."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Nem állnak rendelkezésre képek az eszközön."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Ismerős fotója"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Egyéni címkenév"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Hívások közvetlen átirányítása a hangpostára"</string>
<string name="removePhoto" msgid="4898105274130284565">"Fénykép törlése"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nincsenek névjegyek"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nincsenek csoportok"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Csoportok létrehozásához szükség van egy fiókra."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ebben a csoportban nincsenek személyek."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Felhasználók hozzáadásához szerkessze a csoportot."</string>
- <string name="savingContact" msgid="4075751076741924939">"Névjegy mentése..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"A névjegylista üres"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nincs ilyen címkéjű névjegy"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"A fiókban nincsenek névjegyek"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"A névjegylista üres"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Mentette a következőt: <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Névjegy elmentve"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Névjegyek szétválasztva"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nem sikerült menteni a névjegymódosításokat."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nem sikerült szétbontani a névjegyet."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nem sikerült társítani a névjegyet."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Hiba történt a névjegy mentése során"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nem sikerült menteni a névjegyfotó módosításait."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Csoport mentve."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nem sikerült menteni a csoportmódosításokat."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> névjegy telefonszámmal</item>
- <item quantity="one">1 névjegy telefonszámmal</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nincsenek telefonszámot is tartalmazó névjegyek"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> találat</item>
- <item quantity="one">1 találat</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nem sikerült menteni a névjegymódosításokat"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nem sikerült leválasztani a névjegyet"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nem sikerült társítani a névjegyet"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hiba történt az ismerős mentése során"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nem sikerült menteni a névjegyfotó módosításait"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nem sikerült betölteni a címkét"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Címke törölve"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Címke létrehozva"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nem hozhat létre címkét"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Címke frissítve"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eltávolítva a címkéből"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Hozzáadva a címkéhez"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nem sikerült menteni a címke változtatásait"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Már van ilyen címke"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Egyes névjegyekhez nem tartozik e-mail-cím."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Egyes névjegyekhez nem tartozik telefonszám."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-mail küldése"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Üzenet küldése"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Névjegyek kiválasztása"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Küldés"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nincsenek névjegyek"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> találat</item>
- <item quantity="one">1 találat</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Összes"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Kedvencek"</string>
- <string name="callBack" msgid="5498224409038809224">"Visszahívás"</string>
- <string name="callAgain" msgid="3197312117049874778">"Hívásismétlés"</string>
- <string name="returnCall" msgid="8171961914203617813">"Visszahívás"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Hozzáadja a(z) \"<xliff:g id="EMAIL">%s</xliff:g>\"címet a Címtárhoz?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotó a névjegyhez"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plusz"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> névjegy"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Ismerősök nevei"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nincs megfelelő alkalmazás a művelet elvégzésére."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kattintással visszatér az előző képernyőre"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefonszám hozzáadása"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"E-mail-cím hozzáadása"</string>
<string name="missing_app" msgid="1466111003546611387">"Nincs megfelelő alkalmazás a művelet elvégzéséhez."</string>
<string name="menu_share" msgid="943789700636542260">"Megosztás"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Hozzáadás a névjegyekhez"</string>
- <string name="share_via" msgid="563121028023030093">"Névjegy megosztása a következőn:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Csoport létrehozása a fiókban"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Hozzáadás"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Névjegyek megosztása a következőn</item>
+ <item quantity="one">Névjegy megosztása a következőn</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Fiók kiválasztása"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Címke létrehozása"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Címke átnevezése"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Címke neve"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Címke neve"</string>
<string name="audio_chat" msgid="2535716629358298691">"Audiocsevegés"</string>
<string name="video_chat" msgid="1872255818640336072">"Videocsevegés"</string>
- <string name="connections" msgid="8098440723172028350">"Kapcsolatok"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Kapcsolat hozzáadása"</string>
- <string name="recent" msgid="2659189233141493004">"Legújabbak"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Legújabb frissítések"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> névjegy"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-fiók"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nem szerkeszthető ezen alkalmazásból."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nem szerkeszthető ezen a készüléken"</string>
<string name="take_photo" msgid="7496128293167402354">"Fotó készítése"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Új fénykép készítése"</string>
<string name="pick_photo" msgid="2129509985223564942">"Fotó kiválasztása"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Új fotó kiválasztása"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Az ismerőslista frissítése folyamatban van."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Keresés..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Kiválasztottak megjelenítése"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Összes megjelenítése"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Összes kijelölése"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Összes kijelölés megszüntetése"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Új hozzáadása"</string>
- <string name="add_organization" msgid="7311893231158291197">"Szervezet hozzáadása"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Csoport neve"</string>
- <string name="change_photo" msgid="8530597935483526383">"Módosítás"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Elsődleges fotó"</string>
- <string name="description_star" msgid="2605854427360036550">"kedvenc"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Névjegy szerkesztése"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Társítja a jelenlegi és a kijelölt névjegyet?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Címke"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Mégse"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Vissza"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"bezárás"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"A kiválasztott névjegy szerkesztésére vált? Az eddig beírt információk át lesznek másolva."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Másolás a saját névjegyeim közé"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Hozzáadás a Címtárhoz"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Mappa: <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Egyéni"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Beállítások"</string>
<string name="menu_settings" msgid="377929915873428211">"Beállítások"</string>
<string name="menu_help" msgid="1680178646764069976">"Súgó és visszajelzés"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Megjelenítési beállítások"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonszám"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Hozzáadása a névjegyekhez"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Hozzáadás névjegyhez"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Bezárás"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Az év szerepeltetése"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Névjegy"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Betöltés..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Új névjegy létrehozása"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Fiók hozzáadása"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Névjegyek importálása"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Új csoport létrehozása"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Új csoport létrehozása"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> csoport</item>
- <item quantity="one">1 csoport</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Törli a következő csoportot \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Maguk a névjegyek nem kerülnek törlésre.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> személy a(z) <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> csoportból</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> személy a(z) <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> csoportból</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> személy</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> személy</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importálás"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Új létrehozása…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Törli a következő címkét: <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Ezzel nem törli a névjegyeket.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Adja meg a névjegyhez tartozó nevet, mielőtt társítana egy másik névjegyet."</string>
<string name="copy_text" msgid="3257145021583508761">"Másolás vágólapra"</string>
<string name="set_default" msgid="4417505153468300351">"Beállítás alapértelmezettként"</string>
<string name="clear_default" msgid="7193185801596678067">"Alapértelmezés törlése"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Másolt szöveg"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Elveti a módosításokat, és kilép a szerkesztésből?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Elveti a módosításokat?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Elvetés"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Szerkesztés folytatása"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> -- <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Saját profil beállítása"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Írja be a személy nevét"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Csoport neve"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Mégse"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Elveti a személyre szabott elemeket?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Keresés a névjegyek között"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Névjegyek eltávolítása"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Helyi profilom"</string>
<string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilom"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Az összes névjegy megjelenítése"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tartsa névjegyeit biztonságban akkor is, ha elveszíti a telefont: szinkronizáljon egy online szolgáltatással."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Fiók hozzáadása"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Az új névjegyről nem készül biztonsági másolat. Hozzáad egy olyan fiókot, amelyik online biztonsági másolatot készít a névjegyekről?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adjon hozzá egy fiókot, amellyel biztonsági mentést készíthet a névjegyeiről a Google rendszerében."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Az új névjegyek mentésének helye: <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Válasszon ki egy alapértelmezett fiókot az új névjegyek számára"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Névjegy hozzáadása"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Új névjegy"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Névjegy szerkesztése"</string>
- <string name="keep_local" msgid="1258761699192993322">"Tárolás helyben"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Csak olvasás"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Válassza ki a szerkeszteni kívánt névjegyet"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Összekapcsolt névjegyek"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Hozzáadás"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Szétválasztás"</string>
<string name="add_account" msgid="8201790677994503186">"Fiók megadása"</string>
<string name="add_new_account" msgid="5748627740680940264">"Új fiók hozzáadása"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Adatbázisfájlok exportálása"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"új névjegy hozzáadása"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Új névjegy létrehozása"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Továbbiak"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kevesebb megjelenítése"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Az összes megjelenítése"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Legutóbbiak"</string>
<string name="about_card_title" msgid="2920942314212825637">"Névjegy"</string>
- <string name="send_message" msgid="8938418965550543196">"Üzenet küldése"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Személyes másolat létrehozása…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Tegnap"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Személyes másolat készítése..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Holnap"</string>
<string name="today" msgid="8041090779381781781">"Ma"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Ma <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Holnap <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Névtelen esemény)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Beállítás"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Azonnali üzenetküldés"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Webhely"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Esemény"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Viszony"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Fiók"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Név"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fénykép"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kattintson a névjegyszerkesztő kibontásához."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kattintson a névjegyszerkesztő összecsukásához."</string>
<string name="content_description_directions" msgid="2686791825798189335">"útvonalterv a helyhez"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS a közelmúltban. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kattintson, ha választ szeretne küldeni"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS a közelmúltban. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kattintson, ha választ szeretne küldeni"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"bejövő"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"kimenő"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"nem fogadott"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"hívás a közelmúltban. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kattintson a visszahíváshoz"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"hívás a közelmúltban. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kattintson a visszahíváshoz"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ön: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"A Hangouts jobban működik, ha a személy Hangouts-azonosítóját adja meg az e-mail vagy telefonszám mezőben."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"További mezők"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Fénykép lecserélése"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nem sikerült megnyitni a szerkesztőt."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Mentés ide"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Jelenleg a(z) <xliff:g id="ACCOUNT_NAME">%s</xliff:g>fiókba menti a névjegyet. Koppintson duplán másik fiók kiválasztásához."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Társított névjegyek (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Társított névjegy</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> összekapcsolt névjegy"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"További mezők"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Névjegyfotó lecserélése"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Névjegyfotó felvétele"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Névjegyfotó"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Nem sikerült megnyitni a szerkesztőt."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Mentés ide"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A(z) <xliff:g id="ACCOUNT">%s</xliff:g> névjegyadatai nem szerkeszthetők"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"NÉVJEGYEK TÁRSÍTÁSA"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"MÉGSE"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> lehetséges ismétlődő névjegy</item>
- <item quantity="one">1 lehetséges ismétlődő névjegy</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> társított névjegy</item>
- <item quantity="one">1 társított névjegy</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ez a névjegy"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Lehetséges ismétlődések"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Lehet, hogy ezek a névjegyek ugyanahhoz a személyhez tartoznak. Lehetőség van a névjegyek egyesítésére."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Összekapcsolt névjegyek"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Az Ön fiókjaiból"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fotó készítése"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Az összes fotó"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Fotó kiválasztása"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Innen: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"A(z) <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> törlése"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"A(z) <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> törlése"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"A(z) <xliff:g id="DATA_KIND">%s</xliff:g> törlése"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"A következőtől származó fotó nincs kiválasztva: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"A következőtől származó fotó kiválasztva: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Az ismeretlen fiókból származó kép nincs kiválasztva"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Ismeretlen fiókból származó kép kiválasztva"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"A nyelv módosítása miatt folyamatban van a Címtár frissítése.\n\nKérjük, várjon..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Javaslatok"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Új"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigációs fiók kinyitása"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Navigációs fiók bezárása"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> címke"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Címkék"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Fiókok"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Az előzmények együttes megjelenítése"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Események és üzenetek"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Események"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Üzenetek"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Javaslatok"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Tartsa naprakészen és rendezetten a névjegyeket."</string>
+ <string name="undo" msgid="1425165101664071422">"Visszavonás"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Hívás: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Otthoni szám hívása"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Mobil hívása"</string>
+ <string name="call_work" msgid="5328785911463744028">"Munkahelyi telefon hívása"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Munkahelyi fax hívása"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Otthoni fax hívása"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Csipogó hívása"</string>
+ <string name="call_other" msgid="8563753966926932052">"Hívás"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Visszahívási szám hívása"</string>
+ <string name="call_car" msgid="3280537320306436445">"Gépkocsi hívása"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Céges fővonal hívása"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN-telefon hívása"</string>
+ <string name="call_main" msgid="6082900571803441339">"Fő telefonszám hívása"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Fax hívása"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Rádiótelefon hívása"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Telex hívása"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD-szám hívása"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Munkahelyi mobil hívása"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Munkahelyi csipogó hívása"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Hívás: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS-ben szereplő telefonszám hívása"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (hívás)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"SMS: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS küldése haza"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS küldése mobiltelefonra"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS küldése munkahelyi telefonra"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS küldése munkahelyi faxszámra"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS küldése otthoni faxszámra"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS küldése csipogóra"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS küldése"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS küldése visszahívandó számra"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS küldése gépkocsinak"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS küldése a céges fővonalra"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS küldése ISDN-telefonra"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS küldése fő telefonszámra"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS küldése faxszámra"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS küldése rádiótelefonra"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS küldése telexre"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS küldése szöveges telefonra (TTY/TDD)"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS küldése munkahelyi mobilra"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS küldése munkahelyi csipogóra"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS küldése ide: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS küldése MMS-ben szereplő számra"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (üzenet)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Videohívás kezdeményezése"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Törli a gyakran keresetteket?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Törölni fogja a gyakran keresett személyek listáját a Névjegyek és a Telefon alkalmazásban, és arra kényszeríti az e-mail alkalmazásokat, hogy elölről kezdjék az Ön címzési szokásainak megtanulását."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Gyakran keresettek törlése..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Elérhető"</string>
+ <string name="status_away" msgid="1838861100379804730">"Nincs a gépnél"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Elfoglalt"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Egyéb"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Mappa"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Munkahelyi névjegyek címtára"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Összes névjegy"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> gyors elérése"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Nincs név)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gyakran keresett"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Minden névjegy telefonszámokkal"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Munkaprofilhoz tartozó névjegyek"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Frissítések"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Eszköz"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Név"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Becenév"</string>
+ <string name="name_given" msgid="4280790853455320619">"Utónév"</string>
+ <string name="name_family" msgid="7466985689626017037">"Családnév"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Név előtagja"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Második név"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Név utótagja"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Név fonetikusan"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Utónév fonetikusan"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Második utónév fonetikusan"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Családnév fonetikusan"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail-cím"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Cím"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Azonnali üzenetküldő"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Szervezet"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Kapcsolat"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Különleges dátum"</string>
+ <string name="sms" msgid="1756857139634224222">"Szöveges üzenet"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Cím"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Cég"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Beosztás"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Jegyzetek"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Egyéni"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Webhely"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Címkék"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail küldése haza"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mail küldése mobiltelefonra"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail küldése munkahelyi címre"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail küldése"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-mail: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail küldése"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Utca"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Település"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Állapot"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Irányítószám"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Ország"</string>
+ <string name="map_home" msgid="1243547733423343982">"Otthoni cím megtekintése"</string>
+ <string name="map_work" msgid="1360474076921878088">"Munkahelyi cím megtekintése"</string>
+ <string name="map_other" msgid="3817820803587012641">"Cím megtekintése"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> cím megtekintése"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Csevegés AIM-on"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Csevegés a Windows Live-on"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Csevegés a Yahoon"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Csevegés Skype használatával"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Csevegés a QQ-n"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Csevegés a Google Csevegő használatával"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Csevegés az ICQ-n"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Csevegés Jabberen"</string>
+ <string name="chat" msgid="9025361898797412245">"Csevegés"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"törlés"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"További névmezők megjelenítése"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Névmezők összecsukása"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"További fonetikusnév-mezők megjelenítése"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetikusnév-mezők összecsukása"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Kibontás"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Összecsukás"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Kibontva"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Összecsukva"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Összes névjegy"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Csillaggal megjelölt"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Személyre szabás"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kapcsolat"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Az összes többi névjegy"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Összes névjegy"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Szinkronizálási csoport eltávolítása"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Szinkronizálási csoport hozzáadása"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"További csoportok..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ha leállítja a(z) \"<xliff:g id="GROUP">%s</xliff:g>\" csoport szinkronizálását, ugyanez történik a nem csoportosított névjegyekkel is."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Megjelenítési beállítások mentése..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Személyre szabott nézet"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importált névjegyek mentési helye:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kártya"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM: <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d névjegy</item>
+ <item quantity="one">1 névjegy</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> névjegy • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> névjegy • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-fájl"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nincs importálható névjegy"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importálja a vCard-névjegyeit?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Megszakítja <xliff:g id="FILENAME">%s</xliff:g> importálását?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Megszakítja <xliff:g id="FILENAME">%s</xliff:g> exportálását?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard imp./exp. megszakítása sikertelen"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Ismeretlen hiba."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"A(z) \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" fájl nem nyitható meg: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nem sikerült elindítani az exportálót: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nincs exportálható névjegy."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Letiltott egy szükséges engedélyt."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Hiba történt az exportálás során: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O hiba"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nincs elég memória. Lehet, hogy túl nagy a fájl."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"A formátum nem támogatott."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"A(z) <xliff:g id="FILENAME">%s</xliff:g> exportálása befejeződött."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A névjegyek exportálása befejeződött."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Az exportálás befejeződött. A névjegyek megosztásához kattintson az értesítésre."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Koppintson rá a névjegyek megosztásához."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"A(z) <xliff:g id="FILENAME">%s</xliff:g> exportálása megszakítva."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Névjegyadatok exportálása"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"A névjegyadatok exportálása folyamatban van."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nem sikerült lekérni az adatbázis-információkat."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nincsenek exportálható névjegyek."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"A vCard-készítő nem megfelelően indult el."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Sikertelen export"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Nem sikerült a névjegyadatok exportálása.\nOk: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importálás - <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nem sikerült beolvasni a vCard adatait."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"A(z) <xliff:g id="FILENAME">%s</xliff:g> vCard importálása befejeződött"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"A(z) <xliff:g id="FILENAME">%s</xliff:g> importálása megszakítva"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"A(z) <xliff:g id="FILENAME">%s</xliff:g> hamarosan importálásra kerül."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"A fájl importálása hamarosan megtörténik."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"A vCard-importálási kérelem elutasítva. Próbálja újra később."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"A névjegyek exportálása hamarosan megtörténik."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"A vCard-exportálási kérelem elutasítva. Próbálja újra később."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kapcsolat"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(ok) mentése az ideiglenes helyi tárolóba. A tényleges importálás hamarosan megkezdődik."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nem sikerült a vCard importálása."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-n kapott névjegy"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Gyorsítótárazás"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importálás - <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportálás .vcf fájlba"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rendezés"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Név fonetikusan"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mindig látszik"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Elrejtés, ha üres"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Utónév"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Családnév"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Névformátum"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Utónév elöl"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Családnév elöl"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Fiókok"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Alapértelmezett fiók az új névjegyek számára"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Saját adatok"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Profil beállítása"</string>
+ <string name="setting_about" msgid="7014388749752042863">"A névjegyekről"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Kedvenc névjegyek megosztása"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Az összes névjegy megosztása"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Nem sikerült megosztani a névjegyeket."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Névjegyek exportálása"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Névjegyek importálása innen"</string>
+ <string name="share_error" msgid="948429331673358107">"Ez a névjegy nem osztható meg."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nincsenek megosztható névjegyek."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Megjelenítendő névjegyek"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Megjelenítendő névjegyek"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Nézet személyre szabása"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Mentés"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Névjegyek keresése"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kedvencek"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importálás"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportálás"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Letiltott számok"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"- <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> - <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"keresés leállítása"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Keresés törlése"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Fiók"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Mindig ezt használja hívásokhoz"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Hívás üzenettel"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Írjon üzenetet, amelyet elküldhetünk a hívással együtt…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"KÜLDÉS és HÍVÁS"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="LIMIT">%2$s</xliff:g>/<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Build verziószáma"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Nyílt forráskódú licencek"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"A nyílt forráskódú szoftverekhez kapcsolódó licenc részletei"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Adatvédelmi irányelvek"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Általános Szerződési Feltételek"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Nyílt forráskódú licencek"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Nem sikerült megnyitni az URL-címet."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"A(z) <xliff:g id="ACCOUNT_INFO">%s</xliff:g> kiválasztva"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"A(z) <xliff:g id="ACCOUNT_INFO">%s</xliff:g> nincs kiválasztva"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Videohívás indítása"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Törlés"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Három pont"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> perc, <xliff:g id="SECONDS">%2$s</xliff:g> mp"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> óra, <xliff:g id="MINUTES_1">%2$s</xliff:g> perc, <xliff:g id="SECONDS">%3$s</xliff:g> mp"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"A parancsikon le van tiltva"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Névjegy eltávolítva"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importálás"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Névjegyek kiválasztása"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nincsenek névjegyek a SIM-kártyán."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"A névjegy már szerepel a listában."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-névjegy importálva</item>
+ <item quantity="one">1 SIM-névjegy importálva</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nem sikerült importálni a SIM-névjegyeket."</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importálás SIM-kártyáról"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Mégse"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Az automatikus szinkronizálás ki van kapcsolva. Koppintson a bekapcsolásához."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Elvetés"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"A fiókszinkronizálás ki van kapcsolva. Koppintson a bekapcsolásához."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Bekapcsolja az automatikus szinkronizálást?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Az alkalmazásokban és fiókokban (nem csak a Névjegyek szolgáltatásban) végrehajtott módosítások szinkronizálva lesznek az internetes felület és az eszközei között."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Engedélyezés"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nincs kapcsolat"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Több megjelenítése"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"A SIM-kártya importálása befejeződött"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Sikertelen importálás"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nem sikerült importálni a névjegyeket a SIM-kártyáról"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kártya importálása folyamatban"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Értesítések"</string>
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
deleted file mode 100644
index 97ee90703..000000000
--- a/res/values-hy-rAM/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Կոնտակտներ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Կոնտակտներ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Դիտել կոնտակտը"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Փոփոխել կոնտակտը"</string>
- <string name="contactsList" msgid="8661624236494819731">"Կոնտակտներ"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Կոնտակտ"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Ուղիղ համարհավաքում"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Ուղիղ հաղորդագրություն"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Ընտրեք կոնտակտ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Ընտրել զանգելու համարը"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Ընտրել SMS-ի համարը"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ավելացնել կոնտակտին"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Ընտրել կոնտակտ"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ստեղծել նոր կոնտակտ"</string>
- <string name="starredList" msgid="4817256136413959463">"Աստղանշված"</string>
- <string name="frequentList" msgid="7154768136473953056">"Հաճախակի"</string>
- <string name="strequentList" msgid="5640192862059373511">"Ընտրյալներ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Մանրամասներ կոնտակտի մասին"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Փոփոխել կոնտակտը"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Ստեղծել կոնտակտ"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Փոփոխել խումբը"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Ստեղծել խումբ"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Տվյալներ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Թարմացումները"</string>
- <string name="searchHint" msgid="8482945356247760701">"Կոնտակտների որոնում"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Դիտել կոնտակտը"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Ավելացնել ընտրյալներում"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Հեռացնել ընտրյալներից"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Հեռացված է ընտրյալներից"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ավելացված է ընտրյալներում"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Փոփոխել"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Ջնջել"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Փոխել լուսանկարը"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Տեղադրել գլխավոր էկրանին"</string>
- <string name="menu_call" msgid="3992595586042260618">"Զանգել կոնտակտին"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Հաղորդագրել կոնտակտին"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Միավորման չեղարկում"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Փոփոխել"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Ջնջել"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Ավելացնել կոնտակտ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ավելացնել խումբ"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Տրոհե՞լ այս կոնտակտը մի քանի կոնտակտների:"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Տրոհել"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Պահե՞լ արդեն իսկ կատարված փոփոխությունները և տրոհել այս կոնտակտը մի քանի կոնտակտների:"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Պահել և տրոհել"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Պահե՞լ արդեն իսկ կատարված փոփոխությունները և միակցել ընտրված կոնտակտի հետ:"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Պահել և միակցել"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Միակցել"</string>
- <string name="menu_save" msgid="1727844363591825909">"Պահել"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Միակցել կոնտակտները"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Ընտրեք կոնտակտը, որը ցանկանում եք միակցել <xliff:g id="NAME">%s</xliff:g>-ի հետ՝"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Ցույց տալ բոլոր կոնտակտները"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Առաջարկվող կոնտակները"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Բոլոր կոնտակտները"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Կոնտակտները միավորված են"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">Կոնտակտները ջնջվեցին</item>
- <item quantity="other">Կոնտակտները ջնջվեցին</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ընտրել զանգերանգ"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Միայն ձայն․ փոստ"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Ձեր միայն կարդալու հաշիվների կոնտակտները չեն կարող ջնջվել, սակայն կարող են թաքցվել:"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Թաքցնել"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Ջնջվող կոնտակտը պարունակում են տվյալներ մի քանի հաշիվներից: Միայն կարդալու հաշիվների տվյալները կթաքցվեն, սակայն չեն ջնջվի:"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Միավորելու համար հարկավոր է ընտրել առնվազն երկու կոնտակտ:"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Կապե՞լ ընտրված կոնտակտները:"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Միակցել"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Ջնջե՞լ այս կոնտակտը:"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Ջնջե՞լ ընտրված կոնտակտները:"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Ձեր միայն կարդալու հաշիվների կոնտակտները չեն կարող ջնջվել, սակայն կարող են թաքցվել:"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Ջնջվող կոնտակտները պարունակում են տվյալներ մի քանի հաշիվներից: Միայն կարդալու հաշիվների տվյալները կթաքցվեն, սակայն չեն ջնջվի:"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Եթե ջնջեք այս կոնտակտը, կջնջվեն տվյալներ մի քանի հաշիվներից։"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Ջնջե՞լ այս կոնտակտը:"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ջնջել"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Հրաժարվել փոփոխություններից"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Կոնտակտը գոյություն չունի:"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Ստեղծել նոր կոնտակտ"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Ստեղծել նոր կոնտակտ"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Կազմակերպություն"</item>
- <item msgid="7196592230748086755">"Նշում"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Պլանշետի վրա հասանելի նկարներ չկան:"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Հեռախոսում մատչելի լուսանկարներ չկան:"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Կոնտակտի լուսանկարը"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Հատուկ պիտակի անունը"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Ուղարկել զանգերը անմիջապես ձայնային փոստին"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Հեռացնել լուսանկարը"</string>
- <string name="noContacts" msgid="4955659076981974652">"Կոնտակտներ չկան"</string>
- <string name="noGroups" msgid="8614664663561385253">"Խմբեր չկան:"</string>
- <string name="noAccounts" msgid="7768267764545265909">"Խմբեր ստեղծելու համար դուք պետք է հաշիվ ունենաք:"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Այս խմբում ոչ ոք չկա:"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Փոփոխեք` խմբին անդամ ավելացնելու համար:"</string>
- <string name="savingContact" msgid="4075751076741924939">"Կոնտակտի պահվում է..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Կոնտակտը պահվեց"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Կոնտակտները ապակցվեցին"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Հնարավոր չէ պահել կոնտակտային փոփոխությունները:"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Չհաջողվեց անջատել կոնտակտը:"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Չհաջողվեց միակցել կոնտակտները:"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Չհաջողվեց պահել կոնտակտը:"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Չհաջողվեց պահել կոնտակտի լուսանկարի փոփոխությունները:"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Խումբը պահվեց:"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Հնարավոր չէ պահել խմբի փոփոխությունները:"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հեռախոսահամարով կոնտակտ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հեռախոսահամարով կոնտակտ</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Հեռախոսահամարներով կոնտակտներ չկան"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
- <item quantity="other">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Կոտնակտներ չկան"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
- <item quantity="other">Գտնվել է <xliff:g id="COUNT">%d</xliff:g> կոնտակտ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Բոլորը"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Ընտրանի"</string>
- <string name="callBack" msgid="5498224409038809224">"Հետ զանգել"</string>
- <string name="callAgain" msgid="3197312117049874778">"Կրկին զանգել"</string>
- <string name="returnCall" msgid="8171961914203617813">"Հետ զանգել"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ավելացնե՞լ «<xliff:g id="EMAIL">%s</xliff:g>»-ը կոնտակտներին:"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"կոնտակտի լուսանկարը"</string>
- <string name="description_plus_button" msgid="515164827856229880">"գումարել"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>-ը <xliff:g id="TOTAL_NUMBER">%s</xliff:g> կոնտակտից"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Ձեր կոնտակտների անունները"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Այս գործողությունը կատարելու համար ոչ մի ծրագիր չի գտնվել:"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Սեղմեք՝ նախորդ էկրանին վերադառնալու համար"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ավելացնել հեռախոսահամար"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Ավելացնել էլփոստ"</string>
- <string name="missing_app" msgid="1466111003546611387">"Այս գործողությունը կատարելու համար ոչ մի ծրագիր չի գտնվել:"</string>
- <string name="menu_share" msgid="943789700636542260">"Կիսվել"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Ավելացնել կոնտակտներում"</string>
- <string name="share_via" msgid="563121028023030093">"Փոխանցել կոնտակտը"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Ստեղծել խումբ հաշվի ներքևում"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Ձայնային զրույց"</string>
- <string name="video_chat" msgid="1872255818640336072">"Տեսազրույց"</string>
- <string name="connections" msgid="8098440723172028350">"Կապեր"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Ավելացնել կապ"</string>
- <string name="recent" msgid="2659189233141493004">"Վերջին"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Վերջին թարմացումները"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> կոնտակտ"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> հաշիվ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ենթակա չէ փոփոխմանը այս ծրագրից:"</string>
- <string name="group_read_only" msgid="1061762906115697637">"Այս սարքից հնարավոր չէ փոփոխել։"</string>
- <string name="take_photo" msgid="7496128293167402354">"Լուսանկարել"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Լուսանկարել"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Ընտրել լուսանկար"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Ընտրել նոր լուսանկար"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Կոնտակտների ցանկը թարմացվում է:"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Որոնում..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Ցույց տալ ընտրվածները"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Ցուցադրել բոլորը"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Ընտրել բոլորը"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Ապանշել բոլորը"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ավելացնել նորը"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ավելացնել կազմակերպություն"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ամսաթիվը"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Խմբի անունը"</string>
- <string name="change_photo" msgid="8530597935483526383">"Փոխել"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Հիմնական լուսանկար"</string>
- <string name="description_star" msgid="2605854427360036550">"ընտրյալ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Փոփոխել կոնտակտը"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Կապե՞լ այս կոնտակտը ընտրված կոնտակտի հետ:"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Խմբագրե՞լ ընտրված կոնտակտը: Մինչ այս պահը ձեր մուտքագրած տեղեկությունները կպատճենվեն:"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Պատճենել Իմ կոնտակտներում"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Ավելացնել Իմ կոնտակտներին"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> գրացուցակ"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Հատուկ"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Կարգավորումներ"</string>
- <string name="menu_settings" msgid="377929915873428211">"Կարգավորումներ"</string>
- <string name="menu_help" msgid="1680178646764069976">"Օգնություն և հետադարձ կապ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Ցուցադրման ընտրանքներ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Հեռախոսահամար"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ավելացնել կոնտակտներում"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ավելացնել կոնտակտին"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Փակել"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Ներառել տարին"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Կոնտակտ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Բեռնում..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Ստեղծել նոր կոնտակտ"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ավելացնել հաշիվ"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ներմուծել կոնտակտներ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Ստեղծել նոր խումբ"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Ստեղծել նոր խումբ"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> խումբ</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> խումբ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ջնջե՞լ «<xliff:g id="GROUP_LABEL">%1$s</xliff:g>» խումբը: (Կոնտակտները չեն ջնջվի:)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> մարդ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-ից</item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> մարդ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-ից</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> մարդ</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> մարդ</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Մուտքագրեք կոնտակտի անունը՝ մեկ ուրիշի հետ միավերլուց առաջ:"</string>
- <string name="copy_text" msgid="3257145021583508761">"Պատճենել սեղմատախտակին"</string>
- <string name="set_default" msgid="4417505153468300351">"Սահմանել ըստ կանխադրման"</string>
- <string name="clear_default" msgid="7193185801596678067">"Մաքրել լռելյայն"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Տեքսը պատճենված է"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Անտեսե՞լ փոփոխությունները և դադարեցնել խմբագրումը:"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Անտեսել"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Շարունակել խմբագրումը"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Կարգավորել իմ պրոֆիլը"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Մուտքագրեք անձի անունը"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Խմբի անունը"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Իմ տեղային պրոֆիլը"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Իմ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> պրոֆիլը"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ցուցադրվում են բոլոր կոնտակտները"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Պահեք ձեր կոնտակտները ապահով, նույնիսկ եթե կորցնեք ձեր հեռախոսը. համաժամեցրեք առցանց ծառայության հետ:"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ավելացնել հաշիվ"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Ձեր նոր կոնտակտը չի պահուստավորվի։ Ավելացնե՞լ հաշիվ, որն կպահպանի ձեր կոնտակտները նաև Համացանցում։"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Նոր կոնտակտները կպահվեն <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> հաշվում:"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Ընտրեք կանխադրված հաշիվ նոր կոնտակտների համար՝"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Ավելացնել կոնտակտ"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Փոփոխել կոնտակտը"</string>
- <string name="keep_local" msgid="1258761699192993322">"Պահել սարքում"</string>
- <string name="add_account" msgid="8201790677994503186">"Ավելացնել հաշիվ"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Ավելացնել նոր հաշիվ"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Արտահանել տվյալների շտեմարանի ֆայլերը"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ավելացնել նոր կոնտակտ"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Տեսնել ավելին"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Կոծկել"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Տեսնել բոլորը"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Վերջին գործողությունները"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Տեղեկատվություն"</string>
- <string name="send_message" msgid="8938418965550543196">"Ուղարկել հաղորդագրություն"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Ստեղծվում է անձնական պատճենը..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Երեկ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Վաղը"</string>
- <string name="today" msgid="8041090779381781781">"Այսօր"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Այսօր՝ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Վաղը՝ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Անվերնագիր միջոցառում)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Հաստատել"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Կազմակերպություն"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Մականուն"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Գրառում"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Վեբկայք"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Միջոցառում"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Հարաբերություն"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Հաշիվ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Անուն"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Էլփոստի հասցե"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Հեռախոս"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Լուսանկար"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Սեղմեք՝ կոնտակտների խմբագրիչը ընդարձակելու համար:"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Սեղմեք՝ կոնտակտների խմբագրիչը կոծկելու համար:"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"Երթուղիներ"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"վերջին SMS-ը՝ <xliff:g id="MESSAGE_BODY">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>, սեղմեք՝ պատասխանելու համար"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"մուտքային"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ելքային"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"բաց թողնված"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"վերջին զանգը՝ <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>, սեղմեք՝ հետ զանգելու համար"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Դուք՝ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts-ն ավելի լավ կաշխատի, եթե էլփոստի կամ հեռախոսի դաշտում մուտքագրեք Hangouts-ի օգտատիրոջ նույնացուցիչը:"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Լրացուցիչ դաշտեր"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Փոխել լուսանկարը"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Չհաջողվեց բացել խմբագրիչը:"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Պահվում է այստեղ՝"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Ներկայումս պահվում է <xliff:g id="ACCOUNT_NAME">%s</xliff:g> հաշվում: Կրկնակի հպեք՝ մեկ այլ հաշիվ ընտրելու համար:"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Կապված կոնտակտներ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Կապված կոնտակտներ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ՄԻԱԿՑԵԼ ԿՈՆՏԱԿՏՆԵՐԸ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ՉԵՂԱՐԿԵԼ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հնարավոր կրկնօրինակ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հնարավոր կրկնօրինակ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Այս կոնտակտը"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Հնարավոր կրկնօրինակներ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Այս կոնտակտները հնարավոր է միևնույն մարդու կոնտակտներ են։ Կարող եք դրանք միակցել և ստեղծել մեկ կոնտակտ։"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Միավորված կոնտակտներ"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Ձեր հաշիվներից"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Լուսանկարել"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Բոլոր լուսանկարները"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Ընտրել լուսանկար"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> հաշվից"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Ջնջել <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ջնջել <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> հաշվի լուսանկարը չի նշվել"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> հաշվի լուսանկարը նշվել է"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Անհայտ հաշվից լուսանկարն ընտրված չէ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Անհայտ հաշվից լուսանկարն ընտրված է"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Կոնտակտների ցանկը թարմացվում է` լեզվի փոփոխությունները արտացոլելու համար:\n \nԽնդրում ենք սպասել..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Արգելափակված համարներ"</string>
-</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
new file mode 100644
index 000000000..e69e4799b
--- /dev/null
+++ b/res/values-hy/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Կոնտակտներ"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Կոնտակտներ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Ավելացնել կնոտակտ"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Կոնտակտ"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Ուղիղ համարհավաքում"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Ուղիղ հաղորդագրություն"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Կոնտակտի ընտրում"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ավելացնել կոնտակտին"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Ընտրել կոնտակտ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Ընտրել"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ստեղծել նոր կոնտակտ"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Կոնտակտների որոնում"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Ավելացնել ընտրյալներում"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Հեռացնել ընտրյալներից"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Հեռացված է ընտրյալներից"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ավելացված է ընտրյալներում"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Փոփոխել"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Ջնջել"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Փոխել լուսանկարը"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Ստեղծել դյուրանցում"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Միավորման չեղարկում"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Հեռացնել կոնտակտները"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Վերանվանել պիտակը"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Ջնջել պիտակը"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Ավելացնել կոնտակտ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Ընտրեք կոնտակտներ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ավելացնել կոնտակտներ"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Հեռացնել պիտակից"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Ստեղծել պիտակ"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Տրոհե՞լ այս կոնտակտը մի քանի կոնտակտների:"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Տրոհել"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Պահե՞լ արդեն իսկ կատարված փոփոխությունները և տրոհել այս կոնտակտը մի քանի կոնտակտների:"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Պահել և տրոհել"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Պահե՞լ արդեն իսկ կատարված փոփոխությունները և միակցել ընտրված կոնտակտի հետ:"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Պահել և միակցել"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Կցում"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ապակցում"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Միակցել"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Դիտել միակցված կոնտակտները"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Պահել"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Միակցել կոնտակտները"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Ընտրեք կոնտակտը, որը ցանկանում եք միակցել <xliff:g id="NAME">%s</xliff:g>-ի հետ՝"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Առաջարկվող կոնտակները"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Բոլոր կոնտակտները"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> կոնտակտը կցվեց"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Կոնտակտները միավորված են"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> կոնտակտը ջնջվեց"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> և <xliff:g id="NAME_1">%2$s</xliff:g> կոնտակտները ջնջվեցին"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ջնջվեցին"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">Կոնտակտները ջնջվեցին</item>
+ <item quantity="other">Կոնտակտները ջնջվեցին</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> կոնտակտ</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> կոնտակտ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google-ից"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> հաշվից"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Ընտրել զանգերանգ"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Ուղարկել ձայնային փոստին"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Չուղարկել ձայնային փոստին"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Սա միայն կարդալու կոնտակտ է: Այն չեք կարող ջնջել, սակայն կարող եք թաքցնել:"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Թաքցնել կոնտակտը"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Այս հաշվի միայն կարդալու թույլտվությամբ կոնտակտները կթաքցվեն (չեն ջնջվի):"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Ջնջե՞լ այս կոնտակտը:"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Ջնջե՞լ ընտրված կոնտակտները:"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Ձեր միայն կարդալու հաշիվների կոնտակտները չեն կարող ջնջվել, սակայն կարող են թաքցվել:"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Ջնջվող կոնտակտները պարունակում են տվյալներ մի քանի հաշիվներից: Միայն կարդալու հաշիվների տվյալները կթաքցվեն, սակայն չեն ջնջվի:"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Եթե ջնջեք այս կոնտակտը, կջնջվեն տվյալներ մի քանի հաշիվներից։"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Ջնջե՞լ այս կոնտակտը:"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ջնջել"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Կոնտակտը գոյություն չունի:"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Սարքում հասանելի լուսանկարներ չկան:"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Կոնտակտի լուսանկարը"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Հատուկ պիտակի անունը"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Հեռացնել լուսանկարը"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Կոնտակտների ցանկը դատարկ է"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Այս պիտակով կոնտակտներ չկան"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Այս հաշվում կոնտակտներ չկան"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Կոնտակտների ցանկը դատարկ է"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> կոնտակտը պահվեց"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Կոնտակտը պահվեց"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Կոնտակտները ապակցվեցին"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Չհաջողվեց պահել կոնտակտի տվյալների փոփոխությունները"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Չհաջողվեց անջատել կոնտակտը"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Չհաջողվեց կապել կոնտակտը"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Չհաջողվեց պահել կոնտակտը"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Չհաջողվեց պահել կոնտակտի լուսանկարի փոփոխությունները"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Չհաջողվեց բեռնել պիտակը"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Պիտակը ջնջվեց"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Պիտակը ստեղծվեց"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Չհաջողվեց պիտակ ստեղծել"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Պիտակը թարմացվեց"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Հեռացվել է պիտակից"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ավելացվեց պիտակին"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Չհաջողվեց պահել պիտակի փոփոխությունները"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Այս անունով խումբ արդեն կա"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Որոշ կոնտակտներ էլփոստի հասցե չունեն:"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Որոշ կոնտակտներ հեռախոսահամար չունեն:"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Ուղարկել նամակ"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Ուղարկել հաղորդագրություն"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Ընտրեք կոնտակտներ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Ուղարկել"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Կոտնակտներ չկան"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ավելացնե՞լ «<xliff:g id="EMAIL">%s</xliff:g>»-ը կոնտակտներին:"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Ձեր կոնտակտների անունները"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Սեղմեք՝ նախորդ էկրանին վերադառնալու համար"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ավելացնել հեռախոսահամար"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Ավելացնել էլփոստի հասցե"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Այս գործողությունը կատարելու համար ոչ մի ծրագիր չի գտնվել:"</string>
+ <string name="menu_share" msgid="943789700636542260">"Կիսվել"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Ավելացնել կոնտակտներում"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Ավելացնել"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Share contacts via</item>
+ <item quantity="other">Ուղարկել կոնտակտները հետևյալով՝</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Ընտրեք հաշիվը"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Պիտակի ստեղծում"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Պիտակի վերանվանում"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Պիտակի անունը"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Պիտակի անունը"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Ձայնային զրույց"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Տեսազրույց"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> կոնտակտ"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> հաշիվ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Լուսանկարել"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Լուսանկարել"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Ընտրել լուսանկար"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Ընտրել նոր լուսանկար"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Որոնում..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ամսաթիվ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Պիտակ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Չեղարկել"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Հետ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"փակել"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Խմբագրե՞լ ընտրված կոնտակտը: Մինչ այս պահը ձեր մուտքագրած տեղեկությունները կպատճենվեն:"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> գրացուցակ"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Կարգավորումներ"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Կարգավորումներ"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Օգնություն և կարծիք"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Հեռախոսահամար"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ավելացնել կոնտակտներում"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Փակել"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Ներառել տարին"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ավելացնել հաշիվ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Ներմուծել"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Ստեղծել նոր…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Ջնջե՞լ «<xliff:g id="GROUP_LABEL">%1$s</xliff:g>» պիտակը (կոնտակտները չեն ջնջվի):"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Մուտքագրեք կոնտակտի անունը՝ մեկ ուրիշի հետ միավերլուց առաջ:"</string>
+ <string name="copy_text" msgid="3257145021583508761">"Պատճենել սեղմատախտակին"</string>
+ <string name="set_default" msgid="4417505153468300351">"Սահմանել ըստ կանխադրման"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Մաքրել լռելյայն"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Տեքսը պատճենված է"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Անտեսե՞լ փոփոխությունները:"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Անտեսել"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Չեղարկել"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Անտեսե՞լ փոփոխությունները:"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Որոնեք կոնտակտներ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Կոնտակտների ջնջում"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Իմ տեղային պրոֆիլը"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Իմ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> պրոֆիլը"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Ավելացրեք հաշիվ, որի միջոցով ձեր կոնտակտները կպահուստավորվեն Google-ում:"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Նոր կոնտակտները կպահվեն <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> հաշվում:"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Ընտրեք կանխադրված հաշիվ նոր կոնտակտների համար՝"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Նոր կոնտակտ"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Փոփոխել կոնտակտը"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Միայն դիտում"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Ընտրեք կոնտակտ՝ խմբագրելու համար"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Միակցված կոնտակտներ"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Ավելացնել"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ապակցել"</string>
+ <string name="add_account" msgid="8201790677994503186">"Ավելացնել հաշիվ"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Ավելացնել նոր հաշիվ"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Արտահանել տվյալների շտեմարանի ֆայլերը"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Ստեղծել նոր կոնտակտ"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Տեսնել ավելին"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Կոծկել"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Վերջին գործողությունները"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Տեղեկատվություն"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Ստեղծվում է անձնական պատճենը..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Վաղը"</string>
+ <string name="today" msgid="8041090779381781781">"Այսօր"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Այսօր՝ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Վաղը՝ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Անվերնագիր միջոցառում)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Հաստատել"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Կազմակերպություն"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Մականուն"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Գրառում"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Վեբկայք"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Միջոցառում"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Հարաբերություն"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Անուն"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Էլփոստի հասցե"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Հեռախոս"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"Երթուղիներ"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"վերջին SMS-ը՝ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>, սեղմեք՝ պատասխանելու համար"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"մուտքային"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ելքային"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"բաց թողնված"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"վերջին զանգը՝ <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>, սեղմեք՝ հետ զանգելու համար"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Դուք՝ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Լրացուցիչ դաշտեր"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Փոխել կոնտակտի լուսանկարը"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ավելացնել կոնտակտի լուսանկարը"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Կոնտակտի լուսանկարը"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Չհաջողվեց բացել խմբագրիչը:"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Պահվում է այստեղ՝"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> հաշվի կոնտակտային տվյալները ենթակա չեն փոփոխման:"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ՄԻԱԿՑԵԼ ԿՈՆՏԱԿՏՆԵՐԸ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ՉԵՂԱՐԿԵԼ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Այս կոնտակտը"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Հնարավոր կրկնօրինակներ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Այս կոնտակտները հնարավոր է միևնույն մարդու կոնտակտներ են։ Կարող եք դրանք միակցել և ստեղծել մեկ կոնտակտ։"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Ջնջել <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ջնջել <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Առաջարկներ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Նոր"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Բացել նավարկման դարակը"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Փակել նավարկման դարակը"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> պիտակ"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Պիտակներ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Հաշիվներ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Ցուցադրել միավորված պատմությունը"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Միջոցառումներն ու SMS հաղորդագրությունները"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Իրադարձություններ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Հաղորդագրություններ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Առաջարկներ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Կոնտակտները պահեք տեսակավորված և ցանկացած պահի հեշտությամբ գտեք ձեր ուզած կոնտակտը"</string>
+ <string name="undo" msgid="1425165101664071422">"Հետարկել"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Զանգել <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ին"</string>
+ <string name="call_home" msgid="1990519474420545392">"Զանգել տուն"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Զանգել շարժական համարին"</string>
+ <string name="call_work" msgid="5328785911463744028">"Զանգել աշխատավայր"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Զանգել աշխատանքային ֆաքսի համարին"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Զանգել տան Ֆաքսի համարին"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Զանգել փեյջերի համարին"</string>
+ <string name="call_other" msgid="8563753966926932052">"Զանգել"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Հետզանգել"</string>
+ <string name="call_car" msgid="3280537320306436445">"Զանգել մեքենանայի համարին"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Զանգել ընկերության հիմնական համարին"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Զանգել ISDN համարին"</string>
+ <string name="call_main" msgid="6082900571803441339">"Զանգել հիմնական համարին"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Զանգել ֆաքսի համարին"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Զանգել ռադիոյի համարին"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Զանգել տելեքս համարին"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Զանգել TTY/TDD համարին"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"զանգել աշխատանքային բջջային համարին"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Զանգել աշխատանքային փեյջերի համարին"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Զանգել <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ին"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Զանգել MMS համարին"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Զանգ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Ուղարկել SMS <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ին"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Հաղորդագրել տուն"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Հաղորդագրել շարժականին"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Հաղորդագրել աշխատանքային համարին"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Հաղորդագրել աշխատանքային ֆաքսի համարին"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Հաղորդագրել տնային ֆաքսի համարին"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Հաղորդագրել փեյջերին"</string>
+ <string name="sms_other" msgid="806127844607642331">"Հաղորդագրել"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Հաղորդագրել հետզանգման համարին"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Հաղորդագրել ավտոմեքենայի հեռախոսահամարին"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Հաղորդագրել ընկերության հիմնական համարին"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Հաղորդագրել ISDN համարին"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Հաղորդագրել հիմնական համարին"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Հաղորդագրել ֆաքսի համարին"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Հաղորդագրել ռադիո համարին"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Հաղորդագրել տելեքս համարին"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Հաղորդագրել TTY/TDD համարին"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Գրել աշխատանքային շարժականին"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Հաղորդագրել աշտատանքային փեյջերին"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Հաղորդագրել <xliff:g id="ASSISTANT">%s</xliff:g>-ին"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Հաղորդագրել MMS համարին"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Գրել ՍՄՍ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Տեսազանգ սկսել"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Մաքրե՞լ հաճախակի հաղորդակցվողները"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Կոնտակտներ և Հեռախոս հավելվածներից կմաքրվի հաճախակի օգտագործվող կոնտակտների ցանկը, և էլփոստի հավելվածները զրոյից են սովորելու ձեր հաճախակի օգտագործվող կոնտակտները։"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Մաքրվում է հաճախակի հաղորդակցվողները..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Հասանելի է"</string>
+ <string name="status_away" msgid="1838861100379804730">"Տեղում չէ"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Զբաղված է"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Այլ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Գրացուցակ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Աշխատանքային գրացուցակ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Բոլոր կոնտակտները"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Արագ հաղորդակցում <xliff:g id="NAME">%1$s</xliff:g>-ի հետ"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Անանուն)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Հաճախակի հաղորդակցվածները"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Բոլոր հեռախոսահամարներով կոնտակտները"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Աշխատանքային պրոֆիլի կոնտակտներ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Դիտել թարմացումները"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Սարք"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM քարտ"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Անունը"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Կեղծանուն"</string>
+ <string name="name_given" msgid="4280790853455320619">"Անուն"</string>
+ <string name="name_family" msgid="7466985689626017037">"Ազգանուն"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Անվան նախածանց"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Հայրանուն"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Անվան վերջածանց"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Անուն (տառադարձված)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Անուն (տառադարձված)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Հայրանուն (տառադարձված)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Ազգանուն (տառադարձված)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Հեռախոս"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Էլփոստ"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Հասցե"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Կազմակերպություն"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Հարաբերություններ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Հատուկ ամսաթիվ"</string>
+ <string name="sms" msgid="1756857139634224222">"Տեքստային հաղորդագրություն"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Հասցե"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Ընկերություն"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Պաշտոն"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Գրառումներ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Հատուկ"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Վեբ կայք"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Պիտակներ"</string>
+ <string name="email_home" msgid="8573740658148184279">"Նամակագրել տուն"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Ուղարկել բջջային փոստին"</string>
+ <string name="email_work" msgid="2807430017302722689">"Նամակագրել աշխատավայր"</string>
+ <string name="email_other" msgid="3454004077967657109">"Նամակագրել"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Ուղարկել էլեկտրոնային նամակ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ին"</string>
+ <string name="email" msgid="5668400997660065897">"Նամակագրել"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Փողոց"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Քաղաք"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Նահանգ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Փոստային կոդ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Երկիր"</string>
+ <string name="map_home" msgid="1243547733423343982">"Դիտել բնակության հասցեն"</string>
+ <string name="map_work" msgid="1360474076921878088">"Դիտել աշխատավայրի հասցեն"</string>
+ <string name="map_other" msgid="3817820803587012641">"Դիտել հասցեն"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Դիտել <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ի հասցեն"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Զրուցել AIM-ով"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Զրույց Windows Live-ով"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Զրուցել Yahoo-ով"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Զրուցել Skype-ով"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Զրուցել QQ-ով"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Զրուցել Google Talk-ով"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Զրուցել ICQ-ով"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Զրուցել Jabber-ով"</string>
+ <string name="chat" msgid="9025361898797412245">"Զրուցել"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ջնջել"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Ցույց տալ անվան այլ դաշտեր"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Կոծկել անվան դաշտերը"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Ցույց տալ տառադարձված անվան այլ դաշտեր"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Կոծկել տառադարձված անվան դաշտերը"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Ընդարձակել"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Կոծկել"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Ընդարձակված է"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Կոծկված է"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Բոլոր կոնտակտները"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Աստղանշված"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Հարմարեցնել"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Կոնտակտ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Բոլոր կոնտակտները"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Բոլոր կոնտակտները"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Հեռացնել համաժամեցված խումբը"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Ավելացնել համաժամեցված խումբ"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Այլ խմբեր..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"«<xliff:g id="GROUP">%s</xliff:g>»-ի հեռացումը համաժամեցումից նաև կհեռացնի ցանկացած չխմբավորված կոնտակտ համաժամեցումից:"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Ցուցադրման ընտրանքները պահվում են..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Անհատականացված դիտակերպ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Պահել ներմուծված կոնտակտներն այստեղ՝"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM քարտից"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM-ից"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contacts</item>
+ <item quantity="other">%1$d կոնտակտ</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contacts • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> կոնտակտ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ֆայլից"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ներմուծելու ոչինչ չկա"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Վերականգնե՞լ կոնտակտները vCard-ից։"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Չեղարկե՞լ <xliff:g id="FILENAME">%s</xliff:g>-ի ներմուծումը"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Չեղարկե՞լ <xliff:g id="FILENAME">%s</xliff:g>-ի արտահանումը"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Հնարավոր չէ չեղարկել vCard-ի ներմուծումը/արտահանումը"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Անհայտ սխալ:"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Հնարավոր չէ բացել \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"-ը. պատճառը` <xliff:g id="EXACT_REASON">%2$s</xliff:g>:"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Հնարավոր չէ մեկնարկել արտահանողը. պատճառը` «<xliff:g id="EXACT_REASON">%s</xliff:g>»:"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Արտահանելի կոնտակտ չկա:"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Դուք անջատել եք անհրաժեշտ թույլտվությունը:"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Արտահանման ընթացքում տեղի է ունեցել սխալ. պատճառը` «<xliff:g id="EXACT_REASON">%s</xliff:g>»:"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O սխալ"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Հիշողությունը բավարար չէ: Հնարավոր է` ֆայլը չափազանց մեծ է:"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ձևաչափը չի աջակցվում:"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-ի արտահանումն ավարտվեց"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Կոնտակտների արտահանումն ավարտվեց:"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Կոնտակտներն արտահանվեցին: Սեղմեք ծանուցումը՝ դրանցով կիսվելու համար:"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Հպեք՝ կոնտակտներով կիսվելու համար:"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g>-ի արտահանումը չեղարկվեց:"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Կոնտակտային տվյալների արտահանում"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Կոնտակտային տվյալներն արտահանվում են:"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Հնարավոր չէ ստանալ տվյալների շտեմարանի տեղեկատվությունը:"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Արտահանելու կոնտակտներ չկան:"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-ի կազմիչը ճիշտ չէ մեկնարկել:"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Հնարավոր չէ արտահանել"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Կոնտակտային տվյալները չեն արտահանվել:\nՊատճառը՝ «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>-ը ներմուծվում է"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Հնարավոր չէ ընթերցել vCard-ի տվյալները"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g>-ի ներմուծումը vCard ավարտվեց"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-ի ներմուծումը չեղարկվեց"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>-ը շուտով կներմուծվի:"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ֆայլը շուտով կներմուծվի:"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-ի ներմուծման հայցը մերժվեց: Փորձեք կրկին ավելի ուշ:"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Կոնտակտները շուտով կարտահանվեն:"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-ի արտահանման հայցը մերժվել է: Կրկին փորեք ավելի ուշ:"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"կոնտակտ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(եր)-ի քեշավորում տեղային ժամանակավոր պահոց: Ներմուծումը կսկսվի շուտով:"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Հնարավոր չէ ներմուծել vCard-ը:"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-ով ստացված կոտակտ"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Քեշավորում"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>-ի ներմուծում"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Արտահանել .vcf ֆայլ"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Դասավորել ըստ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Անուն (տառադարձված)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Միշտ ցուցադրել"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Թաքցնել դատարկ դաշտը"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Անվան"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Ազգանվան"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Անվան ձևաչափ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Սկզբում՝ անունը"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Սկզբում՝ ազգանունը"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Հաշիվներ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Կանխադրված հաշիվ նոր կոնտակտների համար"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Իմ մասին"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Կարգավորել պրոֆիլը"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Կոնտակտների մասին"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Կիսվել նախընտրած կոնտակտներով"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Կիսվել բոլոր կոնտակտներով"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Չհաջողվեց կիսվել կոնտակտներով:"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Արտահանել կոնտակտները"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Կոնտակտների ներմուծում"</string>
+ <string name="share_error" msgid="948429331673358107">"Չհաջողվեց կիսվել կոնտակտով:"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Հասանելի կոնտակտներ չկան։"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Ցուցադրվող կոնտակտներ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Ցուցադրվող կոնտակտներ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Կարգավորել դիտակերպը"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Պահել"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Կոնտակտների որոնում"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ընտրյալներ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Ներմուծել"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Արտահանել"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Արգելափակված համարներ"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-ի միջոցով"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ով"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"դադարեցնել որոնումը"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Մաքրել որոնման դաշտը"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Հաշիվ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Միշտ օգտագործել սա՝ զանգերի համար"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Գրառումով զանգ"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Մուտքագրեք գրառում՝ զանգի հետ ուղարկելու համար…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ՈՒՂԱՐԿԵԼ ԵՎ ԶԱՆԳԵԼ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Կառուցման տարբերակը"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Բաց կոդով ծրագրակազմի արտոնագրեր"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Բաց կոդով ծրագրակազմի արտոնագրերի մանրամասներ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Գաղտնիության քաղաքականություն"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Օգտագործման պայմաններ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Բաց կոդով ծրագրերի արտոնագրեր"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Չհաջողվեց բացել url-ը:"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> հաշիվը նշվել է"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> հաշիվը չի նշվել"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Տեսազանգ սկսել"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Ջնջել"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Բազմակետ"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> վ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ր <xliff:g id="SECONDS">%2$s</xliff:g> վ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ժ <xliff:g id="MINUTES_1">%2$s</xliff:g> ր <xliff:g id="SECONDS">%3$s</xliff:g> վ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Այս դյուրանցումն անջատվել է"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Կոնտակտը հեռացվել է"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Ներմուծել"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Ընտրեք կոնտակտները"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Ձեր SIM քարտում կոնտակտներ չկան"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Կոնտակտն արդեն առկա է ձեր ցանկում"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> կոնտակտ SIM քարտից ներմուծվեց</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> կոնտակտ SIM քարտից ներմուծվեց</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM քարտից չհաջողվեց ներմուծել կոնտակտները"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Ներմուծել SIM քարտից"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Չեղարկել"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Հպեք՝ հաշվի ինքնահամաժամեցումը միացնելու համար:"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Անտեսել"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Հպեք՝ հաշվի համաժամեցումը միացնելու համար:"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Միացնե՞լ ինքնահամաժամեցումը:"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Ինչպես Google Կոնտակտներում, այնպես էլ մյուս բոլոր հավելվածներում և հաշիվներում կատարած փոփոխությունները կհամաժամեցվեն վեբ միջերեսի և ձեր սարքերի միջև:"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Միացնել"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Կապ չկա"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM քարտ"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Ցուցադրել ավելի շատ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM քարտի ներմուծումն ավարտվեց"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Ներմուծման սխալ"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Չհաջողվեց կոնտակտներ ներմուծել SIM քարտից"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM քարտի ներմուծում"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Ծանուցումներ"</string>
+</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 862a2d84d..105d1132a 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontak"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontak"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Lihat Kontak"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edit Kontak"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontak"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Tambahkan kontak"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontak"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Panggilan langsung"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Pesan langsung"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pilih pintasan kontak"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pilih nomor untuk dipanggil"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pilih nomor untuk dikirimi pesan"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Memilih kontak"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Tambahkan ke kontak"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pilih kontak"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pilih"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Buat kontak baru"</string>
- <string name="starredList" msgid="4817256136413959463">"Yang berbintang"</string>
- <string name="frequentList" msgid="7154768136473953056">"Sering"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favorit"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detail kontak"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edit kontak"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Buat kontak"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edit grup"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Buat grup"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Tentang"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Pembaruan"</string>
<string name="searchHint" msgid="8482945356247760701">"Telusuri kontak"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Lihat kontak"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Tambahkan ke favorit"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Hapus dari favorit"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Dibuang dari favorit"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Hapus"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Ganti foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Letakkan di layar Utama"</string>
- <string name="menu_call" msgid="3992595586042260618">"Hubungi kontak"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kontak"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Buat pintasan"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Batalkan tautan"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Hapus"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Tambahkan Kenalan"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tambahkan Grup"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Hapus kontak"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Ganti nama label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Hapus label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Tambahkan kontak"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Pilih kontak"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tambahkan kontak"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Hapus dari label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Buat label"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Batalkan tautannya menjadi beberapa kontak?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Batalkan tautan"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ingin menyimpan perubahan yang sudah dilakukan dan membatalkan tautan dengan kontak ini menjadi beberapa kontak?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Simpan dan Batalkan Tautan"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Ingin menyimpan perubahan yang sudah dilakukan dan menautkan dengan kontak yang dipilih?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Simpan dan Tautkan"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Menautkan"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Membatalkan tautan"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Tautkan"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Lihat kontak yang ditautkan"</string>
<string name="menu_save" msgid="1727844363591825909">"Simpan"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Tautkan kontak"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pilih kontak yang ingin Anda tautkan dengan <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tampilkan semua kontak"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontak yang disarankan"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kontak"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ditautkan"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontak ditautkan"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> dihapus"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> dan <xliff:g id="NAME_1">%2$s</xliff:g> dihapus"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… dihapus"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kontak dihapus</item>
<item quantity="one">Kontak dihapus</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontak</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Dari Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Dari <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Setel nada dering"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Panggilan masuk kotak pesan"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontak dari akun hanya-baca tidak dapat dihapus, tetapi dapat disembunyikan."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Sembunyikan"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontak yang akan dihapus memiliki detail dari beberapa akun. Detail dari akun hanya-baca akan disembunyikan, tidak dihapus."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Anda perlu memilih sedikitnya dua kontak untuk menautkan."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Tautkan kontak yang dipilih?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Tautkan"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Rute ke pesan suara"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Pindahkan rute ke pesan suara"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Kontak ini adalah hanya baca. Kontak tidak dapat dihapus, namun dapat disembunyikan."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Sembunyikan Kontak"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Akun hanya baca di kontak ini akan disembunyikan, bukan dihapus."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Hapus kontak ini?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Hapus kontak yang dipilih?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontak dari akun hanya-baca tidak dapat dihapus, tetapi dapat disembunyikan."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Menghapus kontak ini akan menghapus detail dari beberapa akun."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Hapus kontak ini?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Hapus"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Buang perubahan"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontak tidak ada."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontak ditambahkan ke layar Utama."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ditambahkan ke layar Utama."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Buat kontak baru"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Buat kontak baru"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisasi"</item>
- <item msgid="7196592230748086755">"Catatan"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tidak ada gambar yang tersedia pada tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tidak ada gambar pada ponsel."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Tidak ada gambar yang tersedia di perangkat."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto kontak"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nama label khusus"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Kirim panggilan ke kotak pesan secara langsung"</string>
<string name="removePhoto" msgid="4898105274130284565">"Hapus foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Tidak ada kontak"</string>
- <string name="noGroups" msgid="8614664663561385253">"Tidak ada grup."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Untuk membuat grup, Anda memerlukan sebuah akun."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Tidak ada orang dalam grup ini."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Untuk menambah beberapa orang, edit grup tersebut."</string>
- <string name="savingContact" msgid="4075751076741924939">"Menyimpan kontak..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Daftar kontak Anda kosong"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Tidak ada kontak dengan label ini"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Tidak ada kontak di akun ini"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Daftar kontak Anda kosong"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> disimpan"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontak disimpan"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontak dibatalkan tautannya"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kontak."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Tidak dapat membatalkan tautan kontak."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Tidak dapat menautkan kontak."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kesalahan saat menyimpan kontak."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Tidak dapat menyimpan perubahan foto kontak."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grup disimpan."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Tidak dapat menyimpan perubahan grup."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak dengan nomor telepon</item>
- <item quantity="one">1 kontak dengan nomor telepon</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Tidak ada kontak dengan nomor telepon"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemukan</item>
- <item quantity="one">1 ditemukan</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Tidak dapat menyimpan perubahan kontak"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Tidak dapat membatalkan tautan kontak"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Tidak dapat menautkan kontak"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kesalahan saat menyimpan kontak"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kontak"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuat label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label dihapus"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label dibuat"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tidak dapat membuat label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label diperbarui"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Dihapus dari label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ditambahkan ke label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tidak dapat menyimpan perubahan label"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Label tersebut sudah ada"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Beberapa kontak tidak memiliki email."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Beberapa kontak tidak memiliki nomor telepon."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Kirim email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Kirim pesan"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pilih Kontak"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Kirim"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Tidak ada kontak"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemukan</item>
- <item quantity="one">1 ditemukan</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Semua"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favorit"</string>
- <string name="callBack" msgid="5498224409038809224">"Hubungi kembali"</string>
- <string name="callAgain" msgid="3197312117049874778">"Hubungi sekali lagi"</string>
- <string name="returnCall" msgid="8171961914203617813">"Panggilan kembali"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambahkan \"<xliff:g id="EMAIL">%s</xliff:g>\" ke kontak?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto kontak"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> dari <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontak"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nama kontak Anda"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Tidak ada apl yang ditemukan untuk menangani tindakan ini."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik untuk kembali ke layar sebelumnya"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tambahkan nomor telepon"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Tambahkan email"</string>
<string name="missing_app" msgid="1466111003546611387">"Tidak ditemukan aplikasi untuk menangani tindakan ini."</string>
<string name="menu_share" msgid="943789700636542260">"Bagikan"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Tambahkan ke kontak"</string>
- <string name="share_via" msgid="563121028023030093">"Bagikan kontak melalui"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Buat grup dalam akun"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Tambahkan"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Bagikan kontak melalui</item>
+ <item quantity="one">Bagikan kontak melalui</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Pilih akun"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Buat label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Ganti nama label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nama label"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nama label"</string>
<string name="audio_chat" msgid="2535716629358298691">"Obrolan suara"</string>
<string name="video_chat" msgid="1872255818640336072">"Obrolan video"</string>
- <string name="connections" msgid="8098440723172028350">"Hubungan"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Tambahkan hubungan"</string>
- <string name="recent" msgid="2659189233141493004">"Terbaru"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Pembaruan terkini"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontak"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Akun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Tidak dapat diedit dari apl ini."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Tidak dapat diedit pada perangkat ini."</string>
<string name="take_photo" msgid="7496128293167402354">"Ambil foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Ambil foto baru"</string>
<string name="pick_photo" msgid="2129509985223564942">"Pilih foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baru"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Daftar kontak sedang diperbarui."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Menelusuri..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Tampilkan yang dipilih"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Tampilkan semua"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Pilih semua"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Batal pilih semua"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tambah baru"</string>
- <string name="add_organization" msgid="7311893231158291197">"Tambahkan organisasi"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tanggal"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nama grup"</string>
- <string name="change_photo" msgid="8530597935483526383">"Ganti"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto utama"</string>
- <string name="description_star" msgid="2605854427360036550">"favorit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edit kontak"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Tautkan kontak ini dengan kontak yang dipilih?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Beri Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Batal"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Kembali"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Beralih ke mengedit kontak yang dipilih? Informasi yang telah Anda masukkan sejauh ini akan disalin."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Kontak Saya"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan ke Kontak Saya"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Direktori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Khusus"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Setelan"</string>
<string name="menu_settings" msgid="377929915873428211">"Setelan"</string>
<string name="menu_help" msgid="1680178646764069976">"Bantuan &amp; masukan"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opsi tampilan"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Nomor telepon"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Tambahkan ke kontak"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Tambahkan ke kontak"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Tutup"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Sertakan tahun"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontak"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Memuat..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kontak baru"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tambahkan akun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Impor kontak"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Buat grup baru"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Buat grup baru"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
- <item quantity="one">1 grup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Menghapus grup \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontak itu sendiri tidak akan dihapus.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang dari <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> orang</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Impor"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Buat baru…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Hapus label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontak tidak akan dihapus.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Ketik nama kontak sebelum menautkan dengan lainnya."</string>
<string name="copy_text" msgid="3257145021583508761">"Salin ke papan klip"</string>
<string name="set_default" msgid="4417505153468300351">"Setel sebagai default"</string>
<string name="clear_default" msgid="7193185801596678067">"Hapus default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teks disalin"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Buang perubahan dan berhenti mengedit?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Buang perubahan?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Buang"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Simpan pengeditan"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Siapkan profil saya"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Ketik nama seseorang"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nama grup"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Batal"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Hapus penyesuaian?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Telusuri kontak"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Hapus kontak"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Profil lokal saya"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> saya"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Menampilkan semua kontak"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tetap amankan kontak Anda jika kehilangan ponsel: sinkronkan dengan layanan online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tambahkan akun"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Kontak baru Anda tidak akan dicadangkan. Tambahkan akun yang mencadangkan kontak secara online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Luangkan waktu untuk menambahkan akun yang akan mencadangkan kontak Anda ke Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kontak baru akan disimpan ke <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pilih akun default untuk kontak baru:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Tambah kontak baru"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Buat kontak baru"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit kontak"</string>
- <string name="keep_local" msgid="1258761699192993322">"Simpan secara lokal"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Hanya lihat"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Pilih kontak untuk diedit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Kontak yang ditautkan"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Tambahkan"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Batalkan tautan"</string>
<string name="add_account" msgid="8201790677994503186">"Tambahkan akun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Tambahkan akun baru"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Ekspor file basis data"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"menambah kontak baru"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Buat kontak baru"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Lihat lebih banyak"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Lihat lebih sedikit"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Lihat semua"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Terbaru"</string>
<string name="about_card_title" msgid="2920942314212825637">"Tentang"</string>
- <string name="send_message" msgid="8938418965550543196">"Kirim pesan"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Membuat salinan pribadi..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Kemarin"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Membuat salinan pribadi..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Besok"</string>
<string name="today" msgid="8041090779381781781">"Hari ini"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hari ini pukul <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Besok pukul <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Acara tanpa judul)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Setel"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Situs web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Acara"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Hubungan"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Akun"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telepon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk meluaskan editor kontak."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk menciutkan editor kontak."</string>
<string name="content_description_directions" msgid="2686791825798189335">"petunjuk arah ke lokasi"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaru. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk menanggapi"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaru. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk menanggapi"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"masuk"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"keluar"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tak terjawab"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan telepon terbaru. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk menelepon balik"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan telepon terbaru. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk menelepon balik"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts bekerja lebih baik jika Anda memasukkan pengidentifikasi Hangouts orang tersebut ke bidang email atau bidang ponsel."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Bidang lainnya"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Ganti foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Gagal membuka editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Menyimpan ke"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Saat ini menyimpan ke <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Ketuk dua kali untuk memilih akun lain."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Kontak tertaut (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Kontak tertaut</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontak tertaut"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Bidang lainnya"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ubah foto kontak"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tambahkan foto kontak"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto kontak"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Gagal membuka editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Menyimpan ke"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Info kontak dari <xliff:g id="ACCOUNT">%s</xliff:g> tidak dapat diedit"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"TAUTKAN KONTAK"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BATAL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kemungkinan duplikat</item>
- <item quantity="one">1 Kemungkinan duplikat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak tertaut</item>
- <item quantity="one">1 kontak tertaut</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kontak ini"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Kemungkinan duplikat"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Semua kontak ini mungkin orang yang sama. Anda dapat menautkannya sebagai satu kontak."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Kontak yang ditautkan"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Dari akun Anda"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Jepret foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Semua foto"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Pilih foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Dari <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Hapus <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Hapus <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Hapus <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto dari <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>tidak dicentang"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto dari <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>dicentang"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto dari akun tak dikenal tidak dicentang"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto dari akun tak dikenal dicentang"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Daftar kontak sedang diperbarui untuk mencerminkan perubahan bahasa.\n\nHarap tunggu..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Saran"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Baru"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Buka panel samping navigasi"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Tutup panel samping navigasi"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Label <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Label"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Akun"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Lihat riwayat bersama"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Acara dan pesan"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Acara"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Pesan"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Saran"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Pastikan kontak Anda teratur dan bermanfaat"</string>
+ <string name="undo" msgid="1425165101664071422">"Urungkan"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Telepon <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Telepon nomor telepon rumah"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Telepon nomor seluler"</string>
+ <string name="call_work" msgid="5328785911463744028">"Telepon nomor kantor"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Telepon faks kantor"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Telepon nomor faks rumah"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Telepon pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Telepon"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Hubungi panggilan balik"</string>
+ <string name="call_car" msgid="3280537320306436445">"Hubungi nomor telepon mobil"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Hubungi nomor telepon utama perusahaan"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Telepon ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Telepon nomor utama"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Telepon faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Telepon radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Telepon teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Telepon TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Telepon nomor seluler kantor"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Telepon pager kantor"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Telepon <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Telepon MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Telepon)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Kirim SMS ke <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS rumah"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS seluler"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS kantor"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS faks kantor"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS faks rumah"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS panggilan balik"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS mobil"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS nomor utama perusahaan"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS utama"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS seluler kantor"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Teks pager kantor"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Lakukan video call"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Hapus yang sering dihubungi?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Anda akan menghapus daftar yang sering dihubungi pada aplikasi Kontak dan Ponsel, serta memaksa aplikasi email untuk mempelajari preferensi penanganan dari awal."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Menghapus yang sering dihubungi..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Ada"</string>
+ <string name="status_away" msgid="1838861100379804730">"Tidak di Tempat"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Sibuk"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Lainnya"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktori"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Direktori kerja"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Semua kontak"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Kontak cepat untuk <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Tanpa nama)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Paling sering dihubungi"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Semua kontak dengan nomor telepon"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontak profil kerja"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Lihat pembaruan"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Perangkat"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nama panggilan"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nama depan"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nama belakang"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Awalan nama"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Nama tengah"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Akhiran nama"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nama fonetik"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nama depan fonetik"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Nama tengah fonetik"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nama belakang fonetik"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telepon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Alamat"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisasi"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Hubungan"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Tanggal khusus"</string>
+ <string name="sms" msgid="1756857139634224222">"Pesan teks"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Alamat"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Perusahaan"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Jabatan"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Catatan"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Khusus"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Situs web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Label"</string>
+ <string name="email_home" msgid="8573740658148184279">"Email ke rumah"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Email ke seluler"</string>
+ <string name="email_work" msgid="2807430017302722689">"Email ke kantor"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Kirim email ke <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Jalan"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Kota"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Neg. Bagian/Prov"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Kode pos"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Negara"</string>
+ <string name="map_home" msgid="1243547733423343982">"Tampilkan alamat rumah"</string>
+ <string name="map_work" msgid="1360474076921878088">"Tampilkan alamat kantor"</string>
+ <string name="map_other" msgid="3817820803587012641">"Lihat alamat"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Lihat alamat <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Ngobrol menggunakan AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Ngobrol menggunakan Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Ngobrol menggunakan Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Ngobrol menggunakan Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Ngobrol menggunakan QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Ngobrol menggunakan Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Ngobrol menggunakan ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Ngobrol menggunakan Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Ngobrol"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"hapus"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Tampilkan kolom nama lainnya"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ciutkan bidang nama"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Tampilkan kolom nama fonetik lainnya"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ciutkan bidang nama fonetik"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Luaskan"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Ciutkan"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Diperluas"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Diciutkan"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Semua kontak"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Yang berbintang"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Khusus"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontak"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Semua kontak lainnya"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Semua kontak"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Hapus grup sinkronisasi"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Tambahkan grup sinkronisasi"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Grup lainnya..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Menghapus \"<xliff:g id="GROUP">%s</xliff:g>\" dari sinkronisasi juga akan menghapus setiap kontak yang tidak berada dalam grup dari sinkronisasi."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Menyimpan opsi tampilan..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Tampilan khusus"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Simpan kontak yang diimpor ke:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Kartu SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontak</item>
+ <item quantity="one">1 kontak</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontak • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontak • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"File .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Tidak ada yang diimpor"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Impor kontak dari vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Batalkan impor <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan ekspor <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dpt membatalkan impor/ekspor vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Kesalahan tidak dikenal."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Tidak dapat memulai pengeskpor: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Tidak ada kontak yang dapat diekspor."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Anda telah menonaktifkan izin yang diperlukan."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Terjadi kesalahan saat ekspor: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Kesalahan I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memori tidak cukup. File mungkin terlalu besar."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format tidak didukung."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Selesai mengekspor <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Selesai mengekspor kontak."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Selesai mengekspor kontak, klik notifikasi untuk membagikan kontak."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Ketuk untuk membagikan kontak."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Mengekspor <xliff:g id="FILENAME">%s</xliff:g> dibatalkan."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Mengekspor kontak"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data kontak sedang diekspor."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tidak dapat memperoleh informasi basis data."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Tidak ada kontak yang dapat diekspor."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Penyusun vCard tidak memulai dengan semestinya."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Tak dapat mengekspor"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontak tidak diekspor.\nAlasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Mengimpor <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Tidak dapat membaca data vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Selesai mengimpor vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Mengimpor <xliff:g id="FILENAME">%s</xliff:g> dibatalkan"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> akan segera diimpor."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"File akan diimpor segera."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Permintaan impor vCard ditolak. Coba lagi nanti."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontak akan segera diekspor."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Permintaan ekspor vCard ditolak. Coba lagi nanti."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontak"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Menyimpan vCard ke cache untuk penyimpanan lokal sementara. Impor yang sebenarnya akan segera dimulai."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Tidak dapat mengimpor vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontak yang diterima lewat NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Menyimpan ke cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimpor <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Ekspor ke file .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Urutkan menurut"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nama fonetik"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Selalu tampilkan"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Sembunyikan jika kosong"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nama depan"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nama belakang"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format nama"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nama depan terlebih dulu"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nama belakang terlebih dulu"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Akun"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Akun default untuk kontak baru"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Info saya"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Siapkan profil Anda"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Tentang Kontak"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Bagikan kontak favorit"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Bagikan semua kontak"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal membagikan kontak."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Ekspor kontak"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Impor kontak dari"</string>
+ <string name="share_error" msgid="948429331673358107">"Kontak ini tidak dapat dibagi."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Tidak ada kontak untuk dibagikan."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontak untuk ditampilkan"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontak untuk ditampilkan"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Sesuaikan tampilan"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Simpan"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Telusuri kontak"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Impor"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Ekspor"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Nomor yang diblokir"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"melalui <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"hentikan penelusuran"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Hapus penelusuran"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Akun"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Selalu gunakan ini untuk telepon"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Telepon dengan catatan"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Ketik catatan untuk dikirim dengan panggilan telepon..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"KIRIM &amp; PANGGILAN"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versi build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Lisensi sumber terbuka"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detail lisensi untuk perangkat lunak sumber terbuka"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Kebijakan privasi"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Persyaratan layanan"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Lisensi sumber terbuka"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Gagal membuka url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> dicentang"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> tidak dicentang"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Lakukan video call"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Hapus"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> mnt <xliff:g id="SECONDS">%2$s</xliff:g> dtk"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> j <xliff:g id="MINUTES_1">%2$s</xliff:g> mnt <xliff:g id="SECONDS">%3$s</xliff:g> dtk"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pintasan ini telah dinonaktifkan"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontak telah dihapus"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Impor"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Pilih kontak"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Tidak ada kontak pada kartu SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontak sudah ada di daftar"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak SIM yang diimpor</item>
+ <item quantity="one">1 kontak SIM yang diimpor</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Gagal mengimpor kontak SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Impor dari SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Batal"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Sinkronisasi otomatis tidak aktif. Tap untuk mengaktifkan."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Tutup"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinkronisasi akun tidak aktif. Tap untuk mengaktifkan."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Aktifkan sinkronisasi otomatis?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Perubahan yang Anda lakukan pada semua aplikasi dan akun, tidak hanya Google Kontak, akan terus diperbarui antara web dan perangkat."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktifkan"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Tidak ada sambungan"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Tampilkan lebih banyak"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Selesai mengimpor kartu SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Impor gagal"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Tidak dapat mengimpor kontak dari kartu SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Mengimpor SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifikasi"</string>
</resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
deleted file mode 100644
index b980f7f02..000000000
--- a/res/values-is-rIS/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Tengiliðir"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Tengiliðir"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Skoða tengilið"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Breyta tengilið"</string>
- <string name="contactsList" msgid="8661624236494819731">"Tengiliðir"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Tengiliður"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Bein lína"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Bein skilaboð"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Veldu tengilið fyrir flýtileið"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Veldu númer til að hringja í"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Veldu númer til að senda skilaboð til"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Bæta við tengilið"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Velja tengilið"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Búa til nýjan tengilið"</string>
- <string name="starredList" msgid="4817256136413959463">"Stjörnumerktir"</string>
- <string name="frequentList" msgid="7154768136473953056">"Mikil samskipti"</string>
- <string name="strequentList" msgid="5640192862059373511">"Uppáhald"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Upplýsingar um tengilið"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Breyta tengilið"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Búa til tengilið"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Breyta hóp"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Búa til hóp"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Um"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Uppfærslur"</string>
- <string name="searchHint" msgid="8482945356247760701">"Leita í tengiliðum"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Skoða tengilið"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Bæta við uppáhald"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Fjarlægja úr uppáhaldi"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjarlægt úr uppáhaldi"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Bætt við uppáhald"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Breyta"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Eyða"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Skipta um mynd"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Setja á heimaskjáinn"</string>
- <string name="menu_call" msgid="3992595586042260618">"Hringja í tengilið"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Senda tengilið textaskilaboð"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Skipta upp"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Breyta"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Eyða"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Bæta tengilið við"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Bæta hóp við"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Skipta þessum tengilið upp í fleiri tengiliði?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Skipta upp"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Viltu vista breytingarnar sem þegar hafa verið gerðar og skipta þessum tengilið upp í fleiri tengiliði?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Vista og skipta upp"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Viltu vista breytingarnar sem þegar hafa verið gerðar og tengja þær við valinn tengilið?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Vista og tengja"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Tengja saman"</string>
- <string name="menu_save" msgid="1727844363591825909">"Vista"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Tengja tengiliði saman"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Veldu tengiliðinn sem þú vilt tengja við <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Sýna alla tengiliði"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Tillögur að tengiliðum"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Allir tengiliðir"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Tengiliðir tengdir saman"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">Tengiliðum eytt</item>
- <item quantity="other">Tengiliðum eytt</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Velja hringitón"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Öll símtöl í talhólf"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Ekki er hægt að eyða tengiliðum af skrifvörðum reikningum, en þá er hægt að fela."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Fela"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Tengiliðurinn sem á að eyða geymir upplýsingar af mörgum reikningum. Upplýsingar af skrifvörðum reikningum verða faldar, en þeim ekki eytt."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Þú þarft að velja a.m.k. tvo tengiliði til að tengja saman."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Tengja saman valda tengiliði?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Tengja saman"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Eyða þessum tengilið?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Eyða völdum tengiliðum?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Ekki er hægt að eyða tengiliðum af skrifvörðum reikningum, en þá er hægt að fela."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Þeir tengiliðir sem á að eyða geyma upplýsingar af mörgum reikningum. Upplýsingar af skrifvörðum reikningum verða faldar en þeim ekki eytt."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ef þessum tengilið er eytt verður upplýsingum eytt af mörgum reikningum."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Eyða þessum tengilið?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eyða"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Hætta við breytingar"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Tengiliðurinn er ekki til."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Tengilið bætt á heimaskjá."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bætt á heimaskjá."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Búa til nýjan tengilið"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Búa til nýjan tengilið"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Fyrirtæki"</item>
- <item msgid="7196592230748086755">"Athugasemd"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Engar myndir eru tiltækar í spjaldtölvunni."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Engar myndir eru tiltækar í símanum."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Mynd tengiliðar"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Sérsniðinn flokkur"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Senda símtöl beint í talhólfið"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Fjarlægja mynd"</string>
- <string name="noContacts" msgid="4955659076981974652">"Engir tengiliðir"</string>
- <string name="noGroups" msgid="8614664663561385253">"Engir hópar."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Þú þarft að vera með reikning til að geta búið til hópa."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Það er enginn í þessum hóp."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Breyttu hópnum til að bæta fólki við hann."</string>
- <string name="savingContact" msgid="4075751076741924939">"Vistar tengilið…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Tengiliður vistaður"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Tengiliðir aðskildir"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ekki tókst að vista breytingar á tengiliðnum."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ekki var hægt að skipta upp tengiliðnum."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ekki tókst að tengja tengilið."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Villa við að vista tengilið."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ekki var hægt að vista breytingar á mynd tengiliðar."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Hópur vistaður."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ekki tókst að vista breytingarnar á hópnum."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengiliður með símanúmer</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tengiliðir með símanúmer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Engir tengiliðir með símanúmer"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> fannst</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> fundust</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Engir tengiliðir"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> fannst</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> fundust</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Allir"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Uppáhald"</string>
- <string name="callBack" msgid="5498224409038809224">"Hringja til baka"</string>
- <string name="callAgain" msgid="3197312117049874778">"Hringja aftur"</string>
- <string name="returnCall" msgid="8171961914203617813">"Hringja til baka"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Bæta „<xliff:g id="EMAIL">%s</xliff:g>“ við tengiliði?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"mynd tengiliðar"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plús"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> tengiliðum"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Nöfn tengiliðanna þinna"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Ekkert forrit fannst sem getur framkvæmt þessa aðgerð."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Smelltu til að fara aftur á fyrri skjá"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Bæta við símanúmeri"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Bæta við netfangi"</string>
- <string name="missing_app" msgid="1466111003546611387">"Ekkert forrit fannst sem getur framkvæmt þessa aðgerð."</string>
- <string name="menu_share" msgid="943789700636542260">"Deila"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Bæta við tengiliði"</string>
- <string name="share_via" msgid="563121028023030093">"Deila tengilið í gegnum"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Búa til hóp undir reikningi"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Símtalsspjall"</string>
- <string name="video_chat" msgid="1872255818640336072">"Myndspjall"</string>
- <string name="connections" msgid="8098440723172028350">"Tengingar"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Bæta tengingu við"</string>
- <string name="recent" msgid="2659189233141493004">"Nýlegt"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nýlegar uppfærslur"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> tengiliður"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> reikningur"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ekki hægt að breyta úr þessu forriti."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ekki hægt að breyta í þessu tæki."</string>
- <string name="take_photo" msgid="7496128293167402354">"Taka mynd"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Taka nýja mynd"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Velja mynd"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Velja nýja mynd"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Verið er að uppfæra tengiliðalistann."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Leitar…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Sýna valda"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Sýna alla"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Velja alla"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Velja enga"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Bæta nýjum við"</string>
- <string name="add_organization" msgid="7311893231158291197">"Bæta fyrirtæki við"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dagsetning"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Heiti hóps"</string>
- <string name="change_photo" msgid="8530597935483526383">"Breyta"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Aðalmynd"</string>
- <string name="description_star" msgid="2605854427360036550">"uppáhald"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Breyta tengilið"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Viltu tengja saman núverandi tengilið og valda tengiliðinn?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Skipta yfir í að breyta völdum tengilið? Upplýsingarnar sem þú hefur sett inn nú þegar verða afritaðar."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Afrita í tengiliðina mína"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Bæta við tengiliði"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Skrá <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Sérsniðið"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Stillingar"</string>
- <string name="menu_settings" msgid="377929915873428211">"Stillingar"</string>
- <string name="menu_help" msgid="1680178646764069976">"Hjálp og ábendingar"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Birtingarvalkostir"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Símanúmer"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Bæta við tengiliði"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Bæta við tengilið"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Loka"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Hafa árið með"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Tengiliður"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Hleður…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Búa til nýjan tengilið"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Bæta reikningi við"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Flytja tengiliði inn"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Búa til nýjan hóp"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Búa til nýjan hóp"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> hópur</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> hópar</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eyða hópnum „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Tengiliðunum sjálfum verður ekki eytt.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> aðili úr <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> aðilar úr <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> aðili</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> aðilar</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Sláðu inn nafn tengiliðar áður en þú tengir hann saman við annan."</string>
- <string name="copy_text" msgid="3257145021583508761">"Afrita á klippiborð"</string>
- <string name="set_default" msgid="4417505153468300351">"Velja sem sjálfgefið"</string>
- <string name="clear_default" msgid="7193185801596678067">"Hreinsa sjálfgefið"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Texti afritaður"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Viltu fleygja breytingum og hætta að breyta?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Fleygja"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Breyta áfram"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Setja upp prófílinn minn"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Sláðu inn nafn tengiliðar"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Heiti hópsins"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Staðbundinn prófíll"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> prófíllinn minn"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Allir tengiliðir sýndir"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Ekki glata tengiliðunum þótt þú týnir símanum: Samstilltu þá við netþjónustu."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Bættu reikningi við"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Ekki verður tekið öryggisafrit af nýja tengiliðnum. Viltu bæta við reikningi sem tekur öryggisafrit af tengiliðum á netinu?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nýir tengiliðir verða vistaðir á <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Veldu sjálfgefinn reikning fyrir nýja tengiliði:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Bæta tengilið við"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Breyta tengilið"</string>
- <string name="keep_local" msgid="1258761699192993322">"Halda í tækinu"</string>
- <string name="add_account" msgid="8201790677994503186">"Bæta reikningi við"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Bæta nýjum reikningi við"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Flytja út gagnagrunnsskrár"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"bæta nýjum tengilið við"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Sjá meira"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Minnka"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Sjá allt"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Nýlegt"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Um"</string>
- <string name="send_message" msgid="8938418965550543196">"Senda skilaboð"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Býr til afrit til einkanota…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Í gær"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Á morgun"</string>
- <string name="today" msgid="8041090779381781781">"Í dag"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Í dag klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Á morgun klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g> kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Ónefndur viðburður)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Nota"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Spjall"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Fyrirtæki"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Gælunafn"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Athugasemd"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Vefsvæði"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Viðburður"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Tengsl"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Reikningur"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Nafn"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Netfang"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Sími"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Ljósmynd"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Smelltu til að stækka tengiliðaritilinn."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Smelltu til að draga saman tengiliðaritilinn."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"leiðarlýsing að stað"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nýleg sms-skilaboð. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. smelltu til að svara"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"móttekið"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"hringt"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ósvarað"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nýlegt símtal. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. smelltu til að hringja til baka"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Þú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts virkar betur ef þú slærð Hangouts auðkenni viðkomandi inn í netfangsreitinn eða símanúmersreitinn."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Fleiri reitir"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Skipta um mynd"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Mistókst að opna ritilinn."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Vista í"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Vistar núna á <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Ýttu tvisvar til að velja annan reikning."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Tengdir tengiliðir (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Tengdir tengiliðir (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> tengdir tengiliðir"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"TENGJA TENGILIÐI SAMAN"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"HÆTTA VIÐ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> möguleg tvítekning</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mögulegar tvítekningar</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengdur tengiliður</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tengdir tengiliðir</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Þessi tengiliður"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mögulegar tvítekningar"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Hugsanlegt er að þessir tengiliðir séu sama manneskjan. Þú getur tengt þá saman í einn tengilið."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Samtengdir tengiliðir"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Af reikningunum þínum"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Taka mynd"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Allar myndir"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Velja mynd"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Af <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Eyða <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eyða <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Mynd frá <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ekki valin"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Mynd frá <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>valin"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Mynd af óþekktum reikningi ekki valin"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Mynd af óþekktum reikningi valin"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Verið er að uppfæra tengiliðalistann í samræmi við nýja tungumálið.\n\nAugnablik..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Númer á bannlista"</string>
-</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
new file mode 100644
index 000000000..c94e07c07
--- /dev/null
+++ b/res/values-is/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Tengiliðir"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Tengiliðir"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Bæta tengilið við"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Tengiliður"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Bein lína"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Bein skilaboð"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Veldu tengilið"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Bæta við tengilið"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Velja tengilið"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Velja"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Búa til nýjan tengilið"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Leita í tengiliðum"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Bæta við uppáhald"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Fjarlægja úr uppáhaldi"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjarlægt úr uppáhaldi"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Bætt við uppáhald"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Breyta"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Eyða"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Skipta um mynd"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Búa til flýtileið"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Skipta upp"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Fjarlægja tengiliði"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Endurnefna flokk"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Eyða flokki"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Bæta tengilið við"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Velja tengiliði"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Bæta tengiliðum við"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Taka úr flokki"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Búa til flokk"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Skipta þessum tengilið upp í fleiri tengiliði?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Skipta upp"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Viltu vista breytingarnar sem þegar hafa verið gerðar og skipta þessum tengilið upp í fleiri tengiliði?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Vista og skipta upp"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Viltu vista breytingarnar sem þegar hafa verið gerðar og tengja þær við valinn tengilið?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Vista og tengja"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Tengir"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Aftengir"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Tengja saman"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Skoða tengda tengiliði"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Vista"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Tengja tengiliði saman"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Veldu tengiliðinn sem þú vilt tengja við <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Tillögur að tengiliðum"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Allir tengiliðir"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> tengt"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Tengiliðir tengdir saman"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> eytt"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> og <xliff:g id="NAME_1">%2$s</xliff:g> eytt"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… eytt"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">Tengiliðum eytt</item>
+ <item quantity="other">Tengiliðum eytt</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> tengiliður</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> tengiliðir</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> tengiliður · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> tengiliðir · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Af Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Af <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Velja hringitón"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Senda í talhólf"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ekki senda í talhólf"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Þessi tengiliður er skrifvarinn. Ekki er hægt að eyða honum, en þú getur falið hann."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Fela tengilið"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Skrifvarðir reikningar á þessum tengilið verða faldir en þeim verður ekki eytt."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Eyða þessum tengilið?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Eyða völdum tengiliðum?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Ekki er hægt að eyða tengiliðum af skrifvörðum reikningum, en þá er hægt að fela."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Þeir tengiliðir sem á að eyða geyma upplýsingar af mörgum reikningum. Upplýsingar af skrifvörðum reikningum verða faldar en þeim ekki eytt."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ef þessum tengilið er eytt verður upplýsingum eytt af mörgum reikningum."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Eyða þessum tengilið?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eyða"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Tengiliðurinn er ekki til."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Tengilið bætt á heimaskjá."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bætt á heimaskjá."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Engar myndir eru tiltækar á tækinu."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Mynd tengiliðar"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Sérsniðinn flokkur"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Fjarlægja mynd"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Listinn yfir tengiliði er tómur"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Engir tengiliðir í þessum flokki"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Engir tengiliðir á þessum reikningi"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Listinn yfir tengiliði er tómur"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Búið að vista <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Tengiliður vistaður"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Tengiliðir aðskildir"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ekki tókst að vista breytingar á tengiliðnum"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ekki var hægt að skipta upp tengiliðnum"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ekki tókst að tengja tengilið"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Villa við að vista tengilið"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ekki var hægt að vista breytingar á mynd tengiliðar"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ekki tókst að hlaða flokk"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Flokki eytt"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Flokkur búinn til"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ekki tókst að stofna flokkinn"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Flokkur uppfærður"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjarlægðir úr flokki"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Bætt við flokk"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ekki tókst að vista breytingar á flokki"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Þessi flokkur er þegar til"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Sumir tengiliðir eru ekki með netfang."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Sumir tengiliðir eru ekki með símanúmer."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Senda tölvupóst"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Senda skilaboð"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Velja tengiliði"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Senda"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Engir tengiliðir"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Bæta „<xliff:g id="EMAIL">%s</xliff:g>“ við tengiliði?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Nöfn tengiliðanna þinna"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Smelltu til að fara aftur á fyrri skjá"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Bæta við símanúmeri"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Bæta við netfangi"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Ekkert forrit fannst sem getur framkvæmt þessa aðgerð."</string>
+ <string name="menu_share" msgid="943789700636542260">"Deila"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Bæta við tengiliði"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Bæta við"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Deila tengiliðum í gegnum</item>
+ <item quantity="other">Deila tengiliðum í gegnum</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Veldu reikning"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Búa til flokk"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Endurnefna flokk"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Heiti flokks"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Heiti flokks"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Símtalsspjall"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Myndspjall"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> tengiliður"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> reikningur"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Taka mynd"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Taka nýja mynd"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Velja mynd"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Velja nýja mynd"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Leitar…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dagsetning"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Flokkur"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Hætta við"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Til baka"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"loka"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Skipta yfir í að breyta völdum tengilið? Upplýsingarnar sem þú hefur sett inn nú þegar verða afritaðar."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Skrá <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Stillingar"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Stillingar"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Hjálp og ábendingar"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Símanúmer"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Bæta við tengiliði"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Loka"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Hafa árið með"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Bæta reikningi við"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Flytja inn"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Búa til nýjan…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Eyða flokknum „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Tengiliðunum sjálfum verður ekki eytt.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Sláðu inn nafn tengiliðar áður en þú tengir hann saman við annan."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Afrita á klippiborð"</string>
+ <string name="set_default" msgid="4417505153468300351">"Velja sem sjálfgefið"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Hreinsa sjálfgefið"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Texti afritaður"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Fleygja breytingum?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Fleygja"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Hætta við"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Fleygja sérstillingum?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Leita í tengiliðum"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Fjarlægja tengiliði"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Staðbundinn prófíll"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> prófíllinn minn"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Gefðu þér tíma til að bæta reikningi við sem mun taka afrit af tengiliðunum þínum yfir á Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nýir tengiliðir verða vistaðir á <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Veldu sjálfgefinn reikning fyrir nýja tengiliði:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Búa til nýjan tengilið"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Breyta tengilið"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Aðeins skoðun"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Veldu tengilið til að breyta"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Tengdir tengiliðir"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Bæta við"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Aftengja"</string>
+ <string name="add_account" msgid="8201790677994503186">"Bæta reikningi við"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Bæta nýjum reikningi við"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Flytja út gagnagrunnsskrár"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Búa til nýjan tengilið"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Sjá meira"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Minnka"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Nýlegt"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Um"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Býr til afrit til einkanota…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Á morgun"</string>
+ <string name="today" msgid="8041090779381781781">"Í dag"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Í dag klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Á morgun klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Ónefndur viðburður)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Nota"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Spjall"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Fyrirtæki"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Gælunafn"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Athugasemd"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Vefsvæði"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Viðburður"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Tengsl"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Nafn"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Netfang"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Sími"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"leiðarlýsing að stað"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nýleg sms-skilaboð. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. smelltu til að svara"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"móttekið"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"hringt"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ósvarað"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nýlegt símtal. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. smelltu til að hringja til baka"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Þú: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Fleiri reitir"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Skipta um mynd tengiliðar"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Setja inn mynd tengiliðar"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Mynd tengiliðar"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Mistókst að opna ritilinn."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Vista í"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ekki er hægt að breyta tengiliðaupplýsingum af <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"TENGJA TENGILIÐI SAMAN"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"HÆTTA VIÐ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Þessi tengiliður"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mögulegar tvítekningar"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Hugsanlegt er að þessir tengiliðir séu sama manneskjan. Þú getur tengt þá saman í einn tengilið."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Eyða <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eyða <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Tillögur"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nýtt"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Opna yfirlitsskúffu"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Loka yfirlitsskúffu"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Flokkurinn <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Flokkar"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Reikningar"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Sjá sameiginlegan feril ykkar"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Viðburðir og skilaboð"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Viðburðir"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Skilaboð"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Tillögur"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Skipuleggðu og fullnýttu þér tengiliðina þína"</string>
+ <string name="undo" msgid="1425165101664071422">"Afturkalla"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Hringja í <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Hringja heim"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Hringa í farsíma"</string>
+ <string name="call_work" msgid="5328785911463744028">"Hringja í vinnusíma"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Hringja í faxnúmer vinnu"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Hringja í faxnúmer heima"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Hringja í símboða"</string>
+ <string name="call_other" msgid="8563753966926932052">"Hringja"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Hringja svarhringingu"</string>
+ <string name="call_car" msgid="3280537320306436445">"Hringja í bílasíma"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Hringja í aðalsíma fyrirtækis"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Hringja í ISDN-númer"</string>
+ <string name="call_main" msgid="6082900571803441339">"Hringja í aðalnúmer"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Hringja í faxnúmer"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Hringja í talstöð"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Hringja í telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Hringja í fjarrita"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Hringja í vinnufarsíma"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Hringja í vinnusímboða"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Hringja í <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Hringja í MMS-númer"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (hringja)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Senda <xliff:g id="CUSTOM_LABEL">%s</xliff:g> SMS-skilaboð"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Senda SMS-skilaboð heim"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Senda SMS-skilaboð í farsíma"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Senda SMS-skilaboð í vinnusíma"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Senda SMS-skilaboð í faxnúmer vinnu"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Senda SMS-skilaboð í faxnúmer heima"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Senda SMS-skilaboð í símboða"</string>
+ <string name="sms_other" msgid="806127844607642331">"Senda SMS-skilaboð"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Senda SMS-skilaboð í svarhringingarnúmer"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Senda SMS-skilaboð í bílasíma"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Senda SMS-skilaboð í aðalnúmer fyrirtækis"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Senda SMS-skilaboð í ISDN-númer"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Senda SMS-skilaboð í aðalnúmer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Senda SMS-skilaboð í faxnúmer"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Senda SMS-skilaboð í talstöð"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Senda SMS-skilaboð í telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Senda SMS-skilaboð til fjarrita"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Senda SMS-skilaboð í vinnufarsíma"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Senda SMS-skilaboð í vinnusímboða"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Senda SMS-skilaboð til <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Senda SMS-skilaboð í MMS-númer"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (senda SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Hringja myndsímtal"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Hreinsa mest notuðu tengiliði?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Þetta hreinsar tengiliðina sem þú hefur mest samskipti við úr forritunum Tengiliðir og Sími og þvingar tölvupóstforrit til að læra upp á nýtt hvernig þú notar netföng."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Hreinsar mest notuðu tengiliði…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Laus"</string>
+ <string name="status_away" msgid="1838861100379804730">"Í burtu"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Upptekin(n)"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Annað"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Skrá"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Vinnuskrá"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Allir tengiliðir"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Flýtitengiliður fyrir <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Nafn vantar)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Oft haft samband við"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Allir tengiliðir með símanúmer"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Tengiliðir í vinnusniði"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Skoða uppfærslur"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Tæki"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nafn"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Gælunafn"</string>
+ <string name="name_given" msgid="4280790853455320619">"Fornafn"</string>
+ <string name="name_family" msgid="7466985689626017037">"Eftirnafn"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Forskeyti nafns"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Millinafn"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Viðskeyti nafns"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Hljóðrétt nafn"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Hljóðritað fornafn"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Hljóðrétt millinafn"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Hljóðritað eftirnafn"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Sími"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Netfang"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Heimilisfang"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Spjall"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Fyrirtæki"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Tengsl"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Sérstök dagsetning"</string>
+ <string name="sms" msgid="1756857139634224222">"Senda SMS-skilaboð"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Heimilisfang"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Fyrirtæki"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titill"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Glósur"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Sérsniðið"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Vefsvæði"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Flokkar"</string>
+ <string name="email_home" msgid="8573740658148184279">"Senda tölvupóst heim"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Senda tölvupóst í fartæki"</string>
+ <string name="email_work" msgid="2807430017302722689">"Senda tölvupóst í vinnu"</string>
+ <string name="email_other" msgid="3454004077967657109">"Senda tölvupóst"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Senda <xliff:g id="CUSTOM_LABEL">%s</xliff:g> tölvupóst"</string>
+ <string name="email" msgid="5668400997660065897">"Netfang"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Gata"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Borg"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Ríki"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Póstnúmer"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Skoða heimilisfang"</string>
+ <string name="map_work" msgid="1360474076921878088">"Skoða póstfang vinnu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Skoða póstfang"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Skoða heimilisfang <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Spjalla með AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Spjalla með Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Spjalla með Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Spjalla með Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Spjalla með QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Spjalla með Google spjalli"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Spjalla með ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Spjalla með Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Spjalla"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"eyða"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Sýna fleiri nafnareiti"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Minnka nafnareiti"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Sýna fleiri nafnareiti með hljóðritun"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Minnka nafnareiti með hljóðritun"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Stækka"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Minnka"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Stækkað"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Minnkað"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Allir tengiliðir"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjörnumerktir"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Sérsníða"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Tengiliður"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Allir aðrir tengiliðir"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Allir tengiliðir"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Fjarlægja samstillingarhóp"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Bæta við samstillingarhóp"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Fleiri hópar…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ef hópurinn „<xliff:g id="GROUP">%s</xliff:g>“ er fjarlægður úr samstillingu verður samstillingu einnig hætt á öllum tengiliðum sem ekki eru í hóp."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Vistar birtingarvalkosti…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Sérsniðið yfirlit"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Vista innflutta tengiliði á:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-korti"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d tengiliður</item>
+ <item quantity="other">%1$d tengiliðir</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> tengiliður • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> tengiliðir • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-skrá"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ekkert til að flytja inn"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Flytja inn tengiliði af vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Hætta við innflutning á <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Hætta við útflutning á <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Ekki tókst að hætta við flutning vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Óþekkt villa."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ekki tókst að opna „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ekki tókst að ræsa útflutningsverkfærið: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Engir tengiliðir sem flytja má út."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Þú hefur gert nauðsynlegt leyfi óvirkt."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Villa kom upp við útflutninginn: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Inntaks-/úttaksvilla"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ekki nægt minni. Skráin kann að vera of stór."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ekki er stuðningur við sniðið."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Útflutningi á <xliff:g id="FILENAME">%s</xliff:g> lokið."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Útflutningi tengiliða lokið."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Útflutningi tengiliða lokið, smelltu á tilkynninguna til að deila tengiliðum."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Ýttu til að deila tengiliðum."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Hætt við útflutning á <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Flytur út tengiliðagögn"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Verið er að flytja út tengiliðagögn."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ekki tókst að sækja upplýsingar úr gagnagrunni."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Engir tengiliðir sem flytja má út."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Ræsing vCard-skrifviðmótsins tókst ekki."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Útflutningur mistókst"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Tengiliðagögn voru ekki flutt út.\nÁstæða: „<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Flytur inn <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ekki tókst að lesa gögn úr vCard-skrá"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Innflutningi lokið á vCard-skránni <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Hætt við innflutning á <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> verður flutt inn innan skamms."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Skráin verður flutt inn innan skamms."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Beiðni um innflutning vCard-skrár hafnað. Reyndu aftur síðar."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Tengiliðir verða fluttir út eftir smástund."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Beiðni um útflutning vCard-skrár hafnað. Reyndu aftur síðar."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"tengiliður"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Setur vCard í skyndiminni í staðbundinni geymslu. Raunverulegur innflutningur hefst innan skamms."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Ekki tókst að flytja vCard-skrá inn."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Tengiliður móttekinn um NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Setur í skyndiminni"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Flytur inn <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Flytja út í .vcf-skrá"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Raða eftir"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Hljóðrétt nafn"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Sýna alltaf"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Fela ef þetta er autt"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornafn"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Eftirnafn"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Nafnasnið"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Fornafn fyrst"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Eftirnafn fyrst"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Reikningar"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Sjálfgefinn reikningur fyrir nýja tengiliði"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mínar upplýsingar"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Settu upp snið"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Um Tengiliði"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Deila eftirlætistengiliðum"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Deila öllum tengiliðum"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Ekki tókst að deila tengiliðum."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Flytja út tengiliði"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Flytja inn tengiliði af"</string>
+ <string name="share_error" msgid="948429331673358107">"Ekki er hægt að deila þessum tengilið."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Engir tengiliðir til að deila."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Tengiliðir til að birta"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Tengiliðir til að birta"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Sérsníða yfirlit"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Vista"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Leita að tengiliðum"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Uppáhald"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Flytja inn"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Flytja út"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Númer á bannlista"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"í gegnum <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> í gegnum <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"hætta leit"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Hreinsa leit"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Reikningur"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Nota þetta alltaf fyrir símtöl"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Símtal með texta"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Sláðu inn texta til að senda með símtalinu..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SENDA OG HRINGJA"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Útgáfa smíðar"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Leyfi opins kóða"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Leyfisupplýsingar fyrir hugbúnað með opnum kóða"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Persónuverndarstefna"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Þjónustuskilmálar"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Leyfi opins kóða"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Ekki tókst að opna slóðina."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Merkt við <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Ekki merkt við <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Hringja myndsímtal"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Eyða"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Þrípunktur"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> m. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> klst. <xliff:g id="MINUTES_1">%2$s</xliff:g> mín. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Þessi flýtileið hefur verið gerð óvirk"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Tengiliður var fjarlægður"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Flytja inn"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Velja tengiliði"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Engir tengiliðir á SIM-kortinu"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Tengiliðurinn er þegar á listanum þínum"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> SIM-tengiliður fluttur inn</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-tengiliðir fluttir inn</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ekki tókst að flytja inn SIM-tengiliðina"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Flytja inn af SIM-korti"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Hætta við"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Slökkt er á sjálfvirkri samstillingu. Ýttu til að kveikja á henni."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Hunsa"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Slökkt er á samstillingu reiknings. Ýttu til að kveikja á henni."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Kveikja á sjálfvirkri samstillingu?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Breytingar sem þú gerir á öllum forritum og reikningum, ekki bara Google tengiliðum, verða uppfærðar á netinu og í tækjunum þínum."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Kveikja"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Engin tenging"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Sýna meira"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Lauk við að flytja inn SIM-kort"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Innflutningur mistókst"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Gat ekki flutt inn tengiliði af SIM-korti"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Flytur inn SIM-kort"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Tilkynningar"</string>
+</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 85b83a715..65d010145 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contatti"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contatti"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Visualizza contatto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Modifica contatto"</string>
<string name="contactsList" msgid="8661624236494819731">"Contatti"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Aggiungi contatto"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contatto"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Composizione diretta"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Messaggio diretto"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Scegli una scorciatoia contatto"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Scegli un numero da chiamare"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Scegli un numero a cui inviare il messaggio"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Scegli contatto"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Aggiungi al contatto"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Scegli un contatto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleziona"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crea nuovo contatto"</string>
- <string name="starredList" msgid="4817256136413959463">"Speciali"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequenti"</string>
- <string name="strequentList" msgid="5640192862059373511">"Preferiti"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Dettagli contatto"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Modifica contatto"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Crea contatto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Modifica gruppo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Crea gruppo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Informazioni"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Aggiornamenti"</string>
<string name="searchHint" msgid="8482945356247760701">"Cerca contatti"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Visualizza contatto"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Aggiungi ai preferiti"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Rimuovi dai preferiti"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Rimosso dai preferiti"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Modifica"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Elimina"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Cambia foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Aggiungi a schermata Home"</string>
- <string name="menu_call" msgid="3992595586042260618">"Chiama"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Invia SMS"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crea scorciatoia"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Scollega"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Modifica"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Elimina"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Aggiungi contatto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Aggiungi gruppo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Rimuovi contatti"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Rinomina etichetta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Elimina etichetta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Aggiungi contatto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleziona contatti"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Aggiungi contatti"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Rimuovi da etichetta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crea etichetta"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Scollegare questo contatto in diversi contatti?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Scollega"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vuoi salvare le modifiche già apportate e scollegare il contatto in diversi contatti?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salva e scollega"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vuoi salvare le modifiche già apportate e collegare questo contatto con il contatto selezionato?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salva e collega"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Collegamento"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Scollegamento"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Collega"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Visualizza contatti collegati"</string>
<string name="menu_save" msgid="1727844363591825909">"Salva"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Collega contatti"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Scegli il contatto che desideri collegare a <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostra tutti i contatti"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatti suggeriti"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tutti i contatti"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> collegati"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatti collegati"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> eliminato"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g> eliminati"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… eliminati"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contatti eliminati</item>
<item quantity="one">Contatto eliminato</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatti</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contatto</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatti · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contatto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Di Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Da <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Imposta suoneria"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tutte le chiamate a segreteria"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"I contatti degli account di sola lettura non possono essere eliminati, ma possono essere nascosti."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Nascondi"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Il contatto da eliminare contiene dati di più account. I dati degli account di sola lettura verranno nascosti, non eliminati."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Devi selezionare almeno due contatti da collegare."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Collegare i contatti selezionati?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Collega"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Indirizza a segreteria"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Non indirizzare a segreteria"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Il contatto è di solo lettura. Non puoi eliminarlo, ma puoi nasconderlo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Nascondi contatto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Gli account di sola lettura in questo contatto verranno nascosti, non eliminati."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Eliminare questo contatto?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Eliminare i contatti selezionati?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"I contatti degli account di sola lettura non possono essere eliminati, ma possono essere nascosti."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"L\'eliminazione di questo contatto comporterà l\'eliminazione di dati da più account."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Eliminare questo contatto?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Elimina"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Ignora modifiche"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Contatto non esistente."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contatto aggiunto alla schermata Home."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> aggiunto alla schermata Home."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crea nuovo contatto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Crea nuovo contatto"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizzazione"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nessuna foto disponibile sul tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nessuna foto disponibile."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Nessuna foto disponibile sul dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto del contatto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome etichetta personalizzata"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Inoltra chiamate direttamente alla segreteria"</string>
<string name="removePhoto" msgid="4898105274130284565">"Rimuovi foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nessun contatto"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nessun gruppo."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Per creare gruppi è necessario un account."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nessuna persona in questo gruppo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Per aggiungerne qualcuno, modifica il gruppo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Salvataggio contatto..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"L\'elenco dei contatti è vuoto"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nessun contatto con questa etichetta"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nessun contatto in questo account"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"L\'elenco dei contatti è vuoto"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> - salvato"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contatto salvato"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatti scollegati"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Salvataggio delle modifiche ai contatti non riuscito."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Impossibile scollegare il contatto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Impossibile collegare il contatto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Errore durante il salvataggio del contatto."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Impossibile salvare le modifiche alle foto dei contatti."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Gruppo salvato."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Salvataggio delle modifiche ai gruppi non riuscito."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti con numero di telefono</item>
- <item quantity="one">1 contatto con numero di telefono</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nessun contatto con numeri di telefono"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> trovati</item>
- <item quantity="one">1 trovato</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Impossibile salvare le modifiche al contatto"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Impossibile scollegare il contatto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Impossibile collegare il contatto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore durante il salvataggio del contatto"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossibile salvare le modifiche alla foto del contatto"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossibile caricare l\'etichetta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etichetta eliminata"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etichetta creata"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossibile creare l\'etichetta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etichetta aggiornata"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Rimossa da etichetta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Aggiunti all\'etichetta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Impossibile salvare le modifiche all\'etichetta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"L\'etichetta esiste già"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Alcuni contatti non hanno email."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Alcuni contatti non hanno numeri di telefono."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Invia email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Invia messaggio"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Scegli contatti"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Invia"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nessun contatto"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> trovati</item>
- <item quantity="one">1 trovato</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tutti"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Preferiti"</string>
- <string name="callBack" msgid="5498224409038809224">"Richiama"</string>
- <string name="callAgain" msgid="3197312117049874778">"Richiama"</string>
- <string name="returnCall" msgid="8171961914203617813">"Chiama numero"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungi \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto contatto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"più"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"I nomi dei tuoi contatti"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nessuna applicazione trovata per gestire questa azione."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fai clic per tornare alla schermata precedente"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Aggiungi numero di telefono"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Aggiungi email"</string>
<string name="missing_app" msgid="1466111003546611387">"Nessuna applicazione trovata per gestire questa azione."</string>
<string name="menu_share" msgid="943789700636542260">"Condividi"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Aggiungi a contatti"</string>
- <string name="share_via" msgid="563121028023030093">"Condividi contatto tramite"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Crea un gruppo nell\'account"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Aggiungi"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Condividi contatti tramite</item>
+ <item quantity="one">Condividi contatto tramite</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Scegli account"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Crea etichetta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Rinomina etichetta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nome etichetta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etichetta"</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat vocale"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat video"</string>
- <string name="connections" msgid="8098440723172028350">"Connessioni"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Aggiungi connessione"</string>
- <string name="recent" msgid="2659189233141493004">"Recenti"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Aggiornamenti recenti"</string>
<string name="account_type_format" msgid="718948015590343010">"Contatto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Account <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Non modificabile da questa applicazione."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Non modificabile su questo dispositivo."</string>
<string name="take_photo" msgid="7496128293167402354">"Scatta foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Scatta nuova foto"</string>
<string name="pick_photo" msgid="2129509985223564942">"Scegli foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Seleziona nuova foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Elenco contatti in fase di aggiornamento."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Ricerca..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostra selezionati"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostra tutto"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Seleziona tutto"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Deseleziona tutto"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Aggiungi nuovo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Aggiungi organizzazione"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nome del gruppo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Modifica"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principale"</string>
- <string name="description_star" msgid="2605854427360036550">"preferiti"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Modifica contatto"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Collegare il contatto corrente al contatto selezionato?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Annulla"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Indietro"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"chiudi"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Passare alla modifica del contatto selezionato? Le informazioni inserite finora verranno copiate."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copia nei miei contatti"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Aggiungi ai contatti personali"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizza"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Impostazioni"</string>
<string name="menu_settings" msgid="377929915873428211">"Impostazioni"</string>
<string name="menu_help" msgid="1680178646764069976">"Guida e feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opzioni di visualizzazione"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Numero di telefono"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Aggiungi a contatti"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Aggiungi al contatto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Chiudi"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Includi l\'anno"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contatto"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Caricamento..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea nuovo contatto"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Aggiungi account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importa contatti"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Crea nuovo gruppo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Crea nuovo gruppo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> gruppi</item>
- <item quantity="one">1 gruppo</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eliminare il gruppo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (I contatti non verranno eliminati)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persone di <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona di <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persone</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persona</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importa"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Crea nuova…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Eliminare l\'etichetta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? I contatti non verranno eliminati."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Inserisci il nome del contatto prima di collegarlo a un altro contatto."</string>
<string name="copy_text" msgid="3257145021583508761">"Copia negli appunti"</string>
<string name="set_default" msgid="4417505153468300351">"Imposta come predefinito"</string>
<string name="clear_default" msgid="7193185801596678067">"Cancella impostazione predefinita"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Testo copiato"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Annullare le modifiche e uscire dalla modalità di modifica?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Ignorare le modifiche?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignora"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continua la modifica"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Imposta il mio profilo"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Digita il nome della persona"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nome del gruppo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annulla"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Ignorare le personalizzazioni?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Cerca contatti"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Rimuovi contatti"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Il mio profilo locale"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Il mio profilo <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Sono visualizzati tutti i contatti"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tieni al sicuro i tuoi contatti anche se perdi il telefono: sincronizzali con un servizio online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Aggiungi un account"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Non verrà effettuato il backup del nuovo contatto. Aggiungere un account che effettua il backup dei contatti online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minuto del tuo tempo per aggiungere un account per eseguire il backup dei tuoi contatti in Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"I nuovi contatti verranno salvati nell\'account <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Scegli un account predefinito per i nuovi contatti:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Nuovo contatto"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Crea nuovo contatto"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Modifica contatto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Memorizza in locale"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Solo visualizzazione"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Scegli contatto da modificare"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contatti collegati"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Aggiungi"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Scollega"</string>
<string name="add_account" msgid="8201790677994503186">"Aggiungi account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Aggiungi nuovo account"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Esporta file database"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"aggiungi nuovo contatto"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Crea nuovo contatto"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Mostra altro"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mostra meno"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Mostra tutto"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recenti"</string>
<string name="about_card_title" msgid="2920942314212825637">"Informazioni"</string>
- <string name="send_message" msgid="8938418965550543196">"Invia messaggio"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Creazione di una copia personale..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ieri"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Creazione di una copia personale..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Domani"</string>
<string name="today" msgid="8041090779381781781">"Oggi"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Oggi alle ore <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Domani alle ore <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento senza titolo)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Imposta"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Sito web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relazione"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefono"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic per espandere l\'editor contatti."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic per comprimere l\'editor contatti."</string>
<string name="content_description_directions" msgid="2686791825798189335">"indicazioni per la posizione"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic per rispondere"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic per rispondere"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"in arrivo"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"in uscita"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"senza risposta"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"chiamata recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic per richiamare"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"chiamata recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic per richiamare"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Tu: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funziona meglio se inserisci l\'identificatore Hangouts della persona nel campo dell\'indirizzo email o del numero di telefono."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Altri campi"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Cambia foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Impossibile aprire l\'editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvataggio in:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"I contatti vengono salvati in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tocca due volte per scegliere un altro account."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Contatti collegati (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Contatto collegato</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatti collegati"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Altri campi"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambia foto del contatto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Aggiungi foto al contatto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto del contatto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Impossibile aprire l\'editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvataggio in:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Le informazioni di contatto di <xliff:g id="ACCOUNT">%s</xliff:g> non sono modificabili"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"COLLEGA CONTATTI"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULLA"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possibili duplicati</item>
- <item quantity="one">1 possibile duplicato</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti collegati</item>
- <item quantity="one">1 contatto collegato</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Questo contatto"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possibili duplicati"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Questi contatti potrebbero riguardare la stessa persona. Puoi collegarli per creare un unico contatto."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contatti collegati"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Dei tuoi account"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Scatta una foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Tutte le foto"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Scegli foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Da <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Elimina <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Elimina <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Elimina <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto di <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> non selezionata"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto di <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> selezionata"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto di un account sconosciuto non selezionata"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto di un account sconosciuto selezionata"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"L\'elenco contatti verrà aggiornato per rispecchiare il cambio di lingua.\n\nAttendi..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggerimenti"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuovo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Apri riquadro di navigazione a scomparsa"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Chiudi riquadro navigazione a scomparsa"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etichetta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etichette"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Account"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Visualizza la cronologia insieme"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventi e messaggi"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventi"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Messaggi"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggerimenti"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantieni i contatti organizzati e utili"</string>
+ <string name="undo" msgid="1425165101664071422">"Annulla"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Chiama <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Chiama casa"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Chiama cellulare"</string>
+ <string name="call_work" msgid="5328785911463744028">"Chiama n. lavoro"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Chiama fax lavoro"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Chiama n. fax casa"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Chiama cercapersone"</string>
+ <string name="call_other" msgid="8563753966926932052">"Chiama"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Chiama n. callback"</string>
+ <string name="call_car" msgid="3280537320306436445">"Chiama n. automobile"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Chiama n. azienda, principale"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Chiama n. ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Chiama n. principale"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Chiama n. fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Chiama radiotelefono"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Chiama telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Chiama n. TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Chiama cellulare lavoro"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Chiama cercapersone lavoro"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Chiama <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Chiama n. MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Chiama)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Invia un SMS a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Invia SMS a n. casa"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Invia SMS a cellulare"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Invia SMS a n. lavoro"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Invia SMS a fax lavoro"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Invia SMS a n. fax casa"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Invia SMS a n. cercapersone"</string>
+ <string name="sms_other" msgid="806127844607642331">"Invia SMS a n."</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Invia SMS a n. callback"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Invia SMS a n. automobile"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Invia SMS a n. azienda, principale"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Invia SMS a n. ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Invia SMS a n. principale"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Invia SMS a n. fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Invia SMS a radiotelefono"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Invia SMS a n. telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Invia SMS a n. TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Invia SMS a cellulare lavoro"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS a cercapersone lavoro"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Invia testo a <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Invia SMS a n. MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Invia SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Avvia videochiamata"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Cancellare contattati di frequente?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Verrà cancellato l\'elenco dei contatti frequenti nelle app Contatti e Telefono e le app email dovranno apprendere da zero le tue preferenze di comunicazione."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Cancellazione contattati di frequente…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponibile"</string>
+ <string name="status_away" msgid="1838861100379804730">"Assente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Occupato"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Altro"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directory di lavoro"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tutti i contatti"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contatto rapido per <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Nessun nome)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contattati spesso"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Tutti i contatti con numeri di telefono"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatti del profilo di lavoro"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Visualizza aggiornamenti"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nome"</string>
+ <string name="name_family" msgid="7466985689626017037">"Cognome"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefisso nome"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Secondo nome"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Suffisso nome"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nome fonetico"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nome fonetico"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Secondo nome fonetico"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Cognome fonetico"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefono"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Indirizzo"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizzazione"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relazione"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data speciale"</string>
+ <string name="sms" msgid="1756857139634224222">"Messaggio di testo"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Indirizzo"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Società"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titolo"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Note"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizzato"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Sito web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etichette"</string>
+ <string name="email_home" msgid="8573740658148184279">"Invia email a ind. casa"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Invia email a ind. cellulare"</string>
+ <string name="email_work" msgid="2807430017302722689">"Invia email a ind. lavoro"</string>
+ <string name="email_other" msgid="3454004077967657109">"Invia email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Invia un\'email a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Indirizzo postale"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Città"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Provincia"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Codice postale"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Paese"</string>
+ <string name="map_home" msgid="1243547733423343982">"Visualizza indirizzo casa"</string>
+ <string name="map_work" msgid="1360474076921878088">"Visualizza indirizzo lavoro"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualizza indirizzo"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Visualizza l\'indirizzo di <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatta su AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatta su Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatta su Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatta su Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatta su QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatta su Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatta su ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatta su Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chatta"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"elimina"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostra altri campi dei nomi"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Comprimi i campi dei nomi"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostra altri campi dei nomi fonetici"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Comprimi i campi dei nomi fonetici"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Espandi"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Comprimi"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Espanso"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Compresso"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tutti i contatti"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Speciali"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizza"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contatto"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Tutti gli altri contatti"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tutti i contatti"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Rimuovi gruppo sinc."</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Aggiungi gruppo sinc."</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Altri gruppi..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Se rimuovi \"<xliff:g id="GROUP">%s</xliff:g>\" dalla sincronizzazione, verranno rimossi anche gli eventuali contatti separati."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvataggio opzioni di visualizzazione..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Visualizzazione personalizzata"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salva i contatti importati in:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Scheda SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contatti</item>
+ <item quantity="one">1 contatto</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contatti • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contatto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"File .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Niente da importare"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importare i contatti da vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Annullare l\'importazione di <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annullare l\'esportazione di <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Annullam. import./esport. vCard non riuscito"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Errore sconosciuto."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Apertura di \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" non riuscita: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Avvio dell\'utilità di esportazione non riuscito: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nessun contatto esportabile."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Hai disattivato un\'autorizzazione obbligatoria."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Si è verificato un errore durante l\'esportazione: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Errore I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria insufficiente. Il file potrebbe essere troppo grande."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Il formato non è supportato."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Esportazione di <xliff:g id="FILENAME">%s</xliff:g> terminata."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Esportazione dei contatti terminata."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Esportazione dei contatti terminata. Fai clic sulla notifica per condividere i contatti."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tocca per condividere i contatti."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Esportazione di <xliff:g id="FILENAME">%s</xliff:g> annullata."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Esportazione dati di contatto"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Esportazione dei dati dei contatti in corso."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Recupero informazioni database non riuscito."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Non ci sono contatti esportabili."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Il compositore di vCard non si è avviato correttamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Impossibile esportare"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"I dati dei contatti non sono stati esportati.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importazione di <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Lettura dati vCard non riuscita"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importazione vCard <xliff:g id="FILENAME">%s</xliff:g> terminata"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importazione di <xliff:g id="FILENAME">%s</xliff:g> annullata"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"La vCard <xliff:g id="FILENAME">%s</xliff:g> verrà importata a breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Il file sarà importato a breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Richiesta importazione vCard rifiutata. Riprova più tardi."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"I contatti verranno esportati a breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Richiesta esportazione vCard rifiutata. Riprova più tardi."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contatto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Memorizzazione delle vCard nella cache di archiviazione temporanea locale. L\'importazione reale inizierà a breve."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Importazione vCard non riuscita."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contatto ricevuto via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Memorizzazione nella cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importazione di <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Esporta in file .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordina per"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nome fonetico"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostra sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Nascondi se vuoto"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Cognome"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato nome"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Prima il nome"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Prima il cognome"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Account"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Account predefinito per i nuovi contatti"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"I miei dati"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configura il tuo profilo"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Informazioni su Contatti"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Condividi i contatti preferiti"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Condividi tutti i contatti"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Impossibile condividere i contatti."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Esporta contatti"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importa contatti da"</string>
+ <string name="share_error" msgid="948429331673358107">"Questo contatto non può essere condiviso."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nessun contatto da condividere."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatti da visualizzare"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatti da visualizzare"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizza visualiz."</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salva"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Cerca contatti"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferiti"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importa"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Esporta"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Numeri bloccati"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"tramite <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> tramite <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"interrompi ricerca"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Cancella ricerca"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Usa sempre questa per chiamare"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Chiama e invia una nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Digita una nota da inviare con la chiamata…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"INVIA E CHIAMA"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versione build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenze open source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Dettagli delle licenze per il software open source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Norme sulla privacy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Termini di servizio"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenze open source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Impossibile aprire l\'URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> contrassegnato"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> non contrassegnato"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Avvia videochiamata"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Cancella"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellissi"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> m <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> m <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Questa scorciatoia è stata disattivata"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contatto rimosso"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importa"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Seleziona contatti"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nessun contatto presente nella SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Contatto già esistente nell\'elenco"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti della SIM importati</item>
+ <item quantity="one">1 contatto della SIM importato</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Impossibile importare i contatti della SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importa da SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Annulla"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"La sincronizzazione automatica è disattivata. Tocca per attivarla."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignora"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"La sincronizzazione dell\'account è disattivata. Tocca per attivarla."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Attivare la sincronizzazione automatica?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Le modifiche che apporti a tutte le app e a tutti gli account, non solo a Contatti Google, verranno mantenute aggiornate tra il Web e i dispositivi."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Attiva"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nessuna connessione"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostra altro"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importazione della scheda SIM completata"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importazione non riuscita"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossibile importare i contatti dalla scheda SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importazione della SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notifiche"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0f06466ea..206a00197 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"אנשי קשר"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"אנשי קשר"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"הצג איש קשר"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"ערוך איש קשר"</string>
<string name="contactsList" msgid="8661624236494819731">"אנשי קשר"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"הוסף איש קשר"</string>
<string name="shortcutContact" msgid="749243779392912958">"איש קשר"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"חיוג ישיר"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"הודעה ישירה"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"בחר קיצור דרך של איש קשר"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"בחר מספר להתקשר אליו"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"בחר מספר לשליחת הודעה"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"בחירת איש קשר"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"הוסף לאיש קשר"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"בחר איש קשר"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"צור איש קשר חדש"</string>
- <string name="starredList" msgid="4817256136413959463">"מסומן בכוכב"</string>
- <string name="frequentList" msgid="7154768136473953056">"לעתים קרובות"</string>
- <string name="strequentList" msgid="5640192862059373511">"מועדפים"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"פרטי איש קשר"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ערוך איש קשר"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"צור איש קשר"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ערוך קבוצה"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"צור קבוצה"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"מידע כללי"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"עדכונים"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"בחר"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"איש קשר חדש"</string>
<string name="searchHint" msgid="8482945356247760701">"חפש אנשי קשר"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"פרטי איש קשר"</string>
<string name="menu_addStar" msgid="2908478235715404876">"הוספה למועדפים"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"הסרה מהמועדפים"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"הוסר מהמועדפים"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"עריכה"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"מחיקה"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"החלפת תמונה"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"קיצור דרך במסך הבית"</string>
- <string name="menu_call" msgid="3992595586042260618">"שיחה לאיש קשר"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"הודעת טקסט לאיש קשר"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"יצירת קיצור דרך"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"ביטול קישור"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"עריכה"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"מחיקה"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"הוסף איש קשר"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"הוספת קבוצה"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"הסרה של אנשי הקשר"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"שינוי שם התווית"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"מחיקת התווית"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"הוספת איש קשר"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"בחירת אנשי קשר"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"הוספת אנשי קשר"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"הסרה מהתווית"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"יצירת תווית"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"האם לבטל את הקישור של איש הקשר הזה לאנשי קשר מרובים?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"בטל קישור"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"האם ברצונך לשמור את השינויים שכבר ביצעת ולבטל את הקישור של איש הקשר הזה לאנשי קשר מרובים?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"שמור ובטל את הקישור"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"האם ברצונך לשמור את השינויים שכבר ביצעת ולקשר לאיש הקשר שנבחר?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"שמור וקשר"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"הקישור מתבצע"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"ביטול הקישור מתבצע"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"קישור"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"הצגת אנשי הקשר המקושרים"</string>
<string name="menu_save" msgid="1727844363591825909">"שמירה"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"קישור אנשי קשר"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"בחר את איש הקשר שברצונך לקשר עם <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"הצג את כל אנשי הקשר"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"אנשי קשר מוצעים"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"כל אנשי הקשר"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> מקושר/ת"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"אנשי הקשר קושרו"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"מחקת את <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ו-<xliff:g id="NAME_1">%2$s</xliff:g> נמחקו"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... נמחקו"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="two">אנשי קשר נמחקו</item>
<item quantity="many">אנשי קשר נמחקו</item>
<item quantity="other">אנשי קשר נמחקו</item>
<item quantity="one">איש קשר נמחק</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> איש קשר</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> איש קשר · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"‏מ-Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"מ-<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"בחירת רינגטון"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"כל השיחות לתא הקולי"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"לא ניתן למחוק אנשי קשר מחשבונות לקריאה-בלבד, אך ניתן להסתיר אותם."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"הסתר"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"איש הקשר שנבחר למחיקה מכיל פרטים מחשבונות מרובים. פרטים מחשבונות לקריאה-בלבד יוסתרו ולא יימחקו."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"כדי לבצע קישור עליך לבחור שני אנשי קשר לפחות."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"האם לקשר את אנשי הקשר שנבחרו?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"קשר"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ניתוב לדואר הקולי"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ביטול הניתוב לדואר הקולי"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"איש הקשר הזה הוא לקריאה בלבד. אי אפשר למחוק אותו, אלא רק להסתיר אותו."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"הסתר את איש הקשר"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"חשבונות לקריאה בלבד באיש הקשר הזה יוסתרו ולא יימחקו."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"האם למחוק את איש הקשר הזה?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"האם למחוק את אנשי הקשר שנבחרו?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"לא ניתן למחוק אנשי קשר מחשבונות לקריאה-בלבד, אך ניתן להסתיר אותם."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"מחיקת איש קשר זה תמחק פרטים מחשבונות מרובים."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"האם למחוק את איש הקשר הזה?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"מחק"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ביטול שינויים"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"איש הקשר לא קיים."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"איש הקשר נוסף למסך דף הבית."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> נוסף למסך דף הבית."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"צור איש קשר חדש"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"צור איש קשר חדש"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ארגון"</item>
- <item msgid="7196592230748086755">"הערה"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"אין תמונות זמינות בטאבלט."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"אין תמונות זמינות בטלפון."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"אין אף תמונה זמינה במכשיר."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"תמונה של איש קשר"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"שם תווית בהתאמה אישית"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"שלח שיחות ישירות לדואר הקולי"</string>
<string name="removePhoto" msgid="4898105274130284565">"הסרת תמונה"</string>
- <string name="noContacts" msgid="4955659076981974652">"אין אנשי קשר"</string>
- <string name="noGroups" msgid="8614664663561385253">"אין קבוצות."</string>
- <string name="noAccounts" msgid="7768267764545265909">"כדי ליצור קבוצות, נחוץ חשבון."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"אין אנשים בקבוצה זו."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"כדי להוסיף, ערוך את הקבוצה."</string>
- <string name="savingContact" msgid="4075751076741924939">"שומר איש קשר…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"רשימת אנשי הקשר שלך ריקה"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"אין אנשי קשר עם התווית הזו"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"אין אנשי קשר בחשבון הזה"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"רשימת אנשי הקשר שלך ריקה"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> נשמר/ה"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"איש הקשר נשמר"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"בוטל הקישור לאנשי קשר"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"לא ניתן לשמור את השינויים באנשי הקשר."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"לא ניתן לבטל את הקישור של איש הקשר."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"לא ניתן היה לקשר איש קשר."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"אירעה שגיאה בעת שמירת איש הקשר."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"לא ניתן היה לשמור את השינויים בתמונות של אנשי הקשר."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"הקבוצה נשמרה."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"לא ניתן לשמור את השינויים בקבוצות."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר עם מספרי טלפון</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר עם מספרי טלפון</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר עם מספרי טלפון</item>
- <item quantity="one">איש קשר אחד עם מספר טלפון</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"אין אנשי קשר עם מספרי טלפון"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="two">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">אחד נמצא</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"לא ניתן היה לשמור את השינויים באיש הקשר"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"לא ניתן היה לבטל את הקישור של איש הקשר"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"לא ניתן היה לקשר את איש הקשר"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"שגיאה בשמירת איש הקשר"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"לא ניתן היה לשמור את השינויים בתמונה של איש הקשר"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"טעינת התווית נכשלה"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"התווית נמחקה"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"התווית נוצרה"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"לא ניתן ליצור את התווית"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"התווית עודכנה"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"הוסר מהתווית"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"נוסף לתווית"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"לא ניתן היה לשמור את השינויים בתווית"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"התווית הזו כבר קיימת"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"לחלק מאנשי הקשר אין כתובות אימייל."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"לחלק מאנשי הקשר אין מספרי טלפון."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"שלח אימייל"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"שלח הודעה"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"בחר אנשי קשר"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"שליחה"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"אין אנשי קשר"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="two">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">נמצאו <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">אחד נמצא</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"הכל"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"מועדפים"</string>
- <string name="callBack" msgid="5498224409038809224">"התקשר חזרה"</string>
- <string name="callAgain" msgid="3197312117049874778">"התקשר שוב"</string>
- <string name="returnCall" msgid="8171961914203617813">"התקשר בחזרה"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"להוסיף את \"<xliff:g id="EMAIL">%s</xliff:g>\" לאנשי הקשר?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"תמונה של איש קשר"</string>
- <string name="description_plus_button" msgid="515164827856229880">"חיבור"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> מתוך <xliff:g id="TOTAL_NUMBER">%s</xliff:g> אנשי קשר"</string>
<string name="search_settings_description" msgid="2675223022992445813">"השמות של אנשי הקשר"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"לא נמצאה אפליקציה שיכולה לטפל בפעולה זו."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"לחץ כדי לחזור אל המסך הקודם"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"הוסף מספר טלפון"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"הוספת מספר טלפון"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"הוסף אימייל"</string>
<string name="missing_app" msgid="1466111003546611387">"לא נמצאה אפליקציה שיכולה לטפל בפעולה זו."</string>
<string name="menu_share" msgid="943789700636542260">"שיתוף"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"הוספה לאנשי הקשר"</string>
- <string name="share_via" msgid="563121028023030093">"שתף איש קשר באמצעות"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"צור קבוצה עבור חשבון"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"הוספה"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="two">שתף את אנשי הקשר באמצעות</item>
+ <item quantity="many">שתף את אנשי הקשר באמצעות</item>
+ <item quantity="other">שתף את אנשי הקשר באמצעות</item>
+ <item quantity="one">שתף את איש הקשר באמצעות</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"בחר חשבון"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"יצירת תווית"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"שינוי שם התווית"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"שם התווית"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"שם התווית"</string>
<string name="audio_chat" msgid="2535716629358298691">"צ\'אט קולי"</string>
<string name="video_chat" msgid="1872255818640336072">"Hangout"</string>
- <string name="connections" msgid="8098440723172028350">"חיבורים"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"הוסף חיבור"</string>
- <string name="recent" msgid="2659189233141493004">"פריטים אחרונים"</string>
- <string name="recent_updates" msgid="4267258535615860710">"עדכונים אחרונים"</string>
<string name="account_type_format" msgid="718948015590343010">"איש קשר של <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"חשבון <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"לא ניתן לעריכה מאפליקציה זו."</string>
- <string name="group_read_only" msgid="1061762906115697637">"לא ניתן לעריכה במכשיר זה"</string>
- <string name="take_photo" msgid="7496128293167402354">"צלם תמונה"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"צלם תמונה חדשה"</string>
- <string name="pick_photo" msgid="2129509985223564942">"בחר תמונה"</string>
+ <string name="take_photo" msgid="7496128293167402354">"צילום תמונה"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"צילום תמונה חדשה"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"בחירת תמונה"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"בחר תמונה חדשה"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"רשימת אנשי הקשר מתעדכנת."</string>
<string name="search_results_searching" msgid="3984833028938569930">"מחפש..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"הצג פריטים שנבחרו"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"הצג הכל"</string>
- <string name="menu_select_all" msgid="621719255150713545">"בחר הכל"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"בטל בחירה של הכל"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"הוסף חדש"</string>
- <string name="add_organization" msgid="7311893231158291197">"הוסף ארגון"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"תאריך"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"שם קבוצה"</string>
- <string name="change_photo" msgid="8530597935483526383">"שנה"</string>
- <string name="primary_photo" msgid="8517942231868516999">"תמונה ראשית"</string>
- <string name="description_star" msgid="2605854427360036550">"מועדף"</string>
- <string name="edit_contact" msgid="7529281274005689512">"ערוך איש קשר"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"לקשר את איש הקשר הנוכחי לאיש הקשר שנבחר?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"תווית"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ביטול"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"הקודם"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"סגירה"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"לעבור לעריכה של איש הקשר שנבחר? המידע שהזנת עד עכשיו יועתק."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"העתק אל \'אנשי הקשר שלי\'"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"הוסף ל\'אנשי הקשר שלי\'"</string>
<string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> ספריה"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"מותאם אישית"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"הגדרות"</string>
<string name="menu_settings" msgid="377929915873428211">"הגדרות"</string>
<string name="menu_help" msgid="1680178646764069976">"עזרה ומשוב"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"אפשרויות תצוגה"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"מספר טלפון"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"הוסף לאנשי הקשר"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"הוסף לאיש קשר"</string>
<string name="non_phone_close" msgid="7608506439725515667">"סגור"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"ציין שנה"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"איש קשר"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"טוען..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"צור איש קשר חדש"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"הוסף חשבון"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"יבא אנשי קשר"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"צור קבוצה חדשה"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"צור קבוצה חדשה"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="two"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> קבוצות</item>
- <item quantity="one">קבוצה אחת</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"למחוק את הקבוצה \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (אנשי הקשר עצמם לא יימחקו.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשים מ-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one">אדם <xliff:g id="COUNT_0">%1$d</xliff:g> מ-<xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> אנשים</item>
- <item quantity="one">אדם <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ייבא"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"צור חדשה…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"למחוק את התווית \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (אנשי הקשר המסומנים בתווית לא יימחקו)."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"הקלד שם של איש קשר לפני קישורו לאחר."</string>
<string name="copy_text" msgid="3257145021583508761">"העתקה ללוח"</string>
<string name="set_default" msgid="4417505153468300351">"ברירת מחדל"</string>
<string name="clear_default" msgid="7193185801596678067">"ניקוי ברירת מחדל"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"טקסט שהועתק"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"האם להתעלם מהשינויים שביצעת ולהפסיק לערוך?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"האם לבטל את השינויים?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"מחק"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"המשך לערוך"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"הגדרת הפרופיל שלי"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"הקלד שם של אדם"</string>
- <string name="group_name_hint" msgid="238359485263401293">"שם הקבוצה"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ביטול"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"האם לבטל את ההתאמות האישיות?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"חיפוש אנשי קשר"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"הסרה של אנשי הקשר"</string>
<string name="local_profile_title" msgid="2021416826991393684">"הפרופיל המקומי שלי"</string>
<string name="external_profile_title" msgid="8034998767621359438">"פרופיל <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> שלי"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"מציג את כל אנשי הקשר"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"דאג שלא תאבד את אנשי הקשר שלך גם אם הטלפון שלך יאבד: בצע סנכרון עם שירות מקוון."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"הוסף חשבון"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"איש הקשר החדש שלך לא יגובה. להוסיף חשבון שמגבה אנשי קשר באופן מקוון?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏הקדש דקה כדי להוסיף חשבון Google שבו תגבה את אנשי הקשר שלך."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"אנשי קשר חדשים יישמרו ב-<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"בחר חשבון ברירת מחדל לאנשי קשר חדשים:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"הוספת איש קשר חדש"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"איש קשר חדש"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ערוך איש קשר"</string>
- <string name="keep_local" msgid="1258761699192993322">"שמור באופן מקומי"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"תצוגה בלבד"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"בחר איש קשר לעריכה"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"אנשי קשר מקושרים"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"הוסף"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"בטל את הקישור"</string>
<string name="add_account" msgid="8201790677994503186">"הוסף חשבון"</string>
<string name="add_new_account" msgid="5748627740680940264">"הוסף חשבון חדש"</string>
<string name="menu_export_database" msgid="2659719297530170820">"ייצוא קובצי מסד נתונים"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"הוסף איש קשר חדש"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"איש קשר חדש"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"הצג יותר"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"הצג פחות"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"הצג הכל"</string>
<string name="recent_card_title" msgid="8982782042698001695">"מהזמן האחרון"</string>
<string name="about_card_title" msgid="2920942314212825637">"מידע כללי"</string>
- <string name="send_message" msgid="8938418965550543196">"שלח הודעה"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"יוצר עותק אישי..."</string>
- <string name="yesterday" msgid="6840858548955018569">"אתמול"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"יוצר עותק אישי..."</string>
<string name="tomorrow" msgid="6241969467795308581">"מחר"</string>
<string name="today" msgid="8041090779381781781">"היום"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"היום ב-<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"מחר ב-<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>‏, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>‏, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(אירוע ללא שם)"</string>
<string name="date_time_set" msgid="4761419824439606690">"הגדר"</string>
<string name="header_im_entry" msgid="3581720979640225615">"הודעות מיידיות"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"אתר"</string>
<string name="header_event_entry" msgid="6738250422744401460">"אירוע"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"קשר"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"חשבון"</string>
<string name="header_name_entry" msgid="1592791008096288306">"שם"</string>
<string name="header_email_entry" msgid="8666093061171624478">"אימייל"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"טלפון"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"תמונה"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"לחץ כדי להרחיב את עורך אנשי הקשר."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"לחץ כדי לכווץ את עורך אנשי הקשר."</string>
<string name="content_description_directions" msgid="2686791825798189335">"הנחיות הגעה למיקום"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"‏הודעת SMS אחרונה. <xliff:g id="MESSAGE_BODY">%s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%s</xliff:g>‏. <xliff:g id="DATE">%s</xliff:g>‏. לחץ כדי להשיב"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"‏הודעת SMS אחרונה. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. <xliff:g id="DATE">%3$s</xliff:g>‏. לחץ כדי להשיב"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"נכנסת"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"יוצאת"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"לא נענתה"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"שיחה אחרונה. <xliff:g id="CALL_TYPE">%s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%s</xliff:g>‏. <xliff:g id="DATE">%s</xliff:g>‏. לחץ כדי להתקשר חזרה"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"שיחה אחרונה. <xliff:g id="CALL_TYPE">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. <xliff:g id="DATE">%3$s</xliff:g>‏. לחץ כדי להתקשר חזרה"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"אתה: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏Hangouts פועל טוב יותר כשאתה מזין את מזהה ה-Hangouts של המשתמש בשדה האימייל או בשדה הטלפון."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"עוד שדות"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"החלפת תמונה"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"פתיחת העורך נכשלה."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"שומר ב-"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"נשמר כרגע ב-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. הקש פעמיים כדי לבחור חשבון אחר."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="two">שני אנשי קשר מקושרים (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">אנשי קשר מקושרים (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">אנשי קשר מקושרים (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">איש קשר מקושר אחד</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> אנשי קשר מקושרים"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>‏ (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"שדות נוספים"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"שנה את התמונה של איש הקשר"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"הוסף תמונה לאיש הקשר"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"התמונה של איש הקשר"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"לא ניתן היה לפתוח את העורך."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"לשמירה ב-"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"לא ניתן לערוך את פרטי איש הקשר מהחשבון <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"קשר אנשי קשר"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"בטל"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> כפילויות</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> כפילויות</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> כפילויות</item>
- <item quantity="one">כפילות אחת</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר מקושרים</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר מקושרים</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> אנשי קשר מקושרים</item>
- <item quantity="one">איש קשר מקושר אחד</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="two">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"איש קשר זה"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"כפילויות אפשריות"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"ייתכן שאנשי הקשר האלו הם אותו אדם. תוכל לקשר אותם ביחד כאיש קשר יחיד."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"אנשי קשר שקושרו"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"מהחשבונות שלך"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"צלם תמונה"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"כל התמונות"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"בחירת תמונה"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"מאת <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"מחק את <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"מחק את <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"מחק <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"תמונה מ-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>לא סומנה"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"תמונה מ-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>סומנה"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"לא סומנה תמונה מחשבון לא ידוע"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"סומנה תמונה מחשבון לא ידוע"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"רשימת אנשי הקשר מתעדכנת כדי לשקף את החלפת השפה.\n\nהמתן..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"הצעות"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"חדש"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"פתח את חלונית ההזזה לניווט"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"סגור את חלונית ההזזה לניווט"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"התווית <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"תוויות"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"חשבונות"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"הצגה של ההיסטוריה המשותפת שלכם"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"אירועים והודעות"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"אירועים"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"הודעות"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"הצעות"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"שמור על סדר וארגון באנשי הקשר"</string>
+ <string name="undo" msgid="1425165101664071422">"בטל"</string>
+ <string name="call_custom" msgid="6385303130912713318">"התקשר אל <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"התקשר לבית"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"התקשר לנייד"</string>
+ <string name="call_work" msgid="5328785911463744028">"התקשר לעבודה"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"התקשר לפקס בעבודה"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"התקשר לפקס בבית"</string>
+ <string name="call_pager" msgid="9003902812293983281">"התקשר לזימונית"</string>
+ <string name="call_other" msgid="8563753966926932052">"חייג"</string>
+ <string name="call_callback" msgid="1910165691349426858">"התקשר חזרה"</string>
+ <string name="call_car" msgid="3280537320306436445">"התקשר למכונית"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"התקשר למספר הטלפון הראשי של החברה"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"‏התקשר ל-ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"התקשר למספר הראשי"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"התקשר לפקס"</string>
+ <string name="call_radio" msgid="8296755876398357063">"התקשר לרדיו"</string>
+ <string name="call_telex" msgid="2223170774548648114">"התקשר לטלקס"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"‏התקשר ל-TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"התקשר לנייד של העבודה"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"התקשר לזימונית של העבודה"</string>
+ <string name="call_assistant" msgid="670941612175068337">"התקשר אל <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"‏התקשר ל-MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (שיחה)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"‏שלח SMS אל <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"שלח הודעת טקסט לבית"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"שלח הודעת טקסט לנייד"</string>
+ <string name="sms_work" msgid="2269624156655267740">"שלח הודעת טקסט לעבודה"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"שלח הודעת טקסט לפקס בעבודה"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"שלח הודעת טקסט לפקס בבית"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"שלח הודעת טקסט לזימונית"</string>
+ <string name="sms_other" msgid="806127844607642331">"הודעת טקסט"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"שלח הודעת טקסט למספר להתקשרות חזרה"</string>
+ <string name="sms_car" msgid="7444227058437359641">"‏שלח SMS לטלפון במכונית"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"שלח הודעת טקסט למספר הטלפון הראשי של החברה"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"‏שלח הודעת טקסט ל-ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"שלח הודעת טקסט למספר הטלפון הראשי"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"שלח הודעת טקסט לפקס"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"שלח הודעת טקסט לרדיו"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"שלח הודעת טקסט לטלקס"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"‏שלח הודעת טקסט ל-TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"שלח הודעת טקסט לנייד של עבודה"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"שלח הודעת טקסט לזימונית של העבודה"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"שלח הודעת טקסט אל <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"‏שלח הודעת טקסט ל-MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (הודעה)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"התקשר בשיחת וידאו"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"האם למחוק אנשי קשר קבועים?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"הפעולה הזו תימחק מהאפליקציות \'אנשי קשר\' ו\'טלפון\' את הרשימה של אנשי הקשר השכיחים. אפליקציות האימייל יצטרכו ללמוד מחדש את הכתובות השכיחות שלך."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"מוחק אנשי קשר קבועים…"</string>
+ <string name="status_available" msgid="5586870015822828392">"זמין"</string>
+ <string name="status_away" msgid="1838861100379804730">"לא נמצא"</string>
+ <string name="status_busy" msgid="9147992455450257136">"עסוק"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"אחר"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ספריה"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ספריית עבודה"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"כל אנשי הקשר"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"קשר מהיר עבור <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ללא שם)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"בקשר לעתים קרובות"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"כל אנשי הקשר עם מספרי טלפון"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"אנשי קשר מהעבודה"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"הצג עדכונים"</string>
+ <string name="account_phone" msgid="7128032778471187553">"מכשיר"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"שם"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"כינוי"</string>
+ <string name="name_given" msgid="4280790853455320619">"שם פרטי"</string>
+ <string name="name_family" msgid="7466985689626017037">"שם משפחה"</string>
+ <string name="name_prefix" msgid="59756378548779822">"קידומת שם"</string>
+ <string name="name_middle" msgid="8467433655992690326">"שם אמצעי"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"סיומת שם"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"שם פונטי"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"שם פרטי פונטי"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"שם אמצעי פונטי"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"שם משפחה פונטי"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"טלפון"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"אימייל"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"כתובת"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"הודעה מיידית"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ארגון"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"מה הקשר ביניכם?"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"תאריך מיוחד"</string>
+ <string name="sms" msgid="1756857139634224222">"הודעת טקסט"</string>
+ <string name="postal_address" msgid="8765560217149624536">"כתובת"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"חברה"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"שם"</string>
+ <string name="label_notes" msgid="8337354953278341042">"הערות"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"מותאם אישית"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"אתר"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"תוויות"</string>
+ <string name="email_home" msgid="8573740658148184279">"שלח אימייל לבית"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"שלח אימייל לנייד"</string>
+ <string name="email_work" msgid="2807430017302722689">"שלח אימייל לעבודה"</string>
+ <string name="email_other" msgid="3454004077967657109">"אימייל"</string>
+ <string name="email_custom" msgid="5536404237099078802">"שלח אימייל אל <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"אימייל"</string>
+ <string name="postal_street" msgid="8133143961580058972">"רחוב"</string>
+ <string name="postal_city" msgid="6597491300084895548">"עיר"</string>
+ <string name="postal_region" msgid="6045263193478437672">"מדינה"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"מיקוד"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ארץ"</string>
+ <string name="map_home" msgid="1243547733423343982">"הצג כתובת בית"</string>
+ <string name="map_work" msgid="1360474076921878088">"הצג כתובת עבודה"</string>
+ <string name="map_other" msgid="3817820803587012641">"הצג כתובת"</string>
+ <string name="map_custom" msgid="8761800628069473526">"הצג את הכתובת של <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"‏שוחח בצ\'אט באמצעות AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"‏שוחח בצ\'אט באמצעות Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"‏שוחח בצ\'אט באמצעות Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"‏שוחח בצ\'אט באמצעות Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"‏שוחח בצ\'אט באמצעות QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"‏שוחח בצ\'אט באמצעות Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"‏שוחח בצ\'אט באמצעות ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"‏שוחח בצ\'אט באמצעות Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"שוחח בצ\'אט"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"מחק"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"הצג עוד שדות של שמות"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"כיווץ של שדות השמות"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"הצג עוד שדות של שמות פונטיים"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"כיווץ של שדות השמות הפונטיים"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"הרחב"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"כווץ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"מורחב"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"מכווץ"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"כל אנשי הקשר"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"מסומן בכוכב"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"התאמה אישית"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"איש קשר"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"כל אנשי הקשר האחרים"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"כל אנשי הקשר"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"הסרת קבוצת סנכרון"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"הוספת קבוצת סנכרון"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"קבוצות נוספות…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"הסרת \"<xliff:g id="GROUP">%s</xliff:g>\" מהסנכרון תסיר מהסנכרון גם אנשי קשר שאינם מקובצים."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"שומר אפשרויות תצוגה..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"תצוגה מותאמת אישית"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"איפה יישמרו אנשי הקשר שמיובאים:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"‏כרטיס SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"‏כרטיס SIM‏ <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="two">‏%1$d אנשי קשר</item>
+ <item quantity="many">‏%1$d אנשי קשר</item>
+ <item quantity="other">‏%1$d אנשי קשר</item>
+ <item quantity="one">איש קשר אחד</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="two"><xliff:g id="COUNT_2">^1</xliff:g> אנשי קשר • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> אנשי קשר • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> אנשי קשר • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> איש קשר • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"‏קובץ vcf."</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"אין מה לייבא"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"‏האם לייבא את אנשי הקשר מ-vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"לבטל את הייבוא של <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"לבטל את הייצוא של <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏לא ניתן לבטל ייבוא/ייצוא של vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"שגיאה לא ידועה."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"לא ניתן לפתוח את \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"‏: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"לא ניתן להפעיל את המייצא: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"אין אנשי קשר הניתנים לייצוא."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"השבתת הרשאה נדרשת."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"אירעה שגיאה במהלך הייצוא: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"שגיאת קלט/פלט"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"אין מספיק זיכרון. ייתכן שהקובץ גדול מדי."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"הפורמט אינו נתמך."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"הייצוא של <xliff:g id="FILENAME">%s</xliff:g> הסתיים."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"הייצוא של אנשי הקשר הסתיים."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"היצוא של אנשי הקשר הסתיים. לחץ על ההודעה כדי לשתף אנשי קשר."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"הקש כדי לשתף אנשי קשר."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"הייצוא של <xliff:g id="FILENAME">%s</xliff:g> בוטל."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"מייצא נתונים של אנשי קשר"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"ייצוא הנתונים של אנשי הקשר מתבצע."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"לא ניתן לקבל מידע ממסד הנתונים."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"אין אנשי קשר שניתן לייצא."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"‏יישום היצירה של ה-vCard לא הופעל כהלכה."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"לא ניתן לייצא"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"נתוני אנשי הקשר לא יוצאו.\nסיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"מייבא את <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏לא ניתן לקרוא נתוני vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏הייבוא של vCard בשם <xliff:g id="FILENAME">%s</xliff:g> הסתיים"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"הייבוא של <xliff:g id="FILENAME">%s</xliff:g> בוטל"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"הייבוא של <xliff:g id="FILENAME">%s</xliff:g> יתבצע בהקדם."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"הייבוא של הקובץ יתבצע בהקדם."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏הבקשה לייבוא ה-vCard נדחתה. נסה שוב מאוחר יותר."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"הייצוא של אנשי הקשר יבוצע בהקדם."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏הבקשה לייצוא ה-vCard נדחתה. נסה שוב מאוחר יותר."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"איש קשר"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"‏קובצי ה-vCard נשמרים כקבצים באחסון מקומי זמני. הייבוא בפועל יחל בקרוב."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"‏לא ניתן לייבא את ה-vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏איש הקשר התקבל באמצעות NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"הופך לקובץ שמור"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"מייבא <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"‏ייצוא לקובץ ‎.vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"מיין לפי"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"שם פונטי"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"יופיע תמיד"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"השדה ריק לא יופיע"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"שם פרטי"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"שם משפחה"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"פורמט השם"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"קודם השם הפרטי"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"קודם שם המשפחה"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"חשבונות"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"חשבון ברירת המחדל לאנשי קשר חדשים"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"המידע שלי"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"הגדרת הפרופיל שלך"</string>
+ <string name="setting_about" msgid="7014388749752042863">"מידע על אנשי הקשר"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"שתף את אנשי הקשר המועדפים"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"שיתוף כל אנשי הקשר"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"לא ניתן היה לשתף את אנשי הקשר."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"ייצוא אנשי קשר"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"המקור לייבוא של אנשי הקשר"</string>
+ <string name="share_error" msgid="948429331673358107">"לא ניתן לשתף איש קשר זה."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"אין אנשי קשר שניתן לשתף."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"אנשי קשר להצגה"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"אנשי קשר להצגה"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"התאמה אישית של התצוגה"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"שמירה"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"חפש אנשי קשר"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"מועדפים"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ייבוא"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ייצוא"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"מספרים חסומים"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"באמצעות <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> באמצעות <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"הפסק לחפש"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"נקה חיפוש"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"חשבון"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"השתמש תמיד לשיחות"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"התקשר עם הערה"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"הזן את ההערה שתישלח עם השיחה..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"שלח והתקשר"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"‏גרסת Build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"רישיונות קוד פתוח"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"פרטי רישיון לתוכנות קוד פתוח"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"מדיניות הפרטיות"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"תנאים והגבלות"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"רישיונות קוד פתוח"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"לא ניתן היה לפתוח את כתובת האתר."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> מסומן"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> לא מסומן"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"התקשרות בשיחת וידאו"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"מחיקה"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"שלוש נקודות"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> דקות ו-<xliff:g id="SECONDS">%2$s</xliff:g> שניות"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> שעות, <xliff:g id="MINUTES_1">%2$s</xliff:g> דקות ו-<xliff:g id="SECONDS">%3$s</xliff:g> שניות"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"קיצור הדרך הזה הושבת"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"איש הקשר הוסר"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ייבא"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"בחירת אנשי קשר"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"‏אין אף איש קשר בכרטיס ה-SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"איש הקשר כבר קיים ברשימה"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="two">‏<xliff:g id="COUNT">%d</xliff:g> אנשי קשר יובאו מכרטיס ה-SIM</item>
+ <item quantity="many">‏<xliff:g id="COUNT">%d</xliff:g> אנשי קשר יובאו מכרטיס ה-SIM</item>
+ <item quantity="other">‏<xliff:g id="COUNT">%d</xliff:g> אנשי קשר יובאו מכרטיס ה-SIM</item>
+ <item quantity="one">‏איש קשר אחד יובא מכרטיס ה-SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏לא ניתן היה לייבא את אנשי הקשר מכרטיס ה-SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"‏ייבוא מכרטיס SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ביטול"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"הסינכרון האוטומטי מושבת. הקש כדי להפעיל אותו."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ביטול"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"סנכרון החשבון מושבת. הקש כדי להפעיל אותו."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"האם להשבית את הסנכרון האוטומטי?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"‏השינויים שתבצע בכל האפליקציות והחשבונות, לא רק באנשי הקשר מחשבון Google, יסונכרנו בין האינטרנט לבין המכשירים שלך."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"הפעל"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"אין חיבור"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"‏כרטיס SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"הצג עוד"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏הייבוא מכרטיס ה-SIM הסתיים"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"הייבוא נכשל"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏לא ניתן היה לייבא את אנשי הקשר מכרטיס ה-SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏הייבוא מכרטיס ה-SIM מתבצע"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"הודעות"</string>
</resources>
diff --git a/res/values-ja/donottranslate_config.xml b/res/values-ja/donottranslate_config.xml
new file mode 100644
index 000000000..ff8a8eb61
--- /dev/null
+++ b/res/values-ja/donottranslate_config.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2016, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources>
+ <!-- If true, an option is shown in Display Options UI to choose a sort order -->
+ <bool name="config_sort_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_sort_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a name display order -->
+ <bool name="config_display_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_display_order_primary">true</bool>
+
+ <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">false</bool>
+
+ <!-- If true, phonetic name is included in the contact editor by default -->
+ <bool name="config_editor_include_phonetic_name">true</bool>
+</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 0fade6238..ce2529091 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"連絡先"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"連絡先"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"連絡先の表示"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"連絡先の編集"</string>
<string name="contactsList" msgid="8661624236494819731">"連絡先"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"連絡先を追加"</string>
<string name="shortcutContact" msgid="749243779392912958">"連絡先"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"直接発信"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"直接メッセージを送る"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"ショートカットを選択"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"発信する番号の選択"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"メッセージを送る番号の選択"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"連絡先を選択"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"連絡先に追加"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"連絡先を選択"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選択"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"新しい連絡先を作成"</string>
- <string name="starredList" msgid="4817256136413959463">"スター付き"</string>
- <string name="frequentList" msgid="7154768136473953056">"よく使う連絡先"</string>
- <string name="strequentList" msgid="5640192862059373511">"お気に入り"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"連絡先情報"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"連絡先を編集"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"連絡先を新規登録"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"グループの編集"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"グループの作成"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"概要"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"最新情報"</string>
<string name="searchHint" msgid="8482945356247760701">"連絡先を検索"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"連絡先詳細"</string>
<string name="menu_addStar" msgid="2908478235715404876">"お気に入りに追加"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"お気に入りから削除"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"お気に入りから削除します"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"編集"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"削除"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"写真を変更"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ホーム画面に配置"</string>
- <string name="menu_call" msgid="3992595586042260618">"連絡先に発信"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"連絡先にSMS"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ショートカットを作成"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"リンクを解除"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"編集"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"削除"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"連絡先を追加"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"グループを追加"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"連絡先を削除"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ラベル名を変更"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ラベルを削除"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"連絡先を追加"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"連絡先を選択"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"連絡先を追加"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ラベルから削除"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ラベルを作成"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"この連絡先を複数の連絡先にリンク解除しますか?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"リンク解除"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ここまでの変更を保存してこの連絡先を複数の連絡先にリンク解除しますか?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"保存してリンク解除"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"ここまでの変更を保存して選択した連絡先にリンクしますか?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"保存してリンク"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"リンクしています"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"リンクを解除中"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"リンク"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"リンクされた連絡先を表示"</string>
<string name="menu_save" msgid="1727844363591825909">"保存"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"連絡先をリンク"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g>さんとリンクする連絡先を選択してください。"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"すべての連絡先を表示"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"連絡先候補"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"すべての連絡先"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> さんが連絡先をリンクしました"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"連絡先をリンクしました"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> さんを削除しました"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> さんと <xliff:g id="NAME_1">%2$s</xliff:g> さんを削除しました"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g> さん、<xliff:g id="NAME_1">%2$s</xliff:g> さん、<xliff:g id="NAME_2">%3$s</xliff:g> さん…を削除しました"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">連絡先を削除しました</item>
<item quantity="one">連絡先を削除しました</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 件の連絡先</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 件の連絡先</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google アカウントから"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> から"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"着信音を設定"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"すべての通話をボイスメールへ"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"読み取り専用のアカウントからの連絡先は削除できませんが非表示にすることはできます。"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"非表示"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"削除しようとしている連絡先には複数のアカウントからの詳細情報が含まれています。読み取り専用のアカウントからの詳細情報は非表示になるだけで削除はされません。"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"リンクするには連絡先を2件以上選択してください。"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"選択した連絡先をリンクしますか?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"リンク"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ボイスメールに転送"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ボイスメールへの転送を解除"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"この連絡先は読み取り専用です。非表示にはできますが、削除することはできません。"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"連絡先を非表示にする"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"この連絡先の読み取り専用アカウントが非表示になります(削除されるわけではありません)。"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"この連絡先を削除しますか?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"選択した連絡先を削除しますか?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"読み取り専用のアカウントからの連絡先は削除できませんが非表示にすることはできます。"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"この連絡先を削除すると複数のアカウントから詳細情報が削除されます。"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"この連絡先を削除しますか?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"削除"</string>
- <string name="menu_discard" msgid="6854657936970228164">"変更を破棄"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"連絡先が存在しません。"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"連絡先をホーム画面に追加しました。"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>をホーム画面に追加しました。"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"連絡先を新規登録"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"新しい連絡先を作成"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"所属"</item>
- <item msgid="7196592230748086755">"メモ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"タブレット内に写真がありません。"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"画像がありません。"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"使用できる写真が端末上にありません。"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"連絡先の写真"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"カスタムラベル名"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ボイスメールに自動転送する"</string>
<string name="removePhoto" msgid="4898105274130284565">"写真を削除"</string>
- <string name="noContacts" msgid="4955659076981974652">"連絡先はありません"</string>
- <string name="noGroups" msgid="8614664663561385253">"グループはありません。"</string>
- <string name="noAccounts" msgid="7768267764545265909">"グループを作成するにはアカウントが必要です。"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"このグループにはメンバーがいません。"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"メンバーを追加するにはグループを編集します。"</string>
- <string name="savingContact" msgid="4075751076741924939">"連絡先を保存しています..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"連絡先リストが空です"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"このラベルを使用している連絡先はいません"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"このアカウントに保存されている連絡先はありません"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"連絡先リストが空です"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> さんを保存しました"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"連絡先を保存しました"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"連絡先のリンクを解除しました"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"連絡先の変更を保存できませんでした。"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"連絡先のリンクを解除できませんでした。"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"連絡先をリンクできませんでした。"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"連絡先の保存中にエラーが発生しました。"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"連絡先の写真の変更を保存できませんでした。"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"グループを保存しました。"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"グループの変更を保存できませんでした。"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">電話番号のある連絡先<xliff:g id="COUNT">%d</xliff:g>件</item>
- <item quantity="one">電話番号のある連絡先1件</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"電話番号付きの連絡先はありません"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件見つかりました</item>
- <item quantity="one">1件見つかりました</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"連絡先の変更を保存できませんでした"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"連絡先のリンクを解除できませんでした"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"連絡先をリンクできませんでした"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"連絡先の保存中にエラーが発生しました"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"連絡先の写真の変更を保存できませんでした"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ラベルを読み込めませんでした"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ラベルを削除しました"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ラベルを作成しました"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ラベルを作成できません"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ラベルを更新しました"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ラベルから削除されました"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ラベルに追加されました"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ラベルの変更を保存できませんでした"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"このラベルは既に存在しています"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"メールアドレスが登録されていない連絡先があります。"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"電話番号が登録されていない連絡先があります。"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"メールを送信"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"メッセージを送信"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"連絡先の選択"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"送信"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"連絡先はありません"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件見つかりました</item>
- <item quantity="one">1件見つかりました</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"すべて"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"お気に入り"</string>
- <string name="callBack" msgid="5498224409038809224">"コールバック"</string>
- <string name="callAgain" msgid="3197312117049874778">"再発信"</string>
- <string name="returnCall" msgid="8171961914203617813">"発信"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> を連絡先に追加しますか?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"連絡先の写真"</string>
- <string name="description_plus_button" msgid="515164827856229880">"プラス"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件のファイル"</string>
<string name="search_settings_description" msgid="2675223022992445813">"連絡先の名前"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"この操作を行うアプリが見つかりませんでした。"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"前の画面に戻るにはタップしてください"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"電話番号を追加"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"メールを追加"</string>
<string name="missing_app" msgid="1466111003546611387">"この操作を行うアプリが見つかりませんでした。"</string>
<string name="menu_share" msgid="943789700636542260">"共有"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"連絡先に追加"</string>
- <string name="share_via" msgid="563121028023030093">"連絡先の共有ツール"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"次のアカウントにグループを作成"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"追加"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">連絡先を共有するアプリ</item>
+ <item quantity="one">連絡先を共有するアプリ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"アカウントの選択"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ラベルの作成"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ラベル名の変更"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ラベルの名前"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ラベル名"</string>
<string name="audio_chat" msgid="2535716629358298691">"ボイスチャット"</string>
<string name="video_chat" msgid="1872255818640336072">"ビデオチャット"</string>
- <string name="connections" msgid="8098440723172028350">"連絡先情報"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"連絡先を招待"</string>
- <string name="recent" msgid="2659189233141493004">"最近"</string>
- <string name="recent_updates" msgid="4267258535615860710">"最近の更新"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>の連絡先"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>のアカウント"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"このアプリからは編集できません。"</string>
- <string name="group_read_only" msgid="1061762906115697637">"この端末では編集できません。"</string>
<string name="take_photo" msgid="7496128293167402354">"写真を撮影"</string>
<string name="take_new_photo" msgid="7341354729436576304">"新しい写真を撮る"</string>
<string name="pick_photo" msgid="2129509985223564942">"写真を選択"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"新しい写真を選択"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"連絡先リストを更新しています。"</string>
<string name="search_results_searching" msgid="3984833028938569930">"検索しています..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"選択した連絡先を表示"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"すべて表示"</string>
- <string name="menu_select_all" msgid="621719255150713545">"すべて選択"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"選択をすべて解除"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"新しく追加"</string>
- <string name="add_organization" msgid="7311893231158291197">"所属を追加"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"日付"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"グループ名"</string>
- <string name="change_photo" msgid="8530597935483526383">"変更"</string>
- <string name="primary_photo" msgid="8517942231868516999">"メインの写真"</string>
- <string name="description_star" msgid="2605854427360036550">"お気に入り"</string>
- <string name="edit_contact" msgid="7529281274005689512">"連絡先の編集"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"現在の連絡先を選択した連絡先にリンクしますか?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ラベル"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"キャンセル"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"戻る"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"閉じる"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"選択した連絡先の編集に切り替えますか?これまでに入力した情報はコピーされます。"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Myコンタクトにコピー"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Myコンタクトに追加"</string>
<string name="contact_directory_description" msgid="683398073603909119">"ディレクトリ<xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"カスタム"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
<string name="menu_settings" msgid="377929915873428211">"設定"</string>
<string name="menu_help" msgid="1680178646764069976">"ヘルプとフィードバック"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"表示オプション"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>、<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"電話番号"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"連絡先に追加"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"連絡先に追加"</string>
<string name="non_phone_close" msgid="7608506439725515667">"閉じる"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g>(<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"年を含める"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"連絡先"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"読み込んでいます..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"新しい連絡先を作成"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"アカウントを追加"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"連絡先をインポート"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"新しいグループの作成"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"新しいグループを作成"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g>グループ</item>
- <item quantity="one">1グループ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"グループ「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」を削除しますか?連絡先自体は削除されません。"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>から<xliff:g id="COUNT_2">%1$d</xliff:g>人</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>から<xliff:g id="COUNT_0">%1$d</xliff:g>人</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>人</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>人</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"インポート"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"新規作成…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"ラベル「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」を削除しますか?(連絡先自体は削除されません。)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"別の連絡先とリンクするにはまず連絡先の名前を入力してください。"</string>
<string name="copy_text" msgid="3257145021583508761">"クリップボードにコピー"</string>
<string name="set_default" msgid="4417505153468300351">"デフォルトに設定"</string>
<string name="clear_default" msgid="7193185801596678067">"デフォルトを解除"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"テキストをコピーしました"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"変更を破棄して編集を終了しますか?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"変更を破棄しますか?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"破棄"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"編集を続ける"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"プロファイルを設定"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"名前を入力"</string>
- <string name="group_name_hint" msgid="238359485263401293">"グループの名前"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"キャンセル"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"カスタマイズを破棄しますか?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"連絡先を検索"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"連絡先の削除"</string>
<string name="local_profile_title" msgid="2021416826991393684">"ローカルプロファイル"</string>
<string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>のプロファイル"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"すべての連絡先を表示しています"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"モバイル端末を紛失したときにも連絡先を保護するため、オンラインサービスと同期させます。"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"アカウントの追加"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"新しい連絡先はバックアップされません。オンラインで連絡先をバックアップするアカウントを追加しますか?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"アカウントを追加すると、連絡先を Google にバックアップできるようになります。"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新しい連絡先を<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>に保存します"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"新しい連絡先のデフォルトアカウントを選択してください。"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"連絡先を追加"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"新しい連絡先の作成"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"連絡先を編集"</string>
- <string name="keep_local" msgid="1258761699192993322">"ローカルに保存"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"表示のみ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"編集する連絡先の選択"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"リンクされた連絡先"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"追加"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"リンクを解除"</string>
<string name="add_account" msgid="8201790677994503186">"アカウントを追加"</string>
<string name="add_new_account" msgid="5748627740680940264">"新しいアカウントを追加"</string>
<string name="menu_export_database" msgid="2659719297530170820">"データベースファイルをエクスポート"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"新しい連絡先を追加"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"新しい連絡先を作成"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"もっと見る"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"一部を表示"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"すべて表示"</string>
<string name="recent_card_title" msgid="8982782042698001695">"最近"</string>
<string name="about_card_title" msgid="2920942314212825637">"概要"</string>
- <string name="send_message" msgid="8938418965550543196">"メッセージの送信"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"個人用コピーを作成しています..."</string>
- <string name="yesterday" msgid="6840858548955018569">"昨日"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"個人用コピーを作成しています..."</string>
<string name="tomorrow" msgid="6241969467795308581">"明日"</string>
<string name="today" msgid="8041090779381781781">"今日"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"今日の<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"明日の<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>の<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>の<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(無題の予定)"</string>
<string name="date_time_set" msgid="4761419824439606690">"設定"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"ウェブサイト"</string>
<string name="header_event_entry" msgid="6738250422744401460">"予定"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"関係"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"アカウント"</string>
<string name="header_name_entry" msgid="1592791008096288306">"名前"</string>
<string name="header_email_entry" msgid="8666093061171624478">"メール"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"写真"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"クリックして連絡先エディターを展開します。"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"クリックして連絡先エディターを折りたたみます。"</string>
<string name="content_description_directions" msgid="2686791825798189335">"場所までの経路"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"最近のSMS。<xliff:g id="MESSAGE_BODY">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。折り返し電話するにはタップしてください。"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"最近のSMS。<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$s</xliff:g>。折り返し電話するにはタップしてください。"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"着信"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"発信"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"不在着信"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"最近の通話。<xliff:g id="CALL_TYPE">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。折り返し電話するにはタップしてください。"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"最近の通話。<xliff:g id="CALL_TYPE">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$s</xliff:g>。折り返し電話するにはタップしてください。"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"あなた: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ハングアウトを使いやすくするには、相手のハングアウトIDをメールアドレス欄または電話番号欄に入力します。"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"他の項目"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"写真を変更"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"エディタを開けませんでした。"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"保存先"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"現在の保存先は<xliff:g id="ACCOUNT_NAME">%s</xliff:g>です。別のアカウントを選択するにはダブルタップします。"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">リンクされた連絡先(<xliff:g id="COUNT">%d</xliff:g>件)</item>
- <item quantity="one">リンクされた連絡先</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g>件のリンクされた連絡先"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>(<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"その他の項目"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"連絡先の写真を変更"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"連絡先の写真を追加"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"連絡先の写真"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"エディタを開けませんでした。"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"保存先"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> から取得した連絡先情報は編集できません"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連絡先をリンク"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"キャンセル"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">重複の可能性のある連絡先(<xliff:g id="COUNT">%d</xliff:g>件)</item>
- <item quantity="one">重複の可能性のある連絡先(1件)</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件のリンクされた連絡先</item>
- <item quantity="one">1件のリンクされた連絡先</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"この連絡先"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"重複の可能性"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"これらの連絡先は同一人物である可能性があります。リンクして1つの連絡先にまとめることができます。"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"リンクした連絡先"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"アカウントの写真"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"写真を撮る"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"すべての写真"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"写真の選択"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"送信元: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>を削除"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>を削除"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>を削除"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> の写真は選択されていません"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> の写真は選択されています"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"不明なアカウントの写真は選択されていません"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"不明なアカウントの写真が選択されています"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"言語の変更に伴い連絡先リストを更新しています。\n\nしばらくお待ちください..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"候補"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"ナビゲーションドロワーを開く"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ナビゲーションドロワーを閉じる"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"「<xliff:g id="LABEL_NAME">%s</xliff:g>」ラベル"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ラベル"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"アカウント"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"履歴を一緒に表示"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"予定とメッセージ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"予定"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"メッセージ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"候補"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"連絡先を使いやすく整理できます"</string>
+ <string name="undo" msgid="1425165101664071422">"元に戻す"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>宛に通話を発信"</string>
+ <string name="call_home" msgid="1990519474420545392">"自宅に発信"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"携帯電話に発信"</string>
+ <string name="call_work" msgid="5328785911463744028">"勤務先に発信"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"勤務先FAXに発信"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"自宅のFAXに発信"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ポケベルに発信"</string>
+ <string name="call_other" msgid="8563753966926932052">"発信"</string>
+ <string name="call_callback" msgid="1910165691349426858">"コールバック先に発信"</string>
+ <string name="call_car" msgid="3280537320306436445">"クルマに発信"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"会社代表番号に発信"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDNに発信"</string>
+ <string name="call_main" msgid="6082900571803441339">"電話番号1に発信"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"FAXに電話"</string>
+ <string name="call_radio" msgid="8296755876398357063">"無線に発信"</string>
+ <string name="call_telex" msgid="2223170774548648114">"テレックスに発信"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDDに発信"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"携帯電話(勤務先)に発信"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ポケベル(勤務先)に発信"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>宛に通話を発信"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMSに発信"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> さん(通話を発信)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>宛にテキストメッセージを送信"</string>
+ <string name="sms_home" msgid="7524332261493162995">"自宅にSMS"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"携帯にSMS"</string>
+ <string name="sms_work" msgid="2269624156655267740">"勤務先にSMS"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"勤務先FAXにSMS"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"自宅FAXにSMS"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ポケベルにSMS"</string>
+ <string name="sms_other" msgid="806127844607642331">"電話にSMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"コールバック先にSMS"</string>
+ <string name="sms_car" msgid="7444227058437359641">"クルマにSMS"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"会社代表番号にSMS"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDNにSMS"</string>
+ <string name="sms_main" msgid="8621625784504541679">"電話番号1にSMS"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"FAXにSMS"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"無線にSMS"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"テレックスにSMS"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDDにSMS"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"携帯電話(勤務先)にSMS"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ポケベル(勤務先)にSMS"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g>にSMS"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMSにSMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> さん(メッセージを送信)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ビデオハングアウトを発信"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"よく使う連絡先をクリアしますか?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"連絡先アプリや電話アプリのよく使う連絡先リストをクリアし、メールアプリがアドレス設定を初めから保存していくようにします。"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"よく使う連絡先をクリアしています…"</string>
+ <string name="status_available" msgid="5586870015822828392">"オンライン"</string>
+ <string name="status_away" msgid="1838861100379804730">"不在"</string>
+ <string name="status_busy" msgid="9147992455450257136">"取り込み中"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"その他"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ディレクトリ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"仕事用の連絡先リスト"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"すべての連絡先"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>さんのクイックコンタクト"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(名前なし)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"よく使う連絡先"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"電話番号のあるすべての連絡先"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"仕事用プロファイルの連絡先"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"更新情報を表示"</string>
+ <string name="account_phone" msgid="7128032778471187553">"端末"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"名前"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ニックネーム"</string>
+ <string name="name_given" msgid="4280790853455320619">"名"</string>
+ <string name="name_family" msgid="7466985689626017037">"姓"</string>
+ <string name="name_prefix" msgid="59756378548779822">"敬称(名前の前)"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ミドルネーム"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"敬称(名前の後)"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"よみがな"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"フリガナ(名)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"フリガナ(ミドルネーム)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"フリガナ(姓)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"電話番号"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"メール"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"住所"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"チャット"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"所属"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"関係"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"特別な日"</string>
+ <string name="sms" msgid="1756857139634224222">"テキストメッセージ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"住所"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"会社"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"役職"</string>
+ <string name="label_notes" msgid="8337354953278341042">"メモ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"カスタム"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ウェブサイト"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ラベル"</string>
+ <string name="email_home" msgid="8573740658148184279">"自宅にメール"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"携帯電話にメール"</string>
+ <string name="email_work" msgid="2807430017302722689">"勤務先にメール"</string>
+ <string name="email_other" msgid="3454004077967657109">"メール送信"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>宛にメールを送信"</string>
+ <string name="email" msgid="5668400997660065897">"メール"</string>
+ <string name="postal_street" msgid="8133143961580058972">"番地"</string>
+ <string name="postal_city" msgid="6597491300084895548">"市区町村"</string>
+ <string name="postal_region" msgid="6045263193478437672">"都道府県"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"郵便番号"</string>
+ <string name="postal_country" msgid="7638264508416368690">"国"</string>
+ <string name="map_home" msgid="1243547733423343982">"自宅の住所を表示"</string>
+ <string name="map_work" msgid="1360474076921878088">"勤務先の住所を表示"</string>
+ <string name="map_other" msgid="3817820803587012641">"住所を表示"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>の住所を表示"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIMでチャット"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Liveでチャット"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahooでチャット"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skypeでチャット"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQでチャット"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Googleトークでチャット"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQでチャット"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabberでチャット"</string>
+ <string name="chat" msgid="9025361898797412245">"チャット"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"削除"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"名前欄を展開"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"名前欄を折りたたむ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"名前のフリガナ欄を展開"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"名前のフリガナ欄を折りたたむ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"折りたたむ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"展開しました"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"折りたたみました"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"すべての連絡先"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"スター付き"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"カスタマイズ"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"連絡先"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"その他すべての連絡先"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"すべての連絡先"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"同期グループを削除"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"同期グループに追加"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"他のグループ..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"「<xliff:g id="GROUP">%s</xliff:g>」を同期から除外すると、グループに含まれない連絡先もすべて同期から除外されます。"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"表示オプションを保存中..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"カスタムビュー"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"インポートした連絡先の保存先:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM カード"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM(<xliff:g id="SIM_NAME">%1$s</xliff:g>)"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d 件の連絡先</item>
+ <item quantity="one">1 件の連絡先</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> 件の連絡先 • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> 件の連絡先 • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ファイル"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"インポートに使用できる外部ソースがありません"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard から連絡先をインポートしますか?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g>のインポートをキャンセルしますか?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートをキャンセルしますか?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardインポート/エクスポート取り消し不可"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"不明なエラーです。"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"「<xliff:g id="FILE_NAME">%1$s</xliff:g>」を開けませんでした: <xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"エクスポータを起動できませんでした: 「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"エクスポートできる連絡先がありません。"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"必要な権限が無効になっています。"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"エクスポート中にエラーが発生しました: 「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"送受信エラー"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"メモリが不足しています。ファイルが大きすぎる可能性があります。"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"このフォーマットには対応していません。"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートが完了しました。"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"連絡先のエクスポートを完了しました。"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"連絡先のエクスポートを完了しました。通知をタップして連絡先を共有してください。"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"タップして連絡先を共有してください。"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートをキャンセルしました。"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"連絡先データのエクスポート"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"連絡先データをエクスポートしています。"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"データベース情報を取得できませんでした。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"エクスポートできる連絡先がありません。"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCardコンポーザーが正しく起動しませんでした。"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"エクスポート失敗"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"連絡先データはエクスポートされませんでした。\n理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>をインポート中"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCardデータを読み取れませんでした"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard<xliff:g id="FILENAME">%s</xliff:g>のインポートが終了しました"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>のインポートをキャンセルしました"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>はまもなくインポートされます。"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ファイルはまもなくインポートされます。"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCardのインポートリクエストは拒否されました。しばらくしてからもう一度お試しください。"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"連絡先のエクスポートをまもなく開始します。"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCardのエクスポートリクエストは拒否されました。しばらくしてからもう一度お試しください。"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"連絡先"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCardをローカル一時ストレージにキャッシュしています。まもなくインポート処理を開始します。"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCardをインポートできませんでした。"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC受信の連絡先"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"キャッシュしています"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>件(<xliff:g id="NAME">%3$s</xliff:g>)をインポート中"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf にエクスポート"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"並べ替え"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"フリガナ(名前)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"常に表示"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"空白の場合は非表示にする"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"姓"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"名前の形式"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"名が先"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"姓が先"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"アカウント"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"新しい連絡先のデフォルト アカウント"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ユーザー情報"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"プロファイルのセットアップ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"連絡先について"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"お気に入りの連絡先を共有"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"すべての連絡先を共有"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"連絡先を共有できませんでした。"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"連絡先のエクスポート"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"連絡先のインポート元"</string>
+ <string name="share_error" msgid="948429331673358107">"この連絡先は共有できません。"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"共有する連絡先がありません。"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"表示する連絡先"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"表示する連絡先"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ビューをカスタマイズ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"保存"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"連絡先を検索"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"お気入り"</string>
+ <string name="menu_import" msgid="6107961135813836467">"インポート"</string>
+ <string name="menu_export" msgid="2658783911863503902">"エクスポート"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"ブロックした番号"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>経由"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>、<xliff:g id="SOURCE">%2$s</xliff:g>経由"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"検索を停止"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"検索をクリア"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"アカウント"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"この SIM を常に通話に使用する"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"メモを添付して発信"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"発信時に送信するメモを入力..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"送信と発信"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ビルド バージョン"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"オープンソース ライセンス"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"オープンソース ソフトウェアのライセンスの詳細"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"プライバシー ポリシー"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"利用規約"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"オープンソース ライセンス"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"この URL を開けませんでした。"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> がオンになっています"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> がオフになっています"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ビデオハングアウトを発信"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"削除"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"省略記号"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 時間 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"このショートカットは無効になっています"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"この連絡先は削除されました"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"インポート"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"連絡先の選択"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM カードに連絡先がありません"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"この連絡先はすでに連絡先リストに登録されています"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 件の SIM の連絡先をインポートしました</item>
+ <item quantity="one">1 件の SIM の連絡先をインポートしました</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM の連絡先をインポートできませんでした"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM からのインポート"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"キャンセル"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"自動同期が OFF になっています。タップすると ON になります。"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"閉じる"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"アカウントの同期が OFF になっています。タップすると ON になります。"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"自動同期を ON にしますか?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google コンタクトだけでなく、あらゆるアプリとアカウントに変更を加えるたびに、ウェブとご利用の端末間で同期されるようになります。"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ON にする"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ネットワークに接続されていません"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"もっと見る"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM カードからインポートしました"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"インポートに失敗しました"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM カードの連絡先をインポートできませんでした"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM からインポートしています"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"通知"</string>
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
deleted file mode 100644
index aaf5d74c8..000000000
--- a/res/values-ka-rGE/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"კონტაქტები"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"კონტაქტები"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"კონტაქტის ნახვა"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"კონტაქტის რედაქტირება"</string>
- <string name="contactsList" msgid="8661624236494819731">"კონტაქტები"</string>
- <string name="shortcutContact" msgid="749243779392912958">"კონტაქტი"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"სწრაფი დარეკვა"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"სწრაფი შეტყობინება"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"კონტაქტის მალსახმობის არჩევა"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"დასარეკად აირჩიეთ ნომერი"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"აირჩიეთ ნომერი"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"კონტაქტზე დამატება"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"კონტაქტის არჩევა"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ახალი კონტაქტის შექმნა"</string>
- <string name="starredList" msgid="4817256136413959463">"ვარსკვლავიანი"</string>
- <string name="frequentList" msgid="7154768136473953056">"ხშირი"</string>
- <string name="strequentList" msgid="5640192862059373511">"რჩეულები"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"კონტაქტის დეტალები"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"კონტაქტის რედაქტირება"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"კონტაქტის შექმნა"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ჯგუფის რედაქტირება"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ჯგუფის შექმნა"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"მონაცემები"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"განახლებები"</string>
- <string name="searchHint" msgid="8482945356247760701">"კონტაქტებში ძიება"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"კონტაქტის ნახვა"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"რჩეულებში დამატება"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"რჩეულებიდან ამოშლა"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"წაიშალა რჩეულებიდან"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"რჩეულებში დამატება"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"რედაქტირება"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"წაშლა"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ფოტოს გამოცვლა"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"მთავარ ეკრანზე განთავსება"</string>
- <string name="menu_call" msgid="3992595586042260618">"დარეკვა კონტაქტთან"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ტექსტური შეტყობინების გაგზავნა კონტაქტისთვის"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"მიბმის გაუქმება"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"რედაქტირება"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"წაშლა"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"კონტაქტის დამატება"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ჯგუფის დამატება"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"გსურთ მიბმის გაუქმება და ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"მიბმის გაუქმება"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"გსურთ უკვე შეტანილი ცვლილებების შენახვა და მიბმის გაუქმებით ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"შენახვა და მიბმის გაუქმება"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"გსურთ უკვე შეტანილი ცვლილებების შენახვა და არჩეულ კონტაქტთან მიბმა?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"შენახვა და მიბმა"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"მიბმა"</string>
- <string name="menu_save" msgid="1727844363591825909">"შენახვა"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"კონტაქტების მიბმა"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"აირჩიეთ კონტაქტი, რომელიც გსურთ, მიაბათ <xliff:g id="NAME">%s</xliff:g>-ს:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ყველა კონტაქტის ჩვენება"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"შემოთავაზებული კონტაქტები"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ყველა კონტაქტი"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"კონტაქტები მიება"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">კონტაქტი წაიშალა</item>
- <item quantity="one">კონტაქტი წაიშალა</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ზარის დაყენება"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ზარების ხმოვან ფოსტაში გაგზ."</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"მხოლოდ წაკითხვადი ანგარიშებიდან კონტაქტები ვერ წაიშლება, თუმცა შესაძლებელია მათი დამალვა."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"დამალვა"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"წასაშლელი კონტაქტი შეიცავს ინფორმაციას რამდენიმე ანგარიშიდან. მხოლოდ წაკითხვადი ანგარიშებიდან მიღებული ინფორმაცია, წაშლის ნაცვლად, დაიმალება."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"მისაბმელად მინიმუმ ორი კონტაქტი უნდა გქონდეთ არჩეული."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"გსურთ არჩეული კონტაქტების მიბმა?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"მიბმა"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"გსურთ ამ კონტაქტის წაშლა?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"გსურთ არჩეული კონტაქტების წაშლა?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"მხოლოდ წაკითხვადი ანგარიშებიდან კონტაქტები ვერ წაიშლება, თუმცა შესაძლებელია მათი დამალვა."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"წასაშლელი კონტაქტები შეიცავს ინფორმაციას რამდენიმე ანგარიშიდან. მხოლოდ წაკითხვადი ანგარიშებიდან მიღებული ინფორმაცია, წაშლის ნაცვლად, დაიმალება."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ამ კონტაქტის წაშლის შემთხვევაში, რამდენიმე ანგარიშიდან მიღებული ინფორმაცია წაიშლება."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"გსურთ ამ კონტაქტის წაშლა?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"წაშლა"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ცვლილებების გაუქმება"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"კონტაქტი არ არსებობს."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"კონტაქტი დაემატა მთავარ ეკრანს."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> დაემატა მთავარ ეკრანს."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"ახალი კონტაქტის შექმნა"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"ახალი კონტაქტის შექმნა"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ორგანიზაცია"</item>
- <item msgid="7196592230748086755">"შენიშვნა"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ტაბლეტზე სურათები მიუწვდომელია."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ტელეფონზე სურათები არ არის."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"კონტაქტის ფოტო"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"მორგებული ლეიბლის სახელი"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ზარების პირდაპირ ხმოვან ფოსტაში გაგზავნა"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ფოტოების წაშლა"</string>
- <string name="noContacts" msgid="4955659076981974652">"კონტაქტები არ არის"</string>
- <string name="noGroups" msgid="8614664663561385253">"ჯგუფები არ არის."</string>
- <string name="noAccounts" msgid="7768267764545265909">"ჯგუფების შესაქმნელად გესაჭიროებათ ანგარიში."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ამ ჯგუფში ხალხი არ არის."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"წევრთა დასამატებლად შეასრულეთ ჯგუფის რედაქტირება."</string>
- <string name="savingContact" msgid="4075751076741924939">"კონტაქტის შენახვა…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"კონტაქტი შენახულია"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"კონტაქტების მიბმა გაუქმდა"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"კონტაქტის ცვლილებების შენახვა ვერ მოხერხდა."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"კონტაქტის მიბმის გაუქმება ვერ მოხერხდა."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"კონტაქტის მიბმა ვერ მოხერხდა."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"შეცდომა კონტაქტის შენახვისას."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"კონტაქტის ფოტოს ცვლილებების შენახვა ვერ მოხერხდა."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ჯგუფი შენახულია."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ჯგუფის ცვლილებების შენახვა ვერ მოხერხდა."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> კონტაქტი ტელეფონის ნომრით</item>
- <item quantity="one">1 კონტაქტი ტელეფონის ნომრით</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ტელეფონის ნომრიანი კონტაქტები არ არის"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მოიძებნა</item>
- <item quantity="one">1 მოიძებნა</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"კონტაქტები არ არის"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მოიძებნა</item>
- <item quantity="one">1 მოიძებნა</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ყველა"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"რჩეულები"</string>
- <string name="callBack" msgid="5498224409038809224">"გადარეკვა"</string>
- <string name="callAgain" msgid="3197312117049874778">"დარეკვა ხელახლა"</string>
- <string name="returnCall" msgid="8171961914203617813">"გადარეკვა"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"„<xliff:g id="EMAIL">%s</xliff:g>“ დაემატოს კონტაქტებს?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"კონტაქტის ფოტო"</string>
- <string name="description_plus_button" msgid="515164827856229880">"პლუსი"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> (სულ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> კონტაქტიდან)"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"თქვენი კონტაქტების სახელები"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ამ მოქმედების შესასრულებლად აპი ვერ მოიძებნა."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"დააწკაპუნეთ წინა ეკრანზე დასაბრუნებლად"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ტელეფონის ნომრის დამატება"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ელფოსტის დამატება"</string>
- <string name="missing_app" msgid="1466111003546611387">"ამ მოქმედების შესასრულებლად აპი ვერ მოიძებნა."</string>
- <string name="menu_share" msgid="943789700636542260">"გაზიარება"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"კონტაქტებში დამატება"</string>
- <string name="share_via" msgid="563121028023030093">"კონტაქტის გაზიარება"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ჯგუფის შექმნა ანგარიშში"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ხმოვანი ჩეთი"</string>
- <string name="video_chat" msgid="1872255818640336072">"ვიდეო ჩეთი"</string>
- <string name="connections" msgid="8098440723172028350">"კავშირები"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"კავშირის დამატება"</string>
- <string name="recent" msgid="2659189233141493004">"უახლესი"</string>
- <string name="recent_updates" msgid="4267258535615860710">"უახლესი განახლებები"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის კონტაქტი"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის ანგარიში"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"არ რედაქტირდება ამ აპიდან"</string>
- <string name="group_read_only" msgid="1061762906115697637">"არ რედაქტირდება ამ მოწყობილობაზე."</string>
- <string name="take_photo" msgid="7496128293167402354">"ფოტოს გადაღება"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ახალი ფოტოს გადაღება"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ფოტოს არჩევა"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ახალი ფოტოს არჩევა"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"მიმდინარეობს კონტაქტების სიის განახლება."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"ძიება..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"არჩეულის ჩვენება"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"ყველას ჩვენება"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ყველას არჩევა"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ყველა არჩევანის გაუქმება"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"ახლის დამატება"</string>
- <string name="add_organization" msgid="7311893231158291197">"ორგანიზაციის დამატება"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"თარიღი"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ჯგუფის სახელი"</string>
- <string name="change_photo" msgid="8530597935483526383">"შეცვლა"</string>
- <string name="primary_photo" msgid="8517942231868516999">"პირველადი ფოტო"</string>
- <string name="description_star" msgid="2605854427360036550">"რჩეული"</string>
- <string name="edit_contact" msgid="7529281274005689512">"კონტაქტის რედაქტირება"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"გსურთ მიმდინარე და არჩეული კონტაქტების მიბმა?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"გადაერთვებით არჩეული კონტაქტის რედაქტირებაზე? მოხდება თქვენს მიერ შეყვანილი ინფორმაციის კოპირება."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"კოპირება ჩემს კონტაქტებში"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ჩემს კონტაქტებში დამატება"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"კატალოგი <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"მორგებული"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"პარამეტრები"</string>
- <string name="menu_settings" msgid="377929915873428211">"პარამეტრები"</string>
- <string name="menu_help" msgid="1680178646764069976">"დახმარება/უკუკავშირი"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ეკრანის პარამეტრები"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ტელეფონის ნომერი"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"კონტაქტებში დამატება"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"დაემატოს კონტაქტს"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"დახურვა"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"წელის ჩათვლით"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"კონტაქტი"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"იტვირთება…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ახალი კონტაქტის შექმნა"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ანგარიშის დამატება"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"კონტაქტების იმპორტი"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"ახალი ჯგუფის შექმნა"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"ახალი ჯგუფის შექმნა"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ჯგუფი</item>
- <item quantity="one">1 ჯგუფი</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"გსურთ ჯგუფის „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“ წაშლა? (კონტაქტები არ წაიშლება)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-დან</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>-დან</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ადამიანი</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ადამიანი</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"სხვა კონტაქტთან მიბმამდე აკრიფეთ კონტაქტის სახელი."</string>
- <string name="copy_text" msgid="3257145021583508761">"კოპირება გაცვლის ბუფერში"</string>
- <string name="set_default" msgid="4417505153468300351">"ნაგულისხმევად დაყენება"</string>
- <string name="clear_default" msgid="7193185801596678067">"ნაგულისხმევის წაშლა"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"კოპირებული ტექსტი"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"გსურთ ცვლილებების გაუქმება და რედაქტირებიდან გასვლა?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ცვლ.უარყოფა"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"რედაქტირების გაგრძელება"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"ჩემი პროფ. დაყენება"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"აკრიფეთ კონტაქტის სახელი"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ჯგუფის სახელი"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"ჩემი ადგილობრივი პროფილი"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ჩემი <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> პროფილი"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ყველა კონტაქტის ჩვენება"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"შეინახეთ თქვენი კონტაქტები საიმედოდ ტელეფონის დაკარგვის შემთხვევაშიც კი: მოახდინეთ სინქრონიზაცია ონლაინ სერვისთან."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ანგარიშის დამატება"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"თქვენი ახალი კონტაქტი არ დამარქაფდება. გსურთ ანგარიშის დამატება, რომელიც კონტაქტების სარეზერვო ასლებს ინტერნეტში შეინახავს?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ახალი კონტაქტები შეინახება აქ: <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"აირჩიეთ ნაგულისხმევი ანგარიში ახალი კონტაქტებისთვის:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"კონტაქტის დამატება"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"კონტაქტის შესწორება"</string>
- <string name="keep_local" msgid="1258761699192993322">"შენახვა ადგილობრივად"</string>
- <string name="add_account" msgid="8201790677994503186">"ანგარიშის დამატება"</string>
- <string name="add_new_account" msgid="5748627740680940264">"ახალი ანგარიშის დამატება"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"მონაცემთა ბაზის ფაილების ექსპორტი"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ახალი კონტაქტის დამატება"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"იხილე მეტი"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ნაკლების ჩვენება"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ყველას ჩვენება"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ბოლო"</string>
- <string name="about_card_title" msgid="2920942314212825637">"შესახებ"</string>
- <string name="send_message" msgid="8938418965550543196">"შეტყობინების გაგზავნა"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"იქმნება პერსონალური ასლი..."</string>
- <string name="yesterday" msgid="6840858548955018569">"გუშინ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"ხვალ"</string>
- <string name="today" msgid="8041090779381781781">"დღეს"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"დღეს <xliff:g id="TIME_INTERVAL">%s</xliff:g>-ზე"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ხვალ <xliff:g id="TIME_INTERVAL">%s</xliff:g>-ზე"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(უსათაურო მოვლენა)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"დაყენება"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ორგანიზაცია"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"მეტსახელი"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"ჩანიშვნა"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ვებსაიტი"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"მოვლენა"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"კავშირი"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ანგარიში"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"სახელი"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ელფოსტა"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ტელეფონი"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ფოტო"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"კონტაქტების რედაქტირების გაფართოებისათვის, დააჭირეთ."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"კონტაქტების რედაქტირების შეკუმშვისათვის, დააჭირეთ."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"მიმართულებები მდებარეობამდე"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"ბოლო sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. დააწკაპუნეთ საპასუხოდ"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"შემომავალი"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"გამავალი"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"გამოტოვებული"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ბოლო ზარი. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. დააწკაპუნეთ გადასარეკად"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"თქვენ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangout უკეთესად იმუშავებს იმ შემთხვევაში, თუ ტელეფონის ან ელფოსტის ველში პიროვნების Hangout-ის ინდენტიფიკატორს შეიყვანთ."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"სხვა ველები"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ფოტოს გამოცვლა"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"რედაქტორი ვერ გაიხსნა."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ინახება აქ:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ამჟამად ინახება აქ: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. ორმაგად შეეხეთ სხვა ანგარიშის ასარჩევად."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">მიბმული კონტაქტები (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">მიბმული კონტაქტი</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> მიბმული კონტაქტი"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"კონტაქტების მიბმა"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"გაუქმება"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> შესაძლო დუბლიკატი</item>
- <item quantity="one">1 შესაძლო დუბლიკატი</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მიბმული კონტაქტი</item>
- <item quantity="one">1 მიბმული კონტაქტი</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ეს კონტაქტი"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"შესაძლო დუბლიკატები"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ეს კონტაქტები შეიძლება ერთი და იგივე პიროვნება იყოს. შეგიძლიათ მიბმის მეშვეობით მათი ერთ კონტაქტად გაერთიანება."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"მიბმული კონტაქტები"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"თქვენი ანგარიშებიდან"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ფოტოს გადაღება"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ყველა ფოტო"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"აირჩიეთ ფოტო"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g>-დან"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"წაიშალოს <xliff:g id="DATA_KIND">%s</xliff:g> (<xliff:g id="DATA_TYPE">%s </xliff:g>)"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"წაიშალოს <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ფოტო <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-დან არ არის მონიშნული"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"ფოტო <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-დან მონიშნულია"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ფოტო უცნობი ანგარიშიდან არ არის მონიშნული"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ფოტო უცნობი ანგარიშიდან მონიშნულია"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"მიმდინარეობს კონტაქტების სიის განახლება ენის შეცვლის ასახვის მიზნით.\n\nგთხოვთ, დაილოდოთ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"დაბლოკილი ნომრები"</string>
-</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
new file mode 100644
index 000000000..479c7a600
--- /dev/null
+++ b/res/values-ka/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"კონტაქტები"</string>
+ <string name="contactsList" msgid="8661624236494819731">"კონტაქტები"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"კონტაქტის დამატება"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"კონტაქტი"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"სწრაფი დარეკვა"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"სწრაფი შეტყობინება"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"კონტაქტის არჩევა"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"კონტაქტზე დამატება"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"კონტაქტის არჩევა"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"არჩევა"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ახალი კონტაქტის შექმნა"</string>
+ <string name="searchHint" msgid="8482945356247760701">"კონტაქტებში ძიება"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"რჩეულებში დამატება"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"რჩეულებიდან ამოშლა"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"წაიშალა რჩეულებიდან"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"რჩეულებში დამატება"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"რედაქტირება"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"წაშლა"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ფოტოს გამოცვლა"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"მალსახმობის შექმნა"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"მიბმის გაუქმება"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"კონტაქტების წაშლა"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ლეიბლის გადარქმევა"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ლეიბლის წაშლა"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"კონტაქტის დამატება"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"კონტაქტების არჩევა"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"კონტაქტების დამატება"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ლეიბლიდან ამოშლა"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ლეიბლის შექმნა"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"გსურთ მიბმის გაუქმება და ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"მიბმის გაუქმება"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"გსურთ უკვე შეტანილი ცვლილებების შენახვა და მიბმის გაუქმებით ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"შენახვა და მიბმის გაუქმება"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"გსურთ უკვე შეტანილი ცვლილებების შენახვა და არჩეულ კონტაქტთან მიბმა?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"შენახვა და მიბმა"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"უკავშირდება"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"დაკავშირება უქმდება"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"მიბმა"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"დაკავშირებ. კონტაქტების ნახვა"</string>
+ <string name="menu_save" msgid="1727844363591825909">"შენახვა"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"კონტაქტების მიბმა"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"აირჩიეთ კონტაქტი, რომელიც გსურთ, მიაბათ <xliff:g id="NAME">%s</xliff:g>-ს:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"შემოთავაზებული კონტაქტები"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ყველა კონტაქტი"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> დაკავშირებულია"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"კონტაქტები მიება"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> წაიშალა"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> და <xliff:g id="NAME_1">%2$s</xliff:g> წაიშალა"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… წაიშალა"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">კონტაქტი წაიშალა</item>
+ <item quantity="one">კონტაქტი წაიშალა</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> კონტაქტი</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> კონტაქტი</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google-იდან"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>-იდან"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ზარის დაყენება"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ხმოვან ფოსტაში გადამისამართება"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ხმოვ. ფოსტაში გადამისამ. გაუქ."</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ეს კონტაქტი მხოლოდ-წაკითხვადია. ის ვერ წაიშლება, თუმცა შეგიძლიათ მისი დამალვა."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"კონტაქტის დამალვა"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ამ კონტაქტში დამალული იქნება მხოლოდ-წაკითხვადი ანგარიშები, თუმცა არ წაიშლება."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"გსურთ ამ კონტაქტის წაშლა?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"გსურთ არჩეული კონტაქტების წაშლა?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"მხოლოდ წაკითხვადი ანგარიშებიდან კონტაქტები ვერ წაიშლება, თუმცა შესაძლებელია მათი დამალვა."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"წასაშლელი კონტაქტები შეიცავს ინფორმაციას რამდენიმე ანგარიშიდან. მხოლოდ წაკითხვადი ანგარიშებიდან მიღებული ინფორმაცია, წაშლის ნაცვლად, დაიმალება."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ამ კონტაქტის წაშლის შემთხვევაში, რამდენიმე ანგარიშიდან მიღებული ინფორმაცია წაიშლება."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"გსურთ ამ კონტაქტის წაშლა?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"წაშლა"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"კონტაქტი არ არსებობს."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"კონტაქტი დაემატა მთავარ ეკრანს."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> დაემატა მთავარ ეკრანს."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"მოწყობილობაზე სურათები მიუწვდომელია."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"კონტაქტის ფოტო"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"მორგებული ლეიბლის სახელი"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ფოტოების წაშლა"</string>
+ <string name="noContacts" msgid="2228592924476426108">"თქვენი კონტაქტების სია ცარიელია"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"კონტაქტი ამ ლეიბლით არ არსებობს"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ამ ანგარიშში კონტაქტები არ არის"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"თქვენი კონტაქტების სია ცარიელია"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> შენახულია"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"კონტაქტი შენახულია"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"კონტაქტების მიბმა გაუქმდა"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"კონტაქტის ცვლილებების შენახვა ვერ მოხერხდა"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"კონტაქტის დაკავშირების გაუქმება ვერ მოხერხდა"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"კონტაქტის დაკავშირება ვერ მოხერხდა"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"კონტაქტის შენახვისას მოხდა შეცდომა"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"კონტაქტის ფოტოს ცვლილებების შენახვა ვერ მოხერხდა"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ლეიბლი ვერ ჩაიტვირთა"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ლეიბლი წაშლილია"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ლეიბლი შექმნილია"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ლეიბლის შექმნა შეუძლებელია"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ლეიბლი განახლდა"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ლეიბლიდან წაიშალა"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"დაემატა ლეიბლს"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ლეიბლის ცვლილებების შენახვა ვერ მოხერხდა"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ეს ლეიბლი უკვე არსებობს"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ზოგიერთ კონტაქტს არ აქვს ელფოსტის მისამართი."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ზოგიერთ კონტაქტს არ აქვს ტელეფონის ნომერი."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ელფოსტის გაგზავნა"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"შეტყობინების გაგზავნა"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"აირჩიეთ კონტაქტები"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"გაგზავნა"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"კონტაქტები არ არის"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"„<xliff:g id="EMAIL">%s</xliff:g>“ დაემატოს კონტაქტებს?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"თქვენი კონტაქტების სახელები"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"დააწკაპუნეთ წინა ეკრანზე დასაბრუნებლად"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ტელეფონის ნომრის დამატება"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ელფოსტის დამატება"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ამ მოქმედების შესასრულებლად აპი ვერ მოიძებნა."</string>
+ <string name="menu_share" msgid="943789700636542260">"გაზიარება"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"კონტაქტებში დამატება"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"დამატება"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">კონტაქტების გაზიარება აპით</item>
+ <item quantity="one">კონტაქტის გაზიარება აპით</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"აირჩიეთ ანგარიში"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ლეიბლის შექმნა"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ლეიბლის გადარქმევა"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ლეიბლის სახელი"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ლეიბლის სახელი"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ხმოვანი ჩეთი"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ვიდეო ჩეთი"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის კონტაქტი"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის ანგარიში"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ფოტოს გადაღება"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ახალი ფოტოს გადაღება"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ფოტოს არჩევა"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ახალი ფოტოს არჩევა"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"ძიება..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"თარიღი"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ლეიბლი"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"გაუქმება"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"უკან"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"დახურვა"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"გადაერთვებით არჩეული კონტაქტის რედაქტირებაზე? მოხდება თქვენს მიერ შეყვანილი ინფორმაციის კოპირება."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"კატალოგი <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"პარამეტრები"</string>
+ <string name="menu_settings" msgid="377929915873428211">"პარამეტრები"</string>
+ <string name="menu_help" msgid="1680178646764069976">"დახმარება/უკუკავშირი"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ტელეფონის ნომერი"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"კონტაქტებში დამატება"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"დახურვა"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"წელის ჩათვლით"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ანგარიშის დამატება"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"იმპორტი"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"ახლის შექმნა…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"გსურთ ლეიბლის „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“ წაშლა? (თვითონ კონტაქტები არ წაიშლება)."</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"სხვა კონტაქტთან მიბმამდე აკრიფეთ კონტაქტის სახელი."</string>
+ <string name="copy_text" msgid="3257145021583508761">"კოპირება გაცვლის ბუფერში"</string>
+ <string name="set_default" msgid="4417505153468300351">"ნაგულისხმევად დაყენება"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ნაგულისხმევის წაშლა"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"კოპირებული ტექსტი"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"დავივიწყოთ ცვლილებები?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ცვლ.უარყოფა"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"გაუქმება"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"გსურთ მორგებული პარამეტრების გაუქმება?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"კონტაქტების ძიება"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"კონტაქტების წაშლა"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"ჩემი ადგილობრივი პროფილი"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ჩემი <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> პროფილი"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"დაუთმეთ ორიოდე წუთი ანგარიშის დამატებას, რომლითაც შეიქმნება თქვენი კონტაქტების სარეზერვო ასლები Google-ში."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ახალი კონტაქტები შეინახება აქ: <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"აირჩიეთ ნაგულისხმევი ანგარიში ახალი კონტაქტებისთვის:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"კონტაქტის შექმნა"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"კონტაქტის შესწორება"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"მხოლოდ ნახვა"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"რედაქტირებისთვის აირჩიეთ კონტაქტი"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"დაკავშირებული კონტაქტები"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"დამატება"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"კავშ. გაუქმება"</string>
+ <string name="add_account" msgid="8201790677994503186">"ანგარიშის დამატება"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"ახალი ანგარიშის დამატება"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"მონაცემთა ბაზის ფაილების ექსპორტი"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"ახალი კონტაქტის შექმნა"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"იხილე მეტი"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ნაკლების ჩვენება"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ბოლო"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"შესახებ"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"პირადი ასლის შექმნა…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"ხვალ"</string>
+ <string name="today" msgid="8041090779381781781">"დღეს"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"დღეს <xliff:g id="TIME_INTERVAL">%s</xliff:g>-ზე"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ხვალ <xliff:g id="TIME_INTERVAL">%s</xliff:g>-ზე"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(უსათაურო მოვლენა)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"დაყენება"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ორგანიზაცია"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"მეტსახელი"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"ჩანიშვნა"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ვებსაიტი"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"მოვლენა"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"კავშირი"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"სახელი"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ელფოსტა"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ტელეფონი"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"მიმართულებები მდებარეობამდე"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"ბოლო sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. დააწკაპუნეთ საპასუხოდ"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"შემომავალი"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"გამავალი"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"გამოტოვებული"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ბოლო ზარი. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. დააწკაპუნეთ გადასარეკად"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"თქვენ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"სხვა ველები"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"კონტაქტის ფოტოს შეცვლა"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"კონტაქტის ფოტოს დამატება"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"კონტაქტის ფოტო"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"რედაქტორი ვერ გაიხსნა."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ინახება აქ:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"კონტაქტის ინფორმაცია <xliff:g id="ACCOUNT">%s</xliff:g>-იდან ვერ დარედაქტირდება"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"კონტაქტების მიბმა"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"გაუქმება"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ეს კონტაქტი"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"შესაძლო დუბლიკატები"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ეს კონტაქტები შეიძლება ერთი და იგივე პიროვნება იყოს. შეგიძლიათ მიბმის მეშვეობით მათი ერთ კონტაქტად გაერთიანება."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"წაიშალოს <xliff:g id="DATA_KIND">%2$s</xliff:g> (<xliff:g id="DATA_TYPE">%1$s </xliff:g>)"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"წაიშალოს <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"შეთავაზებები"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ახალი"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"ნავიგაციის უჯრის გახსნა"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ნავიგაციის უჯრის დახურვა"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ლეიბლი"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ლეიბლები"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ანგარიშები"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"თქვენი ერთიანი ისტორიის ნახვა"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"მოვლენები და შეტყობინებები"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"მოვლენები"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"შეტყობინებები"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"შეთავაზებები"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"მოახდინეთ თქვენი კონტაქტების ორგანიზება, რათა ადვილად გამოიყენოთ ისინი"</string>
+ <string name="undo" msgid="1425165101664071422">"მოქმედების გაუქმება"</string>
+ <string name="call_custom" msgid="6385303130912713318">"ზარი <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-თან"</string>
+ <string name="call_home" msgid="1990519474420545392">"დარეკვა სახლში"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"დარეკვა მობილურზე"</string>
+ <string name="call_work" msgid="5328785911463744028">"დარეკვა სამსახურში"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"დარეკვა სამსახურის ფაქსზე"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"დარეკვა სახლის ფაქსზე"</string>
+ <string name="call_pager" msgid="9003902812293983281">"დარეკვა პეიჯერზე"</string>
+ <string name="call_other" msgid="8563753966926932052">"დარეკვა"</string>
+ <string name="call_callback" msgid="1910165691349426858">"დარეკვა უკუგამოძახების ნომერზე"</string>
+ <string name="call_car" msgid="3280537320306436445">"დარეკვა მანქანის ტელეფონზე"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"დარეკვა კომპანიის მთავარ ნომერზე"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"დარეკვა ISDN ნომერზე"</string>
+ <string name="call_main" msgid="6082900571803441339">"დარეკვა მთავარ ნომერზე"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"დარეკვა ფაქსზე"</string>
+ <string name="call_radio" msgid="8296755876398357063">"დარეკვა გადამცემზე"</string>
+ <string name="call_telex" msgid="2223170774548648114">"დარეკვა ტელექსზე"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"დარეკვა TTY/TDD-ზე"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"დარეკვა სამსახურის მობილურზე"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"დარეკვა სამსახურის პეიჯერზე"</string>
+ <string name="call_assistant" msgid="670941612175068337">"ზარი <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-თან"</string>
+ <string name="call_mms" msgid="6274041545876221437">"დარეკვა MMS ნომერზე"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ზარი)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ტექსტური შეტყობინება <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ზე"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ტექსტური შეტყობინების გაგზავნა სახლში"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ტექსტური შეტყობინების გაგზავნა მობილურზე"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ტექსტური შეტყობინების გაგზავნა სამსახურის ნომერზე"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ტექსტური შეტყობინების გაგზავნა სამუშაო ფაქსზე"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ტექსტური შეტყობინების გაგზავნა სახლის ფაქსზე"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ტექსტური შეტყობინების გაგზავნა პეიჯერზე"</string>
+ <string name="sms_other" msgid="806127844607642331">"ტექსტური შეტყობინების გაგზავნა"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ტექსტური შეტყობინების გაგზავნა უკუგამოძახების ნომერზე"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ტექსტური შეტყობინების გაგზავნა მანქანის ნომერზე"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ტექსტური შეტყობინება კომპანიის ძირითად ნომერზე"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ტექსტური შეტყობინების გაგზავნა ISDN ნომერზე"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ტექსტური შეტყობინების გაგზავნა მთავარ ნომერზე"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ტექსტური შეტყობინების გაგზავნა ფაქსზე"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ტექსტური შეტყობინების გაგზავნა გადამცემზე"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ტექსტური შეტყობინების გაგზავნა ტელექსზე"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"ტექსტური შეტყობინების გაგზავნა TTY/TDD-ზე"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ტექსტური შეტყობინების გაგზავნა სამსახურის მობილურზე"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ტექსტური შეტყობინების გაგზავნა სამსახურის პეიჯერზე"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"ტექსტური შეტყობინების გაგზავნა <xliff:g id="ASSISTANT">%s</xliff:g>-ისთვის"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"ტექსტური შეტყობინების გაგზავნა MMS ნომერზე"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (შეტყობინება)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ვიდეოზარის განხორციელება"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"გსურთ ხშირი კონტაქტების წაშლა?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"თქვენ წაშლით ხშირად დაკავშირებულთა სიას კონტაქტებიდან და ტელეფონის აპიდან და აიძულებთ ელფოსტის აპებს შეისწავლონ თქვენი ადრესატების პრიორიტეტები ნულიდან."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"ხშირი კონტაქტები იშლება…"</string>
+ <string name="status_available" msgid="5586870015822828392">"ხელმისაწვდომი"</string>
+ <string name="status_away" msgid="1838861100379804730">"გასული"</string>
+ <string name="status_busy" msgid="9147992455450257136">"დაკავებული"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"სხვა"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"კატალოგი"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"სამსახურის კატალოგი"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ყველა კონტაქტი"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"სწრაფი კონტაქტი <xliff:g id="NAME">%1$s</xliff:g>-თან"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(სახელის გარეშე)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ხშირი კონტაქტები"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ყველა ტელეფონის ნომრიანი კონტაქტი"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"სამსახურის პროფილის კონტაქტები"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"განახლებების ნახვა"</string>
+ <string name="account_phone" msgid="7128032778471187553">"მოწყობილობა"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"სახელი"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"მეტსახელი"</string>
+ <string name="name_given" msgid="4280790853455320619">"სახელი"</string>
+ <string name="name_family" msgid="7466985689626017037">"გვარი"</string>
+ <string name="name_prefix" msgid="59756378548779822">"სახელის პრეფიქსი"</string>
+ <string name="name_middle" msgid="8467433655992690326">"მეორე სახელი"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"სახელის სუფიქსი"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"სახელის ტრანსკრიფცია"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"სახელი (ტრანსკრიფცია)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"მეორე სახელის ტრანსკრიფცია"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"გვარი (ტრანსკრიფცია)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ტელეფონი"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ელფოსტა"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"მისამართი"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ორგანიზაცია"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ურთიერთობა"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"სპეციალური თარიღი"</string>
+ <string name="sms" msgid="1756857139634224222">"ტექსტური შეტყობინება"</string>
+ <string name="postal_address" msgid="8765560217149624536">"მისამართი"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"კომპანია"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"სათაური"</string>
+ <string name="label_notes" msgid="8337354953278341042">"შენიშვნები"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"მორგებული"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ვებ-საიტი"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ლეიბლები"</string>
+ <string name="email_home" msgid="8573740658148184279">"გაგზავნა სახლის ელფოსტაზე"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ელფოსტის გაგზავნა მობილურზე"</string>
+ <string name="email_work" msgid="2807430017302722689">"გაგზავნა სამსახურის ელფოსტაზე"</string>
+ <string name="email_other" msgid="3454004077967657109">"ელფოსტის გაგზავნა"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ელფოსტის გაგზავნა <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ზე"</string>
+ <string name="email" msgid="5668400997660065897">"ელფოსტის გაგზავნა"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ქუჩა"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ქალაქი"</string>
+ <string name="postal_region" msgid="6045263193478437672">"შტატი"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ZIP-კოდი"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ქვეყანა"</string>
+ <string name="map_home" msgid="1243547733423343982">"სახლის მისამართის ნახვა"</string>
+ <string name="map_work" msgid="1360474076921878088">"სამსახურის მისამართის ნახვა"</string>
+ <string name="map_other" msgid="3817820803587012641">"მისამართის ნახვა"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ის მისამართის ნახვა"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"ჩეთი AIM-ით"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"ჩეთი Windows Live-ით"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"ჩეთი Yahoo-ს საშუალებით"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"ჩეთი Skype-ით"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"ჩეთი QQ-ით"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"ჩეთი Google Talk-ით"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ჩეთი ICQ-ით"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"ჩეთი Jabber-ით"</string>
+ <string name="chat" msgid="9025361898797412245">"ჩეთი"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"წაშლა"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"სახელის მეტი ველის ჩვენება"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"სახელების ველების ჩაკეცვა"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ფონეტიკური სახელის მეტი ველის ჩვენება"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ფონეტიკური სახელების ველების ჩაკეცვა"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"გაფართოება"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ჩაკეცვა"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"გაფართოებულია"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ჩაკეცილია"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ყველა კონტაქტი"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ვარსკვლავიანი"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"მორგება"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"კონტაქტი"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ყველა სხვა კონტაქტი"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ყველა კონტაქტი"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"სინქრონიზაციის ჯგუფის წაშლა"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"სინქრონიზაციის ჯგუფის დამატება"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"სხვა ჯგუფები…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"სინქრონიზაციიდან „<xliff:g id="GROUP">%s</xliff:g>“-ის ამოშლა წაშლის ყველა დაუჯგუფებელ კონტაქტს."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ეკრანის პარამეტრების შენახვა…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"მორგებული ხედი"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"იმპორტირებული კონტაქტების შენახვა აქ:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM ბარათიდან"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>-დან"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d კონტაქტი</item>
+ <item quantity="one">1 კონტაქტი</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> კონტაქტი • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> კონტაქტი • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ფაილიდან"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"იმპორტისთვის არაფერია"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"გსურთ კონტაქტების იმპორტი vCard-იდან?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g>-ის იმპორტის გაუქმება?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"გსურთ <xliff:g id="FILENAME">%s</xliff:g>-ის ექსპორტის გაუქმება?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard-ის იმპორტი/ექსპორტი ვერ მოხერხდა"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"უცნობი შეცდომა."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ ვერ გაიხსნა: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ექსპორტერის გაშვება ვერ მოხერხდა: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ექსპორტირებადი კონტაქტი არ არსებობს."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"თქვენ გათიშული გაქვთ მოთხოვნილი ნებართვა."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ექსპორტი ვერ მოხერხდა: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O შეცდომა"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"მეხსიერება არასაკმარისია. შესაძლოა ფაილი ძალიან დიდია."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ეს ფორმატი მხარდაუჭერელია."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-ის ექსპორტი დასრულდა."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"კონტაქტების ექსპორტი დასრულდა."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"კონტაქტების ექსპორტი დასრულდა. კონტაქტების გასაზიარებლად, შეეხეთ შეტყობინებას."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"შეეხეთ კონტაქტების გასაზიარებლად."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g>-ის ექსპორტი გაუქმდა."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"კონტაქტების მონაცემთა ექსპორტი"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"მიმდინარეობს კონტაქტების მონაცემების ექსპორტი."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"მონაცემთა ბაზის ინფორმაციის მიღება ვერ მოხერხდა."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ექსპორტირებადი კონტაქტები არ არის."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard კომპოზიტორი გაშვებულია არასწორად."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ექსპორტი ჩაიშალა."</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"კონტაქტების მონაცემები არ არის ექსპორტირებული.\nმიზეზი: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"იმპორტირდება <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard მონაცემთა წაკითხვა ვერ მოხერხდა"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g>-ის იმპორტი დასრულდა"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-ის იმპორტი გაუქმდა"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> მალე იმპორტირდება."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ამ ფაილის იმპორტი მალე შესრულდება."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-ის იმპორტის მოთხოვნა უარყოფილია. სცადეთ მოგვიანებით."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"კონტაქტების ექსპორტი მალე განხორციელდება."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-ის ექსპორტის მოთხოვნა უარყოფილია. სცადეთ მოგვიანებით."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"კონტაქტი"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"მიმდინარეობს vCard ფაილ(ებ)ის ქეშირება დროებით ადგილობრივ მეხსიერებაში. ფაქტიური იმპორტი დაიწყება მალე."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-ის იმპორტი ვერ მოხერხდა."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"კონტაქტი NFC-ით"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ქეშირება"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"მიმდინარეობს იმპორტი <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"ექსპორტი .vcf ფაილში"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"დალაგება:"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"სახელის ტრანსკრიფცია"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ყოველთვის ჩვენება"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"დამალვა, თუ ცარიელია"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"სახელით"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"გვარით"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"სახელის ფორმატი"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ჯერ სახელი"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ჯერ გვარი"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ანგარიშები"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"ახალი კონტაქტების ნაგულისხმ. ანგარიში"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ჩემი ინფორმაცია"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"თქვენი პროფილის დაყენება"</string>
+ <string name="setting_about" msgid="7014388749752042863">"კონტაქტების შესახებ"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"რჩეული კონტაქტების გაზიარება"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ყველა კონტაქტის გაზიარება"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"კონტაქტების გაზიარება ვერ მოხერხდა."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"კონტაქტების ექსპორტი"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"კონტაქტების იმპორტი:"</string>
+ <string name="share_error" msgid="948429331673358107">"ამ კონტაქტის გაზიარება შეუძლებელია."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"გასაზიარებელი კონტაქტები არ არის."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"საჩვენებელი კონტაქტები"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"საჩვენებელი კონტაქტები"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ხედის დაყენება"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"შენახვა"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"კონტაქტებში ძიება"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"რჩეულები"</string>
+ <string name="menu_import" msgid="6107961135813836467">"იმპორტი"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ექსპორტი"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"დაბლოკილი ნომრები"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის საშუალებით"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ის მეშვეობით"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ძიების შეჩერება"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ძიების გასუფთავება"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ანგარიში"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ზარებისთვის მუდამ ამის გამოყენება"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ზარი შენიშვნასთან ერთად"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"აკრიფეთ ჩანიშვნა ზართან ერთად გასაგზავნად…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"გაგზავნა და დარეკვა"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ანაწყობის ვერსია"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ღია კოდის ლიცენზიები"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ღია კოდის პროგრამული უზრუნველყოფის ლიცენზირების დეტალები"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"კონფიდენციალურობის დებულება"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"მომსახურების პირობები"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ღია კოდის ლიცენზიები"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Url-ის გახსნა ვერ მოხერხდა."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> მონიშნულია"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> არ არის მონიშნული"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ვიდეოზარის განხორციელება"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"წაშლა"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"სამწერტილი"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> წთ. და <xliff:g id="SECONDS">%2$s</xliff:g> წმ."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> სთ. <xliff:g id="MINUTES_1">%2$s</xliff:g> წთ. <xliff:g id="SECONDS">%3$s</xliff:g> წმ."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ეს მალსახმობი გათიშულია"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"კონტაქტი წაშლილია"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"იმპორტი"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"კონტაქტების არჩევა"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"თქვენს SIM ბარათზე კონტაქტები არ არის"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"კონტაქტი უკვე არსებობს თქვენს სიაში"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">იმპორტირებულია <xliff:g id="COUNT">%d</xliff:g> SIM კონტაქტი</item>
+ <item quantity="one">იმპორტირებულია 1 SIM კონტაქტი</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM კონტაქტების იმპორტირება ვერ მოხერხდა"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM-იდან იმპორტი"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"გაუქმება"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ავტო-სინქ. გამორთულია. შეეხეთ ჩასართავად."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"უარყოფა"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ანგარიშის სინქრონიზაცია გამორთულია. შეეხეთ ჩასართავად."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"გსურთ ავტომატური სინქრონიზაციის გამორთვა?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"ის ცვლილებები, რომლებსაც შეიტანთ ყველა აპსა და ანგარიშში და არა მხოლოდ Google Contacts-ში, სინქრონიზებულად განახლდება ვებსა და თქვენს მოწყობილობას შორის."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ჩართვა"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"კავშირი არ არის"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"მეტის ჩვენება"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM ბარათის იმპორტი დასრულდა"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"იმპორტი ვერ შესრულდა"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM ბარათიდან კონტაქტების იმპორტი ვერ შესრულდა"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"მიმდინარეობს SIM-ის იმპორტი"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"შეტყობინებები"</string>
+</resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
deleted file mode 100644
index 8952d6aa4..000000000
--- a/res/values-kk-rKZ/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Контактілер"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контактілер"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Контактіні көру"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Контактіні өңдеу"</string>
- <string name="contactsList" msgid="8661624236494819731">"Контактілер"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Тікелей теру"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Тікелей хабар"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Контакт төте пернесін таңдау"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Қоңырау шалатын нөмірді таңдау"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Хабар жіберетін нөмірді таңдау"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Контактілерге қосу"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Контакт таңдау"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңа контакт жасау"</string>
- <string name="starredList" msgid="4817256136413959463">"Жұлдызшалы"</string>
- <string name="frequentList" msgid="7154768136473953056">"Жиі"</string>
- <string name="strequentList" msgid="5640192862059373511">"Сүйіктілер"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Контакт егжей-тегжейі"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Контактіні жөндеу"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Контакт жасақтау"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Топты жөндеу"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Топ жасақтау"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Контакт:"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Жаңартулар"</string>
- <string name="searchHint" msgid="8482945356247760701">"Контактілерді іздеу"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Контактіні көру"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Таңдаулыларға қосу"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Таңдаулылардан өшіру"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Таңдаулылардан жойылды"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Таңдаулыларға қосылды"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Жөндеу"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Жою"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Фотосуретті өзгерту"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Негізгі экранға орналастыру"</string>
- <string name="menu_call" msgid="3992595586042260618">"Контактіге қоңырау шалу"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Контактіге мәтін-хабар жіберу"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажырату"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Жөндеу"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Жою"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Контакт қосу"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Топ қосу"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Байланысты жою"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Енгізіп қойған өзгертулерді сақтау және осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Сақтау және байланысты жою"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Енгізіп қойған өзгертулерді сақтау және таңдалған контактімен байланыстыру керек пе?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Сақтау және байланыстыру"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Байланыстыру"</string>
- <string name="menu_save" msgid="1727844363591825909">"Сақтау"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Контактілерді байланыстыру"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> өзара байланысатын контактіні таңдаңыз:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Барлық контактілерді көрсету"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ұсынылған контактілер"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Барлық контактілер"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактілер байланыстырылды"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Контактілер жойылды</item>
- <item quantity="one">Контакт жойылды</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Рингтонды орнату"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Тек дауыс поштасы"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Тек оқуға арналған есептік жазбалардағы контактілерді жою мүмкін емес, бірақ оларды жасыруға болады."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Жасыру"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Жойылатын контактіде бірнеше есептік жазбадан алынған мәліметтер бар. Тек оқуға арналған есептік жазбалардан алынған мәліметтер жойылмайды, жасырылады."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Байланыстыру үшін кемінде екі контактіні таңдау керек."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Таңдалған контактілерді байланыстыру керек пе?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Байланыстыру"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Осы контактіні жою керек пе?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Таңдалған контактілерді жою керек пе?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Тек оқуға арналған есептік жазбалардағы контактілерді жою мүмкін емес, бірақ оларды жасыруға болады."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Жойылатын контактілерде бірнеше есептік жазбадан алынған мәліметтер бар. Тек оқуға арналған есептік жазбалардан алынған мәліметтер жойылмайды, жасырылады."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бұл контактіні жою бірнеше есептік жазбадан мәліметтерді жояды."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Осы контактіні жою керек пе?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жою"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Өзгертулерден бас тарту"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Мұндай контакт жоқ."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт негізгі экранға қосылды."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> негізгі экранға қосылды."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Жаңа контакт құру"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Жаңа контакт құру"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Ұйым"</item>
- <item msgid="7196592230748086755">"Ескерту"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Планшетте ешқандай фотосуреттер жоқ."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Телефонда ешқандай фотосуреттер жоқ."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Контакт фотосуреті"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Реттелмелі белгі атауы"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Қоңырауларды тікелей дауыс хабарына жіберу"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Фотосуретті алу"</string>
- <string name="noContacts" msgid="4955659076981974652">"Контактілер жоқ"</string>
- <string name="noGroups" msgid="8614664663561385253">"Топтар жоқ."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Топтар жасақтау үшін есептік жазба қажет."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Бұл топта адамдар жоқ."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Кейбіреулерін қосу үшін, топты жөндеңіз."</string>
- <string name="savingContact" msgid="4075751076741924939">"Контактіні сақтауда…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Контакт сақталды"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактілердің байланысы жойылды"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Контакт өзгерістерін сақтай алмады."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Контакт байланысын жою мүмкін болмады."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Контактіні байланыстыру мүмкін болмады."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Контактіні сақтау кезіндегі қате."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Жаңа контакт фотосуреті сақталмады."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Топ сақталды."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Топ өзгерістерін сақтау мүмкін болмады."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">Телефон нөмірі бар <xliff:g id="COUNT">%d</xliff:g> контакт</item>
- <item quantity="one">Телефон нөмірі бар 1 контакт</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Телефон нөмірлері бар контактілер жоқ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
- <item quantity="one">1 табылды</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Контактілер жоқ"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
- <item quantity="one">1 табылды</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Барлығы"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Таңдаулылар"</string>
- <string name="callBack" msgid="5498224409038809224">"Кері қоңырау шалу"</string>
- <string name="callAgain" msgid="3197312117049874778">"Қайта қоңырау шалу"</string>
- <string name="returnCall" msgid="8171961914203617813">"Қоңырауды қайтару"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" контактілерге қосылсын ба?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"контакт фотосуреті"</string>
- <string name="description_plus_button" msgid="515164827856229880">"қосу"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>, барлық <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактілерден"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Контактілеріңіздің аттары"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Бұл әрекетті орындайтын ешқандай қолданба табылмады."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Алдыңғы экранға оралу үшін түртіңіз"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Телефон нөмірін қосу"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Электрондық пошта қосу"</string>
- <string name="missing_app" msgid="1466111003546611387">"Бұл әрекетті орындайтын қолданба табылмады."</string>
- <string name="menu_share" msgid="943789700636542260">"Бөлісу"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Контактілерге қосу"</string>
- <string name="share_via" msgid="563121028023030093">"Контактімен бөлісу"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Есептік жазба арқылы топ құру"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Дауыс чаты"</string>
- <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
- <string name="connections" msgid="8098440723172028350">"Байланыстар"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Байланыс қосу"</string>
- <string name="recent" msgid="2659189233141493004">"Соңғы"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Соңғы жаңартулар"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> контакт"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> есептік жазбасы"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Бұл қолданба арқылы жөнделмейді."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Бұл құрылғыда жөндеу мүмкін емеc."</string>
- <string name="take_photo" msgid="7496128293167402354">"Фотосурет түсіру"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Жаңа фотосурет түсіру"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Фотосуретті таңдау"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Жаңа фотоурет таңдау"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Контакт тізімі жаңартылуда."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Іздеуде…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Таңдалғанды көрсету"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Барлығын көрсету"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Барлығын таңдау"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Барлығының таңдау белгісін алу"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Жаңа қосу"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ұйым қосу"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Күні"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Топ атауы"</string>
- <string name="change_photo" msgid="8530597935483526383">"Өзгерту"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Негізгі фотосурет"</string>
- <string name="description_star" msgid="2605854427360036550">"сүйікті"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Контактіні жөндеу"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Ағымдағы контактіні таңдалған контактімен байланыстыру керек пе?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Таңдалған контактіні жөндеуге ауысуды қалайсыз ба? Осы уақытқа дейін сіз енгізген ақпараттың көшірмесі жасалады."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Менің контактілеріме көшіру"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Менің контактілерім тізіміне қосу"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> анықтамалық кітапшасы"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Реттелетін"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Параметрлер"</string>
- <string name="menu_settings" msgid="377929915873428211">"Параметрлер"</string>
- <string name="menu_help" msgid="1680178646764069976">"Анықтама және пікір"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Көрсету опциялары"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Телефон нөмірі"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Контактілерге қосу"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Контактілерге қосу"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Жабу"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Жылды қосу"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Жүктеуде…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Жаңа контакт құру"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Есептік жазба қосу"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Контактілерді импорттау"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Жаңа топ жасақтау"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Жаңа топ жасақтау"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> топ</item>
- <item quantity="one">1 топ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" тобы жойылсын ба? (Контактілер жойылмайды.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ішінен <xliff:g id="COUNT_2">%1$d</xliff:g> адам</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> ішінен <xliff:g id="COUNT_0">%1$d</xliff:g> адам</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> адам</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> адам</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Басқа контактімен байланыстыру алдында контактінің атын теріңіз."</string>
- <string name="copy_text" msgid="3257145021583508761">"Аралық сақтағышқа көшіру"</string>
- <string name="set_default" msgid="4417505153468300351">"Бастапқы ретінде орнату"</string>
- <string name="clear_default" msgid="7193185801596678067">"Бастапқыны өшіру"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Мәтін көшірмесі жасалды"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Өзгертулерді алып тастап, өңдеуден шығу керек пе?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Алып тастау"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Өңдеуді жалғастыру"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Менің профилімді реттеу"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Адамның атын теру"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Топтың атауы"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Менің жергілікті профайлым"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Менің <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Барлық контактілер көрсетілуде"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Телефоныңыз жоғалған жағдайда контактілеріңізді сақтап қалыңыз: желі қызметімен синхрондаңыз."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Есептік жазба қосу"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Жаңа контактінің сақтық көшірмесі жасалмайды. Контактілердің желі арқылы көшірмесін жасайтын есептік жазба қосуды қалайсыз ба?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңа контактілер <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> есептік жазбасында сақталады."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңа контактілерге арналған әдепкі есептік жазбаны таңдаңыз:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Жаңа контакт қосу"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Контактіні өңдеу"</string>
- <string name="keep_local" msgid="1258761699192993322">"Жергілікті сақтау"</string>
- <string name="add_account" msgid="8201790677994503186">"Ес. жазба қосу"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Жаңа есептік жазба қосу"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Дерекқор файлдарын экспорттау"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"жаңа контакт қосу"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Көбірек көру"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азырақ көру"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Барлығын көру"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Жақындағы"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Туралы"</string>
- <string name="send_message" msgid="8938418965550543196">"Хабарды жіберу"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Жеке көшірмені жасау…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Кеше"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Ертең"</string>
- <string name="today" msgid="8041090779381781781">"Бүгін"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Бүгін, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ертең, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Атаусыз оқиға)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Орнату"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Ұйым"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Бүркеншік ат"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Ескертпе"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Веб-сайт"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Оқиға"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Қатынас"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Есептік жазба"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Аты"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Электрондық пошта"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Фотосурет"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Контактілер өңдегішті кеңейту үшін басыңыз."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Контактілер өңдегішті тасалау үшін басыңыз."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"орынға бағыттар"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"жақындағы sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. жауап беру үшін басыңыз"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"кіріс"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"шығыс"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"өткізіп алған"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"жақындағы қоңырау. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кері қоңырау шалу үшін басыңыз"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Сіз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts қолданбасы электрондық пошта өрісіне немесе телефон өрісіне адамның Hangouts идентификаторын енгізгенде жақсырақ жұмыс істейді."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Қалған өрістер"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Фотосуретті өзгерту"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Өңдегішті ашу сәтсіз аяқталды."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Келесіге сақтау"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Қазіргі уақытта <xliff:g id="ACCOUNT_NAME">%s</xliff:g> есептік жазбасына сақталуда. Басқа есептік жазбаны таңдау үшін екі рет түртіңіз."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Байланыстырылған контактілер (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Байланыстырылған контакт</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> байланыстырылған контакт"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"КОНТАКТІЛЕРДІ БАЙЛАНЫСТЫРУ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"БАС ТАРТУ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ықтимал көшірме</item>
- <item quantity="one">1 ықтимал көшірме</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> байланыстырылған контакт</item>
- <item quantity="one">1 байланыстырылған контакт</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Осы контакт"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Ықтимал көшірмелер"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бұл контактілер бір адам болуы мүмкін. Оларды бір контактіге біріктіруге болады."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Байланыстырылған контактілер"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Есептік жазбаларыңыздан"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Фотосурет түсіру"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Барлық фотосуреттер"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Фотосуретті таңдау"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Кімнен: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> жою"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жою"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ішіндегі фотосуретке құсбелгі қойылмаған"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ішіндегі фотосуретке құсбелгі қойылған"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Белгісіз есептік жазбадан алынған фотосуретке құсбелгі қойылмады"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Белгісіз есептік жазбадан алынған фотосуретке құсбелгі қойылды"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Контактілер тізімі тілдің өзгеруін көрсету үшін жаңартылуда.\n\nКүтіңіз..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгелген нөмірлер"</string>
-</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
new file mode 100644
index 000000000..1c8e82daf
--- /dev/null
+++ b/res/values-kk/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Контактілер"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Контактілер"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Контакт қосу"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Тікелей теру"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Тікелей хабар"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Контактіні таңдау"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Контактілерге қосу"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Контакт таңдау"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Таңдау"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңа контакт жасау"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Контактілерді іздеу"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Таңдаулыларға қосу"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Таңдаулылардан өшіру"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Таңдаулылардан жойылды"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Таңдаулыларға қосылды"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Жөндеу"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Жою"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Фотосуретті өзгерту"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Таңбаша жасау"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажырату"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Контактілерді жою"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Белгінің атын өзгерту"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Белгіні жою"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Контакт қосу"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Контактілер таңдау"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Контактілерді қосу"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Белгіден алып тастау"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Белгі жасау"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Байланысты жою"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Енгізіп қойған өзгертулерді сақтау және осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Сақтау және байланысты жою"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Енгізіп қойған өзгертулерді сақтау және таңдалған контактімен байланыстыру керек пе?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Сақтау және байланыстыру"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Байланыстыруда"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Байланыс жойылуда"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Байланыстыру"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Байланысты контактілер"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Сақтау"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Контактілерді байланыстыру"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> өзара байланысатын контактіні таңдаңыз:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ұсынылған контактілер"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Барлық контактілер"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> байланыстырылды"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактілер байланыстырылды"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> жойылды"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> және <xliff:g id="NAME_1">%2$s</xliff:g> жойылды"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… жойылды"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Контактілер жойылды</item>
+ <item quantity="one">Контакт жойылды</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт· <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> контакт· <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google есептік жазбасынан"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> есептік жазбасынан"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Рингтонды орнату"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Дауыстық поштаға ауыстыру"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Дауыстық поштаны шығару"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Бұл контакт тек қана оқу рұқсаты бар есептік жазбадан. Оны жою мүмкін емес, бірақ жасыруға болады."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Контактіні жасыру"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Тек қана оқу рұқсаты бар есептік жазбалар жасырылады, жойылмайды."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Осы контактіні жою керек пе?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Таңдалған контактілерді жою керек пе?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Тек оқуға арналған есептік жазбалардағы контактілерді жою мүмкін емес, бірақ оларды жасыруға болады."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Жойылатын контактілерде бірнеше есептік жазбадан алынған мәліметтер бар. Тек оқуға арналған есептік жазбалардан алынған мәліметтер жойылмайды, жасырылады."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бұл контактіні жою бірнеше есептік жазбадан мәліметтерді жояды."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Осы контактіні жою керек пе?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жою"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Мұндай контакт жоқ."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт негізгі экранға қосылды."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> негізгі экранға қосылды."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Құрылғыда ешқандай суреттер жоқ."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Контакт фотосуреті"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Реттелмелі белгі атауы"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Фотосуретті алу"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Контактілер тізімі бос"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Осы белгісі бар контактілер жоқ"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Бұл есептік жазбада контактілер жоқ"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Контактілер тізімі бос"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> сақталды"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Контакт сақталды"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактілердің байланысы жойылды"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Контакт өзгерістері сақталмады"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Контактіні ажырату мүмкін болмады"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Контактіні байланыстыру мүмкін болмады"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Контактіні сақтау қатесі"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Контакт суретінің өзгерістері сақталмады"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Белгі жүктелген жоқ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Белгі жойылған"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Белгі жасалды"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Белгі жасау мүмкін болмады"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Белгі жаңартылды"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Белгіден жойылған"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Белгіге қосылды"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Белгі өзгертулері сақталмады"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Бұл белгіше бұрыннан бар"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Кейбір контактілердің электрондық пошталары жоқ."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Кейбір контактілердің телефон нөмірлері жоқ."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Электрондық хат жіберу"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Хабарды жіберу"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Контактілерді таңдау"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Жіберу"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Контактілер жоқ"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" контактілерге қосылсын ба?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Контактілеріңіздің аттары"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Алдыңғы экранға оралу үшін түртіңіз"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Телефон нөмірін қосу"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Электрондық пошта қосу"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Бұл әрекетті орындайтын қолданба табылмады."</string>
+ <string name="menu_share" msgid="943789700636542260">"Бөлісу"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Контактілерге қосу"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Қосу"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Контактілерді бөлісу</item>
+ <item quantity="one">Контактіні бөлісу</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Есептік жазба таңдау"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Белгі жасау"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Белгінің атын өзгерту"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Белгі атауы"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Белгі атауы"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Дауыс чаты"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> контакт"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> есептік жазбасы"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Фотосурет түсіру"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Жаңа фотосурет түсіру"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Фотосуретті таңдау"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Жаңа фотоурет таңдау"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Іздеуде…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Күні"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Белгі"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Жабу"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Артқа"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабу"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Таңдалған контактіні жөндеуге ауысуды қалайсыз ба? Осы уақытқа дейін сіз енгізген ақпараттың көшірмесі жасалады."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> анықтамалық кітапшасы"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Параметрлер"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Параметрлер"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Анықтама және пікір"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Телефон нөмірі"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Контактілерге қосу"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Жабу"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Жылды қосу"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Есептік жазба қосу"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импорттау"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Жаңасын жасау…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" тобы жойылсын ба? Контактілер өздігінен жойылмайды."</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Басқа контактімен байланыстыру алдында контактінің атын теріңіз."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Аралық сақтағышқа көшіру"</string>
+ <string name="set_default" msgid="4417505153468300351">"Бастапқы ретінде орнату"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Бастапқыны өшіру"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Мәтін көшірмесі жасалды"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Өзгертулерді алып тастау қажет пе?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Алып тастау"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Бас тарту"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Таңдалған параметрлерді сақтау қажет емес пе?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Контактілерді іздеу"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Контактілерді жою"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Менің жергілікті профайлым"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Менің <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google-ға контактілеріңіздің сақтық көшірмесін жасайтын есептік жазба қосу үшін бір минут уақыт бөліңіз."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңа контактілер <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> есептік жазбасында сақталады."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңа контактілерге арналған әдепкі есептік жазбаны таңдаңыз:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Жаңа контакт қосу"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Контактіні өңдеу"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Көру мүмкіндігі ғана бар"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Өзгертілетін контактіні таңдаңыз"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Байланысты контактілер"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Қосу"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Байланысты жою"</string>
+ <string name="add_account" msgid="8201790677994503186">"Ес. жазба қосу"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Жаңа есептік жазба қосу"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Дерекқор файлдарын экспорттау"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Жаңа контакт қосу"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Көбірек көру"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азырақ көру"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Жақындағы"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Туралы"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Жеке көшірме жасау…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Ертең"</string>
+ <string name="today" msgid="8041090779381781781">"Бүгін"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Бүгін, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ертең, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Атаусыз оқиға)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Орнату"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Ұйым"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Бүркеншік ат"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Ескертпе"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Веб-сайт"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Оқиға"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Қатынас"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Аты"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Электрондық пошта"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"орынға бағыттар"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"жақындағы sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. жауап беру үшін басыңыз"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"кіріс"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"шығыс"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"өткізіп алған"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"жақындағы қоңырау. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. кері қоңырау шалу үшін басыңыз"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Сіз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Тағы"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Контакт суретін өзгерту"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Контакт суретін қосу"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Контакт суреті"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Өңдегішті ашу мүмкін болмады."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Cақтау:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> контакт деректері өзгертілмейді"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"КОНТАКТІЛЕРДІ БАЙЛАНЫСТЫРУ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"БАС ТАРТУ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Осы контакт"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Ықтимал көшірмелер"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бұл контактілер бір адам болуы мүмкін. Оларды бір контактіге біріктіруге болады."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> жою"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жою"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Ұсыныстар"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Жаңа"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Жылжу тақтасын ашу"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Жылжу тақтасын жабу"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> белгісі"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Белгілер"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Есептік жазбалар"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Тарихыңызды бірге көріңіз"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Оқиғалар және хабарлар"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Оқиғалар"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Хабарлар"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Ұсыныстар"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Контактілерді реттеу және тиімді пайдалану жолы"</string>
+ <string name="undo" msgid="1425165101664071422">"Қайтару"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> нөміріне қоңырау шалу"</string>
+ <string name="call_home" msgid="1990519474420545392">"Үйге қоңырау шалу"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Ұялы телефонға қоңырау шалу"</string>
+ <string name="call_work" msgid="5328785911463744028">"Жұмысқа қоңырау шалу"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Жұмыс факсіне қоңырау шалу"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Үй факсіне қоңырау шалу"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Пейджерге қоңырау шалу"</string>
+ <string name="call_other" msgid="8563753966926932052">"Қоңырау шалу"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Кері қоңырау шалу нөміріне қоңырау шалу"</string>
+ <string name="call_car" msgid="3280537320306436445">"Автокөлікке қоңырау шалу"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Компанияның негізгі нөміріне қоңырау шалу"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN нөміріне қоңырау шалу"</string>
+ <string name="call_main" msgid="6082900571803441339">"Негізгі нөмірге қоңырау шалу"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Факске қоңырау шалу"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Радиотелефонға қоңырау шалу"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Телекске қоңырау шалу"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Есту қабілеті төмен адамдарға арналған телетайпқа қоңырау шалу"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Жұмыс ұялы телефонына қоңырау шалу"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Жұмыс пейджеріне қоңырау шалу"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> нөміріне қоңырау шалу"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS нөміріне қоңырау шалу"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Қоңырау)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> нөміріне хабар жіберу"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Үй телефонына мәтіндік хабар жіберу"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Ұялы телефонға мәтіндік хабар жіберу"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Жұмыс нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Жұмыс факсіне мәтіндік хабар жіберу"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Үй факсіне мәтіндік хабар жіберу"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Пейджерге мәтіндік хабар жіберу"</string>
+ <string name="sms_other" msgid="806127844607642331">"Мәтін"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Кері қоңырау шалу нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Автокөлікке мәтіндік хабар жіберу"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Компанияның негізгі нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Негізгі нөмірге мәтіндік хабар жіберу"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Факске мәтіндік хабар жіберу"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Радиотелефонға мәтіндік хабар жіберу"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Tелетайпқа мәтіндік хабар жіберу"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Есту қабілеті төмен адамдарға арналған телетайпқа мәтіндік хабар жіберу"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Жұмыс ұялы телефонына мәтіндік хабар жіберу"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Жұмыс пейджеріне мәтіндік хабар жіберу"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS нөміріне мәтіндік хабар жіберу"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Хабар)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Бейне қоңырау шалу"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Жиі хабарласатындар тазартылсын ба?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Контактілер және Телефон қолданбаларындағы жиі хабарласатындар тізімі тазаланады және электрондық пошта қолданбалары мекенжай параметрлерін басынан үйренуге мәжбүрленеді."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Жиі хабарласатындар тазартылуда…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Қолжетімді"</string>
+ <string name="status_away" msgid="1838861100379804730">"Орнында жоқ"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Бос емес"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Басқа"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Жұмыс каталогы"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Барлық контактілер"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> үшін жылдам байланыс"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Атаусыз)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Жиі хабарласатындар"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Телефон нөмірі бар барлық контактілер"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Жұмыс профилінің контактілері"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Жаңартуларды көру"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Құрылғы"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Аты"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Лақап ат"</string>
+ <string name="name_given" msgid="4280790853455320619">"Аты"</string>
+ <string name="name_family" msgid="7466985689626017037">"Тегі"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Аттың префиксі"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Әкесінің аты"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Аттың суффиксі"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Атының транскрипциясы"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Атының транскрипциясы"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Әкесінің атының транскрипциясы"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Тегінің транскрипциясы"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Электрондық пошта"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Мекенжай"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Ұйым"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Қарым-қатынас"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Ерекше күн"</string>
+ <string name="sms" msgid="1756857139634224222">"Мәтіндік хабар"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Мекенжай"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компания"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Атауы"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Ескертпелер"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Арнаулы"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP протоколы"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Вебсайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Таңбалар"</string>
+ <string name="email_home" msgid="8573740658148184279">"Үй поштасына хат жіберу"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Ұялы телефонға эл. пошта жіберу"</string>
+ <string name="email_work" msgid="2807430017302722689">"Жұмысқа электрондық пошта жіберу"</string>
+ <string name="email_other" msgid="3454004077967657109">"Электрондық пошта"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> поштасына хат жіберу"</string>
+ <string name="email" msgid="5668400997660065897">"Электрондық пошта"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Көше"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Қала"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Штат"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Индекс"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Ел"</string>
+ <string name="map_home" msgid="1243547733423343982">"Үй мекенжайын көру"</string>
+ <string name="map_work" msgid="1360474076921878088">"Жұмыс мекенжайын көру"</string>
+ <string name="map_other" msgid="3817820803587012641">"Мекенжайын көру"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> мекенжайын көру"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM арқылы чаттасу"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live арқылы чаттасу"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo арқылы чаттасу"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype арқылы чаттасу"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ арқылы чаттасу"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk арқылы чаттасу"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ арқылы чаттасу"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber арқылы чаттасу"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"жою"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Тағы аты-жөні өрістерін көрсету"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Аты-жөні өрістерін жию"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Тағы фонетикалық аты-жөні өрістерін көрсету"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Фонетикалық аты-жөні өрістерін жию"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Жаю"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Жию"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Жайылды"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Жиылды"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Барлық контактілер"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Жұлдызшалы"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Реттеу"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Барлық басқа топтар"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Барлық контактілер"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Синхрондау тобын жою"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Синхрондау тобын қосу"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Қосымша топтар…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" синхрондаудан алынса, топталмаған контактілер де синхрондаудан алынады."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Дисплей опцияларын сақтау…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Реттелген көрініс"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Импортталған контактілерді келесіге сақтау:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM картасы"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM картасы"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d контакт</item>
+ <item quantity="one">1 контакт</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf файлы"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Импортталатын ешнәрсе жоқ"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard контактілерін импорттау қажет пе?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> импорттау тоқтатылсын ба?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> экспорттау тоқтатылсын ба?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard импорттау/экспорттау тоқтатылмады"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Белгісіз қате."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" файлын аша алмады: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорттаушыны қосу мүмкін болмады: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспортталатын контакт жоқ."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Сіз міндетті рұқсатты өшірдіңіз."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорттау кезінде қателік орын алды: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O қатесі"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Жад жеткіліксіз. Файл тым үлкен болуы мүмкін."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматқа қолдау көрсетілмейді."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> экспорттау аяқталды."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Контактілер экспортталып болды."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Контактілерді экспорттау аяқталды, контактілерді бөлісу үшін хабарландыруды басыңыз."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Контактілерді бөлісу үшін түртіңіз."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> экспорттау тоқтатылды."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Контакт деректері экспортталуда"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Контактінің деректері экспортталуда."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Дерекқор ақпаратын ала алмады."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортталатын контактілер жоқ."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard редакторы дұрыс қосылмады."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорттай алмады"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Контакт деректері экспортталмады. \nСебебі: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> импортталуда"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard деректерін оқи алмады"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard файлын импорттау аяқталды"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> импорттау тоқтатылды"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> жуық арада импортталады."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл жуық арада импортталады."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard импорттау өтініші қабылданбады. Кейінірек қайталап көріңіз."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контактілер жуық арада экспортталады."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard экспорттау өтініші қабылданбады. Кейінірек қайталап көріңіз."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard карталарын жергілікті уақытша жадқа кэштеу. Импорттау жуық арада басталады."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard экспорттау мүмкін болмады."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC арқ. алынған"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кэштеу"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> импортталуда: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf файлына экспорттау"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сұрыптау шарты"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Атының транскрипциясы"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Үнемі көрсету"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Бос болғанда жасыру"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Аты"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Тегі"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ат пішімі"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Алдымен аты"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Алдымен тегі"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Есептік жазбалар"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Жаңа контактілерге арналған әдепкі есептік жазба"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Ақпаратым"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Профильді орнату"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Контактілер туралы"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Таңдаулы контактілерді бөлісу"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Барлық контактілерді бөлісу"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Контактілерді бөлісу сәтсіз аяқталды."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Контактілерді экспорттау"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Контактілерді импорттау:"</string>
+ <string name="share_error" msgid="948429331673358107">"Бұл контактіні бөлісу мүмкін болмады"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлісетін контактілер жоқ."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Көрсетілетін контактілер"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Көрсетілетін контактілер"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Көрінісін өзгерту"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сақтау"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Контактілерді іздеу"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Таңдаулылар"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Импорттау"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Экспорттау"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгелген нөмірлер"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> арқылы"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> арқылы"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"іздеуді тоқтату"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Іздеуді өшіру"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Есептік жазба"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Осыны қоңырауларға ылғи пайдалану"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Ескертпе бар қоңырау"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Қоңыраумен жіберілетін мәтінді теріңіз..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ЖІБЕРУ ЖӘНЕ ҚОҢЫРАУ СОҒУ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Жинақ нұсқасы"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Ашық бастапқы код лицензиялары"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Ашық бастапқы код бағдарламасына арналған лицензия туралы мәліметтер"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Құпиялылық саясаты"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Қызмет көрсету шарттары"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Ашық бастапқы код лицензиялары"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Url ашылған жоқ."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> белгіленген"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> белгіленбеген"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Бейне қоңырау соғу"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Жою"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Көп нүкте"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> сағ <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Бұл белгіше өшірілген"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт жойылған"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Импорттау"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Контактілерді таңдау"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM картаңызда контактілер жоқ"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Бұл контакт тізіміңізде бұрыннан бар"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM контактісі импортталды</item>
+ <item quantity="one">1 SIM контактісі импортталды</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM контактілері импортталмады"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM картасынан импортталған"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Жабу"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автоматты синхрондау өшірулі. Қосу үшін түртіңіз."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Жабу"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Автоматты синхрондау өшірулі. Қосу үшін түртіңіз."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Авто сақтық функциясын қосу қажет пе?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google контактілеріне ғана емес, барлық қолданбалар мен есептік жазбаларға енгізілген өзгерістер желі және құрылғылар арасында синхрондалады."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Қосу"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Байланыс жоқ"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Тағы көрсету"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM картасын импорттау аяқталды"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Импорттау мүмкін болмады"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Контактілерді SIM картасынан импорттау мүмкін болмады"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM картасы импортталуда"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Хабарландырулар"</string>
+</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
deleted file mode 100644
index d6370e08f..000000000
--- a/res/values-km-rKH/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"ទំនាក់ទំនង"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"ទំនាក់ទំនង"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"មើលទំនាក់ទំនង"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"កែទំនាក់ទំនង"</string>
- <string name="contactsList" msgid="8661624236494819731">"ទំនាក់ទំនង"</string>
- <string name="shortcutContact" msgid="749243779392912958">"ទំនាក់ទំនង"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ហៅ​ដោយ​ផ្ទាល់"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ផ្ញើ​សារ​ដោយ​ផ្ទាល់"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"ជ្រើសរើស​ផ្លូវកាត់​ទំនាក់ទំនង"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ជ្រើស​រើសលេខ​ដើម្បី​ហៅ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"ជ្រើស​រើសលេខ​ដើម្បី​ផ្ញើ​សារ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"បញ្ចូល​​ទៅ​ទំនាក់ទំនង"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ជ្រើសរើស​ទំនាក់ទំនង"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
- <string name="starredList" msgid="4817256136413959463">"បាន​ដាក់​ផ្កាយ"</string>
- <string name="frequentList" msgid="7154768136473953056">"ញឹកញាប់"</string>
- <string name="strequentList" msgid="5640192862059373511">"សំណព្វ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"ព័ត៌មាន​លម្អិត​របស់​ទំនាក់ទំនង"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"កែ​ទំនាក់ទំនង"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"បង្កើត​ទំនាក់ទំនង"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"កែ​ក្រុម"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"បង្កើត​ក្រុម"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"អំពី"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"បច្ចុប្បន្នភាព"</string>
- <string name="searchHint" msgid="8482945356247760701">"រក​ទំនាក់ទំនង"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"មើល​ទំនាក់ទំនង"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"បន្ថែម​ទៅ​សំណព្វ"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"លុប​ចេញពី​សំណព្វ"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"បាន​លុប​ចេញ​​និយម​ប្រើ"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"បន្ថែម​ទៅ​និយម​ប្រើ"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"កែសម្រួល​"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"លុប"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ប្ដូររូបថត"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ដាក់​លើ​អេក្រង់​ដើម"</string>
- <string name="menu_call" msgid="3992595586042260618">"ហៅ​ទំនាក់ទំនង"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"អត្ថបទ​ទំនាក់ទំនង"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"ផ្តាច់"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"កែសម្រួល​"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"លុប"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"បញ្ចូល​​ទំនាក់ទំនង"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"បន្ថែម​ក្រុម"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើន?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ផ្តាច់"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"តើអ្នកចង់រក្សាទុកការផ្លាស់ប្តូរដែលអ្នកបានធ្វើឡើង និងផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើនដែរទេ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"រក្សាទុក និងផ្តាច់"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"តើអ្នកចង់រក្សាទុកការផ្លាស់ប្តូរដែលអ្នកបានធ្វើឡើង និងតភ្ជាប់ជាមួយទំនាក់ទំនងដែលបានជ្រើសដែរឬទេ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"រក្សាទុក និងតភ្ជាប់"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"តភ្ជាប់"</string>
- <string name="menu_save" msgid="1727844363591825909">"រក្សាទុក"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"តភ្ជាប់ទំនាក់ទំនង"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ជ្រើសរើសទំនាក់ទំនងដែលអ្នកចង់តភ្ជាប់ជាមួយ <xliff:g id="NAME">%s</xliff:g>៖"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"បង្ហាញ​ទំនាក់​ទំនង​ទាំងអស់"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ទំនាក់ទំនង​ដែល​បាន​ស្នើ"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ទំនាក់ទំនង​ទាំងអស់"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"បានតភ្ជាប់ទំនាក់ទំនង"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">បានលុបទំនាក់ទំនង</item>
- <item quantity="one">បានលុបទំនាក់ទំនង</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"កំណត់​សំឡេង​រោទ៍"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ការ​ហៅ​ទាំងអស់​ទៅ​សារ​ជា​សំឡេង"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះមិនអាចលុបបានទេ ប៉ុន្តែអាចលាក់បាន។"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"លាក់"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ទំនាក់ទំនងដែលនឹងត្រូវលុបមានព័ត៌មានលម្អិតពីគណនីច្រើន។ ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះនឹងត្រូវបានលាក់ ប៉ុន្តែវានឹងមិនត្រូវបានលុបនោះទេ។"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"អ្នកត្រូវការទំនាក់ទំនងដែលបានជ្រើសយ៉ាងតិចបំផុតពីរដើម្បីធ្វើការតភ្ជាប់។"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"តភ្ជាប់ទំនាក់ទំនងដែលបានជ្រើសឬ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"តភ្ជាប់"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"លុបទំនាក់ទំនងនេះ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"លុបទំនាក់ទំនងដែលបានជ្រើសឬ?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះមិនអាចលុបបានទេ ប៉ុន្តែអាចលាក់បាន។"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ទំនាក់ទំនងដែលនឹងត្រូវលុបមានព័ត៌មានលម្អិតពីគណនីច្រើន។ ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះនឹងត្រូវបានលាក់ ប៉ុន្តែវានឹងមិនត្រូវបានលុបនោះទេ។"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ការលុបទំនាក់ទំនងនេះនឹងលុបព័ត៌មានលម្អិតពីគណនីច្រើន"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"លុបទំនាក់ទំនងនេះ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"លុប"</string>
- <string name="menu_discard" msgid="6854657936970228164">"បោះបង់​ការ​ផ្លាស់ប្ដូរ"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"មិន​មាន​ទំនាក់ទំនង។"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"បានបញ្ចូល​ទំនាក់ទំនងទៅអេក្រង់ដើម"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"បានបញ្ចូល​ <xliff:g id="NAME">%s</xliff:g> ទៅអេក្រង់ដើម"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ស្ថាប័ន"</item>
- <item msgid="7196592230748086755">"ចំណាំ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"មិន​មាន​រូបភាព​នៅ​លើ​កុំព្យូទ័រ​បន្ទះ​នេះ​ទេ។"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"មិន​មាន​រូបភាព​នៅ​លើ​ទូរស័ព្ទ។"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"រូបថត​ទំនាក់ទំនង"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"ឈ្មោះ​ស្លាក​ផ្ទាល់ខ្លួន"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"បញ្ជូន​ការ​ហៅ​ដោយ​ផ្ទាល់​ទៅ​សារ​ជា​សំឡេង"</string>
- <string name="removePhoto" msgid="4898105274130284565">"លុប​រូបថត​ចេញ"</string>
- <string name="noContacts" msgid="4955659076981974652">"គ្មាន​ទំនាក់ទំនង"</string>
- <string name="noGroups" msgid="8614664663561385253">"មិន​មាន​ក្រុម។"</string>
- <string name="noAccounts" msgid="7768267764545265909">"ដើម្បី​បង្កើត​ក្រុម​អ្នក​ចាំបាច់​ត្រូវ​មាន​គណនី​មួយ។"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"មិន​មាន​មនុស្ស​នៅ​ក្នុង​ក្រុម​នេះ​ទេ។"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"ដើម្បី​បន្ថែម, កែ​សម្រួល​ក្រុម។"</string>
- <string name="savingContact" msgid="4075751076741924939">"កំពុង​រក្សាទុក​ទំនាក់ទំនង..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"បាន​រក្សាទុក​ទំនាក់ទំនង"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"ទំនាក់ទំនងដែលមិនបានតភ្ជាប់"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ទំនាក់ទំនង។"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"មិនអាចផ្តាច់ទំនាក់ទំនងបានទេ"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"មិនអាចតភ្ជាប់ទំនាក់ទំនងបានទេ"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"មានកំហុសក្នុងការរក្សាទុកទំនាក់ទំនង"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"មិនអាចរក្សាទុកការប្ដូររូបថតទំនាក់ទំនង។"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"បាន​រក្សាទុក​ក្រុម។"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ក្រុម។"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT">%d</xliff:g> ដែលមានលេខទូរស័ព្ទ</item>
- <item quantity="one">ទំនាក់ទំនង 1 ដែលមានលេខទូរស័ព្ទ</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"គ្មាន​ទំនាក់ទំនង​ដែល​មាន​លេខ​ទូរស័ព្ទ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">បានរកឃើញ <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">បានរកឃើញ 1</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"មិន​មាន​ទំនាក់ទំនង"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">បានរកឃើញ <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">បានរកឃើញ 1</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ទាំងអស់"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ពេញចិត្ត"</string>
- <string name="callBack" msgid="5498224409038809224">"ហៅ​ទៅវិញ"</string>
- <string name="callAgain" msgid="3197312117049874778">"ហៅ​ម្ដងទៀត"</string>
- <string name="returnCall" msgid="8171961914203617813">"ហៅ​ទៅវិញ"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"បញ្ចូល \"<xliff:g id="EMAIL">%s</xliff:g>\" ទៅ​ក្នុង​ទំនាក់ទំនង?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"រូបថត​ទំនាក់ទំនង"</string>
- <string name="description_plus_button" msgid="515164827856229880">"បូក"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> នៃ​ទំនាក់ទំនង <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"ឈ្មោះ​នៃ​ទំនាក់ទំនង​របស់​អ្នក"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"រក​មិន​ឃើញ​កម្មវិធី​សម្រាប់​សកម្មភាព​នេះ​ទេ។"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ចុច ដើម្បី​ត្រឡប់ទៅ​អេក្រង់​មុន"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"បញ្ចូល​លេខទូរសព្ទ"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"បញ្ចូល​អ៊ីមែល"</string>
- <string name="missing_app" msgid="1466111003546611387">"រក​មិន​ឃើញ​កម្មវិធី​ដើម្បី​គ្រប់គ្រង​សកម្មភាព​នេះ​ទេ។"</string>
- <string name="menu_share" msgid="943789700636542260">"ចែករំលែក​"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"បញ្ចូល​ទៅក្នុងទំនាក់ទំនង"</string>
- <string name="share_via" msgid="563121028023030093">"ចែករំលែក​ទំនាក់ទំនង​តាម"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"បង្កើត​ក្រុម​នៅ​ក្នុង​គណនី"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ជជែក​ជា​សំឡេង"</string>
- <string name="video_chat" msgid="1872255818640336072">"ជជែក​ជា​វីដេអូ"</string>
- <string name="connections" msgid="8098440723172028350">"ការ​តភ្ជាប់"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"បន្ថែម​ការ​តភ្ជាប់"</string>
- <string name="recent" msgid="2659189233141493004">"ថ្មីៗ"</string>
- <string name="recent_updates" msgid="4267258535615860710">"បច្ចុប្បន្នភាព​ថ្មីៗ"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ទំនាក់ទំនង"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"គណនី <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ពី​កម្មវិធី​នេះ មិន​អាច​កែ​បាន​ទេ។"</string>
- <string name="group_read_only" msgid="1061762906115697637">"មិន​អាច​កែ​បាន​ទេ​លើ​ឧបករណ៍​នេះ។"</string>
- <string name="take_photo" msgid="7496128293167402354">"ថតរូប"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ថតរូប​ថ្មី"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ជ្រើសរើស​រូបថត"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ជ្រើស​រូបថត​ថ្មី"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​បញ្ជី​ទំនាក់ទំនង។"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"កំពុង​រក..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"បង្ហាញ​អ្វី​ដែល​បាន​ជ្រើស"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"បង្ហាញ​ទាំងអស់"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ជ្រើស​ទាំងអស់"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"មិន​ជ្រើស​ទាំងអស់"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"បន្ថែម​ថ្មី"</string>
- <string name="add_organization" msgid="7311893231158291197">"បន្ថែម​ស្ថាប័ន"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"កាលបរិច្ឆេទ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ឈ្មោះ​ក្រុម"</string>
- <string name="change_photo" msgid="8530597935483526383">"ផ្លាស់ប្ដូរ"</string>
- <string name="primary_photo" msgid="8517942231868516999">"រូបថតបឋម"</string>
- <string name="description_star" msgid="2605854427360036550">"សំណព្វ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"កែ​ទំនាក់ទំនង"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"តភ្ជាប់ទំនាក់ទំនងបច្ចុប្បន្នជាមួយទំនាក់ទំនងដែលបានជ្រើស?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ប្ដូរ​ដើម្បី​កែ​ទំនាក់ទំនង​ដែល​បាន​ជ្រើស? ព័ត៌មាន​ដែល​អ្នក​បញ្ចូល​នឹង​បាន​ចម្លង។"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ចម្លង​ទៅ​ទំនាក់ទំនង​របស់​ខ្ញុំ"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"បញ្ចូល​​ទៅ​ទំនាក់ទំនង​របស់​ខ្ញុំ"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ថត <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ផ្ទាល់ខ្លួន"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ការ​កំណត់"</string>
- <string name="menu_settings" msgid="377929915873428211">"ការ​កំណត់"</string>
- <string name="menu_help" msgid="1680178646764069976">"ជំនួយ &amp; មតិស្ថាបនា"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"បង្ហាញ​ជម្រើស"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"លេខទូរស័ព្ទ"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"បញ្ចូល​ទៅក្នុងទំនាក់ទំនង"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"បញ្ចូល​ទៅ​ទំនាក់ទំនង"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"បិទ​"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"រួមបញ្ចូលឆ្នាំ"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"ទំនាក់ទំនង"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"កំពុង​ផ្ទុក..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"បញ្ចូលគណនី"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"នាំចូល​ទំនាក់ទំនង"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"បង្កើត​ក្រុម​ថ្មី"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"បង្កើត​ក្រុម​ថ្មី"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ក្រុម</item>
- <item quantity="one">1 ក្រុម</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"លុប​ក្រុម \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (ទំនាក់ទំនង​​នឹង​មិន​លុប​ទេ)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other">មនុស្ស <xliff:g id="COUNT_2">%1$d</xliff:g> នាក់ពី <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one">មនុស្ស <xliff:g id="COUNT_0">%1$d</xliff:g> នាក់ពី <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other">មនុស្ស <xliff:g id="COUNT_1">%1$d</xliff:g> នាក់</item>
- <item quantity="one">មនុស្ស <xliff:g id="COUNT_0">%1$d</xliff:g> នាក់</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"សូមបញ្ចូលឈ្មោះទំនាក់ទំនងមុនពេលតភ្ជាប់ជាមួយទំនាក់ទំនងផ្សេងទៀត។"</string>
- <string name="copy_text" msgid="3257145021583508761">"ចម្លង​ទៅ​ក្ដារ​តម្បៀត​ខ្ទាស់"</string>
- <string name="set_default" msgid="4417505153468300351">"កំណត់​លំនាំដើម"</string>
- <string name="clear_default" msgid="7193185801596678067">"សម្អាត​លំនាំដើម"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"បាន​ចម្លង​អត្ថបទ"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"បោះបង់ការប្ដូររបស់អ្នក ហើយបញ្ឈប់ការកែសម្រួលមែនទេ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"បោះបង់"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"នៅ​បន្ត​កែសម្រួល"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"រៀបចំ​កម្រងព័ត៌មាន​របស់​ខ្ញុំ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"វាយ​ឈ្មោះ​មនុស្ស"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ឈ្មោះ​របស់​ក្រុម"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"ប្រវត្តិរូប​មូលដ្ឋាន​របស់​ខ្ញុំ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ប្រវត្តិរូប <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> របស់​ខ្ញុំ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"បង្ហាញ​ទំនាក់ទំនង​ទាំងអស់"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"រក្សាទុក​ទំនាក់ទំនង​របស់​អ្នក​យ៉ាង​មាន​សុវត្ថិភាព ទោះបីជា​អ្នក​បាត់​ទូរស័ព្ទ​ក៏ដោយ៖ ធ្វើ​សមកាលកម្ម​ជាមួយ​សេវាកម្ម​លើ​បណ្ដាញ។"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"បន្ថែម​គណនី"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"​ទំនាក់ទំនង​ថ្មី​របស់​អ្នកនឹងមិនត្រូវបានបម្រុងទុក​​ទេ។ សូម​បញ្ចូល​​គណនីមួយ​​ដើម្បី​បម្រុងទុក​ទំនាក់ទំនង​នៅ​លើ​អ៊ីនធឺណិត?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ទំនាក់ទំនងថ្មីនឹងត្រូវបានរក្សាទុកទៅក្នុង <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ជ្រើសគណនីលំនាំដើមសម្រាប់ទំនាក់ទំនងថ្មី៖"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"បញ្ចូល​ទំនាក់ទំនងថ្មី"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"កែ​ទំនាក់ទំនង"</string>
- <string name="keep_local" msgid="1258761699192993322">"រក្សា​ទុក​មូលដ្ឋាន"</string>
- <string name="add_account" msgid="8201790677994503186">"បញ្ចូល​​គណនី"</string>
- <string name="add_new_account" msgid="5748627740680940264">"បន្ថែម​គណនី​ថ្មី"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"នាំចេញ​ឯកសារ​មូលដ្ឋាន​ទិន្នន័យ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"បញ្ចូល​​ទំនាក់ទំនង​ថ្មី"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"​មើល​​ច្រើន​ជាង"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​មើល​តិច​ជាង"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"​មើល​ទាំង​អស់"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ថ្មីៗ"</string>
- <string name="about_card_title" msgid="2920942314212825637">"អំពី"</string>
- <string name="send_message" msgid="8938418965550543196">"ផ្ញើ​សារ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"កំពុង​បង្កើត​ច្បាប់​ចម្លង​ផ្ទាល់​ខ្លួន..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ម្សិលមិញ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"ស្អែក"</string>
- <string name="today" msgid="8041090779381781781">"ថ្ងៃនេះ"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ថ្ងៃនេះ​នៅ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ថ្ងៃស្អែក​នៅ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ព្រឹត្តិការណ៍​គ្មាន​ចំណងជើង)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"កំណត់"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ស្ថាប័ន"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ឈ្មោះ​ហៅ​ក្រៅ"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"ចំណាំ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"គេហទំព័រ"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ព្រឹត្តិការណ៍"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"ទំនាក់ទំនង"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"គណនី"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"ឈ្មោះ"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"អ៊ីមែល"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ទូរស័ព្ទ"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"រូបថត"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"ចុចដើម្បីពង្រីកកម្មវិធីកែប្រែទំនាក់ទំនង។"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"ចុចដើម្បីបង្រួមកម្មវិធីកែប្រែទំនាក់ទំនង។"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"ទិសដៅ​ទៅ​ទីតាំង"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"សារ​ខ្លៗ​ថ្មី។ <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ចុច​ដើម្បី​ឆ្លើយតប"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ចូល"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ចេញ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ខកខាន​ទទួល"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ការ​ហៅ​ថ្មី​។ <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ចុច​ដើម្បី​ហៅ​ត្រឡប់"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"អ្នក៖ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ដំណើរការបានយ៉ាងល្អ នៅពេលដែលអ្នកបញ្ចូលអត្តសញ្ញាណ Hangouts របស់បុគ្គលនោះទៅក្នុងប្រអប់អ៊ីម៉ែល ឬប្រអប់លេខទូរស័ព្ទ។"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ប្រអប់បន្ថែម"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ប្ដូររូបថត"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"បានបរាជ័យក្នុងការបើកកម្មវិធីកែ"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"រក្សាទុកក្នុង"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"បច្ចុប្បន្នកំពុងរក្សាទុកទៅ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>។ សូូមប៉ះពីរដងដើម្បីជ្រើសគណនីផ្សេងទៀត។"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">ទំនាក់ទំនងដែលបានតភ្ជាប់ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">ទំនាក់ទំនងដែលបានតភ្ជាប់ 1</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ទំនាក់ទំនងដែលបានតភ្ជាប់ <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ភ្ជាប់ទំនាក់ទំនង"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"បោះបង់"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">អាចមានស្ទួន <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">អាចមានស្ទួន 1</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">ទំនាក់ទំនងដែលបានតភ្ជាប់ <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">ទំនាក់ទំនងដែលបានតភ្ជាប់ 1</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ទំនាក់ទំនងនេះ"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"អាចនឹងស្ទួន"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ទំនាក់ទំនងទាំងនេះប្រហែលជាមនុស្សតែមួយ។ អ្នកអាចតភ្ជាប់ពួកគេជាមួយគ្នាឲ្យទៅជាទំនាក់ទំនងទោលបាន។"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ទំនាក់ទំនងដែលបានតភ្ជាប់"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ពីគណនីរបស់អ្នក"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ថតរូប"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"រូបថតទាំងអស់"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ជ្រើសរើសរូបថត"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"ពី <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"លុប <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"លុប <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"មិនបានជ្រើសរូបថតពី <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> នោះទេ"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"បានជ្រើសរូបថតពី <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"មិនបានជ្រើសរូបថតពីគណនីមិនស្គាល់ទេ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"បានជ្រើសរូបថតពីគណនីមិនស្គាល់"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"កំពុង​ធ្វើ​បច្ចុប្បន្នភាព​ទំនាក់ទំនង​ដើម្បី​ឆ្លុះបញ្ចាំង​ការ​ប្ដូរ​ភាសា។\n\nសូម​រង់ចាំ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"លេខបានរារាំង"</string>
-</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
new file mode 100644
index 000000000..78c1780c7
--- /dev/null
+++ b/res/values-km/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"ទំនាក់ទំនង"</string>
+ <string name="contactsList" msgid="8661624236494819731">"ទំនាក់ទំនង"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"បញ្ចូល​​ទំនាក់ទំនង"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"ទំនាក់ទំនង"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ហៅ​ដោយ​ផ្ទាល់"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ផ្ញើ​សារ​ដោយ​ផ្ទាល់"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"ជ្រើសរើស​ទំនាក់ទំនង"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"បញ្ចូល​​ទៅ​ទំនាក់ទំនង"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ជ្រើសរើស​ទំនាក់ទំនង"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ជ្រើស"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
+ <string name="searchHint" msgid="8482945356247760701">"រក​ទំនាក់ទំនង"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"បន្ថែម​ទៅ​សំណព្វ"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"លុប​ចេញពី​សំណព្វ"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"បាន​លុប​ចេញ​​និយម​ប្រើ"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"បន្ថែម​ទៅ​និយម​ប្រើ"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"កែសម្រួល​"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"លុប"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ប្ដូររូបថត"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"បង្កើត​ផ្លូវកាត់"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"ផ្តាច់"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"ដក​​ទំនាក់ទំនង​ចេញ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ប្ដូរឈ្មោះស្លាក"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"លុបស្លាក"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"បញ្ចូល​ទំនាក់ទំនង"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"ជ្រើស​រើសទំនាក់ទំនង"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"បញ្ចូល​​ទំនាក់ទំនង"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"លុប​ចេញ​ពី​ស្លាក"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"បង្កើតស្លាក"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើន?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ផ្តាច់"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"តើអ្នកចង់រក្សាទុកការផ្លាស់ប្តូរដែលអ្នកបានធ្វើឡើង និងផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើនដែរទេ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"រក្សាទុក និងផ្តាច់"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"តើអ្នកចង់រក្សាទុកការផ្លាស់ប្តូរដែលអ្នកបានធ្វើឡើង និងតភ្ជាប់ជាមួយទំនាក់ទំនងដែលបានជ្រើសដែរឬទេ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"រក្សាទុក និងតភ្ជាប់"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"កំពុង​តភ្ជាប់"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"កំពុង​ផ្ដាច់"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"តភ្ជាប់"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"មើល​ទំនាក់ទំនង​ដែល​បាន​តភ្ជាប់"</string>
+ <string name="menu_save" msgid="1727844363591825909">"រក្សាទុក"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"តភ្ជាប់ទំនាក់ទំនង"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ជ្រើសរើសទំនាក់ទំនងដែលអ្នកចង់តភ្ជាប់ជាមួយ <xliff:g id="NAME">%s</xliff:g>៖"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ទំនាក់ទំនង​ដែល​បាន​ស្នើ"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ទំនាក់ទំនង​ទាំងអស់"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"បាន​ចូលចិត្ត <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"បានតភ្ជាប់ទំនាក់ទំនង"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"បាន​លុប <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"បាន​លុប <xliff:g id="NAME_0">%1$s</xliff:g> និង <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"បានលុប <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>..."</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">បានលុបទំនាក់ទំនង</item>
+ <item quantity="one">បានលុបទំនាក់ទំនង</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_1">%d</xliff:g></item>
+ <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%d</xliff:g></item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_2">%1$d</xliff:g> · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%1$d</xliff:g> · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"ពី Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"ពី <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"កំណត់​សំឡេង​រោទ៍"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"បញ្ជូន​ទៅ​សារ​ជា​សំឡេង"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"មិន​បញ្ជូន​ទៅ​សារ​ជា​សំឡេង"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ទំនាក់ទំនង​នេះ​បាន​តែ​អាន​ប៉ុណ្ណោះ។ វា​មិន​អាច​លុប​ចេញ​បាន​ទេ ប៉ុន្តែ​អ្នក​អាច​លាក់​វា​បាន។"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"លាក់​ទំនាក់ទំនង"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"គណនី​ដែល​បាន​តែ​អាន​នៅ​ក្នុង​ទំនាក់ទំនង​នេះ នឹង​ត្រូវ​បាន​លាក់ មិន​លុប​ចេញ​​ទេ។"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"លុបទំនាក់ទំនងនេះ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"លុបទំនាក់ទំនងដែលបានជ្រើសឬ?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះមិនអាចលុបបានទេ ប៉ុន្តែអាចលាក់បាន។"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ទំនាក់ទំនងដែលនឹងត្រូវលុបមានព័ត៌មានលម្អិតពីគណនីច្រើន។ ព័ត៌មានលម្អិតពីគណនីសម្រាប់តែអានប៉ុណ្ណោះនឹងត្រូវបានលាក់ ប៉ុន្តែវានឹងមិនត្រូវបានលុបនោះទេ។"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ការលុបទំនាក់ទំនងនេះនឹងលុបព័ត៌មានលម្អិតពីគណនីច្រើន"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"លុបទំនាក់ទំនងនេះ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"លុប"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"មិន​មាន​ទំនាក់ទំនង។"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"បានបញ្ចូល​ទំនាក់ទំនងទៅអេក្រង់ដើម"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"បានបញ្ចូល​ <xliff:g id="NAME">%s</xliff:g> ទៅអេក្រង់ដើម"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"មិន​មាន​រូបភាព​នៅ​លើ​ឧបករណ៍​នេះ​ទេ។"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"រូបថត​ទំនាក់ទំនង"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"ឈ្មោះ​ស្លាក​ផ្ទាល់ខ្លួន"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"លុប​រូបថត​ចេញ"</string>
+ <string name="noContacts" msgid="2228592924476426108">"បញ្ជីទំនាក់ទំនងរបស់អ្នកគឺទទេ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"មិន​មាន​ទំនាក់ទំនង​ដែល​មាន​ស្លាក​នេះ"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"មិនមានទំនាក់ទំនង​នៅ​ក្នុងគណនីនេះ​ទេ"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"បញ្ជីទំនាក់ទំនងរបស់អ្នកគឺទទេ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"បាន​រក្សាទុក <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"បាន​រក្សាទុក​ទំនាក់ទំនង"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"ទំនាក់ទំនងដែលមិនបានតភ្ជាប់"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"មិន​អាច​រក្សាទុក​ការ​ប្ដូរ​ទំនាក់ទំនង​បាន​ទេ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"មិនអាចផ្តាច់ទំនាក់ទំនងបានទេ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"មិនអាចតភ្ជាប់ទំនាក់ទំនងបានទេ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"មាន​បញ្ហា​រក្សាទុក​ទំនាក់ទំនង"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"មិនអាចរក្សាទុកការប្ដូររូបថតទំនាក់ទំនង​បាន​ទេ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"បាន​បរាជ័យ​ក្នុង​ការ​ផ្ទុក​ស្លាក"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"បានលុបស្លាក"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"បាន​បង្កើត​ស្លាក"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"មិនអាចបង្កើតស្លាក"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"បាន​ធ្វើ​​បច្ចុប្បន្នភាព​ស្លាក"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"បាន​យក​ចេញ​ពី​ស្លាក"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"បាន​បន្ថែម​ទៅ​ស្លាក"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"មិនអាចរក្សាទុកការផ្លាស់ប្តូរស្លាក​បាន​ទេ"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ស្លាក​នោះ​មាន​រួច​ហើយ"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ទំនាក់ទំនង​ខ្លះ​មិន​មាន​អ៊ីមែល​ទេ។"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ទំនាក់ទំនង​ខ្លះ​មិន​មាន​លេខ​ទូរសព្ទ​ទេ។"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ផ្ញើ​អ៊ីមែល"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ផ្ញើ​សារ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ជ្រើសរើស​​ទំនាក់ទំនង"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ផ្ញើ"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"មិន​មាន​ទំនាក់ទំនង"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"បញ្ចូល \"<xliff:g id="EMAIL">%s</xliff:g>\" ទៅ​ក្នុង​ទំនាក់ទំនង?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"ឈ្មោះ​នៃ​ទំនាក់ទំនង​របស់​អ្នក"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ចុច ដើម្បី​ត្រឡប់ទៅ​អេក្រង់​មុន"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"បញ្ចូល​លេខទូរសព្ទ"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"បញ្ចូល​អ៊ីមែល"</string>
+ <string name="missing_app" msgid="1466111003546611387">"រក​មិន​ឃើញ​កម្មវិធី​ដើម្បី​គ្រប់គ្រង​សកម្មភាព​នេះ​ទេ។"</string>
+ <string name="menu_share" msgid="943789700636542260">"ចែករំលែក​"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"បញ្ចូល​ទៅក្នុងទំនាក់ទំនង"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"បន្ថែម"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">ចែករំលែក​ទំនាក់ទំនង​តាម</item>
+ <item quantity="one">ចែករំលែក​ទំនាក់ទំនង​តាម</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ជ្រើសគណនី"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"បង្កើតស្លាក"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ប្ដូរឈ្មោះស្លាក"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ឈ្មោះស្លាក"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ឈ្មោះស្លាក"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ជជែក​ជា​សំឡេង"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ជជែក​ជា​វីដេអូ"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ទំនាក់ទំនង"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"គណនី <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ថតរូប"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ថតរូប​ថ្មី"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ជ្រើសរើស​រូបថត"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ជ្រើស​រូបថត​ថ្មី"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"កំពុង​រក..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"កាលបរិច្ឆេទ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ស្លាក"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"បោះបង់"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ថយក្រោយ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"បិទ"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ប្ដូរ​ដើម្បី​កែ​ទំនាក់ទំនង​ដែល​បាន​ជ្រើស? ព័ត៌មាន​ដែល​អ្នក​បញ្ចូល​នឹង​បាន​ចម្លង។"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ថត <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ការ​កំណត់"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ការ​កំណត់"</string>
+ <string name="menu_help" msgid="1680178646764069976">"ជំនួយ និង មតិស្ថាបនា"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"លេខទូរសព្ទ"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"បញ្ចូល​ទៅក្នុងទំនាក់ទំនង"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"បិទ​"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"រួមបញ្ចូលឆ្នាំ"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"បញ្ចូលគណនី"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"នាំចូល"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"បង្កើត​ថ្មី..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"លុប​​ស្លាក \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (ទំនាក់ទំនង​​នឹង​មិន​​លុប​ទេ)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"សូមបញ្ចូលឈ្មោះទំនាក់ទំនងមុនពេលតភ្ជាប់ជាមួយទំនាក់ទំនងផ្សេងទៀត។"</string>
+ <string name="copy_text" msgid="3257145021583508761">"ចម្លង​ទៅអង្គចងចាំ"</string>
+ <string name="set_default" msgid="4417505153468300351">"កំណត់​លំនាំដើម"</string>
+ <string name="clear_default" msgid="7193185801596678067">"សម្អាត​លំនាំដើម"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"បាន​ចម្លង​អត្ថបទ"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"បោះបង់ការផ្លាស់ប្ដូរមែន​ទេ?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"បោះបង់"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"បោះ​បង់​"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"បោះបង់ការប្ដូរតាមបំណងមែន​ទេ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"ស្វែងរក​ទំនាក់ទំនង"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"ដក​ទំនាក់ទំនង​ចេញ"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"ប្រវត្តិរូប​មូលដ្ឋាន​របស់​ខ្ញុំ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ប្រវត្តិរូប <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> របស់​ខ្ញុំ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ចំណាយ​ពេល​មួយ​​ភ្លែត​ ដើម្បី​បញ្ចូល​​គណនី​ដែល​នឹង​បម្រុងទុក​ទំនាក់ទំនងរបស់អ្នក​​ទៅក្នុង Google។"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ទំនាក់ទំនងថ្មីនឹងត្រូវបានរក្សាទុកទៅក្នុង <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ជ្រើសគណនីលំនាំដើមសម្រាប់ទំនាក់ទំនងថ្មី៖"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"កែ​ទំនាក់ទំនង"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"បានតែ​មើល"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ជ្រើសរើស​ទំនាក់ទំនង​ត្រូវ​កែសម្រួល"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"ទំនាក់ទំនងដែលបានតភ្ជាប់"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"បញ្ចូល"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ផ្តាច់"</string>
+ <string name="add_account" msgid="8201790677994503186">"បញ្ចូល​​គណនី"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"បន្ថែម​គណនី​ថ្មី"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"នាំចេញ​ឯកសារ​មូលដ្ឋាន​ទិន្នន័យ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"​មើល​​ច្រើន​ជាង"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​មើល​តិច​ជាង"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ថ្មីៗ"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"អំពី"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"កំពុង​បង្កើត​ច្បាប់​ចម្លង​ផ្ទាល់​ខ្លួន..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"ស្អែក"</string>
+ <string name="today" msgid="8041090779381781781">"ថ្ងៃនេះ"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ថ្ងៃនេះ​នៅ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ថ្ងៃស្អែក​នៅ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ព្រឹត្តិការណ៍​គ្មាន​ចំណងជើង)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"កំណត់"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ស្ថាប័ន"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ឈ្មោះ​ហៅ​ក្រៅ"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"ចំណាំ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"គេហទំព័រ"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ព្រឹត្តិការណ៍"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"ទំនាក់ទំនង"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"ឈ្មោះ"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"អ៊ីមែល"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ទូរស័ព្ទ"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"ទិសដៅ​ទៅ​ទីតាំង"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"សារ​ខ្លៗ​ថ្មី។ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ចុច​ដើម្បី​ឆ្លើយតប"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ចូល"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ចេញ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ខកខាន​ទទួល"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ការ​ហៅ​ថ្មី​។ <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ចុច​ដើម្បី​ហៅ​ត្រឡប់"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"អ្នក៖ <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ប្រអប់​បន្ថែម"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"ផ្លាស់ប្ដូរ​រូបថត​ទំនាក់ទំនង"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"បញ្ចូល​រូបថត​ទំនាក់ទំនង"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"រូបថត​ទំនាក់ទំនង"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"មិន​អាច​បើក​កម្មវិធី​កែសម្រួល​បាន​ទេ។"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"រក្សាទុកទៅ"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ព័ត៌មាន​អំពី​ទំនាក់ទំនង​ពី <xliff:g id="ACCOUNT">%s</xliff:g> មិន​អាច​កែ​សម្រួល​បាន​ទេ"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ភ្ជាប់ទំនាក់ទំនង"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"បោះបង់"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ទំនាក់ទំនងនេះ"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"អាចនឹងស្ទួន"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ទំនាក់ទំនងទាំងនេះប្រហែលជាមនុស្សតែមួយ។ អ្នកអាចតភ្ជាប់ពួកគេជាមួយគ្នាឲ្យទៅជាទំនាក់ទំនងទោលបាន។"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"លុប <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"លុប <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"ការ​ណែនាំ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ថ្មី"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"បើក​ផ្ទាំង​រុករក"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"បិទ​ផ្ទាំង​រុករក"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"ស្លាក <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ស្លាក"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"គណនី"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"មើល​ប្រវត្តិ​របស់​អ្នក​រួម​គ្នា"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ព្រឹត្តិការណ៍ និង​សារ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ព្រឹត្តិការណ៍"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"សារ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"ការណែនាំ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"រក្សា​ទំនាក់ទំនង​របស់​អ្នក​ឲ្យ​​រៀបរយ និង​​មាន​ប្រយោជន៍​ជា​និច្ច"</string>
+ <string name="undo" msgid="1425165101664071422">"មិនធ្វើវិញ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"ការ​ហៅទូរសព្ទ​ទៅ​ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"ហៅ​ទៅ​ផ្ទះ"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ហៅ​ទៅ​ទូរស័ព្ទ​ចល័ត"</string>
+ <string name="call_work" msgid="5328785911463744028">"ហៅ​ទៅ​កន្លែង​ធ្វើការ"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"ហៅ​ទៅ​លេខ​ទូរសារ​កន្លែង​ធ្វើការ"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ហៅ​ទៅ​លេខ​ទូរសារ​ផ្ទះ"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ហៅ​ទៅ​លេខ​ភេយ័រ"</string>
+ <string name="call_other" msgid="8563753966926932052">"ហៅ"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ហៅ​ទៅ​លេខ​ហៅ​ទៅវិញ"</string>
+ <string name="call_car" msgid="3280537320306436445">"ហៅ​ទៅ​ទូរស័ព្ទ​រថយន្ត"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ហៅ​ទៅ​លេខ​សំខាន់​របស់​ក្រុមហ៊ុន"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ហៅ​ទៅ ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"ហៅ​ទៅ​លេខ​សំខាន់"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ហៅ​ទៅ​ទូរសារ"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ហៅ​ទៅ​លេខ​វិទ្យុ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ហៅ​ទៅ telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"ហៅ​ទៅ TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ហៅ​ទៅ​ទូរស័ព្ទ​ចល័ត​កន្លែង​ធ្វើការ"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ហៅ​ទៅ​លេខ​ភេយ័រ​កន្លែង​ធ្វើការ"</string>
+ <string name="call_assistant" msgid="670941612175068337">"ការ​ហៅទូរសព្ទ​ទៅ​ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"ហៅ MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ហៅ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ផ្ញើ​សារ​ជា​អក្សរ​​ទៅ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"អត្ថបទ​ផ្ទះ"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"អត្ថបទ​ទូរស័ព្ទ​ចល័ត"</string>
+ <string name="sms_work" msgid="2269624156655267740">"អត្ថបទ​ការងារ"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"អត្ថបទ​ទូរសារ​ការងារ"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"អត្ថបទ​ទូរសារ​ផ្ទះ"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"អត្ថបទ​ភេយ័រ"</string>
+ <string name="sms_other" msgid="806127844607642331">"អត្ថបទ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"អត្ថបទ​ហៅ​ទៅវិញ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"អត្ថបទ​ទៅ​រថយន្ត"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"អត្ថបទ​ចម្បង​របស់​ក្រុមហ៊ុន"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"អត្ថបទ ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"អត្ថបទ​ចម្បង"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"អត្ថបទ​ទូរសារ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"អត្ថបទ​វិទ្យុ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"អត្ថបទ telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"អត្ថបទ TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"អត្ថបទ​ទូរស័ព្ទ​ចល័ត​កន្លែង​ធ្វើការ"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"អត្ថបទ​ភេ​យ័រ​កន្លែង​ធ្វើការ"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"អត្ថបទ <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"អត្ថបទ MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (សារ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ហៅ​ជា​វីដេអូ"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"សម្អាត​ទំនាក់ទំនង​ញឹកញាប់?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"អ្នកនឹងជម្រះបញ្ជីដែលអ្នកទាក់ទងជាញឹកញាប់នៅក្នុងកម្មវិធីទូរស័ព្ទ និងទំនាក់ទំនង ហើយបង្ខំឲ្យកម្មវិធីអ៊ីមែលស្វែងយល់ពីចំណូលចិត្តទំនាក់ទំនងរបស់អ្នកតាំងពីដំបូង។"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"កំពុង​សម្អាត​ទំនាក់ទំនង​ញឹកញាប់..."</string>
+ <string name="status_available" msgid="5586870015822828392">"ទំនេរ"</string>
+ <string name="status_away" msgid="1838861100379804730">"ចាក​ឆ្ងាយ"</string>
+ <string name="status_busy" msgid="9147992455450257136">"រវល់"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ផ្សេងៗ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ថត"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ថតកន្លែងការងារ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ទំនាក់ទំនង​ទាំងអស់"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"ទំនាក់ទំនង​រហ័ស​សម្រាប់ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(គ្មាន​ឈ្មោះ)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"បាន​ទាក់ទង​ញឹកញាប់"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ទំនាក់ទំនង​ទាំងអស់​ដែល​មាន​លេខ​ទូរស័ព្ទ"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"ទំនាក់ទំនងប្រវត្តិរូបការងារ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"មើល​បច្ចុប្បន្នភាព"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ឧបករណ៍"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ឈ្មោះ"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"សម្មតិនាម"</string>
+ <string name="name_given" msgid="4280790853455320619">"នាម​ខ្លួន"</string>
+ <string name="name_family" msgid="7466985689626017037">"នាម​ត្រកូល"</string>
+ <string name="name_prefix" msgid="59756378548779822">"បុព្វបទ​ឈ្មោះ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ឈ្មោះ​កណ្ដាល"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"បច្ច័យ​ឈ្មោះ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"សូរស័ព្ទ​ឈ្មោះ​"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"នាម​ខ្លួន​តាម​សូរស័ព្ទ"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"សូរស័ព្ទ​ឈ្មោះ​កណ្ដាល"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"នាមត្រកូល​តាម​សូរស័ព្ទ"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ទូរស័ព្ទ"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"អ៊ីមែល"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"អាសយដ្ឋាន"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ស្ថាប័ន"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ចំណង​ទាក់ទង"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"កាលបរិច្ឆេទពិសេស"</string>
+ <string name="sms" msgid="1756857139634224222">"សារ​អត្ថបទ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"អាសយដ្ឋាន"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ក្រុមហ៊ុន"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ចំណង​ជើង"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ចំណាំ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ផ្ទាល់ខ្លួន"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"គេហទំព័រ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ស្លាក"</string>
+ <string name="email_home" msgid="8573740658148184279">"អ៊ីមែល​ទៅ​ផ្ទះ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"អ៊ីមែល​ទៅ​ទូរស័ព្ទ​ចល័ត"</string>
+ <string name="email_work" msgid="2807430017302722689">"អ៊ីមែល​ទៅ​កន្លែង​ធ្វើការ"</string>
+ <string name="email_other" msgid="3454004077967657109">"អ៊ីមែល"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ផ្ញើ​អ៊ីមែល​ទៅ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"អ៊ីមែល"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ផ្លូវ"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ទីក្រុង"</string>
+ <string name="postal_region" msgid="6045263193478437672">"រដ្ឋ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"លេខ​កូដ​តំបន់"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ប្រទេស"</string>
+ <string name="map_home" msgid="1243547733423343982">"មើល​អាសយដ្ឋាន​ផ្ទះ"</string>
+ <string name="map_work" msgid="1360474076921878088">"មើល​អាសយដ្ឋាន​ការងារ"</string>
+ <string name="map_other" msgid="3817820803587012641">"មើល​អាសយដ្ឋាន"</string>
+ <string name="map_custom" msgid="8761800628069473526">"មើល​អាសយដ្ឋាន <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"ជជែក​ដោយ​ប្រើ AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"ជជែក​ដោយ​ប្រើ Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"ជជែក​ដោយ​ប្រើ Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"ជជែក​ដោយ​ប្រើ Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"ជជែក​ដោយ​ប្រើ QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"ជជែក​ដោយ​ប្រើ Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ជជែក​ដោយ​ប្រើ ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"ជជែក​ដោយ​ប្រើ Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"ជជែក"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"លុប​"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"បង្ហាញ​​ប្រអប់​ឈ្មោះ​បន្ថែម"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"លាក់​​វាល​ឈ្មោះ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"បង្ហាញប្រអប់​​ឈ្មោះ​តាម​សូរសព្ទ​បន្ថែម"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"លាក់​វាល​ឈ្មោះ​តាម​សូរស័ព្ទ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ពង្រីក"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"លាក់"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"បានពង្រីក"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"បានលាក់"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ទំនាក់ទំនង​ទាំងអស់"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"បាន​ដាក់​ផ្កាយ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"កំណត់តាម​តម្រូវ​ការ"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"ទំនាក់ទំនង"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ទំនាក់ទំនង​ទាំងអស់​ផ្សេងទៀត"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ទំនាក់ទំនង​ទាំងអស់"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"យក​ក្រុម​សមកាលកម្ម​ចេញ"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"បន្ថែម​ក្រុម​សមកាលកម្ម"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"ក្រុម​ច្រើន​ទៀត..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ការ​លុប \"<xliff:g id="GROUP">%s</xliff:g>\" ចេញពី​សមកាលកម្ម​វា​ក៏​នឹង​លុប​ទំនាក់ទំនង​ដែល​មិន​នៅ​ក្នុង​ក្រុម​ចេញពី​សមកាលកម្ម​ផង​ដែរ។"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"កំពុង​រក្សាទុក​ជម្រើស​បង្ហាញ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ទិដ្ឋភាព​​ផ្ទាល់ខ្លួន"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"រក្សាទំនាក់ទំនងដែលបាននាំចូលទៅ៖"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ស៊ីមកាត"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">ទំនាក់ទំនង %1$d</item>
+ <item quantity="one">ទំនាក់ទំនង 1</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_2">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"ឯកសារ .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"គ្មាន​អ្វី​ត្រូវ​នាំចូល"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"នាំចូល​ទំនាក់ទំនង​ពី vCard ដែរ​ឬ​ទេ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"បោះបង់​ការ​នាំចូល <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"បោះបង់​ការ​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"មិន​អាច​បោះបង់​ការ​នាំចេញ/នាំចូល vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"មិន​ស្គាល់​កំហុស។"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"មិន​អាច​បើក \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g> ។"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"មិន​អាច​ចាប់ផ្ដើម​ម​ការ​នាំចេញ​៖ \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" ។"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"មិន​មាន​ទំនាក់ទំនង​ដើម្បី​នាំចេញ។"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"អ្នកបានបិទសិទ្ធិអនុញ្ញាតដែលតម្រូវឲ្យមាន។"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"មាន​កំហុស​កើត​ឡើង​ពេល​នាំចេញ៖ \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" ។"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"កំហុស I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"អង្គ​ចងចាំ​មិន​គ្រប់គ្រាន់។ ឯកសារ​ប្រហែលជា​ធំ​ពេក។"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"មិន​គាំទ្រ​ទ្រង់ទ្រាយ។"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"បាន​បញ្ចប់​ការ​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g> ។"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"បានបញ្ចប់ការនាំចេញទំនាក់ទំនង។"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"បានបញ្ចប់ការនាំចេញទំនាក់ទំនង សូមចុចលើការជូនដំណឹង ដើម្បីចែករំលែកទំនាក់ទំនង"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"ប៉ះដើម្បីចែករំលែកទំនាក់ទំនង"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"បាន​បោះបង់​ការ​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g> ។"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"កំពុង​នាំចេញ​ព័ត៌មាន​ទំនាក់ទំនង"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"ទិន្នន័យចំណាំកំពុងត្រូវបាននាំចេញ"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"មិន​អាច​យក​ព័ត៌មាន​មូលដ្ឋាន​ទិន្នន័យ។"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"មិន​មាន​ទំនាក់ទំនង​ដែល​អាច​នាំចេញ​ទេ។"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"មិន​បាន​ចាប់ផ្ដើម​កម្មវិធី​តែង vCard ដោយ​​ត្រឹមត្រូវ។"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"មិន​អាច​នាំចេញ"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"មិន​បាន​នាំចេញ​ទិន្នន័យ​ទំនាក់ទំនង។\nមូលហេតុ៖ \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"ការ​នាំចូល <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"មិន​អាច​អាន​ទិន្នន័យ vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"បាន​បញ្ចប់​ការ​នាំចូល vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"បាន​បោះបង់​ការ​នាំ​ចូល <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"នឹង​នាំចូល <xliff:g id="FILENAME">%s</xliff:g> ក្នុង​ពេល​ឆាប់ៗ។"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"នឹង​នាំចូល​ឯកសារ​ក្នុង​ពេល​ឆាប់ៗ។"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"បាន​បដិសេធ​សំណើ​នាំចូល vCard ។ សូម​ព្យាយាម​ម្ដងទៀត​នៅ​ពេល​ក្រោយ​។"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ទំនាក់ទំនងនឹងត្រូវបាននាំចេញក្នុងពេលបន្តិចទៀតនេះ។"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"បាន​បដិសេធ​សំណើ​នាំចេញ vCard ។ សូម​ព្យាយាម​ម្ដងទៀត​នៅ​ពេល​ក្រោយ។"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"ទំនាក់ទំនង"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"ការ​ផ្ទុក vCard(s​) ទៅកាន់​ឧបករណ៍​ផ្ទុក​ប​បណ្ដោះអាសន្ន​មូលដ្ឋាន។ ការ​នាំចូល​ពិតប្រាកដ​នឹង​ចាប់ផ្ដើម​ម​ឆាប់ៗ។"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"មិន​អាច​នាំចូល vCard ។"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ទំនាក់ទំនង​ដែល​បាន​ទទួល​តាម NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ការ​ផ្ទុក​ក្នុង​ឃ្លាំង​សម្ងាត់"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"កំពុង​នាំចូល <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>៖ <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"នាំចេញទៅឯកសារ .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"តម្រៀបតាម"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ឈ្មោះ​តាម​សូរស័ព្ទ"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"បង្ហាញ​ជា​និច្ច"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"លាក់ បើ​ទទេ"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"នាម​ខ្លួន"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"នាម​ត្រកូល"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"ទម្រង់​ឈ្មោះ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"នាម​ខ្លួន​មុន"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"នាមត្រកូល​មុន"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"គណនី"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"គណនីលំនាំដើមសម្រាប់ទំនាក់ទំនងថ្មី"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ព័ត៌មាន​របស់​ខ្ញុំ"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"រៀបចំ​កម្រងព័ត៌មានរបស់​អ្នក"</string>
+ <string name="setting_about" msgid="7014388749752042863">"អំពីទំនាក់ទំនង"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ចែករំលែកទំនាក់ទំនង​ដែល​ចូលចិត្ត"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ចែករំលែកទំនាក់ទំនងទាំងអស់"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"ការចែករំលែកទំនាក់ទំនង​មិន​បាន​សម្រេច។"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"នាំចេញ​ទំនាក់ទំនង"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"នាំចូល​ទំនាក់ទំនង​ពី"</string>
+ <string name="share_error" msgid="948429331673358107">"ទំនាក់ទំនង​នេះ​មិន​អាច​ចែករំលែក​បាន​ទេ។"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"មិនមានទំនាក់ទំនងដើម្បីចែករំលែកទេ។"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ទំនាក់ទំនង​ដែល​ត្រូវ​បង្ហាញ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ទំនាក់ទំនង​ដែល​ត្រូវ​បង្ហាញ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ប្ដូរ​ការ​មើល​តាមបំណង"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"រក្សាទុក"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"ស្វែងរកទំនាក់ទំនង"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"សំណព្វ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"នាំចូល"</string>
+ <string name="menu_export" msgid="2658783911863503902">"នាំ​ចេញ"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"លេខបានរារាំង"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"តាម​រយៈ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> តាម​រយៈ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"បញ្ឈប់​ការ​ស្វែងរក"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"សម្អាត​ការ​ស្វែងរក"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"គណនី"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ប្រើ​វា​សម្រាប់​ការ​ហៅ​ជា​និច្ច"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ការហៅព្រមជាមួយចំណាំ"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"បញ្ចូលចំណាំដែលត្រូវផ្ញើជាមួយការហៅទូរសព្ទ..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ផ្ញើ &amp; ហៅទូរស័ព្ទ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"កំណែបង្កើត"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"អាជ្ញាប័ណ្ណ​ប្រភព​កូដ​ចំហ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"សេចក្ដីលម្អិតអាជ្ញាប័ណ្ណសម្រាប់កម្មវិធីប្រភពកូដ​ចំហ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"គោលការណ៍​​ឯកជនភាព"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"លក្ខខណ្ឌ​ប្រើប្រាស់"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"អាជ្ញាប័ណ្ណ​ប្រភព​កូដ​ចំហ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"ការ​បើក URL មិន​បាន​សម្រេច។"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"បានពិនិត្យ <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"មិនបានពិនិត្យ <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ធ្វើការហៅជាវីដេអូ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"លុប"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"សញ្ញា​ចុចបី"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> នាទី <xliff:g id="SECONDS">%2$s</xliff:g> វិនាទី"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ម៉ោង <xliff:g id="MINUTES_1">%2$s</xliff:g> នាទី <xliff:g id="SECONDS">%3$s</xliff:g> វិនាទី"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ផ្លូវកាត់នេះត្រូវបានបិទ"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ទំនាក់ទំនងត្រូវបាន​លុប​ចេញ"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"នាំចូល"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"ជ្រើស​រើសទំនាក់ទំនង"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"គ្មាន​ទំនាក់ទំនង​នៅ​ក្នុង​​ស៊ីមកាត​របស់​អ្នក​ទេ"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"ទំនាក់ទំនង​មាន​រួច​ហើយ​នៅ​ក្នុង​បញ្ជី​របស់​អ្នក"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">បាន​នាំចូល​ទំនាក់ទំនង SIM <xliff:g id="COUNT">%d</xliff:g></item>
+ <item quantity="one">បាន​នាំចូល​ទំនាក់ទំនង SIM 1</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"មិន​អាច​នាំចូល​ទំនាក់ទំនង​ពី SIM បាន​ទេ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"នាំចូល​ពី SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"បោះបង់"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ការធ្វើសមកាលស្វ័យប្រវត្តិ​ត្រូវ​បានបិទ។ ចុច ដើម្បីបើក។"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"បោះបង់"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ការ​ធ្វើ​សមកាលកម្ម​គណនី​ត្រូវ​បាន​បិទ។ ចុច ដើម្បី​បើក។"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"បើក​ការ​ធ្វើ​សមកាលកម្ម​ស្វ័យប្រវត្តិ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"ការ​ផ្លាស់ប្ដូរ​ដែល​អ្នក​​ធ្វើ​ចំពោះ​កម្មវិធី និង​គណនី​ទាំងអស់ មិន​គ្រាន់តែ Google ទំនាក់ទំនង​ទេ នឹង​រក្សា​បច្ចុប្បន្នភាព​រវាង​បណ្ដាញ និង​ឧបករណ៍​របស់​អ្នក។"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"បើក"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"គ្មាន​ការ​តភ្ជាប់"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"បង្ហាញ​ជា​ច្រើន"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"បាន​បញ្ចប់​នាំចូល​ទំនាក់ទំនង​ក្នុង​ស៊ីមកាត"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ការ​នាំចូល​មិន​បាន​សម្រេច"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"មិន​អាច​នាំចូល​ទំនាក់ទំនង​ពី​ស៊ីម​កាត​បាន​ទេ"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"កំពុង​នាំចូល​ទំនាក់ទំនង​​ពី SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"ការ​ជូនដំណឹង"</string>
+</resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
deleted file mode 100644
index c1353d11e..000000000
--- a/res/values-kn-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"ಸಂಪರ್ಕಗಳು"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"ಸಂಪರ್ಕಗಳು"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"ಸಂಪರ್ಕ ವೀಕ್ಷಿಸಿ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"ಸಂಪರ್ಕ ಎಡಿಟ್ ಮಾಡಿ"</string>
- <string name="contactsList" msgid="8661624236494819731">"ಸಂಪರ್ಕಗಳು"</string>
- <string name="shortcutContact" msgid="749243779392912958">"ಸಂಪರ್ಕ"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ನೇರ ಡಯಲ್"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ನೇರ ಸಂದೇಶ"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"ಸಂಪರ್ಕದ ಶಾರ್ಟ್‌ಕಟ್‌‌ ಆರಿಸಿ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ಕರೆಮಾಡಲು ಸಂಖ್ಯೆ ಆಯ್ಕೆ ಮಾಡಿ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"ಸಂದೇಶಕ್ಕಾಗಿ ಸಂಖ್ಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ಸಂಪರ್ಕಕ್ಕೆ ಸೇರಿಸು"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ಸಂಪರ್ಕ ಆಯ್ಕೆ ಮಾಡಿ"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
- <string name="starredList" msgid="4817256136413959463">"ನಕ್ಷತ್ರ ಹಾಕಿರುವುದು"</string>
- <string name="frequentList" msgid="7154768136473953056">"ಆಗಾಗ್ಗೆ"</string>
- <string name="strequentList" msgid="5640192862059373511">"ಮೆಚ್ಚಿನವುಗಳು"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"ಸಂಪರ್ಕ ವಿವರಗಳು"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ಸಂಪರ್ಕವನ್ನು ರಚಿಸಿ"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ಗುಂಪು ಎಡಿಟ್ ಮಾಡಿ"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ಗುಂಪು ರಚಿಸಿ"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"ಇವರ ಕುರಿತು"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"ಅಪ್‌ಡೇಟ್‌ಗಳು"</string>
- <string name="searchHint" msgid="8482945356247760701">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"ಸಂಪರ್ಕವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಿ"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"ಮೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ಮೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"ಎಡಿಟ್"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"ಅಳಿಸಿ"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ಫೋಟೋ ಬದಲಾಯಿಸಿ"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ಮುಖಪುಟ ಪರದೆಯ ಮೇಲೆ ಇರಿಸು"</string>
- <string name="menu_call" msgid="3992595586042260618">"ಕರೆಯ ಸಂಪರ್ಕ"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ಪಠ್ಯ ಸಂಪರ್ಕ"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"ಅನ್‌ಲಿಂಕ್‌"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ಎಡಿಟ್"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ಅಳಿಸಿ"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸಿ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ಗುಂಪು ಸೇರಿಸು"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡುವುದೇ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ಅನ್‌ಲಿಂಕ್‌"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ನೀವು ಈಗಾಗಲೇ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು ಮತ್ತು ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ರದ್ದುಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ಉಳಿಸಿ ಮತ್ತು ಅನ್‌ಲಿಂಕ್‌ ಮಾಡಿ"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"ನೀವು ಈಗಾಗಲೇ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು ಮತ್ತು ಆಯ್ಕೆ ಮಾಡಲಾದ ಸಂಪರ್ಕದ ಜೊತೆಗೆ ಲಿಂಕ್ ಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ಉಳಿಸು ಮತ್ತು ಲಿಂಕ್‌ ಮಾಡು"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"ಲಿಂಕ್‌"</string>
- <string name="menu_save" msgid="1727844363591825909">"ಉಳಿಸು"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ನೀವು <xliff:g id="NAME">%s</xliff:g> ಅವರೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡಲು ಬಯಸುವ ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ತೋರಿಸು"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ಸೂಚಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"ಸಂಪರ್ಕಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
- <item quantity="other">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ರಿಂಗ್‌ಟೋನ್‌‌"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ಧ್ವನಿಮೇಲ್‌ಗೆ ಎಲ್ಲ ಕರೆಗಳು"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ನಿಮ್ಮ ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ, ಆದರೆ ಅವುಗಳನ್ನು ಮರೆಮಾಡಬಹುದು."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ಮರೆಮಾಡು"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ಬಹು ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಹೊಂದಿರುವ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ. ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ಲಿಂಕ್ ಮಾಡಲು ನೀವು ಕನಿಷ್ಟ ಎರಡು ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡುವ ಅಗತ್ಯವಿದೆ."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ಆಯ್ಕೆ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳನ್ನು ಲಿಂಕ್ ಮಾಡವುದೇ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"ಲಿಂಕ್‌"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"ಆಯ್ಕೆ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ನಿಮ್ಮ ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ, ಆದರೆ ಅವುಗಳನ್ನು ಮರೆಮಾಡಬಹುದು."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ಬಹು ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಹೊಂದಿರುವ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ. ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದರಿಂದ ಅದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ವಿವರಗಳನ್ನು ಬಹು ಖಾತೆಗಳಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ಅಳಿಸಿ"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸು"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"ಸಂಪರ್ಕವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ಸಂಪರ್ಕವನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ಸಂಘಟನೆ"</item>
- <item msgid="7196592230748086755">"ಟಿಪ್ಪಣಿ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ಟ್ಯಾಬ್ಲೆಟ್‌‌ನಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳು ಲಭ್ಯವಿಲ್ಲ."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ಫೋನ್‌ನಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳು ಲಭ್ಯವಿಲ್ಲ."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ಸಂಪರ್ಕ ಫೋಟೋ"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"ಕಸ್ಟಮ್ ಲೇಬಲ್ ಹೆಸರು"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ಕರೆಗಳನ್ನು ನೇರವಾಗಿ ಧ್ವನಿಮೇಲ್‌ಗೆ ಕಳುಹಿಸಿ"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ಫೋಟೋ ತೆಗೆದುಹಾಕಿ"</string>
- <string name="noContacts" msgid="4955659076981974652">"ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
- <string name="noGroups" msgid="8614664663561385253">"ಯಾವುದೇ ಗುಂಪುಗಳಿಲ್ಲ."</string>
- <string name="noAccounts" msgid="7768267764545265909">"ಗುಂಪುಗಳನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಖಾತೆಯ ಅಗತ್ಯವಿದೆ."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ಈ ಗುಂಪಿನಲ್ಲಿ ಜನರಿಲ್ಲ."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"ಕೆಲವೊಂದು ಸೇರಿಸಲು, ಗುಂಪನ್ನು ಎಡಿಟ್ ಮಾಡಿ."</string>
- <string name="savingContact" msgid="4075751076741924939">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"ಸಂಪರ್ಕ‌ವನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"ಸಂಪರ್ಕಗಳನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ಸಂಪರ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ಸಂಪರ್ಕದ ಲಿಂಕ್ ರದ್ದು ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಲಿಲ್ಲ."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ಸಂಪರ್ಕ ಫೋಟೋ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ಗುಂಪನ್ನು ಉಳಿಸಲಾಗಿದೆ."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ಗುಂಪಿನ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ <xliff:g id="COUNT">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
- <item quantity="other">ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ <xliff:g id="COUNT">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಕಂಡುಬಂದಿದೆ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ಎಲ್ಲಾ"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ಮೆಚ್ಚಿನವುಗಳು"</string>
- <string name="callBack" msgid="5498224409038809224">"ಮರಳಿ ಕರೆ ಮಾಡಿ"</string>
- <string name="callAgain" msgid="3197312117049874778">"ಮತ್ತೆ ಕರೆ ಮಾಡಿ"</string>
- <string name="returnCall" msgid="8171961914203617813">"ಹಿಂತಿರುಗುವಿಕೆ ಕರೆ"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ಗೆ ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸುವುದೇ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"ಸಂಪರ್ಕ ಫೋಟೋ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ಪ್ಲಸ್‌"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ರಲ್ಲಿ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ಸಂಪರ್ಕಗಳು"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಹೆಸರುಗಳು"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ಈ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ ಕಂಡುಬಂದಿಲ್ಲ."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ಹಿಂದಿನ ಪರದೆಗೆ ಹಿಂತಿರುಗಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ಇಮೇಲ್ ಸೇರಿಸಿ"</string>
- <string name="missing_app" msgid="1466111003546611387">"ಈ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ ಕಂಡುಬಂದಿಲ್ಲ."</string>
- <string name="menu_share" msgid="943789700636542260">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸು"</string>
- <string name="share_via" msgid="563121028023030093">"ಸಂಪರ್ಕದ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ಖಾತೆಯ ಅಡಿಯಲ್ಲಿ ಗುಂಪನ್ನು ರಚಿಸಿ"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ಧ್ವನಿ ಚಾಟ್"</string>
- <string name="video_chat" msgid="1872255818640336072">"ವೀಡಿಯೋ ಚಾಟ್"</string>
- <string name="connections" msgid="8098440723172028350">"ಸಂಪರ್ಕಗಳು"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸಿ"</string>
- <string name="recent" msgid="2659189233141493004">"ಇತ್ತೀಚಿನದು"</string>
- <string name="recent_updates" msgid="4267258535615860710">"ಇತ್ತೀಚಿನ ಅಪ್‌ಡೇಟ್‌ಗಳು"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ಸಂಪರ್ಕ"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ಖಾತೆ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಸಂಪಾದಿಸಲಾಗುವುದಿಲ್ಲ."</string>
- <string name="group_read_only" msgid="1061762906115697637">"ಈ ಸಾಧನದಲ್ಲಿ ಎಡಿಟ್ ಮಾಡಲು ಆಗುವುದಿಲ್ಲ."</string>
- <string name="take_photo" msgid="7496128293167402354">"ಫೋಟೋ ತೆಗೆಯಿರಿ"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ಹೊಸ ಫೋಟೋ ತೆಗೆಯಿರಿ"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ಹೊಸ ಫೋಟೋವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"ಹುಡುಕಲಾಗುತ್ತಿದೆ…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"ಆಯ್ಕೆಮಾಡಿರುವುದನ್ನು ತೋರಿಸು"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"ಎಲ್ಲ ತೋರಿಸು"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ಎಲ್ಲವನ್ನು ಆಯ್ಕೆ ರದ್ದುಮಾಡಿ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"ಹೊಸದನ್ನು ಸೇರಿಸಿ"</string>
- <string name="add_organization" msgid="7311893231158291197">"ಸಂಸ್ಥೆಯನ್ನು ಸೇರಿಸಿ"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ದಿನಾಂಕ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ಗುಂಪು ಹೆಸರು"</string>
- <string name="change_photo" msgid="8530597935483526383">"ಬದಲಾಯಿಸು"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ಪ್ರಾಥಮಿಕ ಫೋಟೋ"</string>
- <string name="description_star" msgid="2605854427360036550">"ಮೆಚ್ಚಿನ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ಪ್ರಸ್ತುತ ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕದೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡುವುದೇ?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕವನ್ನು ಸಂಪಾದಿಸುವುದಕ್ಕೆ ಬದಲಿಸುವುದೇ? ನೀವು ಇಲ್ಲಿಯವರೆಗೆ ನಮೂದಿಸಿದ ಮಾಹಿತಿಯನ್ನು ನಕಲು ಮಾಡಲಾಗುತ್ತದೆ."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ನನ್ನ ಸಂಪರ್ಕಗಳಿಗೆ ನಕಲಿಸು"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ನನ್ನ ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸು"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ಡೈರೆಕ್ಟರಿ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ಕಸ್ಟಮ್"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
- <string name="menu_settings" msgid="377929915873428211">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
- <string name="menu_help" msgid="1680178646764069976">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸು"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"ಸಂಪರ್ಕಕ್ಕೆ ಸೇರಿಸು"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"ಮುಚ್ಚು"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"ವರ್ಷವನ್ನು ಸೇರಿಸಿ"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"ಸಂಪರ್ಕ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ಖಾತೆ ಸೇರಿಸಿ"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಿ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"ಹೊಸ ಗುಂಪು ರಚಿಸಿ"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"ಹೊಸ ಗುಂಪು ರಚಿಸಿ"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ಗುಂಪುಗಳು</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ಗುಂಪುಗಳು</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ಗುಂಪನ್ನು ಅಳಿಸುವುದೇ? (ಸಂಪರ್ಕಗಳನ್ನೇ ಅಳಿಸಲಾಗುವುದಿಲ್ಲ.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ರಿಂದ ಜನರು</item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ರಿಂದ ಜನರು</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಜನರು</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಜನರು</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ಮತ್ತೊಬ್ಬರೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡುವ ಮೊದಲು ಸಂಪರ್ಕದ ಹೆಸರನ್ನು ಟೈಪ್‌ ಮಾಡಿ."</string>
- <string name="copy_text" msgid="3257145021583508761">"ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ"</string>
- <string name="set_default" msgid="4417505153468300351">"ಡೀಫಾಲ್ಟ್ ಹೊಂದಿಸಿ"</string>
- <string name="clear_default" msgid="7193185801596678067">"ಡಿಫಾಲ್ಟ್‌ ತೆರವುಗೊಳಿಸಿ"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"ಪಠ್ಯವನ್ನು ನಕಲಿಸಲಾಗಿದೆ"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ನಿಮ್ಮ ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸಿ ಸಂಪಾದನೆಯನ್ನು ನಿರ್ಗಮಿಸುವುದೇ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ತ್ಯಜಿಸು"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"ಸಂಪಾದಿಸುತ್ತಿರಿ"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"ನನ್ನ ಪ್ರೊಫೈಲ್ ಹೊಂದಿಸಿ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"ವ್ಯಕ್ತಿಯ ಹೆಸರನ್ನು ಟೈಪ್‌ ಮಾಡಿ"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ಗುಂಪಿನ ಹೆಸರು"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"ನನ್ನ ಸ್ಥಳೀಯ ಪ್ರೊಫೈಲ್"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ನನ್ನ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ಪ್ರೊಫೈಲ್‌"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"ನಿಮ್ಮ ಫೋನ್‌ ಅನ್ನು ಕಳೆದುಕೊಂಡರೂ ಸಹ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ: ಆನ್‌‌ಲೈನ್‌ ಸೇವೆಯೊಂದಿಗೆ ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡಿ."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ಖಾತೆಯೊಂದನ್ನು ಸೇರಿಸು"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"ನಿಮ್ಮ ಹೊಸ ಸಂಪರ್ಕವನ್ನು ಬ್ಯಾಕಪ್‌ ಮಾಡಲಾಗುವುದಿಲ್ಲ. ಸಂಪರ್ಕಗಳನ್ನು ಆನ್‌ಲೈನ್‌ನಲ್ಲಿ ಬ್ಯಾಕಪ್‌ ಇರಿಸುವಂತಹ ಖಾತೆಯನ್ನು ಸೇರಿಸುವುದೇ?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ಹೊಸ ಸಂಪರ್ಕಗಳನ್ನು <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ಹೊಸ ಸಂಪರ್ಕಗಳಿಗೆ ಡಿಫಾಲ್ಟ್ ಖಾತೆ ಆಯ್ಕೆಮಾಡಿ:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"ಹೊಸ ಸಂಪರ್ಕ ಸೇರಿಸಿ"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
- <string name="keep_local" msgid="1258761699192993322">"ಸ್ಥಳೀಯವಾಗಿರಿಸಿ"</string>
- <string name="add_account" msgid="8201790677994503186">"ಖಾತೆ ಸೇರಿಸಿ"</string>
- <string name="add_new_account" msgid="5748627740680940264">"ಹೊಸ ಖಾತೆಯನ್ನು ಸೇರಿಸಿ"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ಡೇಟಾಬೇಸ್‌‌ ಫೈಲ್‌ಗಳನ್ನು ರಫ್ತು ಮಾಡಿ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ಹೊಸ ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸು"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ಇನ್ನಷ್ಟು ನೋಡಿ"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ಕಡಿಮೆ ನೋಡಿ"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ಇತ್ತೀಚಿನದು"</string>
- <string name="about_card_title" msgid="2920942314212825637">"ಕುರಿತು"</string>
- <string name="send_message" msgid="8938418965550543196">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ವೈಯಕ್ತಿಕ ಪ್ರತಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ನಿನ್ನೆ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"ನಾಳೆ"</string>
- <string name="today" msgid="8041090779381781781">"ಇಂದು"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> ಕ್ಕೆ ಇಂದು"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> ಕ್ಕೆ ನಾಳೆ"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ಶೀರ್ಷಿಕೆರಹಿತ ಈವೆಂಟ್)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"ಹೊಂದಿಸಿ"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ಸಂಸ್ಥೆ"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ಅಡ್ಡಹೆಸರು"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"ಟಿಪ್ಪಣಿ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ವೆಬ್‌ಸೈಟ್"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ಈವೆಂಟ್"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"ಸಂಬಂಧ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ಖಾತೆ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"ಹೆಸರು"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ಇಮೇಲ್"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ಫೋನ್"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ಫೋಟೋ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"ಸಂಪರ್ಕ ಸಂಪಾದಕವನ್ನು ವಿಸ್ತರಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"ಸಂಪರ್ಕ ಸಂಪಾದಕವನ್ನು ಕುಗ್ಗಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"ಸ್ಥಳಕ್ಕಾಗಿ ದಿಕ್ಕುಗಳು"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"ಇತ್ತೀಚಿನ sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ಪ್ರತಿಕ್ರಿಯಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ಒಳಬರುವ"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ಹೊರಹೋಗುವ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ತಪ್ಪಿಸಿಕೊಂಡ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ಇತ್ತೀಚಿನ ಕರೆ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ಪುನಃ ಕರೆ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"ನೀವು: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ಇಮೇಲ್ ಕ್ಷೇತ್ರ ಅಥವಾ ಫೋನ್ ಕ್ಷೇತ್ರದಲ್ಲಿ ವ್ಯಕ್ತಿಯ Hangouts ಗುರುತಿಸುವಿಕೆಯನ್ನು ನೀವು ನಮೂದಿಸಿದಾಗ Hangouts ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ಇನ್ನಷ್ಟು ಫೀಲ್ಡ್‌ಗಳು"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ಫೋಟೋ ಬದಲಾಯಿಸಿ"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ಇದಕ್ಕೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ಪ್ರಸ್ತುತ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ಖಾತೆಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ. ಬೇರೆ ಖಾತೆಯನ್ನು ಆಯ್ಕೆಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ರದ್ದುಮಾಡಿ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಸಂಭವನೀಯ ನಕಲುಗಳು</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಸಂಭವನೀಯ ನಕಲುಗಳು</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ಈ ಸಂಪರ್ಕ"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ಸಂಭವನೀಯ ನಕಲಿಗಳು"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ಈ ಸಂಪರ್ಕಗಳು ಅದೇ ವ್ಯಕ್ತಿಯದ್ದಾಗಿರಬಹುದು. ನೀವು ಅವುಗಳನ್ನು ಏಕ ಸಂಪರ್ಕವಾಗಿ ಒಟ್ಟಿಗೆ ಲಿಂಕ್ ಮಾಡಬಹುದು."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ನಿಮ್ಮ ಖಾತೆಗಳಿಂದ"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಿ"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ಎಲ್ಲ ಫೋಟೋಗಳು"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> ನಿಂದ"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸಿ"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸಿ"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿದೆ"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿದೆ"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ಭಾಷೆಯ ಬದಲಾವಣೆಯನ್ನು ಪ್ರತಿಬಿಂಬಿಸಲು ಸಂಪರ್ಕ ಪಟ್ಟಿಯನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ.\n\nದಯವಿಟ್ಟು ಕಾಯಿರಿ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು"</string>
-</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
new file mode 100644
index 000000000..3625f8450
--- /dev/null
+++ b/res/values-kn/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"ಸಂಪರ್ಕಗಳು"</string>
+ <string name="contactsList" msgid="8661624236494819731">"ಸಂಪರ್ಕಗಳು"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"ಸಂಪರ್ಕ ಸೇರಿಸಿ"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"ಸಂಪರ್ಕ"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ನೇರ ಡಯಲ್"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ನೇರ ಸಂದೇಶ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"ಸಂಪರ್ಕ ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ಸಂಪರ್ಕಕ್ಕೆ ಸೇರಿಸು"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ಸಂಪರ್ಕ ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
+ <string name="searchHint" msgid="8482945356247760701">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಿ"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"ಮೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ಮೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"ಎಡಿಟ್"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"ಅಳಿಸಿ"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ಫೋಟೋ ಬದಲಾಯಿಸಿ"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ಶಾರ್ಟ್‌ಕಟ್ ರಚಿಸಿ"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"ಅನ್‌ಲಿಂಕ್‌"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"ಸಂಪರ್ಕಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ಲೇಬಲ್‌ ಮರುಹೆಸರಿಸಿ"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ಲೇಬಲ್ ಅಳಿಸಿ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"ಸಂಪರ್ಕ ಸೇರಿಸಿ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ಲೇಬಲ್‌ನಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ಲೇಬಲ್‌ ರಚಿಸಿ"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡುವುದೇ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ಅನ್‌ಲಿಂಕ್‌"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ನೀವು ಈಗಾಗಲೇ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು ಮತ್ತು ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ರದ್ದುಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ಉಳಿಸಿ ಮತ್ತು ಅನ್‌ಲಿಂಕ್‌ ಮಾಡಿ"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"ನೀವು ಈಗಾಗಲೇ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು ಮತ್ತು ಆಯ್ಕೆ ಮಾಡಲಾದ ಸಂಪರ್ಕದ ಜೊತೆಗೆ ಲಿಂಕ್ ಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ಉಳಿಸು ಮತ್ತು ಲಿಂಕ್‌ ಮಾಡು"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"ಲಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"ಅನ್‌ಲಿಂಕ್ ಮಾಡುತ್ತಿದೆ"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"ಲಿಂಕ್‌"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕ ವೀಕ್ಷಿಸಿ"</string>
+ <string name="menu_save" msgid="1727844363591825909">"ಉಳಿಸು"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ನೀವು <xliff:g id="NAME">%s</xliff:g> ಅವರೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡಲು ಬಯಸುವ ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ಸೂಚಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"ಸಂಪರ್ಕಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ಅಳಿಸಲಾಗಿದೆ"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ಮತ್ತು <xliff:g id="NAME_1">%2$s</xliff:g> ಅಳಿಸಲಾಗಿದೆ"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ಅಳಿಸಲಾಗಿದೆ"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
+ <item quantity="other">ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗಿದೆ</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google ನಿಂದ"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>ಖಾತೆಯಿಂದ"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ರಿಂಗ್‌ಟೋನ್‌‌"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ಧ್ವನಿಮೇಲ್‌ಗೆ ರೂಟ್ ಮಾಡಿ"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ಧ್ವನಿಮೇಲ್‌ಗೆ ಅನ್‌ರೂಟ್ ಮಾಡಿ"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ಈ ಸಂಪರ್ಕವು ಓದಲು-ಮಾತ್ರ ಆಗಿದೆ. ಇದನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ ಆದರೆ ನೀವು ಇದನ್ನು ಮರೆಮಾಡಬಹುದಾಗಿದೆ."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"ಸಂಪರ್ಕವನ್ನು ಮರೆಮಾಡಿ"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ಈ ಸಂಪರ್ಕದಲ್ಲಿ ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"ಆಯ್ಕೆ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ನಿಮ್ಮ ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುವುದಿಲ್ಲ, ಆದರೆ ಅವುಗಳನ್ನು ಮರೆಮಾಡಬಹುದು."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ಬಹು ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಹೊಂದಿರುವ ಸಂಪರ್ಕಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ. ಓದಲು-ಮಾತ್ರ ಖಾತೆಗಳಿಂದ ವಿವರಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ, ಅಳಿಸಲಾಗುವುದಿಲ್ಲ."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದರಿಂದ ಅದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ವಿವರಗಳನ್ನು ಬಹು ಖಾತೆಗಳಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ಅಳಿಸಿ"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"ಸಂಪರ್ಕವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ಸಂಪರ್ಕವನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ಸಾಧನದಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳು ಲಭ್ಯವಿಲ್ಲ."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ಸಂಪರ್ಕ ಫೋಟೋ"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"ಕಸ್ಟಮ್ ಲೇಬಲ್ ಹೆಸರು"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ಫೋಟೋ ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="noContacts" msgid="2228592924476426108">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದೆ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ಈ ಲೇಬಲ್‌ ಹೊಂದಿರುವ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ಈ ಖಾತೆಯಲ್ಲಿ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದೆ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ಉಳಿಸಲಾಗಿದೆ"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"ಸಂಪರ್ಕ‌ವನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"ಸಂಪರ್ಕಗಳನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"ಸಂಪರ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ಸಂಪರ್ಕದ ಲಿಂಕ್ ರದ್ದು ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ಸಂಪರ್ಕ ಫೋಟೋ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ಲೇಬಲ್ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ಲೇಬಲ್ ಅಳಿಸಲಾಗಿದೆ"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ಲೇಬಲ್ ರಚಿಸಲಾಗಿದೆ"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ಲೇಬಲ್‌ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ಲೇಬಲ್ ಅಪ್‌ಡೇಟ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ಲೇಬಲ್‌ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ಲೇಬಲ್‌ಗೆ ಸೇರಿಸಲಾಗಿದೆ"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ಲೇಬಲ್ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ಆ ಲೇಬಲ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ಕೆಲವು ಸಂಪರ್ಕಗಳು ಇಮೇಲ್‌ಗಳನ್ನು ಹೊಂದಿಲ್ಲ."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ಕೆಲವು ಸಂಪರ್ಕಗಳು ಫೋನ್ ಸಂಖ್ಯೆಗಳನ್ನು ಹೊಂದಿಲ್ಲ."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ಇಮೇಲ್ ಕಳುಹಿಸಿ"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ಕಳುಹಿಸಿ"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ಗೆ ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸುವುದೇ?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಹೆಸರುಗಳು"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ಹಿಂದಿನ ಪರದೆಗೆ ಹಿಂತಿರುಗಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ಇಮೇಲ್ ಸೇರಿಸಿ"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ಈ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ ಕಂಡುಬಂದಿಲ್ಲ."</string>
+ <string name="menu_share" msgid="943789700636542260">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸು"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ಸೇರಿಸು"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">ಸಂಪರ್ಕಗಳನ್ನು ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ</item>
+ <item quantity="other">ಸಂಪರ್ಕಗಳನ್ನು ಈ ಮೂಲಕ ಹಂಚಿಕೊಳ್ಳಿ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ಖಾತೆ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ಲೇಬಲ್‌ ರಚಿಸಿ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ಲೇಬಲ್‌ ಮರುಹೆಸರಿಸಿ"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ಲೇಬಲ್‌ ಹೆಸರು"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ಲೇಬಲ್‌ ಹೆಸರು"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ಧ್ವನಿ ಚಾಟ್"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ವೀಡಿಯೋ ಚಾಟ್"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ಸಂಪರ್ಕ"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ಖಾತೆ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ಫೋಟೋ ತೆಗೆಯಿರಿ"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ಹೊಸ ಫೋಟೋ ತೆಗೆಯಿರಿ"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ಹೊಸ ಫೋಟೋವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"ಹುಡುಕಲಾಗುತ್ತಿದೆ…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ದಿನಾಂಕ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ಲೇಬಲ್"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ಹಿಂದೆ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ಮುಚ್ಚು"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕವನ್ನು ಸಂಪಾದಿಸುವುದಕ್ಕೆ ಬದಲಿಸುವುದೇ? ನೀವು ಇಲ್ಲಿಯವರೆಗೆ ನಮೂದಿಸಿದ ಮಾಹಿತಿಯನ್ನು ನಕಲು ಮಾಡಲಾಗುತ್ತದೆ."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ಡೈರೆಕ್ಟರಿ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+ <string name="menu_help" msgid="1680178646764069976">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸು"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"ಮುಚ್ಚು"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"ವರ್ಷವನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ಖಾತೆ ಸೇರಿಸಿ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ಆಮದು ಮಾಡಿ"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"ಹೊಸದನ್ನು ರಚಿಸಿ…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ಲೇಬಲ್ ಅಳಿಸುವುದೇ? (ಸಂಪರ್ಕಗಳು ತಾವಾಗಿ ಅಳಿಸಿ ಹೋಗುವುದಿಲ್ಲ.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ಮತ್ತೊಬ್ಬರೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡುವ ಮೊದಲು ಸಂಪರ್ಕದ ಹೆಸರನ್ನು ಟೈಪ್‌ ಮಾಡಿ."</string>
+ <string name="copy_text" msgid="3257145021583508761">"ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ"</string>
+ <string name="set_default" msgid="4417505153468300351">"ಡೀಫಾಲ್ಟ್ ಹೊಂದಿಸಿ"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ಡಿಫಾಲ್ಟ್‌ ತೆರವುಗೊಳಿಸಿ"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"ಪಠ್ಯವನ್ನು ನಕಲಿಸಲಾಗಿದೆ"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸುವುದೇ?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ತ್ಯಜಿಸು"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ಕಸ್ಟಮೈಸೇಶನ್‌ಗಳನ್ನು ತ್ಯಜಿಸುವುದೇ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"ಸಂಪರ್ಕಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"ನನ್ನ ಸ್ಥಳೀಯ ಪ್ರೊಫೈಲ್"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ನನ್ನ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ಪ್ರೊಫೈಲ್‌"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಬ್ಯಾಕಪ್‌ ಮಾಡುವಂತಹ ಖಾತೆಯನ್ನು ಸೇರಿಸಲು ಒಂದು ನಿಮಿಷ ವ್ಯಯಿಸಿ."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ಹೊಸ ಸಂಪರ್ಕಗಳನ್ನು <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ಹೊಸ ಸಂಪರ್ಕಗಳಿಗೆ ಡಿಫಾಲ್ಟ್ ಖಾತೆ ಆಯ್ಕೆಮಾಡಿ:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ವೀಕ್ಷಣೆ ಮಾತ್ರ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ಎಡಿಟ್ ಮಾಡಲು ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ಸೇರಿಸಿ"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ಅನ್‌ಲಿಂಕ್‌"</string>
+ <string name="add_account" msgid="8201790677994503186">"ಖಾತೆ ಸೇರಿಸಿ"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"ಹೊಸ ಖಾತೆಯನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ಡೇಟಾಬೇಸ್‌‌ ಫೈಲ್‌ಗಳನ್ನು ರಫ್ತು ಮಾಡಿ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ಇನ್ನಷ್ಟು ನೋಡಿ"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ಕಡಿಮೆ ನೋಡಿ"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ಇತ್ತೀಚಿನದು"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"ಕುರಿತು"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ವೈಯಕ್ತಿಕ ಪ್ರತಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"ನಾಳೆ"</string>
+ <string name="today" msgid="8041090779381781781">"ಇಂದು"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> ಕ್ಕೆ ಇಂದು"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g> ಕ್ಕೆ ನಾಳೆ"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ಶೀರ್ಷಿಕೆರಹಿತ ಈವೆಂಟ್)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"ಹೊಂದಿಸಿ"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ಸಂಸ್ಥೆ"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ಅಡ್ಡಹೆಸರು"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"ಟಿಪ್ಪಣಿ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ವೆಬ್‌ಸೈಟ್"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ಈವೆಂಟ್"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"ಸಂಬಂಧ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"ಹೆಸರು"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ಇಮೇಲ್"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ಫೋನ್"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"ಸ್ಥಳಕ್ಕಾಗಿ ದಿಕ್ಕುಗಳು"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"ಇತ್ತೀಚಿನ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ಪ್ರತಿಕ್ರಿಯಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ಒಳಬರುವ"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ಹೊರಹೋಗುವ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ತಪ್ಪಿಸಿಕೊಂಡ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ಇತ್ತೀಚಿನ ಕರೆ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ಪುನಃ ಕರೆ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"ನೀವು: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ಇನ್ನಷ್ಟು ಫೀಲ್ಡ್‌ಗಳು"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"ಸಂಪರ್ಕ ಫೋಟೋವನ್ನು ಬದಲಿಸಿ"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ಸಂಪರ್ಕ ಫೋಟೋವನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"ಸಂಪರ್ಕ ಫೋಟೋ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ಇದಕ್ಕೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ನಲ್ಲಿನ ಸಂಪರ್ಕದ ಮಾಹಿತಿಯು ಎಡಿಟ್ ಮಾಡಲು ಆಗುವುದಿಲ್ಲ"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ಈ ಸಂಪರ್ಕ"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ಸಂಭವನೀಯ ನಕಲಿಗಳು"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ಈ ಸಂಪರ್ಕಗಳು ಅದೇ ವ್ಯಕ್ತಿಯದ್ದಾಗಿರಬಹುದು. ನೀವು ಅವುಗಳನ್ನು ಏಕ ಸಂಪರ್ಕವಾಗಿ ಒಟ್ಟಿಗೆ ಲಿಂಕ್ ಮಾಡಬಹುದು."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ಅಳಿಸಿ"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸಿ"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"ಸಲಹೆಗಳು"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ಹೊಸತು"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ತೆರೆಯಿರಿ"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ಮುಚ್ಚಿ"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ಲೇಬಲ್"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ಲೇಬಲ್‌ಗಳು"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ಖಾತೆಗಳು"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ನಿಮ್ಮ ಇತಿಹಾಸವನ್ನು ಒಟ್ಟಿಗೆ ವೀಕ್ಷಿಸಿ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ಈವೆಂಟ್‌ಗಳು ಮತ್ತು ಸಂದೇಶಗಳು"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ಈವೆಂಟ್‌ಗಳು"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"ಸಂದೇಶಗಳು"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"ಸಲಹೆಗಳು"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"ನಿಮ್ಮ ಸಂರ್ಪಕಗಳನ್ನು ಸಂಘಟಿತವಾಗಿ ಮತ್ತು ಉಪಯುಕ್ತವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="undo" msgid="1425165101664071422">"ರದ್ದುಗೊಳಿಸಿ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_home" msgid="1990519474420545392">"ಮನೆಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ಮೊಬೈಲ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_work" msgid="5328785911463744028">"ಕೆಲಸದ ಸಂಖ್ಯೆಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"ಕೆಲಸದ ಫ್ಯಾಕ್ಸ್‌‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ಮನೆಯ ಫ್ಯಾಕ್ಸ್‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ಪೇಜರ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_other" msgid="8563753966926932052">"ಕರೆಮಾಡಿ"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ಕಾಲ್‌ಬ್ಯಾಕ್‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_car" msgid="3280537320306436445">"ಕಾರ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ಕಂಪನಿಯ ಪ್ರಮುಖ ಸಂಖ್ಯೆಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_main" msgid="6082900571803441339">"ಮುಖ್ಯ ಸಂಖ್ಯೆಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ಫ್ಯಾಕ್ಸ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ರೇಡಿಯೋಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ಟೆಲೆಕ್ಸ್‌‌‌ ಮೂಲಕ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ಕೆಲಸದ ಮೊಬೈಲ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ಕೆಲಸದ ಪೇಜರ್‌‌ಗೆ ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ಕರೆ ಮಾಡಿ"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ಕರೆ ಮಾಡಿ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ನಿವಾಸಕ್ಕೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ಮೊಬೈಲ್‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ಕೆಲಸದ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ಕೆಲಸದ ಫ್ಯಾಕ್ಸ್‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ಮನೆಯ ಫ್ಯಾಕ್ಸ್‌‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ಪೇಜರ್‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_other" msgid="806127844607642331">"ಪಠ್ಯ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ಕಾಲ್‌ಬ್ಯಾಕ್‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ಕಾರ್‌ನ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ಕಂಪನಿಯ ಮುಖ್ಯ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ಮುಖ್ಯ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ಫ್ಯಾಕ್ಸ್‌‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ರೇಡಿಯೋ ಸಂಖ್ಯೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ಟೆಲೆಕ್ಸ್‌‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ಕೆಲಸದದ ಮೊಬೈಲ್‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ಕೆಲಸದ ಪೇಜರ್‌‌ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> ಗೆ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ಸಂದೇಶ ಕಳುಹಿಸಿ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ವೀಡಿಯೊ ಕರೆ ಮಾಡು"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"ಪದೇಪದೇ ಸಂಪರ್ಕಿಸಿರುವವರನ್ನು ತೆರವುಗೊ.?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"ಸಂಪರ್ಕಗಳು ಮತ್ತು ಫೋನ್‌ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಪದೇ ಪದೇ ಸಂಪರ್ಕಪಡಿಸಿರುವ ಪಟ್ಟಿಯನ್ನು ನೀವು ತೆರವುಗೊಳಿಸುತ್ತೀರಿ ಮತ್ತು ಮೊದಲಿನಿಂದ ನಿಮ್ಮ ವಿಳಾಸ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ತಿಳಿಯಲು ಇಮೇಲ್‌ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಒತ್ತಾಯಿಸಿ."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"ಪದೇ ಪದೇ ಸಂಪರ್ಕಿಸಿರುವವರನ್ನು ತೆರವು…"</string>
+ <string name="status_available" msgid="5586870015822828392">"ಲಭ್ಯ"</string>
+ <string name="status_away" msgid="1838861100379804730">"ದೂರ"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ಕಾರ್ಯನಿರತ"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ಇತರೆ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ಡೈರೆಕ್ಟರಿ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ಕೆಲಸದ ಡೈರೆಕ್ಟರಿ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> ಅವರಿಗೆ ತ್ವರಿತ ಸಂಪರ್ಕ"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ಯಾವುದೇ ಹೆಸರಿಲ್ಲ)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ಪದೇ ಪದೇ ಸಂಪರ್ಕಿಸಿರುವುದು"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ಸಾಧನ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"ಸಿಮ್"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ಹೆಸರು"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ಅಡ್ಡಹೆಸರು"</string>
+ <string name="name_given" msgid="4280790853455320619">"ಮೊದಲ ಹೆಸರು"</string>
+ <string name="name_family" msgid="7466985689626017037">"ಕೊನೆಯ ಹೆಸರು"</string>
+ <string name="name_prefix" msgid="59756378548779822">"ಹೆಸರಿನ ಪೂರ್ವಪ್ರತ್ಯಯ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ಮಧ್ಯದ ಹೆಸರು"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"ಹೆಸರಿನ ಪ್ರತ್ಯಯ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ಫೋನೆಟಿಕ್‌‌ ಹೆಸರು"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ಫೋನೆಟಿಕ್‌ ಮೊದಲ ಹೆಸರು"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ಫೋನೆಟಿಕ್‌‌ ಮಧ್ಯ ಹೆಸರು"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ಫೋನೆಟಿಕ್‌‌ ಕೊನೆಯ ಹೆಸರು"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ಫೋನ್"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ಇಮೇಲ್"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ವಿಳಾಸ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ಸಂಘಟನೆ"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ಸಂಬಂಧ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"ವಿಶೇಷ ದಿನಾಂಕ"</string>
+ <string name="sms" msgid="1756857139634224222">"ಪಠ್ಯ ಸಂದೇಶ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ವಿಳಾಸ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ಕಂಪನಿ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ಶೀರ್ಷಿಕೆ"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ಟಿಪ್ಪಣಿಗಳು"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ಕಸ್ಟಮ್"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"ಎಸ್‌ಐಪಿ"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ವೆಬ್‌ಸೈಟ್"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ಲೇಬಲ್‌ಗಳು"</string>
+ <string name="email_home" msgid="8573740658148184279">"ಮನೆಗೆ ಇಮೇಲ್‌ ಮಾಡಿ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ಮೊಬೈಲ್‌‌ಗೆ ಇಮೇಲ್‌ ಮಾಡಿ"</string>
+ <string name="email_work" msgid="2807430017302722689">"ಕೆಲಸದ ವಿಳಾಸಕ್ಕೆ ಇಮೇಲ್‌ ಮಾಡಿ"</string>
+ <string name="email_other" msgid="3454004077967657109">"ಇಮೇಲ್"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ಇಮೇಲ್‌ ಮಾಡಿ"</string>
+ <string name="email" msgid="5668400997660065897">"ಇಮೇಲ್"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ಗಲ್ಲಿ"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ನಗರ"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ರಾಜ್ಯ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ಪಿನ್ ಕೋಡ್"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ದೇಶ"</string>
+ <string name="map_home" msgid="1243547733423343982">"ಮನೆಯ ವಿಳಾಸವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+ <string name="map_work" msgid="1360474076921878088">"ಕೆಲಸದ ವಿಳಾಸವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+ <string name="map_other" msgid="3817820803587012641">"ವಿಳಾಸವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ವಿಳಾಸವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber ಬಳಸಿಕೊಂಡು ಚಾಟ್‌ ಮಾಡಿ"</string>
+ <string name="chat" msgid="9025361898797412245">"ಚಾಟ್"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ಅಳಿಸಿ"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"ಇನ್ನಷ್ಟು ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ತೋರಿಸಿ"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಕುಚಿಸಿ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ಇನ್ನಷ್ಟು ಫೋನೆಟಿಕ್ ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ತೋರಿಸಿ"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ಫೋನೆಟಿಕ್ ಹೆಸರಿನ ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಕುಚಿಸಿ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ವಿಸ್ತರಿಸು"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ಸಂಕುಚಿಸು"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ವಿಸ್ತರಿಸಲಾಗಿದೆ"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ಸಂಕುಚಿಸಲಾಗಿದೆ"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ನಕ್ಷತ್ರ ಹಾಕಿರುವುದು"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"ಕಸ್ಟಮೈಸ್"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"ಸಂಪರ್ಕಿಸು"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ಇತರ ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"ಸಿಂಕ್‌ ಗುಂಪನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"ಸಿಂಕ್‌ ಗುಂಪನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"ಇನ್ನಷ್ಟು ಗುಂಪುಗಳು…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ಸಿಂಕ್‌ನಿಂದ \"<xliff:g id="GROUP">%s</xliff:g>\" ಅನ್ನು ತೆಗೆದುಹಾಕುವುದರಿಂದ ಸಿಂಕ್‌ನಿಂದ ಯಾವುದೇ ಗುಂಪು ಮಾಡದಿರುವ ಸಂಪರ್ಕಗಳನ್ನು ಸಹ ತೆಗೆದುಹಾಕುತ್ತದೆ."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ಕಸ್ಟಮೈಸ್ ವೀಕ್ಷಣೆ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ಆಮದಾದ ಸಂಪರ್ಕಗಳನ್ನು ಇಲ್ಲಿ ಉಳಿಸಿ:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ಸಿಮ್‌ ಕಾರ್ಡ್"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"ಸಿಮ್ <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d ಸಂಪರ್ಕಗಳು</item>
+ <item quantity="other">%1$d ಸಂಪರ್ಕಗಳು</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> ಸಂಪರ್ಕಗಳು • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> ಸಂಪರ್ಕಗಳು • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ಫೈಲ್‌"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ಆಮದು ಮಾಡಲು ಏನೂ ಇಲ್ಲ"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard ನಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದುಮಾಡುವುದೇ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> ಆಮದು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ಆಮದು/ರಫ್ತು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"ಅಪರಿಚಿತ ದೋಷ."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ರಫ್ತುದಾರರನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ಯಾವುದೇ ರಫ್ತುಮಾಡಬಹುದಾದ ಸಂಪರ್ಕವಿಲ್ಲ."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"ನೀವು ಅಗತ್ಯವಿರುವ ಅನುಮತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿರುವಿರಿ."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ರಫ್ತು ಮಾಡುವ ಸಂದರ್ಭದಲ್ಲಿ ದೋಷವೊಂದು ಕಂಡುಬಂದಿದೆ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ದೋಷ"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ಸಾಕಷ್ಟು ಮೆಮೊರಿ ಇಲ್ಲ. ಫೈಲ್‌ ತುಂಬಾ ದೊಡ್ಡದಾಗಿರಬಹುದು."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ಈ ಫಾರ್ಮ್ಯಾಟ್ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮುಗಿದಿದೆ."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ಸಂಪರ್ಕಗಳ ರಫ್ತು ಮಾಡುವಿಕೆ ಮುಗಿದಿದೆ."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ಸಂಪರ್ಕಗಳನ್ನು ರಪ್ತು ಮಾಡುವುದನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಲಾಗಿದೆ, ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಧಿಸೂಚನೆ ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ರಫ್ತುಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ಡೇಟಾಬೇಸ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ಯಾವುದೇ ರಫ್ತುಮಾಡಬಹುದಾದ ಸಂಪರ್ಕಗಳು ಇಲ್ಲ."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard ಸಂಯೋಜಕ ಸರಿಯಾಗಿ ಪ್ರಾರಂಭವಾಗಿಲ್ಲ."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ರಫ್ತು ಮಾಡಲಾಗುವುದಿಲ್ಲ"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ರಫ್ತು ಮಾಡಲಾಗಿಲ್ಲ.\nಕಾರಣ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ಡೇಟಾವನ್ನು ಓದಲಾಗಲಿಲ್ಲ"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard ಆಮದು ಮುಕ್ತಾಯಗೊಂಡಿದೆ"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ಆಮದು ರದ್ದುಪಡಿಸಲಾಗಿದೆ"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಆಮದು ಮಾಡಲಾಗುತ್ತದೆ."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ಫೈಲ್‌ ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಆಮದು ಮಾಡಲಾಗುತ್ತದೆ."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ಆಮದು ವಿನಂತಿಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ಸಂಪರ್ಕಗಳನ್ನು ಶೀಘ್ರದಲ್ಲೇ ರಪ್ತು ಮಾಡಲಾಗುತ್ತದೆ."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ರಫ್ತು ವಿನಂತಿಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"ಸಂಪರ್ಕ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"ಸ್ಥಳೀಯ ತಾತ್ಕಾಲಿಕ ಸಂಗ್ರಹಣೆಗೆ vCard(ಗಳು) ಅನ್ನು ಸಂಗ್ರಹ ಮಾಡಲಾಗುತ್ತಿದೆ. ನಿಜವಾದ ಆಮದು ಶೀಘ್ರದಲ್ಲೇ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ಆಮದು ಮಾಡಲಾಗಿಲ್ಲ."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC ಮೂಲಕ ಸ್ವೀಕರಿಸಲಾದ ಸಂಪರ್ಕ"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ಸಂಗ್ರಹಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ಫೈಲ್‌ಗೆ ರಫ್ತು ಮಾಡಿ"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ಈ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ಫೋನೆಟಿಕ್‌‌ ಹೆಸರು"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ಯಾವಾಗಲೂ ತೋರಿಸಿ"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ಖಾಲಿಯಿದ್ದಲ್ಲಿ ಮರೆಮಾಡಿ"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ಮೊದಲ ಹೆಸರು"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"ಕೊನೆಯ ಹೆಸರು"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"ಹೆಸರಿನ ಫಾರ್ಮ್ಯಾಟ್‌"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ಮೊದಲ ಹೆಸರು ಮೊದಲು"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ಕೊನೆಯ ಹೆಸರು ಮೊದಲು"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ಖಾತೆಗಳು"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"ಹೊಸ ಸಂಪರ್ಕಗಳಿಗೆ ಡಿಫಾಲ್ಟ್‌ ಖಾತೆ"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ನನ್ನ ಮಾಹಿತಿ"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಹೊಂದಿಸಿ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"ಸಂಪರ್ಕಗಳ ಕುರಿತು"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ಮೆಚ್ಚಿನ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ವಿಫಲವಾಗಿದೆ."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"ಸಂಪರ್ಕಗಳನ್ನು ರಫ್ತು ಮಾಡಿ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"ಇದರಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಿ"</string>
+ <string name="share_error" msgid="948429331673358107">"ಈ ಸಂಪರ್ಕವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ಹಂಚಿಕೊಳ್ಳಲು ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ಪ್ರದರ್ಶಿಸಲು ಸಂಪರ್ಕಗಳು"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ಪ್ರದರ್ಶಿಸಲು ಸಂಪರ್ಕಗಳು"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ವೀಕ್ಷಣೆಯನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"ಉಳಿಸು"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ಮೆಚ್ಚಿನವುಗಳು"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ಆಮದು ಮಾಡಿ"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ರಫ್ತು ಮಾಡು"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ಮೂಲಕ"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> ಮೂಲಕ"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ಹುಡುಕಾಟವನ್ನು ನಿಲ್ಲಿಸಿ"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ಹುಡುಕಾಟವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ಖಾತೆ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ಕರೆಗಳನ್ನು ಮಾಡಲು ಯಾವಾಗಲೂ ಇದನ್ನು ಬಳಸಿ"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ಟಿಪ್ಪಣಿಯೊಂದಿಗೆ ಕರೆ"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ಕರೆ ಕಳುಹಿಸಲು ಟಿಪ್ಪಣಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ ..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ಕಳುಹಿಸು ಮತ್ತು ಕರೆಮಾಡು"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ಬಿಲ್ಡ್ ಆವೃತ್ತಿ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ತೆರೆದ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ಮುಕ್ತ ಮೂಲ ಸಾಫ್ಟ್‌ವೇರ್‌ಗಾಗಿ ಪರವಾನಗಿ ವಿವರಗಳು"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"ಗೌಪ್ಯತೆ ನೀತಿ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"ಸೇವಾ ನಿಯಮಗಳು"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ತೆರೆದ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ಪರಿಶೀಲಿಸಲಾಗಿದೆ"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ಪರಿಶೀಲಿಸಲಾಗಿಲ್ಲ"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ವೀಡಿಯೊ ಕರೆ ಮಾಡಿ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ಅಳಿಸಿ"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ಎಲಿಪ್ಸಿಸ್"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%2$s</xliff:g> ಸೆ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ಗಂ <xliff:g id="MINUTES_1">%2$s</xliff:g> ನಿಮಿಷ <xliff:g id="SECONDS">%3$s</xliff:g> ಸೆ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ಈ ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ಸಂಪರ್ಕವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ಆಮದು"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ನಿಮ್ಮ ಸಿಮ್‌ ಕಾರ್ಡ್‌ನಲ್ಲಿ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"ಸಂಪರ್ಕ ಈಗಾಗಲೇ ನಿಮ್ಮ ಪಟ್ಟಿಯಲ್ಲಿ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಸಿಮ್ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಸಿಮ್ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"ಸಿಮ್ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"ಸಿಮ್‌ನಿಂದ ಆಮದು ಮಾಡಿ"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ರದ್ದುಮಾಡಿ"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ಸ್ವಯಂಚಾಲಿತ ಸಿಂಕ್ ಆಫ್‌ ಆಗಿದೆ. ಆನ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ವಜಾಗೊಳಿಸಿ"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ಖಾತೆಯ ಸಿಂಕ್ ಆಫ್‌ ಆಗಿದೆ. ಆನ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"ಸ್ವಯಂ-ಸಿಂಕ್‌ ಆನ್ ಮಾಡುವುದೇ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಖಾತೆಗಳಿಗೆ ನೀವು ಮಾಡುವ ಬದಲಾವಣೆಗಳು Google ಸಂಪರ್ಕಗಳಿಗೆ ಮಾತ್ರವಲ್ಲದೇ, ವೆಬ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನಗಳ ನಡುವೆ ನವೀಕೃತವಾಗಿ ಇರಿಸಲಾಗುತ್ತದೆ."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ಆನ್ ಮಾಡಿ"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ಯಾವುದೇ ಸಂಪರ್ಕವಿಲ್ಲ"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"ಸಿಮ್"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"ಇನ್ನಷ್ಟು ತೋರಿಸಿ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"ಸಿಮ್ ಕಾರ್ಡ್ ಆಮದು ಮುಕ್ತಾಯಗೊಂಡಿದೆ"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ಆಮದು ವಿಫಲವಾಗಿದೆ"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"ಸಿಮ್‌ ಕಾರ್ಡ್‌ನಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ಸಿಮ್‌ ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"ಅಧಿಸೂಚನೆಗಳು"</string>
+</resources>
diff --git a/res/values-ko/donottranslate_config.xml b/res/values-ko/donottranslate_config.xml
new file mode 100644
index 000000000..14cdd4da8
--- /dev/null
+++ b/res/values-ko/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2016, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources>
+ <!-- If true, an option is shown in Display Options UI to choose a sort order -->
+ <bool name="config_sort_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_sort_order_primary">false</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a name display order -->
+ <bool name="config_display_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_display_order_primary">false</bool>
+
+ <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">false</bool>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 5809d03f2..347aac781 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"주소록"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"주소록"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"연락처 보기"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"연락처 수정"</string>
<string name="contactsList" msgid="8661624236494819731">"주소록"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"연락처 추가"</string>
<string name="shortcutContact" msgid="749243779392912958">"연락처"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"바로 전화 걸기"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"바로 메시지 보내기"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"연락처 바로가기 선택"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"전화번호 선택"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"메시지를 보낼 번호 선택"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"연락처 선택"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"연락처에 추가"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"연락처 선택"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"선택"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"새 연락처 만들기"</string>
- <string name="starredList" msgid="4817256136413959463">"중요주소록"</string>
- <string name="frequentList" msgid="7154768136473953056">"자주 사용하는 연락처"</string>
- <string name="strequentList" msgid="5640192862059373511">"즐겨찾기"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"연락처 세부정보"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"연락처 수정"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"연락처 만들기"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"그룹 수정"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"그룹 만들기"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"정보"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"업데이트"</string>
<string name="searchHint" msgid="8482945356247760701">"주소록 검색"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"연락처 보기"</string>
<string name="menu_addStar" msgid="2908478235715404876">"즐겨찾기에 추가"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"즐겨찾기에서 삭제"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"즐겨찾기에서 삭제됨"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"수정"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"삭제"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"사진 변경"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"홈 화면에 만들기"</string>
- <string name="menu_call" msgid="3992595586042260618">"연락처로 전화 걸기"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"연락처에 문자 보내기"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"바로가기 만들기"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"연결 해제"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"수정"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"삭제"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"연락처 추가"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"그룹 추가"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"연락처 삭제"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"라벨 이름 바꾸기"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"라벨 삭제"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"연락처 추가"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"연락처 선택"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"연락처 추가"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"라벨에서 삭제"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"라벨 만들기"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"이 연락처를 여러 연락처로 연결 해제하시겠습니까?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"연결 해제"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"이미 변경한 내용을 저장하고 이 연락처를 여러 연락처로 연결 해제하시겠습니까?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"저장 및 연결 해제"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"이미 변경한 내용을 저장하고 선택한 연락처와 연결하시겠습니까?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"저장 및 연결"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"연결 중"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"연결 해제 중"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"연결"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"연결된 연락처 보기"</string>
<string name="menu_save" msgid="1727844363591825909">"저장"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"연락처 연결"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g>님과 연결하려는 연락처 선택:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"모든 연락처 표시"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"추천 연락처"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"모든 연락처"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> 연결됨"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"연락처가 연결되었습니다."</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g>님 삭제됨"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g>님과 <xliff:g id="NAME_1">%2$s</xliff:g>님 삭제됨"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>님, <xliff:g id="NAME_1">%2$s</xliff:g>님, <xliff:g id="NAME_2">%3$s</xliff:g>님… 삭제됨"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">연락처 삭제됨</item>
<item quantity="one">연락처 삭제됨</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other">연락처 <xliff:g id="COUNT_1">%d</xliff:g>개</item>
+ <item quantity="one">연락처 <xliff:g id="COUNT_0">%d</xliff:g>개</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other">연락처 <xliff:g id="COUNT_2">%1$d</xliff:g>개 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one">연락처 <xliff:g id="COUNT_0">%1$d</xliff:g>개 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google에서 제공"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> 계정 연락처"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"벨소리 설정"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"음성사서함 자동 연결"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"읽기 전용 계정의 연락처는 숨길 수 있지만 삭제할 수 없습니다."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"숨기기"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"삭제할 연락처에 여러 계정의 세부정보가 들어 있습니다. 읽기 전용 계정의 세부정보는 표시되지 않을 뿐 삭제되는 것은 아닙니다."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"연결하려면 두 개 이상의 연락처를 선택해야 합니다."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"선택한 연락처를 연결하시겠습니까?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"연결"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"음성사서함으로 전달"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"음성사서함으로 전달 안함"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"이 연락처는 읽기 전용입니다. 삭제할 수는 없지만 숨길 수 있습니다."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"연락처 숨기기"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"이 연락처의 읽기 전용 계정은 숨겨지며 삭제되지 않습니다."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"이 연락처를 삭제하시겠습니까?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"선택한 연락처를 삭제하시겠습니까?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"읽기 전용 계정의 연락처는 숨길 수 있지만 삭제할 수 없습니다."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"이 연락처를 삭제하면 여러 계정의 세부정보가 삭제됩니다."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"이 연락처를 삭제하시겠습니까?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"삭제"</string>
- <string name="menu_discard" msgid="6854657936970228164">"변경사항 삭제"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"연락처가 없습니다."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"연락처가 홈 화면에 추가되었습니다."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>님이 홈 화면에 추가되었습니다."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"새 연락처 만들기"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"새 연락처 만들기"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"조직"</item>
- <item msgid="7196592230748086755">"메모"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"태블릿에 사진이 없습니다."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"휴대전화에 사진이 없습니다."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"기기에 사진이 없습니다."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"연락처 사진"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"라벨 이름 맞춤 설정"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"수신전화를 바로 음성사서함으로 보내기"</string>
<string name="removePhoto" msgid="4898105274130284565">"사진 삭제"</string>
- <string name="noContacts" msgid="4955659076981974652">"주소록이 없습니다."</string>
- <string name="noGroups" msgid="8614664663561385253">"그룹 없음"</string>
- <string name="noAccounts" msgid="7768267764545265909">"그룹을 만들려면 계정이 필요합니다."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"이 그룹에 사람이 없습니다."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"사람을 추가하려면 그룹을 수정하세요."</string>
- <string name="savingContact" msgid="4075751076741924939">"연락처 저장 중..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"연락처 목록이 비어 있음"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"이 라벨에 연락처 없음"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"이 계정에 연락처 없음"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"연락처 목록이 비어 있음"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> 저장됨"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"연락처가 저장되었습니다."</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"연락처 연결 해제됨"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"연락처 변경사항을 저장할 수 없습니다."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"연락처를 연결 해제하지 못했습니다."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"연락처를 연결할 수 없습니다."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"연락처를 저장하는 중에 오류가 발생했습니다."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"연락처 사진 변경사항을 저장하지 못했습니다."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"그룹이 저장되었습니다."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"그룹 변경사항을 저장할 수 없습니다."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">전화번호가 포함된 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
- <item quantity="one">전화번호가 포함된 연락처 1개</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"전화번호가 포함된 주소록이 없습니다."</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
- <item quantity="one">연락처 1개</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"연락처 변경사항을 저장할 수 없습니다."</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"연락처를 연결 해제하지 못했습니다."</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"연락처를 연결할 수 없습니다."</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"연락처를 저장하는 중에 오류가 발생했습니다."</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"연락처 사진 변경사항을 저장하지 못했습니다."</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"라벨을 로드하지 못함"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"라벨이 삭제되었습니다."</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"라벨 생성됨"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"라벨을 만들 수 없습니다."</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"라벨 업데이트됨"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"라벨에서 삭제됨"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"라벨에 추가됨"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"라벨 변경사항을 저장할 수 없습니다."</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"이미 존재하는 라벨입니다."</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"이메일이 없는 연락처가 있습니다."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"전화번호가 없는 연락처가 있습니다."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"이메일 보내기"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"메시지 보내기"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"연락처 선택"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"보내기"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"연락처 없음"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
- <item quantity="one">연락처 1개</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"모두"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"즐겨찾기"</string>
- <string name="callBack" msgid="5498224409038809224">"전화 걸기"</string>
- <string name="callAgain" msgid="3197312117049874778">"다시 걸기"</string>
- <string name="returnCall" msgid="8171961914203617813">"전화 걸기"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\'<xliff:g id="EMAIL">%s</xliff:g>\'을(를) 주소록에 추가하겠습니까?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"주소록 사진"</string>
- <string name="description_plus_button" msgid="515164827856229880">"더하기"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"연락처 <xliff:g id="CURRENT_NUMBER">%s</xliff:g>개(총 <xliff:g id="TOTAL_NUMBER">%s</xliff:g>개) 내보내는 중"</string>
<string name="search_settings_description" msgid="2675223022992445813">"연락처 명단"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"이 작업을 처리하는 앱을 찾을 수 없습니다."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"이전 화면으로 돌아가려면 클릭"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"전화번호 추가"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"이메일 추가"</string>
<string name="missing_app" msgid="1466111003546611387">"이 작업을 처리하는 앱을 찾을 수 없습니다."</string>
<string name="menu_share" msgid="943789700636542260">"공유"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"주소록에 추가"</string>
- <string name="share_via" msgid="563121028023030093">"연락처 공유에 사용할 애플리케이션:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"계정에서 그룹 만들기"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"추가"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">연락처 공유에 사용할 애플리케이션:</item>
+ <item quantity="one">연락처 공유에 사용할 애플리케이션:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"계정 선택"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"라벨 만들기"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"라벨 이름 바꾸기"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"라벨 이름"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"라벨 이름"</string>
<string name="audio_chat" msgid="2535716629358298691">"음성채팅"</string>
<string name="video_chat" msgid="1872255818640336072">"영상 채팅"</string>
- <string name="connections" msgid="8098440723172028350">"연결"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"연결 추가"</string>
- <string name="recent" msgid="2659189233141493004">"날짜순"</string>
- <string name="recent_updates" msgid="4267258535615860710">"최근 업데이트"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 연락처"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 계정"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"이 앱에서 수정할 수 없습니다."</string>
- <string name="group_read_only" msgid="1061762906115697637">"이 기기에서 수정할 수 없습니다."</string>
<string name="take_photo" msgid="7496128293167402354">"사진 찍기"</string>
<string name="take_new_photo" msgid="7341354729436576304">"새 사진 찍기"</string>
<string name="pick_photo" msgid="2129509985223564942">"사진 선택"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"새 사진 선택"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"주소록을 업데이트하고 있습니다."</string>
<string name="search_results_searching" msgid="3984833028938569930">"검색 중…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"선택한 항목 표시"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"모두 표시"</string>
- <string name="menu_select_all" msgid="621719255150713545">"모두 선택"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"모두 선택취소"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"새로 추가"</string>
- <string name="add_organization" msgid="7311893231158291197">"조직 추가"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"날짜"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"그룹 이름"</string>
- <string name="change_photo" msgid="8530597935483526383">"변경"</string>
- <string name="primary_photo" msgid="8517942231868516999">"기본 사진"</string>
- <string name="description_star" msgid="2605854427360036550">"즐겨찾기"</string>
- <string name="edit_contact" msgid="7529281274005689512">"연락처 수정"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"이 연락처와 선택한 연락처를 연결하시겠습니까?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"라벨"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"취소"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"뒤로"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"닫기"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"선택한 연락처를 수정하시겠습니까? 지금까지 입력하신 정보는 복사됩니다."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"내 주소록에 복사"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"내 주소록에 추가"</string>
<string name="contact_directory_description" msgid="683398073603909119">"디렉토리 <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"사용자 설정"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"설정"</string>
<string name="menu_settings" msgid="377929915873428211">"설정"</string>
<string name="menu_help" msgid="1680178646764069976">"고객센터"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"표시 옵션"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"전화번호"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"주소록에 추가"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"연락처에 추가"</string>
<string name="non_phone_close" msgid="7608506439725515667">"닫기"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g>(<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"연도 포함"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"연락처"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"로드 중…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"새 연락처 만들기"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"계정 추가"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"주소록 가져오기"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"새 그룹 만들기"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"새 그룹 만들기"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other">그룹 <xliff:g id="COUNT">%0$d</xliff:g>개</item>
- <item quantity="one">그룹 1개</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' 그룹을 삭제하시겠습니까? (연락처는 삭제되지 않음)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> 소속 <xliff:g id="COUNT_2">%1$d</xliff:g>명</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> 소속 <xliff:g id="COUNT_0">%1$d</xliff:g>명</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>명</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>명</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"가져오기"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"새로 만들기…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' 라벨을 삭제하시겠습니까?(연락처는 삭제되지 않음)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"다른 연락처와 연결하려면 연락처 이름을 입력하세요."</string>
<string name="copy_text" msgid="3257145021583508761">"클립보드에 복사"</string>
<string name="set_default" msgid="4417505153468300351">"기본으로 설정"</string>
<string name="clear_default" msgid="7193185801596678067">"기본 설정 지우기"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"텍스트 복사됨"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"변경사항을 삭제하고 수정을 중단하시겠습니까?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"변경사항을 삭제하시겠습니까?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"삭제"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"계속 수정"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"내 프로필 설정"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"이름 입력"</string>
- <string name="group_name_hint" msgid="238359485263401293">"그룹 이름"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"취소"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"맞춤설정을 취소하시겠습니까?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"연락처 검색"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"연락처 삭제"</string>
<string name="local_profile_title" msgid="2021416826991393684">"내 로컬 프로필"</string>
<string name="external_profile_title" msgid="8034998767621359438">"내 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 프로필"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"모든 연락처 표시"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"온라인 서비스와 동기화되므로 휴대전화를 잃어버려도 주소록을 안전하게 유지할 수 있습니다."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"계정 추가"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"새 연락처는 백업되지 않습니다. 온라인에 주소록을 백업할 계정을 추가하시겠습니까?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"잠시 시간을 내어 연락처를 Google에 백업할 계정을 추가하세요."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"새 연락처가 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>에 저장됩니다."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"새 연락처에 대한 기본 계정 선택:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"새 연락처 추가"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"새 연락처 만들기"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"연락처 수정"</string>
- <string name="keep_local" msgid="1258761699192993322">"오프라인 보관"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"보기 전용"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"수정할 연락처 선택"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"연결된 연락처"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"추가"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"연결 해제"</string>
<string name="add_account" msgid="8201790677994503186">"계정 추가"</string>
<string name="add_new_account" msgid="5748627740680940264">"새 계정 추가"</string>
<string name="menu_export_database" msgid="2659719297530170820">"데이터베이스 파일 내보내기"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"새 연락처 추가"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"새 연락처 만들기"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"더보기"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"간략히 보기"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"모두 보기"</string>
<string name="recent_card_title" msgid="8982782042698001695">"최근"</string>
<string name="about_card_title" msgid="2920942314212825637">"정보"</string>
- <string name="send_message" msgid="8938418965550543196">"메시지 보내기"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"개인 사본 작성 중..."</string>
- <string name="yesterday" msgid="6840858548955018569">"어제"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"개인 사본 작성 중..."</string>
<string name="tomorrow" msgid="6241969467795308581">"내일"</string>
<string name="today" msgid="8041090779381781781">"오늘"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"오늘 <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"내일 <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="TIME_INTERVAL">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>, <xliff:g id="DATE">%1$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(제목 없는 일정)"</string>
<string name="date_time_set" msgid="4761419824439606690">"설정"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"웹사이트"</string>
<string name="header_event_entry" msgid="6738250422744401460">"일정"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"관계"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"계정"</string>
<string name="header_name_entry" msgid="1592791008096288306">"이름"</string>
<string name="header_email_entry" msgid="8666093061171624478">"이메일"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"전화"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"사진"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"연락처 편집기를 펼치려면 클릭하세요."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"연락처 편집기를 접으려면 클릭하세요."</string>
<string name="content_description_directions" msgid="2686791825798189335">"길찾기"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"최근 SMS 내역은 다음과 같습니다. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. 답장하려면 클릭하세요."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"최근 SMS 내역은 다음과 같습니다. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. 답장하려면 클릭하세요."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"수신"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"발신"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"부재중"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"최근 통화내역은 다음과 같습니다. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. 연락 온 번호로 다시 전화하려면 클릭하세요."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"최근 통화내역은 다음과 같습니다. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. 연락 온 번호로 다시 전화하려면 클릭하세요."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"내가 보낸 메시지: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"사용자의 행아웃 식별자를 이메일 입력란 또는 휴대전화 입력란에 입력하면 행아웃이 더 잘 작동합니다."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"입력란 더보기"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"사진 변경"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"편집기를 열지 못했습니다."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"다음에 저장"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"현재 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>에 저장 중입니다. 다른 계정을 선택하려면 두 번 탭하세요."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">연결된 연락처(<xliff:g id="COUNT">%d</xliff:g>개)</item>
- <item quantity="one">연결된 연락처</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"연결된 연락처 <xliff:g id="COUNT">%d</xliff:g>개"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>(<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"입력란 더보기"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"연락처 사진 변경"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"연락처 사진 추가"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"연락처 사진"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"편집기를 열지 못했습니다."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"다음에 저장"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>의 연락처 정보는 수정할 수 없습니다."</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"연락처 연결"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"취소"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">중복된 것으로 보이는 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
- <item quantity="one">중복된 것으로 보이는 연락처 1개</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">연결된 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
- <item quantity="one">연결된 연락처 1개</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>개)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"이 연락처"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"중복된 것으로 보이는 연락처"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"이 연락처는 같은 사람일 수 있습니다. 이 연락처들을 하나의 연락처로 연결할 수 있습니다."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"연결된 연락처"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"내 계정의 프로필 사진"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"사진 찍기"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"모든 사진"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"사진 선택"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"저장된 계정: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> 삭제"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> 삭제"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> 삭제"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>의 사진 선택 안됨"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>의 사진 선택됨"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"알 수 없는 계정의 사진이 선택되지 않음"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"알 수 없는 계정의 사진이 선택됨"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"변경된 언어를 반영하도록 연락처 목록을 업데이트하는 중입니다.\n\n잠시 기다려 주세요."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"추천"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"탐색 창 열기"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"탐색 창 닫기"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> 라벨"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"라벨"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"계정"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"기록 함께 표시"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"일정 및 메시지"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"일정"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"메시지"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"추천"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"연락처를 정리하고 유용하게 사용할 수 있습니다."</string>
+ <string name="undo" msgid="1425165101664071422">"실행취소"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>에 전화 걸기"</string>
+ <string name="call_home" msgid="1990519474420545392">"집으로 전화걸기"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"휴대전화로 전화걸기"</string>
+ <string name="call_work" msgid="5328785911463744028">"직장으로 전화걸기"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"직장 팩스로 전화걸기"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"집 팩스로 전화걸기"</string>
+ <string name="call_pager" msgid="9003902812293983281">"호출기로 전화걸기"</string>
+ <string name="call_other" msgid="8563753966926932052">"전화걸기"</string>
+ <string name="call_callback" msgid="1910165691349426858">"콜백 번호로 전화 걸기"</string>
+ <string name="call_car" msgid="3280537320306436445">"카폰으로 전화걸기"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"회사로 전화걸기"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN으로 전화걸기"</string>
+ <string name="call_main" msgid="6082900571803441339">"기본 번호로 전화 걸기"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"팩스로 전화하기"</string>
+ <string name="call_radio" msgid="8296755876398357063">"무선통신으로 전화걸기"</string>
+ <string name="call_telex" msgid="2223170774548648114">"텔렉스 통화"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD 통화"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"직장 휴대전화로 전화걸기"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"직장 호출기로 전화 걸기"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>에 전화 걸기"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS로 전화걸기"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g>(전화)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>에 문자 메시지 보내기"</string>
+ <string name="sms_home" msgid="7524332261493162995">"집으로 문자 보내기"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"휴대전화로 문자 보내기"</string>
+ <string name="sms_work" msgid="2269624156655267740">"직장으로 문자 보내기"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"직장 팩스로 문자 보내기"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"집 팩스로 문자 보내기"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"호출기로 문자 보내기"</string>
+ <string name="sms_other" msgid="806127844607642331">"문자 보내기"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"콜백 번호로 문자 보내기"</string>
+ <string name="sms_car" msgid="7444227058437359641">"카폰으로 문자 보내기"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"회사 기본전화로 문자 보내기"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN에 문자 보내기"</string>
+ <string name="sms_main" msgid="8621625784504541679">"기본 번호로 문자 보내기"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"팩스로 문자 보내기"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"무선통신으로 문자 보내기"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"텔렉스로 문자 보내기"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD에 문자 보내기"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"직장 휴대전화로 문자 보내기"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"직장 호출기로 문자 보내기"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g>(으)로 문자 보내기"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS로 문자 보내기"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g>(메시지)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"화상 통화하기"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"자주 연락하는 사람들 목록을 삭제하시겠습니까?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"주소록 및 휴대전화 앱에서 자주 연락하는 사람의 목록을 삭제하고 이메일 앱이 주소록 환경설정을 처음부터 다시 반영하도록 합니다."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"자주 연락하는 사람들 목록을 삭제하는 중…"</string>
+ <string name="status_available" msgid="5586870015822828392">"대화 가능"</string>
+ <string name="status_away" msgid="1838861100379804730">"자리 비움"</string>
+ <string name="status_busy" msgid="9147992455450257136">"다른 용무 중"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"기타"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"디렉토리"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"직장 디렉토리"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"모든 연락처"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>님의 빠른 주소록"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(이름 없음)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"자주 연락하는 사람들의 연락처"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"전화번호가 포함된 모든 연락처"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"직장 프로필 연락처"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"업데이트 보기"</string>
+ <string name="account_phone" msgid="7128032778471187553">"기기"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"이름"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"닉네임"</string>
+ <string name="name_given" msgid="4280790853455320619">"이름"</string>
+ <string name="name_family" msgid="7466985689626017037">"성"</string>
+ <string name="name_prefix" msgid="59756378548779822">"경칭"</string>
+ <string name="name_middle" msgid="8467433655992690326">"중간 이름"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"이름 접미어"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"이름(소리나는 대로)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"이름(소리나는 대로)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"중간 이름(소리나는 대로)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"성(소리나는 대로)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"전화"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"이메일"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"주소"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"메신저"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"조직"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"관계"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"특별한 날짜"</string>
+ <string name="sms" msgid="1756857139634224222">"문자 메시지"</string>
+ <string name="postal_address" msgid="8765560217149624536">"주소"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"회사"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"직함"</string>
+ <string name="label_notes" msgid="8337354953278341042">"메모"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"맞춤"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"웹사이트"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"라벨"</string>
+ <string name="email_home" msgid="8573740658148184279">"집으로 이메일 보내기"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"모바일로 이메일 보내기"</string>
+ <string name="email_work" msgid="2807430017302722689">"직장으로 이메일 보내기"</string>
+ <string name="email_other" msgid="3454004077967657109">"이메일"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>에 이메일 보내기"</string>
+ <string name="email" msgid="5668400997660065897">"이메일"</string>
+ <string name="postal_street" msgid="8133143961580058972">"번지"</string>
+ <string name="postal_city" msgid="6597491300084895548">"시/군/구"</string>
+ <string name="postal_region" msgid="6045263193478437672">"시/도"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"우편번호"</string>
+ <string name="postal_country" msgid="7638264508416368690">"국가"</string>
+ <string name="map_home" msgid="1243547733423343982">"집 주소 보기"</string>
+ <string name="map_work" msgid="1360474076921878088">"직장 주소 보기"</string>
+ <string name="map_other" msgid="3817820803587012641">"주소 보기"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> 주소 보기"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM으로 채팅"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live로 채팅"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo로 채팅"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype로 채팅"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ로 채팅"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google 토크로 채팅"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ로 채팅"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber로 채팅"</string>
+ <string name="chat" msgid="9025361898797412245">"채팅"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"삭제"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"이름 입력란 더보기"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"이름 입력란 접기"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"이름(소리나는 대로) 입력란 더보기"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"이름(소리나는 대로) 입력란 접기"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"펼치기"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"접기"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"펼쳐짐"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"접힘"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"모든 연락처"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"별표"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"맞춤설정"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"연락처"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"다른 모든 주소록"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"모든 주소록"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"동기화 그룹 삭제"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"동기화 그룹 추가"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"그룹 더보기..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\'<xliff:g id="GROUP">%s</xliff:g>\'을(를) 동기화에서 제거하면 그룹화되지 않은 연락처도 동기화에서 제거됩니다."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"표시 옵션 저장 중...."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"맞춤설정 보기"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"가져온 주소록을 저장할 계정:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM 카드"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">연락처 %1$d개</item>
+ <item quantity="one">연락처 1개</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other">연락처 <xliff:g id="COUNT_2">^1</xliff:g>개 • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one">연락처 <xliff:g id="COUNT_0">^1</xliff:g>개 • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf 파일"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"가져올 항목이 없습니다."</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard에서 연락처를 가져오시겠습니까?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> 가져오기를 취소하시겠습니까?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기를 취소하시겠습니까?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard 가져오기/내보내기를 취소하지 못했습니다."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"알 수 없는 오류입니다."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\'<xliff:g id="FILE_NAME">%1$s</xliff:g>\'을(를) 열 수 없습니다(이유: <xliff:g id="EXACT_REASON">%2$s</xliff:g>)."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"내보내기를 시작하지 못했습니다(이유: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\')."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"내보낼 수 있는 연락처가 없습니다."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"필수 권한을 사용 중지했습니다."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"내보내는 중에 오류가 발생했습니다(이유: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\')."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 오류"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"메모리가 부족합니다. 파일이 너무 크기 때문일 수 있습니다."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"지원되지 않는 형식입니다."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기 완료됨"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"연락처 내보내기 완료"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"연락처 내보내기가 끝나면 알림을 클릭하여 연락처를 공유하세요."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"연락처를 공유하려면 탭하세요."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기 취소"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"연락처 데이터 내보내기"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"연락처 데이터를 내보내는 중입니다."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"데이터베이스 정보를 가져오지 못했습니다."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"내보낼 수 있는 연락처가 없습니다."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 작성기가 제대로 시작되지 않았습니다."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"내보내기 실패"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"주소록 데이터를 내보내지 못했습니다.\n(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> 가져오는 중"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard 데이터를 읽지 못했습니다."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard 가져오기 완료"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> 가져오기 취소"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 곧 가져옵니다."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"파일을 곧 가져옵니다."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 가져오기 요청이 거부되었습니다. 나중에 다시 시도해 주세요."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"곧 연락처를 내보냅니다."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 내보내기 요청이 거부되었습니다. 나중에 다시 시도해 주세요."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"연락처"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard를 로컬 임시 저장공간에 캐시하는 중입니다. 곧 가져오기가 시작됩니다."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard를 가져오지 못했습니다."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC를 통해 받은 연락처"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"캐시"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 가져오는 중: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".VCF 파일로 내보내기"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"정렬 기준"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"이름(소리 나는 대로)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"항상 표시"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"비어 있는 경우 숨기기"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"이름"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"성"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"이름 형식"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"이름 먼저"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"성 먼저"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"계정"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"새 연락처에 대한 기본 계정"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"내 정보"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"프로필 설정"</string>
+ <string name="setting_about" msgid="7014388749752042863">"주소록 정보"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"자주 사용하는 연락처 공유"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"모든 연락처 공유"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"연락처를 공유할 수 없습니다."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"연락처 내보내기"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"연락처를 가져올 위치"</string>
+ <string name="share_error" msgid="948429331673358107">"연락처를 공유할 수 없습니다."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"공유할 연락처가 없습니다."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"표시할 연락처"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"표시할 연락처"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"보기 맞춤설정"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"저장"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"연락처 검색"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"즐겨찾기"</string>
+ <string name="menu_import" msgid="6107961135813836467">"가져오기"</string>
+ <string name="menu_export" msgid="2658783911863503902">"내보내기"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"차단된 번호"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"출처: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>(출처: <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"검색 중지"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"검색창 지우기"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"계정"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"통화에 항상 사용"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"메모가 포함된 통화"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"통화에 함께 전송할 메모를 입력하세요."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"보내기 및 통화"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"빌드 버전"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"오픈소스 라이선스"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"오픈소스 소프트웨어 라이선스 세부정보"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"개인정보처리방침"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"서비스 약관"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"오픈소스 라이선스"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL을 열지 못했습니다."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> 선택함"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> 선택 안함"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"화상 통화 걸기"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"삭제"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"생략 기호"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g>초"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g>분 <xliff:g id="SECONDS">%2$s</xliff:g>초"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g>시간 <xliff:g id="MINUTES_1">%2$s</xliff:g>분 <xliff:g id="SECONDS">%3$s</xliff:g>초"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"이 바로가기는 사용 중지되었습니다."</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"연락처가 삭제되었습니다."</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"가져오기"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"연락처 선택"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM 카드에 연락처가 없습니다."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"이미 목록에 있는 연락처입니다."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">SIM 연락처 <xliff:g id="COUNT">%d</xliff:g>개를 가져옴</item>
+ <item quantity="one">SIM 연락처 1개를 가져옴</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM 연락처를 가져오지 못했습니다."</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM에서 가져오기"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"취소"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"자동 동기화가 사용 중지되어 있습니다. 사용 설정하려면 탭하세요."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"해제"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"계정 동기화가 사용 중지되어 있습니다. 사용 설정하려면 탭하세요."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"자동 동기화를 사용하시겠습니까?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google 주소록뿐만 아니라 모든 앱과 계정의 변경사항이 웹 및 기기 간에 최신 상태로 유지됩니다."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"사용"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"연결되지 않음"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"더보기"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 카드 가져오기 완료"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"가져오기 실패"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM 카드에서 연락처를 가져올 수 없습니다."</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM 가져오는 중"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"알림"</string>
</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
deleted file mode 100644
index 58b93a21d..000000000
--- a/res/values-ky-rKG/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Байланыштар"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Байланыштар"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Байланышты көрүү"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Байланышты түзөтүү"</string>
- <string name="contactsList" msgid="8661624236494819731">"Байланыштар"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Байланыш"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Түз чалуу"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Түз SMS"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Тез чалуу үчүн байланыш тандаңыз"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Чалуу үчүн номер тандаңыз"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Билдирүү жөнөтүлө турган номерди тандоо"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Байланышка кошуу"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Байланыш тандоо"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңы байланыш түзүү"</string>
- <string name="starredList" msgid="4817256136413959463">"Белгиленгендер"</string>
- <string name="frequentList" msgid="7154768136473953056">"Көп байланышкан"</string>
- <string name="strequentList" msgid="5640192862059373511">"Сүйүктүүлөр"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Байланыштын чоо-жайы"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Байланышты түзөтүү"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Байланыш түзүү"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Топту түзөтүү"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Топ түзүү"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Байланыш жөнүндө"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Жаңыртуулар"</string>
- <string name="searchHint" msgid="8482945356247760701">"Байланыштарды издөө"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Байланышты карап көрүү"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Сүйүктүүлөргө кошуу"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Сүйүктүүлөрдөн алып салуу"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Сүйүктүүлөрдөн чыгарылды"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Сүйүктүүлөргө кошулду"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Өзгөртүү"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Жок кылуу"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Сүрөттү өзгөртүү"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Башкы экранга жайгаштыруу"</string>
- <string name="menu_call" msgid="3992595586042260618">"Байланышка чалуу"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Байланышка SMS жазуу"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажыратуу"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Өзгөртүү"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Жок кылуу"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Байланыш кошуу"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Топ кошуу"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Бул байланыш ажыратылсынбы?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ажыратуу"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Сиз киргизген өзгөртүүлөрдү сактап, бул байланышты бир нече байланышка ажыраткыңыз келеби?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Сактоо жана ажыратуу"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Сиз киргизген өзгөртүүлөрдү сактап, тандалган байланышка бириктиргиңиз келеби?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Сактоо жана бириктирүү"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Байланыштыруу"</string>
- <string name="menu_save" msgid="1727844363591825909">"Сактоо"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Байланыштрд бириктрүү"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> менен бириктириле турган байланышты тандаңыз."</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Бардык байланыштарды көрсөтүү"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Сунушталган байланыштар"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бардык байланыштар"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Байланыштар шилтемеленди"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Байланыштар жок кылынды</item>
- <item quantity="one">Байланыш жок кылынды</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Шыңгыр коюу"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Үн почтасы гана"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Окуу үчүн гана арналган каттоо эсебиңизден байланыштарды жок кылуу мүмкүн эмес, бирок аларды жашырып койсо болот."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Жашыруу"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Жок кылына турган байланышта бир нече каттоо эсебинин чоо-жайы бар. Окуу үчүн гана арналган каттоо эсептеринин чоо-жайы жашырылып, жок кылынбайт."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Шилтемелөө үчүн кеминде эки байланыш тандашыңыз керек."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Тандалган байланыштар бириктирилсинби?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Бириктирүү"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Бул байланыш жок кылынсынбы?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Тандалган байланыштар жок кылынсынбы?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Окуу үчүн гана арналган каттоо эсебиңизден байланыштарды жок кылуу мүмкүн эмес, бирок аларды жашырып койсо болот."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Жок кылына турган байланыштарда бир нече каттоо эсебинин чоо-жайы бар. Окуу үчүн гана арналган каттоо эсептеринин чоо-жайы жашырылып, жок кылынбайт."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бул байланыш жок кылынса, анын бир нече каттоо эсебиндеги чоо-жайы өчүп калат."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Бул байланыш жок кылынсынбы?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жок кылуу"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Өзгөрүүлөрдү жарактан чыгаруу"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Мындай байланыш жок."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Байланыш башкы экранга кошулду."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Башкы экранга кошулду."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Жаңы байланыш түзүү"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Жаңы байланыш түзүү"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Ишкана"</item>
- <item msgid="7196592230748086755">"Кошумча маалымат"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Планшетте эч кандай сүрөт жок."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Телефондо эч кандай сүрөт жок."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Байланыштын сүрөтү"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Ыңгайлаштырылган энбелгинин аталышы"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Үн почтасына түздөн-түз чалуу"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Сүрөттү алып салуу"</string>
- <string name="noContacts" msgid="4955659076981974652">"Байланыштар жок"</string>
- <string name="noGroups" msgid="8614664663561385253">"Эч кандай топ жок."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Топторду түзүш үчүн эсеп керек."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Бу топто эч ким жок."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Бирөөнү кошуш үчүн топту өзгөртүңүз."</string>
- <string name="savingContact" msgid="4075751076741924939">"Байланыш сакталууда..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Байланыш сакталды"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Байланыштар ажыратылды"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Байланыштын өзгөрүүлөрү сакталган жок."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Байланыш ажыратылбай койду."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Байланыш шилтемеленбей койду."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Байланышты сактоодогу ката."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Топ сакталды"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Топтун өзгөртүүлөрү сакталган жок."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">телефон номерлери менен <xliff:g id="COUNT">%d</xliff:g> байланыш</item>
- <item quantity="one">телефон номери менен 1 байланыш</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Телефон номерлери бар байланыштар жок"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
- <item quantity="one">1 табылды</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Байланыштар жок"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> табылды</item>
- <item quantity="one">1 табылды</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Бардыгы"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Сүйүктүүлөр"</string>
- <string name="callBack" msgid="5498224409038809224">"Кайра чалуу"</string>
- <string name="callAgain" msgid="3197312117049874778">"Дагы чалуу"</string>
- <string name="returnCall" msgid="8171961914203617813">"Кайра чалуу"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Байланыштарга \"<xliff:g id="EMAIL">%s</xliff:g>\" кошосузбу?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"байланыштын сүрөтү"</string>
- <string name="description_plus_button" msgid="515164827856229880">"кошуу"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> байланыштын ичинен <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Байланыштарыңыздын аттары"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Бул ишти аткаруучу эч бир колдонмо табылган жок."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Мурунку экранга кайтуу үчүн чыкылдатыңыз"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Телефон номерин кошуу"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Электрондук почта дарегин кошуу"</string>
- <string name="missing_app" msgid="1466111003546611387">"Бул ишти аткаруучу эч бир колдонмо табылган жок."</string>
- <string name="menu_share" msgid="943789700636542260">"Бөлүшүү"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Байланыштарга кошуу"</string>
- <string name="share_via" msgid="563121028023030093">"Байланышты төмөнкү аркылуу бөлүшүү"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Каттоо эсебинде топ түзүү"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Үн чат"</string>
- <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
- <string name="connections" msgid="8098440723172028350">"Байланыштар"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Байланыш кошуу"</string>
- <string name="recent" msgid="2659189233141493004">"Акыркы"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Акыркы жаңыртуулар"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> байланышы"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> каттоо эсеби"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Бул колдонмодон өзгөртүлбөйт."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Бул түзмөктөн өзгөртүлбөйт."</string>
- <string name="take_photo" msgid="7496128293167402354">"Сүрөт тартуу"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Жаңы сүрөт тартуу"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Сүрөт тандаңыз"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Жаңы сүрөт тандоо"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Байланыш тизмеси жаңыртылууда"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Изделүүдө…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Тандалгандарды көрсөтүү"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Баарын көрсөтүү"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Бардыгын тандоо"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Баарын тандоодон чыгаруу"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Жаңысын кошуу"</string>
- <string name="add_organization" msgid="7311893231158291197">"Уюм кошуу"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Топтун аты"</string>
- <string name="change_photo" msgid="8530597935483526383">"Өзгөртүү"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Негизги сүрөт"</string>
- <string name="description_star" msgid="2605854427360036550">"сүйүктүү"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Байланышты түзөтүү"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Учурдагы байланыш тандалган байланышка шилтемеленсинби?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Тандалган байланышты түзөтүүгө өтөсүзбү? Буга чейин киргизилген маалыматтар көчүрүлөт."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Менин Байланыштарыма көчүрүү"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Менин Байланыштарыма кошуу"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> каталогу"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Өзгөчө"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Жөндөөлөр"</string>
- <string name="menu_settings" msgid="377929915873428211">"Жөндөөлөр"</string>
- <string name="menu_help" msgid="1680178646764069976">"Жардам жана жооп пикир"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Параметрлерди көрсөтүү"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g> , <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Телефон номери"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Байланыштарга кошуу"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Байланыштарга кошуу"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Жабуу"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Жылы көрсөтүлсүн"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Байланыш"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Жүктөлүүдө…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Жаңы байланыш түзүү"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Каттоо эсебин кошуу"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Байланыштарды импорттоо"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Жаңы топ түзүү"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Жаңы топ түзүү"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> топ</item>
- <item quantity="one">1 топ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" тобу өчүрүлсүнбү? (Байланыштардын өзү өчпөйт)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ичинен <xliff:g id="COUNT_2">%1$d</xliff:g> киши</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> ичинен <xliff:g id="COUNT_0">%1$d</xliff:g> киши</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> киши</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> киши</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Башка байланышка шилтемелөөдөн мурун, байланыштын атын териңиз."</string>
- <string name="copy_text" msgid="3257145021583508761">"Алмашуу буферине көчүрүү"</string>
- <string name="set_default" msgid="4417505153468300351">"Негизги кылуу"</string>
- <string name="clear_default" msgid="7193185801596678067">"Негизгини тазалоо"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"SMS көчүрүлдү"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Өзгөртүүлөр жарактан чыгарылып, түзөтүү жабылсынбы?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Жарактан чыгаруу"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Түзөтө берүү"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Профилди жөндөө"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Кишинин атын киргизиңиз"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Топтун аты"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Менин жергиликтүү профайлым"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Менин <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Бардык байланыштарды көрсөтүү"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Телефонуңузду жоготсоңуз дагы, байланыштарыңызды жоготпоңуз: онлайн кызмат менен синхрондоңуз."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Кошуу"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Жаңы байланыштын камдык көчүрмөсү сакталбайт. Байланыштарды Интернетте сактоо үчүн каттоо эсеби кошулсунбу?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңы байланыштар <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ичине сакталат."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңы байланыштар үчүн демейки каттоо эсебин тандаңыз:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Жаңы байланыш кошуу"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Байланышты түзөтүү"</string>
- <string name="keep_local" msgid="1258761699192993322">"Компьютерге сактоо"</string>
- <string name="add_account" msgid="8201790677994503186">"Кошуу"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Жаңы эсеп кошуу"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Берилиштер корлорунун файлдарын экспорттоо"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"жаңы байланыш кошуу"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Дагы көрүү"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азыраак көрүү"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Бардыгын көрүү"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Акыркы"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Байланыш жөнүндө"</string>
- <string name="send_message" msgid="8938418965550543196">"Билдирүү жөнөтүү"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Жеке көчүрмөнү алуу..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Кечээ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Эртең"</string>
- <string name="today" msgid="8041090779381781781">"Бүгүн"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Бүгүн саат <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Эртең саат <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Аталышы жок окуя)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Коюу"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Иштеген жери"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Ылакап аты"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Кошумча маалымат"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Вебсайт"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Иш-чара"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Мага ким болот"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Каттоо эсеби"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Ысымы"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Электрондук почта"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Сүрөт"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Байланыш түзөткүчүн жайып көрсөтүү үчүн чыкылдатыңыз."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Байланыш түзөткүчүн жыйыштыруу үчүн чыкылдатыңыз."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"жайгашуу ордуна багыттоолор"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"акыркы sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. жооп берүү үчүн чыкылдатыңыз"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"келүүчү"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"чыгуучу"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"жооп берилбей калган"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"акыркы чалуу. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кайра чалуу үчүн чыкылдатыңыз"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Сиз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Кимдир-бирөөнүн Hangouts аныктагычы электрондук почта же телефон талаасына киргизилгенде Hangouts жакшыраак иштейт."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Калган талааларды көрсөтүү"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Сүрөттү өзгөртүү"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Түзөткүч ачылбай калды."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Төмөнкүгө сакталууда"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Учурда <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ичине сакталууда. Башка каттоо эсебин тандоо үчүн эки жолу таптаңыз."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Бириктирилген байланыштар (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Бириктирилген байланыш</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> байланыш шилтемеленген"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"БАЙЛАНЫШТАРДЫ ШИЛТЕМЕЛӨӨ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЖОК"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Жупнуска кылса болот</item>
- <item quantity="one">1 Жупнуска кылса болот</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> шилтемеленген байланыш</item>
- <item quantity="one">1 шилтемеленген байланыш</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ушул байланыш"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Булар жупнуска болушу мүмкүн"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бул байланыштар бир эле адам болушу мүмкүн. Аларды жалгыз байланыш кылып бириктирсеңиз болот."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Бириктирилген байланыштар"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Каттоо эсептериңизден"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Сүрөткө тартуу"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Бардык сүрөттөр"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Сүрөт тандаңыз"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> дегенден"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> жок кылуу"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жок кылуу"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> дегенден сүрөт белгиленген жк"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> дегенден сүрөт белгиленди"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Белгисиз каттоо эсебинен келген сүрөт тандалган жок"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Белгисиз каттоо эсебинен келген сүрөт тандалды"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Өзгөртүлгөн тил күчүнө кириши үчүн байланыштар тизмеси жаңыртылууда. .\n\nКүтө туруңуз..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгөттөлгөн номерлер"</string>
-</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
new file mode 100644
index 000000000..133478990
--- /dev/null
+++ b/res/values-ky/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Байланыштар"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Байланыштар"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Байланыш кошуу"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Байланыш"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Түз чалуу"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Түз SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Байланышты тандоо"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Байланышка кошуу"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Байланыш тандоо"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Тандоо"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңы байланыш түзүү"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Байланыштарды издөө"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Сүйүктүүлөргө кошуу"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Сүйүктүүлөрдөн алып салуу"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Сүйүктүүлөрдөн чыгарылды"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Сүйүктүүлөргө кошулду"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Өзгөртүү"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Жок кылуу"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Сүрөттү өзгөртүү"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Шилтеме түзүү"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажыратуу"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Байланыштарды алып салуу"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Энбелгинин аталышын өзгөртүү"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Энбелгини жок кылуу"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Байланыш кошуу"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Байланыштарды тандоо"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Байланыштарды кошуу"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Энбелгиден алып салуу"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Энбелги түзүү"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Бул байланыш ажыратылсынбы?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ажыратуу"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Сиз киргизген өзгөртүүлөрдү сактап, бул байланышты бир нече байланышка ажыраткыңыз келеби?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Сактоо жана ажыратуу"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Сиз киргизген өзгөртүүлөрдү сактап, тандалган байланышка бириктиргиңиз келеби?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Сактоо жана бириктирүү"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Байланыштар бириктирилүүдө"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Байланыштар ажыратылууда"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Байланыштыруу"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Бириктирилген байланыштарды көрүү"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Сактоо"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Байланыштрд бириктрүү"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> менен бириктириле турган байланышты тандаңыз."</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Сунушталган байланыштар"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бардык байланыштар"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> байланыштырылды"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Байланыштар шилтемеленди"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> жок кылынды"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> жана <xliff:g id="NAME_1">%2$s</xliff:g> жок кылынды"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… жок кылынды"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Байланыштар жок кылынды</item>
+ <item quantity="one">Байланыш жок кылынды</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> байланыш</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> байланыш</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> байланыш · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> байланыш · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google каттоо эсебинен"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> каттоо эсбнен"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Шыңгыр коюу"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Үн почтасына которуу"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Үн почтасын өчүрүү"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Бул байланыш окуу үчүн гана арналган. Аны жок кылуу мүмкүн эмес, бирок аны жашырып койсо болот."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Байланышты жашыруу"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Бул байланыштагы окуу үчүн гана арналган каттоо эсептери жашырылат, бирок жок кылынбайт."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Бул байланыш жок кылынсынбы?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Тандалган байланыштар жок кылынсынбы?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Окуу үчүн гана арналган каттоо эсебиңизден байланыштарды жок кылуу мүмкүн эмес, бирок аларды жашырып койсо болот."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Жок кылына турган байланыштарда бир нече каттоо эсебинин чоо-жайы бар. Окуу үчүн гана арналган каттоо эсептеринин чоо-жайы жашырылып, жок кылынбайт."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бул байланыш жок кылынса, анын бир нече каттоо эсебиндеги чоо-жайы өчүп калат."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Бул байланыш жок кылынсынбы?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жок кылуу"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Мындай байланыш жок."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Байланыш башкы экранга кошулду."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Башкы экранга кошулду."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Түзмөктө бир да сүрөт жок."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Байланыштын сүрөтү"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Ыңгайлаштырылган энбелгинин аталышы"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Сүрөттү алып салуу"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Байланыштар тизмеңиз бош"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Бул энбелги коюлган бир дагы байланыш жок"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Бул каттоо эсебинде эч кандай байланыш жок"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Байланыштар тизмеңиз бош"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> сакталды"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Байланыш сакталды"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Байланыштар ажыратылды"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Байланыштын өзгөрүүлөрү сакталган жок."</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Байланыш ажыратылбай койду."</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Байланыш шилтемеленбей койду."</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Байланышты сактоодогу ката."</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Энбелги жүктөлгөн жок"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Энбелги жок кылынды"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Энбелги түзүлдү"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Энбелги түзүлгөн жок"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Энбелги жаңыртылды"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Энбелгиден алынып салынды"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Кошулду"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Энбелгинин өзгөрүүлөрүн сактай алган жок."</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Мындай энбелги бар"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Айрым байланыштардын электрондук почталары жок."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Айрым байланыштардын телефон номерлери жок."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Электрондук кат жөнөтүү"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Билдирүү жөнөтүү"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Байланыштарды тандоо"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Жөнөтүү"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Байланыштар жок"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Байланыштарга \"<xliff:g id="EMAIL">%s</xliff:g>\" кошосузбу?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Байланыштарыңыздын аттары"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Мурунку экранга кайтуу үчүн чыкылдатыңыз"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Телефон номерин кошуу"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Электрондук почта дарегин кошуу"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Бул ишти аткаруучу эч бир колдонмо табылган жок."</string>
+ <string name="menu_share" msgid="943789700636542260">"Бөлүшүү"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Байланыштарга кошуу"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Кошуу"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other"> байланышты бөлүшүү</item>
+ <item quantity="one"> байланышты бөлүшүү</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Каттоо эсебин тандоо"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Энбелги түзүү"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Энбелгинин аталышын өзгөртүү"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Энбелгинин аталышы"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Энбелгинин аталышы"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Үн чат"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> байланышы"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> каттоо эсеби"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Сүрөт тартуу"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Жаңы сүрөт тартуу"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Сүрөт тандоо"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Жаңы сүрөт тандоо"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Изделүүдө…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Энбелги"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Жок"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Артка"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабуу"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Тандалган байланышты түзөтүүгө өтөсүзбү? Буга чейин киргизилген маалыматтар көчүрүлөт."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> каталогу"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Жөндөөлөр"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Жөндөөлөр"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Жардам жана пикир билдирүү"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g> , <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Телефон номери"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Байланыштарга кошуу"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Жабуу"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Жылы көрсөтүлсүн"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Каттоо эсебин кошуу"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импорттоо"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Жаңысын түзүү..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" энбелгиси өчүрүлсүнбү? (Байланыштардын өзү өчпөйт)."</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Башка байланышка шилтемелөөдөн мурун, байланыштын атын териңиз."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Алмашуу буферине көчүрүү"</string>
+ <string name="set_default" msgid="4417505153468300351">"Негизги кылуу"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Негизгини тазалоо"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"SMS көчүрүлдү"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Өзгөрүүлөр сакталбасынбы?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Жарактан чыгаруу"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Баш тартуу"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Өзгөртүүлөр жокко чыгарылсынбы?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Байланыштардан издеп көрүңүз"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Байланыштарды алып салуу"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Менин жергиликтүү профайлым"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Менин <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Байланыштарыңыздын камдык көчүрмөсүн Google\'га сактоо үчүн каттоо эсебин кошуңуз."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңы байланыштар <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ичине сакталат."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңы байланыштар үчүн демейки каттоо эсебин тандаңыз:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Байланыш түзүү"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Байланышты түзөтүү"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Жөн гана көрүү"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Түзөтүү үчүн байланышты тандаңыз"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Бириктирилген байланыштар"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Кошуу"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ажыратуу"</string>
+ <string name="add_account" msgid="8201790677994503186">"Кошуу"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Жаңы эсеп кошуу"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Берилиштер корлорунун файлдарын экспорттоо"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Жаңы байланыш түзүү"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Дагы көрүү"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азыраак көрүү"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Акыркы"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Байланыш жөнүндө"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Жеке көчүрмөсүн түзүү…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Эртең"</string>
+ <string name="today" msgid="8041090779381781781">"Бүгүн"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Бүгүн саат <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Эртең саат <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Аталышы жок окуя)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Коюу"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Иштеген жери"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Ылакап аты"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Кошумча маалымат"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Вебсайт"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Иш-чара"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Мага ким болот"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Ысымы"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Электрондук почта"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"жайгашуу ордуна багыттоолор"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"акыркы sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. жооп берүү үчүн чыкылдатыңыз"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"келүүчү"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"чыгуучу"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"жооп берилбей калган"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"акыркы чалуу. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. кайра чалуу үчүн чыкылдатыңыз"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Сиз: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Калган талааларды көрсөтүү"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Байланыштын сүрөтүн өзгөртүү"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Байланыштын сүрөтүн кошуу"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Байланыштын сүрөтү"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Түзөткүч ачылбай калды."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Төмөнкүгө сакталууда"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Байланыш маалыматын түзөтүүгө болбойт: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"БАЙЛАНЫШТАРДЫ ШИЛТЕМЕЛӨӨ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЖОК"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ушул байланыш"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Булар жупнуска болушу мүмкүн"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бул байланыштар бир эле адам болушу мүмкүн. Аларды жалгыз байланыш кылып бириктирсеңиз болот."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> жок кылуу"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жок кылуу"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Сунуштар"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Жаңы"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Чабыттоо суурмасын ачуу"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Чабыттоо суурмасын жабуу"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> энбелгиси"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Энбелгилер"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Каттоо эсептери"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Бириктирилген таржымалды көрүү"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Иш-чаралар жана билдирүүлөр"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Иш-чаралар"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Билдирүүлөр"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Сунуштар"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Байланыштар менен иштөө ыңгайлуу болушу үчүн аларды иреттеңиз"</string>
+ <string name="undo" msgid="1425165101664071422">"Кайтаруу"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> чалуу"</string>
+ <string name="call_home" msgid="1990519474420545392">"Үйгө чалуу"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Мобилдик түзмөккө чалуу"</string>
+ <string name="call_work" msgid="5328785911463744028">"Жумушка чалуу"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Жумуш факсына чалуу"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Үй факсына чалуу"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Пейджерге чалуу"</string>
+ <string name="call_other" msgid="8563753966926932052">"Чалуу"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Кайра чалуу номерине чалуу"</string>
+ <string name="call_car" msgid="3280537320306436445">"Автомобилдин номерине чалуу"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Компаниянын негизги номерине чалуу"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN телефонуна чалуу"</string>
+ <string name="call_main" msgid="6082900571803441339">"Негизги номерге чалуу"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Факска чалуу"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Радио телефонго чалуу"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Телекске чалуу"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD номерине чалуу"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Жумуштун мобилдик түзмөгүнө чалуу"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Жумуш пейджерине чалуу"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> чалуу"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS номерине чалуу"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Чалуу)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> номерине SMS жөнөтүү"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Үйдүн телефонуна SMS жөнөтүү"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Мобилдик телефонго SMS жөнөтүү"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Жумуш телефонуна SMS жөнөтүү"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Жумуш факсына SMS жөнөтүү"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Үй факсына SMS жөнөтүү"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Пейжерге SMS жөнөтүү"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS жөнөтүү"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Кайра чалуу номерине SMS жөнөтүү"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Автомобилдин телефон номерине SMS жөнөтүү"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Компаниянын негизги номерине SMS жөнөтүү"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN телефонуна SMS жөнөтүү"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Негизги телефонго SMS жөнөтүү"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Факска SMS жөнөтүү"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Радио телефонго SMS жөнөтүү"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Телекске SMS жөнөтүү"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD телефонго SMS жөнөтүү"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Жумуштун мобилдик телефонуна SMS жөнөтүү"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Жумуштун пейжерине SMS жөнөтүү"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> номерине SMS билдирүү жөнөтүү"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS телефонго SMS жөнөтүү"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Билдирүү жөнөтүү)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Видео чалуу"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Көп чалынгандар тизмеси тазалансынбы?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Байланыштар жана Телефон колдонмолорунан көп байланышкан адамдар тизмесин тазалап, даректүү жеке жөндөөлөр тууралуу билүү үчүн электрондук почта колдонмолорун иштетиңиз."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Көп чалынгандар тизмеси тазаланууда…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Жеткиликтүү"</string>
+ <string name="status_away" msgid="1838861100379804730">"Чыгып кетти"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Бош эмес"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Башка"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Жумуш профилиндеги байланыштар китепчеси"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Бардык байланыштар"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> үчүн тез байланышуу"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Аты жок)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Көп байланышып турган"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Телефон номерлери бар бардык байланыштар"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Жумуш профилиндеги байланыштар"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Жаңыртууларды көрүү"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Түзмөк"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Аты"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Ылакап аты"</string>
+ <string name="name_given" msgid="4280790853455320619">"Аты"</string>
+ <string name="name_family" msgid="7466985689626017037">"Фамилиясы"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Атынын префикси"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Атасынын аты"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Атынын суффикси"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Аты-жөнү (угулушу боюнча)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Аты (угулушу боюнча)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Атасынын аты (угулушу боюнча)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Фамилиясы (угулушу боюнча)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Электрондук почта"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Почта дареги"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Уюм"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Мага ким болот?"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Өзгөчө күн"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS билдирүү жөнөтүү"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Почта дареги"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компания"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Аталышы"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Эскертүүлөр"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Өздүк"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Вебсайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Энбелгилер"</string>
+ <string name="email_home" msgid="8573740658148184279">"Үйдүн электрондук почта дарегине билдирүү жөнөтүү"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Мобилдик түзмөккө электрондук почта билдирүүсүн жөнөтүү"</string>
+ <string name="email_work" msgid="2807430017302722689">"Жумуштун электрондук почтасына билдирүү жөнөтүү"</string>
+ <string name="email_other" msgid="3454004077967657109">"Электрондук почта"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> электрондук кат жөнөтүү"</string>
+ <string name="email" msgid="5668400997660065897">"Электрондук почта"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Көчөсү"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Шаары"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Штаты"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ZIP коду"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Өлкөсү"</string>
+ <string name="map_home" msgid="1243547733423343982">"Үй дарегин көрүү"</string>
+ <string name="map_work" msgid="1360474076921878088">"Жумуш дарегин көрүү"</string>
+ <string name="map_other" msgid="3817820803587012641">"Дарегин көрүү"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> дарегиин көрүү"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM аркылуу маектешүү"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live аркылуу маектешүү"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo аркылуу маектешүү"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype аркылуу маектешүү"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ аркылуу маектешүү"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk аркылуу маектешүү"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ аркылуу маектешүү"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber аркылуу маектешүү"</string>
+ <string name="chat" msgid="9025361898797412245">"Маек"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"жок кылуу"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Ысымдар жазылган талаалардан көбүрөөк көрсөтүү"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Адамдын аты-жөнү жазылган талааларды жыйыштыруу"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Ысымдардын транскрипциясы жазылган талаалардан көбүрөөк көрсөтүү"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Ысымдардын транскрипциясы жазылган талааларды жыйыштыруу"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Жайып көрсөтүү"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Жыйыштыруу"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Жайылып көрсөтүлдү"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Жыйыштырылды"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Бардык байланыштар"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Белгиленген байланыштар"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Тандап көрсөтүү"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Байланыш"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Бардык башка байланыштар"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Бардык байланыштар"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Шайкештирүү тобун өчүрүү"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Шайкештирүү тобуна кошуу"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Дагы топтор…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" тобун шайкештирүүдөн алып салуу топко кирбеген башка байланыштарды дагы шайкештирүүдөн чыгарып салат."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Көрсөтүү параметрлери сакталууда…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Ылайыкташтырылган көрүнүш"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Өткөрүлүп алынган байланыштар төмөнкүгө сакталсын:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM-картасы"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d байланыш</item>
+ <item quantity="one">1 байланыш</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> байланыш • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> байланыш • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-файл"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Импорттоого эч нерсе жок"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard байланыштары импорттолсунбу?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> файлын импорттоо токтотулсунбу?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> файлын экспорттоо токтотулсунбу?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard файлдарын импорттоо/экспорттоо токтотулган жок."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Белгисиз ката."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ачылбай жатат: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорттоо башталбай жатат: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспортко жарактуу байланыш жок."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Керектүү уруксатты өчүрүп койгонсуз."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорттоо учурунда ката кетти: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O катасы"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Эстутум жетишсиз. Файл өтө чоң окшойт."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Бул формат колдоого алынбайт."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> өткөрүлүп бүттү."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Байланыштар өткөрүлүп бүттү."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Байланыштар өткөрүлүп берилди. Байланыштар менен бөлүшүү үчүн эскертмени басыңыз."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Байланыштар менен бөлүшүү үчүн таптап коюңуз."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> файлын экспорттоо токтотулду."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Байланыштын чоо-жайы өткөрүлүп берилүүдө"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Байланыштын дайындары өткөрүлүп берилүүдө."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Дайындар базасынын маалыматтары алынбай койду."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортко жарактуу байланыш жок."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard түзүүчү туура эмес иштеп баштады."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорттой албады"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Байланыш маалыматтары өткөрүлүп берилген жок.\nСебеби: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> өткөрүлүп алынууда"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard файдарынын дайындарын окуу мүмкүн эмес"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard импорттолуп бүттү"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> файлын импорттоо токтотулду"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> бир аздан кийин өткөрүлүп алынат."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл бир аздан кийин өткөрүлүп алынат."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard файлдарынын өткөрүп берүү талабы четке кагылды. Кийинчерээк кайра аракет кылып көрүңүз."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Байланыштар жакында өткөрүлүп берилет."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard файлдарын өткөрүп берүү талабы четке кагылды. Кийинчерээк кайра аракет кылып көрүңүз."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"байланыш"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard файл(дар)ы жергиликтүү убактылуу сактагычка кэштелип жатат. Андан соң, өткөрүп алуу башталат."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard файлдары өткөрүлүп алынган жок."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC аркылуу"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кэштөө"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> өткөрүп алынууда"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf файлына өткөрүп берүү"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Төмөнкү боюнча иргөө"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Аттын транскрипциясы"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Ар дайым көрсөтүлсүн"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Жок болсо жашырылсын"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Аты"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Фамилиясы"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ысым форматы"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Аты биринчи жазылсын"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Фамилиясы биринчи жазылсын"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Каттоо эсептер"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Жаңы байланыштар үчүн демейки каттоо эсеби"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Өзүм жөнүндө маалымат"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Профилди жөндөө"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Байланыштар жөнүндө"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Сүйүктүү байланыштарды бөлүшүү"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Бардык байланыштарды бөлүшүү"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Байланыштар бөлүшүлбөй койду."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Байланыштарды өткөрүп берүү"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Байланыштарды өткөрүп алуу"</string>
+ <string name="share_error" msgid="948429331673358107">"Бул байланышты бөлүшүү мүмкүн эмес."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлүшө турган байланыш жок."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Көрсөтүлүүчү байланыштар"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Көрсөтүлүүчү байланыштар"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Тандап көрсөтүү"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сактоо"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Байланыштарды издеңиз"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Cүйүктүүлөр"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Өткөрүп алуу"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Өткөрүп берүү"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгөттөлгөн номерлер"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> аркылуу"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> аркылуу"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"издөөнү токтотуу"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Издөөнү тазалоо"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Каттоо эсеби"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Чалууларда ар дайым бул колдонулсун"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Кыска жазуу менен чалуу"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Чалуу менен жөнөтүлө турган кыска жазууну териңиз…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ЖӨНӨТҮҮ ЖАНА ЧАЛУУ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Куралма версиясы"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Баштапкы коду ачык программалардын уруксаттамалары"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Баштапкы коду ачык программалардын уруксаттамаларынын чоо-жайы"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Купуялык саясаты"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Тейлөө шарттары"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Баштапкы коду ачык программалардын уруксаттамалары"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL ачылбай койду."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> белгиленди"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> белгиленген жок"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Видео чалуу"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Жок кылуу"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Эллипс"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мүн. <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> с <xliff:g id="MINUTES_1">%2$s</xliff:g> мүн <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Кыска жол өчүрүлдү"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Байланыш алынып салынган"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Өткөрүп алуу"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Байланыштарды тандоо"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM картаңызда байланыштар жок."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Байланыш мурунтан эле тизмеңизде"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">SIM-картадан <xliff:g id="COUNT">%d</xliff:g> байланыш өткөрүлүп алынды</item>
+ <item quantity="one">SIM-картадан 1 байланыш өткөрүлүп алынды</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-картадагы байланыштар өткөрүлүп алынган жок"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM-картадан өткөрүп алуу"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Жокко чыгаруу"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Түзмөктүн авто шайкештештирүү функциясы өчүрүлгөн. Күйгүзүү үчүн тийип коюңуз."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Этибарга албоо"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Каттоо эсебинин шайкештештирүү функциясы өчүрүлгөн. Күйгүзүү үчүн тийип коюңуз."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Автосинхрондоштуруу күйгүзүлсүнбү?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Байланыштарыңызда гана эмес бардык колдонмолордо жана каттоо эсептеринде жасалган өзгөртүүлөр желе интерфейси менен башка түзмөктөрүңүздүн ортолорунда мезгил-мезгили менен жаңыртылып турат."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Күйгүзүү"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Байланыш жок"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Дагы көрсөтүү"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-картадан өткөрүп алуу аяктады"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Импорттолбой калды"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM-картадан байланыштар импорттолбой койду"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-картадан өткөрүлүп алынууда"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Эскертмелер"</string>
+</resources>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index d97509336..067f88cd8 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -14,8 +14,36 @@
limitations under the License.
-->
<resources>
- <dimen name="dialpad_digits_height">66dip</dimen>
- <dimen name="dialpad_digits_text_size">28sp</dimen>
- <dimen name="dialpad_digits_margin_bottom">50dip</dimen>
+ <!-- Copied from java/com/google/android/assets/launchscreens/res/values-land/dimens.xml -->
+ <!-- Adjusted higher to deal with the smaller total height we have to deal with on phones -->
+ <dimen name="launchscreens_product_logo_bottom">48dp</dimen>
+
<dimen name="editor_type_label_width">120dip</dimen>
+
+ <!-- Top padding for the image for empty group view-->
+ <dimen name="empty_group_view_image_padding_top">0dp</dimen>
+
+ <!-- Height for the image for empty group and main view-->
+ <dimen name="empty_view_image_height">150dp</dimen>
+
+ <!-- Top padding for the text for empty group view-->
+ <dimen name="empty_group_view_text_padding_top">14dp</dimen>
+
+ <!-- Gap b/w image view and top of the screen in empty main view -->
+ <dimen name="empty_home_view_image_offset">151dp</dimen>
+
+ <!-- Top padding for the text for empty main view -->
+ <dimen name="empty_home_view_text_padding_top">16dp</dimen>
+
+ <!-- Extra margin above image in empty account view -->
+ <dimen name="empty_account_view_image_offset">0dp</dimen>
+
+ <!-- Margin offset b/w the image top and app bar bottom for no account empty view -->
+ <dimen name="contacts_no_account_empty_image_offset">151dp</dimen>
+
+ <!-- Width for the image for contacts no account empty view -->
+ <dimen name="contacts_no_account_empty_image_width">150dp</dimen>
+
+ <!-- Top padding for the text for no account empty view -->
+ <dimen name="contacts_no_account_empty_text_padding_top">16dp</dimen>
</resources>
diff --git a/res/values-land/donottranslate_config.xml b/res/values-land/donottranslate_config.xml
deleted file mode 100644
index 462015a9d..000000000
--- a/res/values-land/donottranslate_config.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<resources>
- <bool name="config_show_group_action_in_action_bar">true</bool>
-</resources>
diff --git a/res/values-land/integers.xml b/res/values-land/integers.xml
index 08e1fe353..bc490bb04 100644
--- a/res/values-land/integers.xml
+++ b/res/values-land/integers.xml
@@ -14,11 +14,15 @@
limitations under the License.
-->
<resources>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">5</integer>
-
- <integer name="contact_tile_column_count">4</integer>
-
<!-- Number of lines the QuickContact title can have -->
<integer name="quickcontact_title_lines">2</integer>
+
+ <!-- Top margin ratio for the image for empty group view -->
+ <integer name="empty_group_view_image_margin_divisor">12</integer>
+
+ <!-- Top margin ratio for the image for empty account view -->
+ <integer name="empty_account_view_image_margin_divisor">6</integer>
+
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <integer name="snippet_length_before_tokenize">60</integer>
</resources>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
deleted file mode 100644
index 341bc1f6a..000000000
--- a/res/values-land/styles.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<resources>
- <style name="ConfirmAddDetailViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">match_parent</item>
- </style>
-
- <style name="ConfirmAddDetailHeaderViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">0dip</item>
- <item name="android:layout_weight">1</item>
- </style>
-
-</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
deleted file mode 100644
index d35ed9c44..000000000
--- a/res/values-lo-rLA/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"ເບິ່ງລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"ແກ້ໄຂລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="contactsList" msgid="8661624236494819731">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="shortcutContact" msgid="749243779392912958">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ໂທຫາໂດຍກົງ"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ສົ່ງຂໍ້ຄວາມຫາໂດຍກົງ"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"ເລືອກທາງລັດລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ເລືອກໝາຍເລກເພື່ອໂທ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"ເລືອກເບີເພື່ອສົ່ງຂໍ້ຄວາມ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ເພີ່ມໃສ່​ລາຍຊື່​ຜູ່ຕິດຕໍ່"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string name="starredList" msgid="4817256136413959463">"ໝາຍດາວແລ້ວ"</string>
- <string name="frequentList" msgid="7154768136473953056">"ເລື້ອຍໆ"</string>
- <string name="strequentList" msgid="5640192862059373511">"ລາຍການທີ່ມັກ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"ລາຍລະອຽດລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ສ້າງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ແກ້ໄຂກຸ່ມ"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ສ້າງກຸ່ມ"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"ກ່ຽວ​ກັບ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"ອັບເດດ"</string>
- <string name="searchHint" msgid="8482945356247760701">"ຊອກຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"ເພີ່ມເປັນລາຍການທີ່ມັກ"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"ລຶບອອກຈາກລາຍການທີ່ມັກ"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"​ລຶບ​ອອກ​ຈາກ​ລາຍ​ການ​ທີ່​ມັກ​ແລ້ວ"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"​ເພີ່ມ​ໃສ່​ລາຍ​ການ​ທີ່​ມັກ"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"ແກ້ໄຂ"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"ລຶບ"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ປ່ຽນຮູບ"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ວາງໃສ່ໜ້າຈໍຫຼັກ"</string>
- <string name="menu_call" msgid="3992595586042260618">"ໂທຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ສົ່ງຂໍ້ຄວາມຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"ບໍ່ລິ້ງ"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ແກ້ໄຂ"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ລຶບ"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"ເພີ່ມເປັນລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ເພີ່ມກຸ່ມ"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ຖອນ​ລິ້ງລາຍຊື່ຕິດຕໍ່ນີ້ໄປ​ໃສ່ຫຼາຍລາຍຊື່ຕິດຕໍ່ບໍ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ບໍ່ລິ້ງ"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ທ່ານ​ຢາກ​ຈະ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ທີ່​ທ່ານ​ປ່ຽນ​ແປງ​ແລ້ວ ແລະ ຖອນລິ້ງ​​ລາຍ​ຊື່​ຕິດ​ຕໍ່ນີ້​ໄປ​ໃສ່​ຫຼາຍ​ລາຍ​ຊື່​ຕິດ​ຕໍ່ບໍ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ບັນ​ທຶກ ແລະ ຖອນ​ລິ້ງ"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"ທ່ານ​ຢາກ​ຈະ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ທີ່​ທ່ານ​ປ່ຽນ​ແປງ​ແລ້ວ ແລະ ລິ້ງ​ກັບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ທີ່​ເລືອກ​ໄວ້​ແລ້ວ​ບໍ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ບັນ​ທຶກ ແລະ ລິ້ງ"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"​ລິ້ງ"</string>
- <string name="menu_save" msgid="1727844363591825909">"ບັນທຶກ"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ລິ້ງ​ລາຍ​ຊື່​​ຜູ້ຕິດ​ຕໍ່"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ທ່ານຕ້ອງການລິ້ງກັບ <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ສະແດງລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ແນະນຳ"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
- <item quantity="one">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ຕັ້ງສຽງຣິງໂທນ"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ໂອນທຸກສາຍໄປຂໍ້ຄວາມສຽງ"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຈາກ​ບັນ​ຊີ​ອ່ານ​ເທົ່າ​ນັ້ນ​ບໍ່​ສາ​ມາດ​ລຶບ​ໄດ້, ແຕ່​ພວກ​ມັນ​ຖືກ​ເຊື່ອງ​ໄດ້."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ເຊື່ອງ"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ລາຍຊື່ຕິດ​ຕໍ່ທີ່​ຈະ​ຖືກ​ລຶບ​ມີລາຍ​ລ​ະ​ອຽດຈາກຫຼາຍບັນຊີ. ລາຍ​ລະ​ອຽດຈາກບັນຊີອ່ານເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້, ບໍ່ຖືກລຶບອອກ."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ທ່ານ​ຈຳ​ເປັນ​ຕ້ອງ​ມີ​ຢ່າງ​ໜ້ອຍ​ສອງ​ລາຍ​ຊື່​ເລືອກ​ໄວ້ ເພື່ອ​ດຳ​ເນີນລິ້ງ."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ທີ່​ເລືອກ​ໄວ້​ບໍ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"​ລິ້ງ"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ລຶບລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້ບໍ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"ລຶບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ທີ່​ເລືອກ​ໄວ້?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຈາກ​ບັນ​ຊີ​ອ່ານ​ເທົ່າ​ນັ້ນ​ບໍ່​ສາ​ມາດ​ລຶບ​ໄດ້, ແຕ່​ພວກ​ມັນ​ຖືກ​ເຊື່ອງ​ໄດ້."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ລາຍຊື່ຕິດ​ຕໍ່ທີ່​ຈະ​ຖືກ​ລຶບ​ມີ​ລາຍ​ລ​ະ​ອຽດຈາກຫຼາຍບັນຊີ. ລາຍ​ລະ​ອຽດຈາກບັນຊີອ່ານເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້, ບໍ່ຖືກລຶບອອກ."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ການລຶບລາຍຊື່ຕິດຕໍ່ນີ້ຈະລຶບຂໍ້ມູນຈາກຫຼາຍບັນຊີ."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ລຶບລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້ບໍ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"​ລຶບ"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ຍົກເລີກການແກ້ໄຂ"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ເພີ່ມລາຍຊື່ຕິດຕໍ່ໃສ່ໜ້າຈໍຫຼັກແລ້ວ."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ເພີ່ມ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ແລ້ວ."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ອົງກອນ"</item>
- <item msgid="7196592230748086755">"ໝາຍເຫດ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ບໍ່ມີຮູບໃນແທັບເລັດທີ່ສາມາດໃຊ້ໄດ້."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ບໍ່ມີຮູບທີ່ສາມາດໃຊ້ໄດ້ໃນໂທລະສັບ."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ຮູບລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"ປ້າຍກຳກັບຊື່ກຳນົດເອງ"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ສົ່ງການໂທອອກໄປຫາຂໍ້ຄວາມສຽງໂດຍກົງ"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ລຶບຮູບພາບ"</string>
- <string name="noContacts" msgid="4955659076981974652">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="noGroups" msgid="8614664663561385253">"ບໍ່ມີກຸ່ມ."</string>
- <string name="noAccounts" msgid="7768267764545265909">"ເພື່ອສ້າງກຸ່ມ ທ່ານຈະຕ້ອງມີບັນຊີກ່ອນ."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ບໍ່ມີຄົນໃນກຸ່ມນີ້."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"ເພື່ອເພີ່ມລາຍຊື່, ກະລຸນາແກ້ໄຂກຸ່ມ."</string>
- <string name="savingContact" msgid="4075751076741924939">"ກຳລັງບັນທຶກລາຍຊື່ຜູ່ຕິດຕໍ່..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"ບັນທຶກລາຍຊື່ຜູ່ຕິດຕໍ່ແລ້ວ"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"ຖອນ​ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ແລ້ວ"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ໄດ້."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ບໍ່​ສາ​ມາດ​ຖອນ​ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໄດ້."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"ບໍ່​ສາ​ມາດ​ລິ້ງ​ລາຍ​ຊື່​ຜູ້​ຕິດ​ຕໍ່​ໄດ້."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"ບັນ​ທຶກ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຂັດ​ຂ້ອງ."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ຮູບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໄດ້."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ບັນທຶກກຸ່ມແລ້ວ."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂກຸ່ມໄດ້."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ລາຍຊື່ພ້ອມເບີໂທລະສັບ</item>
- <item quantity="one">ລາຍຊື່ພ້ອມເບີໂທລະສັບ</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ບໍ່ມີລາຍຊື່ທີ່ມີເບີໂທລະສັບ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ພົບແລ້ວ</item>
- <item quantity="one">1 ພົບແລ້ວ</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ພົບແລ້ວ</item>
- <item quantity="one">1 ພົບແລ້ວ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ທັງໝົດ"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"​ລາຍ​ການ​ທີ່​ມັກ"</string>
- <string name="callBack" msgid="5498224409038809224">"ໂທກັບ"</string>
- <string name="callAgain" msgid="3197312117049874778">"ໂທອີກເທື່ອນຶ່ງ"</string>
- <string name="returnCall" msgid="8171961914203617813">"ໂທກັບ"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ເພີ່ມ \"<xliff:g id="EMAIL">%s</xliff:g>\" ໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"ຮູບພາບລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ບວກ"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"ລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ຈາກທັງໝົດ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> ລາຍຊື່"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ບໍ່ພົບແອັບຯທີ່ໃຊ້ເພື່ອດຳເນີນການ."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ຄລິກ​ເພື່ອ​ກັບ​ໄປ​ທີ່​ໜ້າຈໍ​ກ່ອນ​ໜ້າ​ນີ້"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ເພີ່ມ​ເບີ​ໂທ​ລະ​ສັບ"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ເພີ່ມອີເມວ"</string>
- <string name="missing_app" msgid="1466111003546611387">"ບໍ່ພົບແອັບຯທີ່ໃຊ້ເພື່ອດຳເນີນການ."</string>
- <string name="menu_share" msgid="943789700636542260">"ແບ່ງປັນ"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"ເພີ່ມໃສ່ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <string name="share_via" msgid="563121028023030093">"ແບ່ງປັນລາຍຊື່ຜູ່ຕິດຕໍ່ຜ່ານທາງ"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ສ້າງກຸ່ມພາຍໃຕ້ບັນຊີ"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ການສົນທະນາດ້ວຍສຽງ"</string>
- <string name="video_chat" msgid="1872255818640336072">"ການສົນທະນາດ້ວຍວິດີໂອ"</string>
- <string name="connections" msgid="8098440723172028350">"ການເຊື່ອມຕໍ່"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"ເພີ່ມການເຊື່ອມຕໍ່"</string>
- <string name="recent" msgid="2659189233141493004">"ເມື່ອບໍ່ດົນມານີ້"</string>
- <string name="recent_updates" msgid="4267258535615860710">"ອັບເດດເມື່ອໄວໆນີ້"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ບັນ​ຊີ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ບໍ່ສາມາດແກ້ໄຂໄດ້ຈາກແອັບຯນີ້."</string>
- <string name="group_read_only" msgid="1061762906115697637">"ບໍ່ສາມາດແກ້ໄຂໄດ້ໃນອຸປະກອນນີ້."</string>
- <string name="take_photo" msgid="7496128293167402354">"ຖ່າຍ​ຮູບ"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ຖ່າຍຮູບໃໝ່"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ເລືອກ​ຮູບ"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ເລືອກຮູບໃໝ່"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"ລາຍການລາຍຊື່ຜູ່ຕິດຕໍ່ກຳລັງຖືກອັບເດດ."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"ກຳລັງຊອກຫາ..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"ສະແດງສິ່ງທີ່ເລືອກ"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"ສະແດງທັງໝົດ"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ເລືອກທັງໝົດ"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ບໍ່ເລືອກທັງໝົດ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"ເພີ່ມໃໝ່"</string>
- <string name="add_organization" msgid="7311893231158291197">"ເພີ່ມອົງກອນ"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ວັນທີ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ຊື່ກຸ່ມ"</string>
- <string name="change_photo" msgid="8530597935483526383">"ປ່ຽນແປງ"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ຮູບ​ຖ່າຍ​ຕົ້ນ​ຕໍ"</string>
- <string name="description_star" msgid="2605854427360036550">"ໝາຍດາວ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ປະ​ຈະ​ບັນກັບລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ເລືອກ​ໄວ້?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ສະລັບໄປທີ່ການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ເລືອກ? ຂໍ້ມູນທີ່ທ່ານຂຽນມາຈະຖືກສຳເນົາໄວ້."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ສຳເນົາໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງຂ້ອຍ"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງຂ້ອຍ"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ໄດເຣັກທໍຣີ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ກຳນົດເອງ"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ການຕັ້ງຄ່າ"</string>
- <string name="menu_settings" msgid="377929915873428211">"ການຕັ້ງຄ່າ"</string>
- <string name="menu_help" msgid="1680178646764069976">"ຊ່ວຍ​ເຫຼືອ ແລະ ຄຳ​ຕິ​ຊົມ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ໂຕເລືອກການສະແດງຜົນ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ເບີໂທລະສັບ"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"ປິດ"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"ລວມ​ປີ​ນຳ"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ກຳລັງໂຫລດ..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ເພີ່ມບັນຊີ"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ນຳເຂົ້າລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"ສ້າງ​ກຸ່ມ​ໃໝ່"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"ສ້າງ​ກຸ່ມ​ໃໝ່"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ກຸ່ມ</item>
- <item quantity="one">1 ກຸ່ມ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"ລຶບກຸ່ມ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (ລາຍຊື່ຜູ່ຕິດຕໍ່ຈະບໍ່ຖືກລຶບອອກ.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນຈາກ <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ຄົນ</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ຄົນ</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ພິມຊື່ຂອງລາຍຊື່ຜູ້ຕິດຕໍ່ກ່ອນການລິ້ງກັບລາຍຊື່ອື່ນ."</string>
- <string name="copy_text" msgid="3257145021583508761">"ສຳເນົາໃສ່ຄລິບບອດ"</string>
- <string name="set_default" msgid="4417505153468300351">"ຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
- <string name="clear_default" msgid="7193185801596678067">"ລຶບຄ່າເລີ່ມຕົ້ນ"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"ສຳເນົາຂໍ້ຄວາມແລ້ວ"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ຍົກເລີກການປ່ຽນແປງຂອງທ່ານ ແລະ ອອກຈາກການແກ້ໄຂບໍ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ຍົກເລີກ"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"ສືບຕໍ່ແກ້ໄຂ"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"ຕັ້ງຄ່າໂປຣໄຟລ໌ຂອງຂ້ອຍ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"ພິມຊື່ຄົນ"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ຊື່ກຸ່ມ"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"ໂປຣໄຟລ໌ໃນອຸປະກອນຂອງຂ້ອຍ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ໂປຣໄຟລ໌ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ຂອງຂ້ອຍ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ສະແດງລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"ເກັບຮັກສາລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານໄວ້ຢ່າງປອດໄພ ເຖິງແມ່ນວ່າໂທລະສັບຂອງທ່ານຈະເສຍກໍຕາມ ດ້ວຍການຊິ້ງຂໍ້ມູນກັບບໍລິການອອນລາຍ."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ເພີ່ມບັນຊີ"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"ລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່ຂອງທ່ານຈະບໍ່ຖືກສຳຮອງຂໍ້ມູນ. ທ່ານຕ້ອງການເພີ່ມບັນຊີ ທີ່ສາມາດສຳຮອງຂໍ້ມູນອອນລາຍໄດ້ຫຼືບໍ່?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່​ຈະ​ຖືກ​ບັນ​ທຶກ​ໃສ່ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ເລືອກ​ບັນ​ຊີ​ເລີ່ມຕົ້ນ​ສຳ​ລັບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
- <string name="keep_local" msgid="1258761699192993322">"ຈັດເກັບໃນເຄື່ອງ"</string>
- <string name="add_account" msgid="8201790677994503186">"ເພີ່ມບັນຊີ"</string>
- <string name="add_new_account" msgid="5748627740680940264">"ເພີ່ມບັນຊີໃໝ່"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ສົ່ງອອກໄຟລ໌ຖານຂໍ້ມູນ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"​ເບິ່ງ​ເພີ່ມ​ເຕີມ"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​​ເບິ່ງ​ໜ້ອຍ​ລົງ"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ເບິ່ງ​ທັງ​ໝົດ"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ບໍ່ດົນມານີ້"</string>
- <string name="about_card_title" msgid="2920942314212825637">"ກ່ຽວກັບ"</string>
- <string name="send_message" msgid="8938418965550543196">"ສົ່ງຂໍ້ຄວາມ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ກຳລັງ​ສ້າງ​ສຳເນົາ​ສ່ວນບຸກຄົນ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ມື້​ວານ​ນີ້"</string>
- <string name="tomorrow" msgid="6241969467795308581">"ມື້ອື່ນ"</string>
- <string name="today" msgid="8041090779381781781">"ມື້ນີ້"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ມື້ນີ້ໃນເວລາ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ມື້ອື່ນໃນເວລາ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ນັດ​ໝາຍບໍ່​ມີ​ຊື່)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"ຕົກລົງ"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ອົງກອນ"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ຊື່ຫຼິ້ນ"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"ບັນທຶກ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ເວັບໄຊ"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ເຫດການ"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"ຄວາມສຳພັນ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ບັນຊີ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"ຊື່"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ອີເມວ"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ໂທລະສັບ"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ຮູບພາບ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"ຄ​ລິກ​ເພື່ອ​ຂະ​ຫຍາຍເຄື່ອງກວດ​ແກ້​ລາຍ​ຊື່​ຕິດ​ຕໍ່."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"ຄ​ລິກ​ເພື່ອ​ຫຍໍ້​ເຄື່ອງກວດ​ແກ້​ລາຍ​ຊື່​ຕິດ​ຕໍ່."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"​ເສັ້ນ​ທາງ​ໄປ​ຫາ​ສະ​ຖານ​ທີ່"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS ຫຼ້າ​ສຸດ. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ຄລິກ​ເພື່ອ​ຕອບ​ກັບ"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ສາຍ​ໂທ​ເຂົ້າ"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ສາຍ​ໂທ​ອອກ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ບໍ່​ໄດ້​ຮັບ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ການ​ໂທຫຼ້າ​ສຸດ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ຄລິກ​ເພື່ອ​ໂທ​ກັບ"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"​ທ່ານ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ເຮັດ​ວຽກ​ໄດ້​ດີ​ຂຶ້ນ ເມື່ອ​ທ່ານ​ປ້ອນ​ຕົວ​ລະ​ບຸ​ Hangouts ຂອງ​ບຸກ​ຄົນ​ໃສ່​ບ່ອນ​ໃສ່ອີເມວ ຫຼື​ບ່ອນ​ໃສ່​ໂທ​ລະ​ສັບ​ຂອງ​ທ່ານ."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ຊ່ອງຂໍ້ມູນເພີ່ມເຕີມ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ປ່ຽນຮູບ"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ເປີດ​ເຄື່ອງ​ຕັດ​ຕໍ່​ບໍ່​ສຳ​ເລັດ."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ກຳ​ລັງ​ບັນ​ທຶກ​ໃສ່"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ປະ​ຈຸ​ບັນ​ກຳ​ລັງ​ບັນ​ທຶກ​ໃສ່ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. ແຕະ​ສອງ​ເທື່ອ​ ເພື່ອ​ເລືອກ​ບັນ​ຊີອື່ນ."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ລາ​ຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ຍົກ​ເລີກ​"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ການ​ຊ້ຳ​ກັນ​ທີ່​ເປັນ​ໄປ​ໄດ້</item>
- <item quantity="one">1 ການ​ຊ້ຳ​ກັນ​ທີ່​ເປັນ​ໄປ​ໄດ້</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ</item>
- <item quantity="one">1 ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ເປັນ​ໄປ​ໄດ້​ວ່າມີ​ການ​ຊ້ຳ​ກັນ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ເຫຼົ່າ​ນີ້​ອາດ​ຈະ​ເປັນ​ຄົນ​ດຽວ​ກັນ. ທ່ານ​ສາ​ມາດ​ລິ້ງ​ພວກ​ມັນ​ເຂົ້າ​ກັນ​ເປັນ​ບັນ​ຊີ​ດຽວ​ໄດ້."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ຈາກ​ບັນ​ຊີ​ຂອງ​ທ່ານ"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ຖ່າຍ​ຮູບ"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ຮູບທັງໝົດ"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ເລືອກ​ຮູບ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"ຈາກ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"ລຶບ <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"ລຶບ <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ຮູບຖ່າຍ​ຈາກ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ບໍ່​ໄດ້​ຮັບ​ການກວດ"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"ຮູບຖ່າຍ​ຈາກ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ໄດ້​ຮັບ​ການກວດ​ແລ້ວ"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ບໍ່ໄດ້ໝາຍເອົາຮູບຖ່າຍຈາກບັນຊີທີ່ບໍ່ຮູ້ຈັກແລ້ວ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ໝາຍເອົາຮູບຖ່າຍຈາກບັນຊີທີ່ບໍ່ຮູ້ຈັກແລ້ວ"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ລາຍຊື່ຜູ່ຕິດຕໍ່ກຳລັງຖືກອັບເດດ ຕາມການປ່ຽນແປງຂອງພາສາ.\n\nກະລຸນາລໍຖ້າ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"ເບີໂທທີ່ບລັອກໄວ້"</string>
-</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
new file mode 100644
index 000000000..baa5c6b96
--- /dev/null
+++ b/res/values-lo/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="contactsList" msgid="8661624236494819731">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ໂທຫາໂດຍກົງ"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ສົ່ງຂໍ້ຄວາມຫາໂດຍກົງ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ເພີ່ມໃສ່​ລາຍຊື່​ຜູ່ຕິດຕໍ່"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ເລືອກ"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
+ <string name="searchHint" msgid="8482945356247760701">"ຊອກຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"ເພີ່ມເປັນລາຍການທີ່ມັກ"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"ລຶບອອກຈາກລາຍການທີ່ມັກ"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"​ລຶບ​ອອກ​ຈາກ​ລາຍ​ການ​ທີ່​ມັກ​ແລ້ວ"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"​ເພີ່ມ​ໃສ່​ລາຍ​ການ​ທີ່​ມັກ"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"ແກ້ໄຂ"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"ລຶບ"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ປ່ຽນຮູບ"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ສ້າງທາງລັດ"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"ບໍ່ລິ້ງ"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ປ່ຽນຊື່ປ້າຍກຳກັບ"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ລຶບປ້າຍກຳກັບ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"ເພີ່ມເປັນລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ລຶບອອກຈາກປ້າຍກຳກັບ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ສ້າງປ້າຍກຳກັບ"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ຖອນ​ລິ້ງລາຍຊື່ຕິດຕໍ່ນີ້ໄປ​ໃສ່ຫຼາຍລາຍຊື່ຕິດຕໍ່ບໍ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ບໍ່ລິ້ງ"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ທ່ານ​ຢາກ​ຈະ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ທີ່​ທ່ານ​ປ່ຽນ​ແປງ​ແລ້ວ ແລະ ຖອນລິ້ງ​​ລາຍ​ຊື່​ຕິດ​ຕໍ່ນີ້​ໄປ​ໃສ່​ຫຼາຍ​ລາຍ​ຊື່​ຕິດ​ຕໍ່ບໍ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ບັນ​ທຶກ ແລະ ຖອນ​ລິ້ງ"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"ທ່ານ​ຢາກ​ຈະ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ທີ່​ທ່ານ​ປ່ຽນ​ແປງ​ແລ້ວ ແລະ ລິ້ງ​ກັບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ທີ່​ເລືອກ​ໄວ້​ແລ້ວ​ບໍ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ບັນ​ທຶກ ແລະ ລິ້ງ"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"ກຳລັງເຊື່ອມໂຍງ"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"ກຳລັງຍົກເລືອກການເຊື່ອມໂຍງ"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"​ລິ້ງ"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"View linked contacts"</string>
+ <string name="menu_save" msgid="1727844363591825909">"ບັນທຶກ"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ລິ້ງ​ລາຍ​ຊື່​​ຜູ້ຕິດ​ຕໍ່"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ທ່ານຕ້ອງການລິ້ງກັບ <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ແນະນຳ"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"ເຊື່ອມໂຍງ <xliff:g id="NAME">%s</xliff:g> ແລ້ວ"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"ລຶບ <xliff:g id="NAME">%1$s</xliff:g> ອອກແລ້ວ"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"ລຶບ <xliff:g id="NAME_0">%1$s</xliff:g> ແລະ <xliff:g id="NAME_1">%2$s</xliff:g> ອອກແລ້ວ"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"ລຶບ <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... ອອກແລ້ວ"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
+ <item quantity="one">ລາຍຊື່ຜູ້ຕິດຕໍ່ຖືກລຶບອອກແລ້ວ</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ລາຍ​ຊື່ຜູ້ຕິດຕໍ່</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ລາຍ​ຊື່ຜູ້ຕິດຕໍ່</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"ຈາກ Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"ຈາກ <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ຕັ້ງສຽງຣິງໂທນ"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ສົ່ງໄປຂໍ້ຄວາມສຽງ"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ເຊົາສົ່ງໄປຂໍ້ຄວາມສຽງ"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"This contact is read-only. It can\'t be deleted, but you can hide it."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"ເຊື່ອງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Read-only accounts in this contact will be hidden, not deleted."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ລຶບລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້ບໍ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"ລຶບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ທີ່​ເລືອກ​ໄວ້?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ຈາກ​ບັນ​ຊີ​ອ່ານ​ເທົ່າ​ນັ້ນ​ບໍ່​ສາ​ມາດ​ລຶບ​ໄດ້, ແຕ່​ພວກ​ມັນ​ຖືກ​ເຊື່ອງ​ໄດ້."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ລາຍຊື່ຕິດ​ຕໍ່ທີ່​ຈະ​ຖືກ​ລຶບ​ມີ​ລາຍ​ລ​ະ​ອຽດຈາກຫຼາຍບັນຊີ. ລາຍ​ລະ​ອຽດຈາກບັນຊີອ່ານເທົ່ານັ້ນ ຈະຖືກເຊື່ອງໄວ້, ບໍ່ຖືກລຶບອອກ."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ການລຶບລາຍຊື່ຕິດຕໍ່ນີ້ຈະລຶບຂໍ້ມູນຈາກຫຼາຍບັນຊີ."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ລຶບລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້ບໍ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"​ລຶບ"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ເພີ່ມລາຍຊື່ຕິດຕໍ່ໃສ່ໜ້າຈໍຫຼັກແລ້ວ."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ເພີ່ມ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ແລ້ວ."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ບໍ່ມີຮູບໃນອຸປະກອນທີ່ສາມາດໃຊ້ໄດ້."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ຮູບລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"ປ້າຍກຳກັບຊື່ກຳນົດເອງ"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ລຶບຮູບພາບ"</string>
+ <string name="noContacts" msgid="2228592924476426108">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານຫວ່າງເປົ່າ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ມີປ້າຍກຳກັບນີ້"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ໃນບັນຊີນີ້"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານຫວ່າງເປົ່າ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"ບັນທຶກ <xliff:g id="DISPLAY_NAME">%s</xliff:g> ແລ້ວ"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"ບັນທຶກລາຍຊື່ຜູ່ຕິດຕໍ່ແລ້ວ"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"ຖອນ​ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ແລ້ວ"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"ບໍ່ສາມາດບັນທຶກການແກ້ໄຂລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ບໍ່ສາມາດຍົກເລີກການລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"ບໍ່ສາມາດລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງຮູບລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ໂຫຼດປ້າຍກຳກັບບໍ່ສຳເລັດ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ລຶບປ້າຍກຳກັບແລ້ວ"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ສ້າງປ້າຍກຳກັບແລ້ວ"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ບໍ່ສາມາດສ້າງປ້າຍກຳກັບໄດ້"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ອັບເດດປ້າຍກຳກັບແລ້ວ"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ລຶບອອກຈາກປ້າຍກຳກັບແລ້ວ"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ເພີ່ມໃສ່ປ້າຍກຳກັບແລ້ວ"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງປ້າຍກຳກັບໄດ້"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ມີປ້າຍກຳກັບນັ້ນຢູ່ກ່ອນແລ້ວ"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ບາງລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ມີອີເມວ."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ບາງລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ມີເບີໂທລະສັບ."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ສົ່ງອີເມວ"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ສົ່ງຂໍ້ຄວາມ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ສົ່ງ"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ເພີ່ມ \"<xliff:g id="EMAIL">%s</xliff:g>\" ໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ຄລິກ​ເພື່ອ​ກັບ​ໄປ​ທີ່​ໜ້າຈໍ​ກ່ອນ​ໜ້າ​ນີ້"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ເພີ່ມ​ເບີ​ໂທ​ລະ​ສັບ"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ເພີ່ມອີເມວ"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ບໍ່ພົບແອັບຯທີ່ໃຊ້ເພື່ອດຳເນີນການ."</string>
+ <string name="menu_share" msgid="943789700636542260">"ແບ່ງປັນ"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"ເພີ່ມໃສ່ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ເພີ່ມ"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ຜ່ານ</item>
+ <item quantity="one">ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ຜ່ານ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ເລືອກບັນຊີ"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ສ້າງປ້າຍກຳກັບ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ປ່ຽນຊື່ປ້າຍກຳກັບ"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ຊື່ປ້າຍກຳກັບ"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ຊື່ປ້າຍກຳກັບ"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ການສົນທະນາດ້ວຍສຽງ"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ການສົນທະນາດ້ວຍວິດີໂອ"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ບັນ​ຊີ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ຖ່າຍ​ຮູບ"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ຖ່າຍຮູບໃໝ່"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ເລືອກ​ຮູບ"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ເລືອກຮູບໃໝ່"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"ກຳລັງຊອກຫາ..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ວັນທີ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ປ້າຍກຳກັບ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ຍົກເລີກ"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ກັບຄືນ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ປິດ"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ສະລັບໄປທີ່ການແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ເລືອກ? ຂໍ້ມູນທີ່ທ່ານຂຽນມາຈະຖືກສຳເນົາໄວ້."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ໄດເຣັກທໍຣີ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ການຕັ້ງຄ່າ"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ການຕັ້ງຄ່າ"</string>
+ <string name="menu_help" msgid="1680178646764069976">"ຊ່ວຍ​ເຫຼືອ ແລະ ຄຳ​ຕິ​ຊົມ"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ເບີໂທລະສັບ"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"ປິດ"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"ລວມ​ປີ​ນຳ"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ເພີ່ມບັນຊີ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ນຳເຂົ້າ"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"ສ້າງໃໝ່…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"ລຶບປ້າຍກຳກັບ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ອອກບໍ? (ລາຍຊື່ຜູ້ຕິດຕໍ່ຈະບໍ່ຖືກລຶບອອກ.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ພິມຊື່ຂອງລາຍຊື່ຜູ້ຕິດຕໍ່ກ່ອນການລິ້ງກັບລາຍຊື່ອື່ນ."</string>
+ <string name="copy_text" msgid="3257145021583508761">"ສຳເນົາໃສ່ຄລິບບອດ"</string>
+ <string name="set_default" msgid="4417505153468300351">"ຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ລຶບຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"ສຳເນົາຂໍ້ຄວາມແລ້ວ"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ຍົກເລີກການແກ້ໄຂບໍ່?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ຍົກເລີກ"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ຍົກເລີກ"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ປິດການປັບແຕ່ງບໍ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"ຊອກຫາລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"ໂປຣໄຟລ໌ໃນອຸປະກອນຂອງຂ້ອຍ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ໂປຣໄຟລ໌ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ຂອງຂ້ອຍ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ໃຊ້ເວລາເລັກນ້ອຍເພື່ອເພີ່ມບັນຊີທີ່ຈະໃຊ້ສຳຮອງຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານໄປໃສ່ Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່​ຈະ​ຖືກ​ບັນ​ທຶກ​ໃສ່ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ເລືອກ​ບັນ​ຊີ​ເລີ່ມຕົ້ນ​ສຳ​ລັບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ເບິ່ງຢ່າງດຽວ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່ເພື່ອແກ້ໄຂ"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"ລາຍຊື່ຕິດຕໍ່ທີ່ລິ້ງແລ້ວ"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ເພີ່ມ"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ບໍ່ລິ້ງ"</string>
+ <string name="add_account" msgid="8201790677994503186">"ເພີ່ມບັນຊີ"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"ເພີ່ມບັນຊີໃໝ່"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ສົ່ງອອກໄຟລ໌ຖານຂໍ້ມູນ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"​ເບິ່ງ​ເພີ່ມ​ເຕີມ"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​​ເບິ່ງ​ໜ້ອຍ​ລົງ"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ບໍ່ດົນມານີ້"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"ກ່ຽວກັບ"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ກຳລັງສ້າງສຳເນົາສ່ວນໂຕ..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"ມື້ອື່ນ"</string>
+ <string name="today" msgid="8041090779381781781">"ມື້ນີ້"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ມື້ນີ້ໃນເວລາ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ມື້ອື່ນໃນເວລາ <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ນັດ​ໝາຍບໍ່​ມີ​ຊື່)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"ຕົກລົງ"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ອົງກອນ"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ຊື່ຫຼິ້ນ"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"ບັນທຶກ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ເວັບໄຊ"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ເຫດການ"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"ຄວາມສຳພັນ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"ຊື່"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ອີເມວ"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ໂທລະສັບ"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"​ເສັ້ນ​ທາງ​ໄປ​ຫາ​ສະ​ຖານ​ທີ່"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS ຫຼ້າ​ສຸດ. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ຄລິກ​ເພື່ອ​ຕອບ​ກັບ"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ສາຍ​ໂທ​ເຂົ້າ"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ສາຍ​ໂທ​ອອກ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ບໍ່​ໄດ້​ຮັບ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ການ​ໂທຫຼ້າ​ສຸດ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ຄລິກ​ເພື່ອ​ໂທ​ກັບ"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"​ທ່ານ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ຊ່ອງຂໍ້ມູນເພີ່ມເຕີມ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"ປ່ຽນລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"ຮູບລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ເປີດຕົວຕັດຕໍ່ບໍ່ສຳເລັດ."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ກຳລັງບັນທຶກໃສ່"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກ <xliff:g id="ACCOUNT">%s</xliff:g> ແມ່ນບໍ່ສາມາດແກ້ໄຂໄດ້"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ຍົກ​ເລີກ​"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ເປັນ​ໄປ​ໄດ້​ວ່າມີ​ການ​ຊ້ຳ​ກັນ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ເຫຼົ່າ​ນີ້​ອາດ​ຈະ​ເປັນ​ຄົນ​ດຽວ​ກັນ. ທ່ານ​ສາ​ມາດ​ລິ້ງ​ພວກ​ມັນ​ເຂົ້າ​ກັນ​ເປັນ​ບັນ​ຊີ​ດຽວ​ໄດ້."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"ລຶບ <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"ລຶບ <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"ຄຳແນະນຳ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ໃໝ່"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"ເປີດແຖບການນຳທາງ"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ປິດແຖບການນຳທາງ"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"ປ້າຍກຳກັບ <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ປ້າຍກຳກັບ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ບັນຊີ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ເບິ່ງປະຫວັດຂອງທ່ານພ້ອມກັນ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ນັດໝາຍ ແລະ ຂໍ້ຄວາມ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ນັດໝາຍ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"ຂໍ້ຄວາມ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"ຄຳແນະນຳ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"ຈັດລະບຽບລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານ ແລະ ເຮັດໃຫ້ມີປະໂຫຍດ"</string>
+ <string name="undo" msgid="1425165101664071422">"ຍົກເລີກ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"ໂທຫາ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"ໂທຫາເບີບ້ານ"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ໂທຫາເບີມືຖື"</string>
+ <string name="call_work" msgid="5328785911463744028">"ໂທ​ຫາ​ເບີບ່ອນເຮັດ​ວຽກ"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"ໂທຫາເບີແຟັກບ່ອນເຮັດວຽກ"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ໂທຫາເບີແຟັກບ້ານ"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ໂທຫາເບີ pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"ໂທ"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ໂທຫາເບີໂທກັບ"</string>
+ <string name="call_car" msgid="3280537320306436445">"ໂທຫາເບີລົດ"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ໂທຫາເບີຫຼັກຂອງບໍລິສັດ"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ໂທ​ຫາເບີ ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"ໂທຫາເບີຫຼັກ"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ໂທຫາເບີແຟັກ"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ໂທຫາເບີວິທະຍຸ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ໂທຫາເບີ telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"ໂທຫາເບີ TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ໂທຫາເບີມືຖືບ່ອນເຮັດວຽກ"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ໂທຫາ pager ບ່ອນເຮັດວຽກ"</string>
+ <string name="call_assistant" msgid="670941612175068337">"ໂທຫາ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"ໂທ​ຫາເບີ MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ໂທ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ສົ່ງຂໍ້ຄວາມຫາ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ສົ່ງຂໍ້ຄວາມຫາເບີບ້ານ"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ສົ່ງຂໍ້ຄວາມຫາເບີມືຖື"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ສົ່ງຂໍ້ຄວາມຫາເບີບ່ອນເຮັດວຽກ"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ສົ່ງຂໍ້ຄວາມຫາເບີແຟັກບ່ອນເຮັດວຽກ"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ສົ່ງຂໍ້ຄວາມຫາເບີແຟັກບ້ານ"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ສົ່ງຂໍ້ຄວາມຫາ pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"ສົ່ງຂໍ້ຄວາມ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ສົ່ງຂໍ້ຄວາມຫາເບີໂທກັບ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ສົ່ງຂໍ້ຄວາມຫາເບີລົດ"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ສົ່ງຂໍ້ຄວາມຫາເບີໂທຫຼັກຂອງບໍລິສັດ"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ສົ່ງຂໍ້ຄວາມຫາເບີ ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ສົ່ງຂໍ້ຄວາມຫາເບີຫຼັກ"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ສົ່ງຂໍ້ຄວາມຫາແຟັກ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ສົ່ງຂໍ້ຄວາມຫາເບີວິທະຍຸ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ສົ່ງຂໍ້ຄວາມຫາ telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"ສົ່ງຂໍ້ຄວາມຫາ TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ສົ່ງຂໍ້ຄວາມຫາເບີມືຖືບ່ອນເຮັດວຽກ"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ສົ່ງຂໍ້ຄວາມຫາເບີ pager ບ່ອນເຮັດວຽກ"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"ສົ່ງຂໍ້ຄວາມຫາ <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"ສົ່ງຂໍ້ຄວາມ MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ສົ່ງຂໍ້ຄວາມ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ໂທອອກດ້ວຍວິດີໂອ"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"ລຶບລາຍຊື່ທີ່ຕິດຕໍ່ຫາເລື້ອຍໆ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"ທ່ານຈະລຶບຂໍ້ມູນລາຍຊື່ທີ່ຕິດຕໍ່ຫາເລື້ອຍໆຢູ່ໃນແອັບລາຍຊື່ ແລະ ໂທລະສັບ ພ້ອມທັງບັງຄັບໃຫ້ແອັບອີເມວເລີ່ມຮຽນຮູ້ຄ່າກຳນົດທີ່ຢູ່ຂອງທ່ານໃໝ່ຕັ້ງແຕ່ຕົ້ນ."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"ກຳລັງລຶບລາຍຊື່ທີ່ຕິດຕໍ່ຫາເລື້ອຍໆ"</string>
+ <string name="status_available" msgid="5586870015822828392">"ສາມາດໃຊ້ໄດ້"</string>
+ <string name="status_away" msgid="1838861100379804730">"ບໍ່ຢູ່"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ບໍ່ຫວ່າງ"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ອື່ນໆ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ໄດເຣັກທໍຣີ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ໄດເຣັກທໍຣີບ່ອນເຮັດວຽກ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"ຂໍ້ມູນຕິດຕໍ່ດ່ວນສຳລັບ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ບໍ່ມີຊື່)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ລາຍຊື່ທີ່ຕິດຕໍ່ເລື້ອຍໆ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດທີ່ມີເບີໂທລະສັບ"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"ເບິ່ງອັບເດດ"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ອຸປະກອນ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ຊື່"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ຊື່ຫຼິ້ນ"</string>
+ <string name="name_given" msgid="4280790853455320619">"ຊື່"</string>
+ <string name="name_family" msgid="7466985689626017037">"ນາມສະກຸນ"</string>
+ <string name="name_prefix" msgid="59756378548779822">"ຄຳນຳໜ້າຊື່"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ຊື່ຮອງ"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"ຄຳນຳຫຼັງຊື່"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ການອ່ານອອກສຽງຊື່"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ການອອກສຽງຊື່"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ການອອກສຽງຊື່ກາງ"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ການອອກສຽງນາມສະກຸນ"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Phone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ອີເມວ"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ທີ່ຢູ່"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ອົງກອນ"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ຄວາມສຳພັນ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"ວັນທີພິເສດ"</string>
+ <string name="sms" msgid="1756857139634224222">"ຂໍ້ຄວາມ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ທີ່ຢູ່"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ບໍລິສັດ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ຕຳແໜ່ງໜ້າທີ່"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ໝາຍເຫດ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ກຳນົດເອງ"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ເວັບໄຊ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ປ້າຍກຳກັບ"</string>
+ <string name="email_home" msgid="8573740658148184279">"ສົ່ງອີເມວຫາທີ່ຢູ່ເຮືອນ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ສົ່ງອີເມວຫາມືຖື"</string>
+ <string name="email_work" msgid="2807430017302722689">"ສົ່ງອີເມວຫາທີ່ຢູ່ບ່ອນເຮັດວຽກ"</string>
+ <string name="email_other" msgid="3454004077967657109">"ອີເມວ"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ສົ່ງອີເມວຫາ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"ອີເມວ"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ຖະໜົນ"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ເມືອງ"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ລັດ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ລະຫັດ ZIP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ປະເທດ"</string>
+ <string name="map_home" msgid="1243547733423343982">"ເບິ່ງທີ່ຢູ່ເຮືອນ"</string>
+ <string name="map_work" msgid="1360474076921878088">"ເບິ່ງທີ່ຢູ່ບ່ອນເຮັດວຽກ"</string>
+ <string name="map_other" msgid="3817820803587012641">"ເບິ່ງທີ່ຢູ່"</string>
+ <string name="map_custom" msgid="8761800628069473526">"ເບິ່ງທີ່ຢູ່ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"ສົນທະນາໂດຍໃຊ້ AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"ສົນທະນາໂດຍໃຊ້ Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"ສົນທະນາໂດຍໃຊ້ Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"ສົນທະນາໂດຍໃຊ້ Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"ສົນທະນາໂດຍໃຊ້ QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"ສົນທະນາໂດຍໃຊ້ Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ສົນທະນາໂດຍໃຊ້ ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"ສົນທະນາໂດຍໃຊ້ Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"ສົນທະນາ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ລຶບ"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"ສະແດງຊ່ອງຊື່ເພີ່ມເຕີມ"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"ຫຍໍ້ຊ່ອງຂໍ້ມູນຊື່"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ສະແດງຊ່ອງຊື່ແບບອ່ານອອກສຽງເພີ່ມເຕີມ"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ຫຍໍ້ຊ່ອງຂໍ້ມູນການອອກສຽງຊື່"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ຂະຫຍາຍ"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ຫຍໍ້ລົງ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ຂະຫຍາຍແລ້ວ"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ຫຍໍ້ແລ້ວ"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ຕິດດາວແລ້ວ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"ປັບແຕ່ງ"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ລາຍຊື່ຜູ່ຕິດຕໍ່ອື່ນໆທັງໝົດ"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"ລຶບກຸ່ມຊິ້ງຂໍ້ມູນ"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"ເພີ່ມກຸ່ມຊິ້ງຂໍ້ມູນ"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"ກຸ່ມເພີ່ມເຕີມ..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ການລຶບກຸ່ມ \"<xliff:g id="GROUP">%s</xliff:g>\" ອອກຈາກການຊິ້ງຂໍ້ມູນ ຈະເປັນການລຶບລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ບໍ່ໄດ້ຢູ່ໃນກຸ່ມ ອອກຈາກການຊິ້ງຂໍ້ມູນນຳ."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ກຳລັງບັນທຶກໂຕເລືອກການສະແດງຜົນ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ມຸມມອງແບບປັບແຕ່ງ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ບັນທຶກລາຍຊື່ຕິດຕໍ່ນຳເຂົ້າແລ້ວໃສ່:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ຊິມກາດ"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"ຊິມ <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d ລາຍຊື່ຜູ້ຕິດຕໍ່</item>
+ <item quantity="one">1 ລາຍຊື່ຜູ້ຕິດຕໍ່</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"ໄຟລ໌ .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ບໍ່ມີຫຍັງໃຫ້ນຳເຂົ້າ"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"ນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກ vCard ບໍ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"ຍົກເລີກການນຳເຂົ້າ <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ຍົກເລີກການສົ່ງອອກ <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"ບໍ່ສາມາດຍົກເລີກການ ນຳເຂົ້າ/ສົ່ງອອກ vCard ໄດ້"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"ຄວາມຜິດພາດທີ່ບໍ່ຮູ້ເຫດຜົນ."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ບໍ່ສາມາດເປີດ \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ໄດ້: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ບໍ່ສາມາດເລີ່ມໂປຣແກຣມສົ່ງອອກໄດ້: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ບໍ່ມີລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"ທ່ານປິດການນຳໃຊ້ສິດອະນຸຍາດທີ່ຈຳເປັນໄວ້ແລ້ວ."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການສົ່ງອອກ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ຜິດພາດ"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ໜ່ວຍຄວາມຈຳບໍ່ພໍ. ເປັນໄປໄດ້ວ່າໄຟລ໌ອາດໃຫຍ່ເກີນໄປ."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ບໍ່ຮອງຮັບຮູບແບບທີ່ເລືອກ."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"ການສົ່ງອອກ <xliff:g id="FILENAME">%s</xliff:g> ສິ້ນສຸດແລ້ວ."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ສຳເລັດການສົ່ງອອກລາຍຊື່ອແລ້ວ."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ເມື່ອສຳເລັດການສົ່ງອອກລາຍຊື່ຜູ້ຕິດຕໍ່ແລ້ວ, ໃຫ້ຄລິກການແຈ້ງເຕືອນເພື່ອແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"ແຕະເພື່ອແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"ການສົ່ງອອກ <xliff:g id="FILENAME">%s</xliff:g> ຖືກຍົກເລີກແລ້ວ."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"ກຳລັງສົ່ງອອກຂໍ້ມູນລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"ຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ກຳລັງຖືກສົ່ງອອກ."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ບໍ່ສາມາດດຶງຂໍ້ມູນຂອງຖານຂໍ້ມູນ."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"ໂປຣແກຣມຂຽນ vCard ຖືກເລີ່ມຢ່າງບໍ່ຖືກຕ້ອງ."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ບໍ່​ສາ​ມາດ​ສົ່ງ​ອອກໄດ້"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ບໍ່ໄດ້ສົ່ງຂໍ້ມູນລາຍຊື່ຜູ່ຕິດຕໍ່ອອກເທື່ອ.\nເຫດຜົນ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"ກຳລັງນຳເຂົ້າ <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"ບໍ່ສາມາດອ່ານຂໍ້ມູນ vCard ໄດ້"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"ສິ້ນສຸດການນຳເຂົ້າໄຟລ໌ vCard <xliff:g id="FILENAME">%s</xliff:g> ແລ້ວ"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"ການນຳເຂົ້າ <xliff:g id="FILENAME">%s</xliff:g> ຖືກຍົກເລີກແລ້ວ"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ຈະຖືກນຳເຂົ້າໄວໆນີ້."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ໄຟລ໌ຈະຖືກນຳເຂົ້າໃນໄວໆນີ້."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"ຄຳຂໍການນຳເຂົ້າ vCard ຖືກປະຕິເສດ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຈະຖືກສົ່ງອອກໃນໄວໆນີ້."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"ຄຳຂໍການສົ່ງ vCard ອອກ ຖືກປະຕິເສດ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"ກຳລັງເກັບຂໍ້ມູນ vCard ໃສ່ບ່ອນຈັດເກັບຂໍ້ມູນຊົ່ວຄາວໃນອຸປະກອນ. ການນຳເຂົ້າຈະເລີ່ມຂຶ້ນໃນໄວໆນີ້."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"ບໍ່ສາມາດນຳເຂົ້າ vCard ໄດ້."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ໄດ້ຮັບຜ່ານ NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ກຳລັງເກັບຂໍ້ມູນ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"ກຳລັງນຳເຂົ້າ <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"ສົ່ງອອກຫາໄຟລ໌ .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ຮຽງລຳດັບຕາມ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ການອ່ານອອກສຽງຊື່"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ສະແດງທຸກເທື່ອ"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Hide if empty"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ຊື່"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"ນາມສະກຸນ"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"ຮູບແບບຊື່"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ຊື່ກ່ອນ"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ນາມສະກຸນກ່ອນ"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ບັນຊີ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"ບັນຊີເລີ່ມຕົ້ນສຳລັບລາຍຊື່ຕິດຕໍ່ໃໝ່"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ຂໍ້ມູນຂອງຂ້ອຍ"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"ຕັ້ງຄ່າໂປຣໄຟລ໌ຂອງທ່ານ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"ກ່ຽວກັບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ມັກ"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ແບ່ງປັນທຸກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ສຳເລັດ."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"ສົ່ງອອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"ນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກ"</string>
+ <string name="share_error" msgid="948429331673358107">"ບໍ່ສາມາດແບ່ງປັນລາຍຊື່ຜູ່ຕິດຕໍ່ນີ້ໄດ້"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ຈະແບ່ງປັນ."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ລາຍຊື່ຜູ້ຕິດຕໍ່ເພື່ອສະແດງ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ຈະສະແດງ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ປັບແຕ່ງມຸມມອງ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"ບັນທຶກ"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"ຊອກຫາລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ລາຍການທີ່ມັກ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ນຳເຂົ້າ"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ສົ່ງອອກ"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"ເບີໂທທີ່ບລັອກໄວ້"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"ຜ່ານ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ຜ່ານ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ຢຸດການຊອກຫາ"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ລຶບ​ການ​ຊອກ​ຫາ"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ບັນຊີ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ໃຊ້ຊິມນີ້ເພື່ອການໂທທຸກເທື່ອ"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ໂທດ້ວຍບັນທຶກ"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ພິມບັນທຶກເພື່ອສົ່ງດ້ວຍການໂທ..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ສົ່ງ ແລະ ໂທ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ເວີຊັນສ້າງ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ໃບອະນຸຍາດໂອເພນຊອດ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ລາຍລະອຽດໃບອະນຸຍາດໂອເພນຊອດ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"ຂໍ້ກຳນົດບໍລິການ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ໃບອະນຸຍາດໂອເພນຊອດ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"ເປີດ URL ລົ້ມເຫລວ."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"ໝາຍ <xliff:g id="ACCOUNT_INFO">%s</xliff:g> ແລ້ວ"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"ບໍ່ໝາຍ <xliff:g id="ACCOUNT_INFO">%s</xliff:g> ແລ້ວ"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ໂທວິດີໂອ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ລຶບ"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ເຄື່ອງໝາຍສາມຈໍ້າ"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ນທ <xliff:g id="SECONDS">%2$s</xliff:g> ວິ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ຊມ <xliff:g id="MINUTES_1">%2$s</xliff:g> ນທ <xliff:g id="SECONDS">%3$s</xliff:g> ວິ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ທາງລັດນີ້ຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່ອອກແລ້ວ"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ນຳເຂົ້າ"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ໃນຊິມກາດຂອງທ່ານ."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"ມີລາຍຊື່ຜູ້ຕິດຕໍ່ໃນລາຍຊື່ຂອງທ່ານຢູ່ກ່ອນແລ້ວ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">ນຳເຂົ້າ <xliff:g id="COUNT">%d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ຊິມແລ້ວ</item>
+ <item quantity="one">ນຳເຂົ້າ 1 ລາຍຊື່ຜູ້ຕິດຕໍ່ຊິມແລ້ວ</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"ນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກຊິມກາດບໍ່ສຳເລັດ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"ນຳເຂົ້າມາຈາກ SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ຍົກເລີກ"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດຖືກປິດໄວ້. ແຕະເພື່ອເປີດໃຊ້."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ປິດໄວ້"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດຖືກປິດໄວ້. ແຕະເພື່ອເປີດໃຊ້."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Turn on auto-sync?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Changes you make to all apps and accounts, not just Google Contacts, will be kept up to date between the web and your devices."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ເປີດໃຊ້"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ບໍ່ມີການເຊື່ອມຕໍ່"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"ຊິມ"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"ສະແດງເພີ່ມເຕີມ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"ນຳເຂົ້າ SIM ສຳເລັດແລ້ວ"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ນຳເຂົ້າບໍ່ສຳເລັດ"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"ບໍ່ສາມາດນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກຊິມກາດໄດ້"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ກຳລັງນຳເຂົ້າຈາກ SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"ການແຈ້ງເຕືອນ"</string>
+</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 8c40b4e0b..71d974041 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontaktai"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktai"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Žiūrėti kontaktą"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Redaguoti kontaktą"</string>
<string name="contactsList" msgid="8661624236494819731">"Adresinė"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Pridėti kontaktą"</string>
<string name="shortcutContact" msgid="749243779392912958">"Adresatas"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Tiesioginis numerio rinkimas"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Tiesioginis pranešimas"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pasirinkti adresato nuorodą"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pasirinkite numerį, kuriuo skambinsite"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pasirinkti numerį, kuriuo bus siunčiamas pranešimas"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pasirinkti kontaktą"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pridėti prie kontakto"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pasirinkti kontaktą"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pasirinkti"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Kurti naują kontaktą"</string>
- <string name="starredList" msgid="4817256136413959463">"Pažymėta žvaigždute"</string>
- <string name="frequentList" msgid="7154768136473953056">"Dažnai naudojami"</string>
- <string name="strequentList" msgid="5640192862059373511">"Mėgstamiausi"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Išsami adresato informacija"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Redaguoti adresatą"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Sukurti adresatą"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Redaguoti grupę"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Kurti grupę"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Apie"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Naujiniai"</string>
<string name="searchHint" msgid="8482945356247760701">"Ieškoti adresatų"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Žiūrėti adresatą"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pridėti prie adresyno"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Pašalinti iš adresyno"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Pašalinta iš mėgstamiausių"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Redaguoti"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Ištrinti"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Keisti nuotrauką"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Padėti pagrindiniame ekrane"</string>
- <string name="menu_call" msgid="3992595586042260618">"Skambinti adresatui"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Siųsti pranešimą adresatui"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Sukurti spartųjį klavišą"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Atsieti"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Redaguoti"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Ištrinti"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Pridėti kontaktą"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pridėti grupę"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Pašalinti kontaktus"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Pervardyti etiketę"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Ištrinti etiketę"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Pridėti kontaktą"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Pasirinkti kontaktus"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pridėti kontaktų"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Pašalinti iš etiketės grupės"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sukurti etiketę"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Atsieti šį kontaktą suskaidant į kelis kontaktus?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Atsieti"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ar norite išsaugoti jau atliktus pakeitimus ir atsieti šį kontaktą suskaidydami į kelis kontaktus?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Išsaugoti ir atsieti"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Ar norite išsaugoti jau atliktus pakeitimus ir susieti su pasirinktu kontaktu?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Išsaugoti ir susieti"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Susiejama"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Atsiejama"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Susieti"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Žr. susietus kontaktus"</string>
<string name="menu_save" msgid="1727844363591825909">"Išsaugoti"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktų susiejimas"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pasirinkite kontaktą, kurį norite susieti su <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Rodyti visus adresatus"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Siūlomi adresatai"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visi kontaktai"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> susietas (-a)"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktai susieti"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ištrintas (-a)"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ir <xliff:g id="NAME_1">%2$s</xliff:g> ištrinti"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ištrinti"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">kontaktas ištrintas</item>
<item quantity="few">kontaktai ištrinti</item>
<item quantity="many">kontakto ištrinta</item>
<item quantity="other">kontaktų ištrinta</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktas</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontaktai</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontakto</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktų</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktas <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktai <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakto <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktų <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Iš „Google“"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Iš <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nustat. sk. toną"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi skamb. į balso paštą"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Negalima ištrinti kontaktų iš tik skaitomų paskyrų, bet juos galima paslėpti."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Slėpti"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Norimam ištrinti kontaktui priskirta kelių paskyrų informacija. Tik skaitomų paskyrų informacija bus paslėpta, bet neištrinta."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Reikia pasirinkti bent du kontaktus, kad būtų galima atlikti susiejimo veiksmą."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Susieti pasirinktus kontaktus?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Susieti"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Nukreipti į balso paštą"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Panaik. nukreip. į balso paštą"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Šis kontaktas yra tik skaitomas. Jo negalima ištrinti, bet jį galima paslėpti."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Slėpti kontaktą"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Šiam kontaktui priskirtos tik skaitomos paskyros bus paslėptos, bet neištrintos."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Ištrinti šį kontaktą?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Ištrinti pasirinktus kontaktus?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Negalima ištrinti kontaktų iš tik skaitomų paskyrų, bet juos galima paslėpti."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ištrynus šį kontaktą, bus ištrinta kelių paskyrų informacija."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Ištrinti šį kontaktą?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ištrinti"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Atmesti pakeitimus"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontaktas neegzistuoja."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktas pridėtas prie pagrindinio ekrano."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> pridėtas (-a) prie pagrindinio ekrano."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Kurti naują kontaktą"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Kurti naują kontaktą"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacija"</item>
- <item msgid="7196592230748086755">"Pastaba"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Jokie paveikslėliai nepasiekiami naudojant planšetinį kompiuterį."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefone nėra galimų paveikslėlių."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Įrenginyje nėra jokių paveikslėlių."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakto nuotrauka"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Tinkintas etiketės pavadinimas"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Skambinti tiesiogiai į balso paštą"</string>
<string name="removePhoto" msgid="4898105274130284565">"Pašalinti nuotrauką"</string>
- <string name="noContacts" msgid="4955659076981974652">"Kontaktų nėra"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nėra grupių."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Jums reikia paskyros, kad galėtumėte kurti grupes."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Šioje grupėje nėra žmonių."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Jei norite jų pridėti, redaguokite grupę."</string>
- <string name="savingContact" msgid="4075751076741924939">"Išsaugomas adresatas..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Kontaktų sąrašas tuščias"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nėra kontaktų su šia etikete"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Šioje paskyroje nėra jokių kontaktų"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Kontaktų sąrašas tuščias"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> išsaugotas (-a)"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontaktas išsaugotas"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktai atsieti"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepavyko išsaugoti kontakto pakeitimų."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nepavyko atsieti kontakto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nepavyko susieti kontakto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Išsaugant kontaktą įvyko klaida."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nepavyko išsaugoti kontakto nuotraukos pakeitimų."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupė išsaugota."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nepavyko išsaugoti grupės pakeitimų."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktas su telefonų numeriais</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontaktai su telefonų numeriais</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontakto su telefonų numeriais</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktų su telefonų numeriais</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nėra kontaktų su telefonų numeriais"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">Rastas <xliff:g id="COUNT">%d</xliff:g> kontaktas</item>
- <item quantity="few">Rasti <xliff:g id="COUNT">%d</xliff:g> kontaktai</item>
- <item quantity="many">Rasta <xliff:g id="COUNT">%d</xliff:g> kontakto</item>
- <item quantity="other">Rasta <xliff:g id="COUNT">%d</xliff:g> kontaktų</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nepavyko išsaugoti kontakto pakeitimų"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nepavyko atsieti kontakto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nepavyko susieti kontakto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Išsaugant kontaktą įvyko klaida"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepavyko išsaugoti kontakto nuotraukos pakeitimų"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nepavyko įkelti etiketės"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiketė ištrinta"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketė sukurta"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nepavyko sukurti etiketės"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketė atnaujinta"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Pašalinta iš etiketės"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pridėta prie etiketės"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nepavyko išsaugoti etiketės pakeitimų"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ši etiketė jau yra"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Kai kurie kontaktai neturi el. pašto adresų."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Kai kurie kontaktai neturi telefonų numerių."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Siųsti el. laišką"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Siųsti pranešimą"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktų pasirinkimas"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Siųsti"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontaktų nėra"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">Rastas <xliff:g id="COUNT">%d</xliff:g> kontaktas</item>
- <item quantity="few">Rasti <xliff:g id="COUNT">%d</xliff:g> kontaktai</item>
- <item quantity="many">Rasta <xliff:g id="COUNT">%d</xliff:g> kontakto</item>
- <item quantity="other">Rasta <xliff:g id="COUNT">%d</xliff:g> kontaktų</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Visi"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Mėgstamiausi"</string>
- <string name="callBack" msgid="5498224409038809224">"Perskambinti"</string>
- <string name="callAgain" msgid="3197312117049874778">"Skambinti dar kartą"</string>
- <string name="returnCall" msgid="8171961914203617813">"Grįžtamasis skambutis"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Pridėti „<xliff:g id="EMAIL">%s</xliff:g>“ prie adresatų?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"adresato nuotrauka"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plius"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> iš <xliff:g id="TOTAL_NUMBER">%s</xliff:g> adresatų"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kontaktų vardai"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nerasta jokių programų šiam veiksmui apdoroti."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Spustelėkite, kad grįžtumėte į ankstesnį ekraną"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pridėti telefono numerį"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Pridėti el. pašto adresą"</string>
<string name="missing_app" msgid="1466111003546611387">"Nerasta jokių programų šiam veiksmui apdoroti."</string>
<string name="menu_share" msgid="943789700636542260">"Bendrinti"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Pridėti prie kontaktų"</string>
- <string name="share_via" msgid="563121028023030093">"Bendrinti kontaktą naudojant"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Kurti grupę paskyroje"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Pridėti"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Bendrinti kontaktus naudojant</item>
+ <item quantity="few">Bendrinti kontaktus naudojant</item>
+ <item quantity="many">Bendrinti kontaktus naudojant</item>
+ <item quantity="other">Bendrinti kontaktus naudojant</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Paskyros pasirinkimas"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Etiketės sukūrimas"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Etiketės pervardijimas"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiketės pavadinimas"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketės pavad."</string>
<string name="audio_chat" msgid="2535716629358298691">"Balso pokalbis"</string>
<string name="video_chat" msgid="1872255818640336072">"Vaizdo pokalbis"</string>
- <string name="connections" msgid="8098440723172028350">"Ryšiai"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Pridėti ryšį"</string>
- <string name="recent" msgid="2659189233141493004">"Naujausi"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Vėliausi naujiniai"</string>
<string name="account_type_format" msgid="718948015590343010">"„<xliff:g id="SOURCE">%1$s</xliff:g>“ kontaktas"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"„<xliff:g id="SOURCE">%1$s</xliff:g>“ paskyra"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Iš šios programos redaguoti negalima."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Negalima redaguoti šiame įrenginyje."</string>
<string name="take_photo" msgid="7496128293167402354">"Fotografuoti"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Iš naujo fotografuoti"</string>
<string name="pick_photo" msgid="2129509985223564942">"Pasirinkti nuotrauką"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Pasirinkti naują nuotrauką"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Atnaujinamas kontaktų sąrašas."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Ieškoma…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Rodyti pasirinktus"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Rodyti visus"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Pasirinkti visus"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Atšaukti visų pasirinkimą"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pridėti naują"</string>
- <string name="add_organization" msgid="7311893231158291197">"Pridėti organizaciją"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Grupės pavad."</string>
- <string name="change_photo" msgid="8530597935483526383">"Pakeisti"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Pagrindinė nuotrauka"</string>
- <string name="description_star" msgid="2605854427360036550">"įtraukti į adresyną"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Redaguoti kontaktą"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Susieti dabartinį kontaktą su pasirinktu?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketė"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Atšaukti"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Atgal"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"uždaryti"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Perjungti į pasirinkto kontakto redagavimą? Iki šiol įvesta informacija bus nukopijuota."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopijuoti į „Mano kontaktus“"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Pridėti prie „Mano kontaktų“"</string>
<string name="contact_directory_description" msgid="683398073603909119">"„<xliff:g id="TYPE">%1$s</xliff:g>“ katalogas"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Priskirtas"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Nustatymai"</string>
<string name="menu_settings" msgid="377929915873428211">"Nustatymai"</string>
<string name="menu_help" msgid="1680178646764069976">"Pagalba ir atsiliepimai"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Pateikties parinktys"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"„<xliff:g id="COMPANY_0">%2$s</xliff:g>“, „<xliff:g id="COMPANY_1">%1$s</xliff:g>“"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefono numeris"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Pridėti prie kontaktų"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pridėti prie kontakto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Uždaryti"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Įtraukti metus"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontaktas"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Įkeliama..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Sukurti naują kontaktą"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pridėti paskyrą"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuoti kontaktus"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Sukurti naują grupę"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Sukurti naują grupę"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupė</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupės</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> grupės</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupių</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ištrinti grupę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontaktai nebus ištrinti.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> žmogus iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> žmonės iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> žmogaus iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> žmonių iš <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> žmogus</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> žmonės</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> žmogaus</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> žmonių</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importuoti"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Sukurti naują..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Ištrinti etiketę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Kontaktai nebus ištrinti.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Įveskite kontakto vardą prieš susiedami jį su kitu kontaktu."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopijuoti į iškarpinę"</string>
<string name="set_default" msgid="4417505153468300351">"Nustatyti numatytuosius nustatymus"</string>
<string name="clear_default" msgid="7193185801596678067">"Išvalyti numatytuosius nustatymus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekstas nukopijuotas"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Atmesti pakeitimus ir baigti redagavimą?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Atmesti pakeitimus?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Atmesti"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Toliau redaguoti"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Nustatyti profilį"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Įveskite asmens vardą ir (arba) pavardę"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Grupės pavadinimas"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Atšaukti"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Atmesti tinkinimo veiksmus?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Ieškokite kontaktų"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Pašalinti kontaktus"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mano vietos profilis"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mano „<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>“ profilis"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Pateikiami visi kontaktai"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Užtikrinkite kontaktų saugumą net praradę telefoną: sinchronizuokite su internetine paslauga."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Pridėti paskyrą"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Naujo kontakto atsarginė kopija nebus sukurta. Pridėti paskyrą, kuri sukuria atsargines kontaktų kopijas internete?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Skirkite šiek tiek laiko ir pridėkite paskyrą, kurią naudojant bus kuriama atsarginė kontaktų kopija sistemoje „Google“."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nauji kontaktai bus išsaugoti paskyroje <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pasirinkite numatytąją naujų kontaktų paskyrą:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Pridėti naują kont."</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Kurti naują kontaktą"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Redaguoti kontaktą"</string>
- <string name="keep_local" msgid="1258761699192993322">"Išsaug. kaip vietinį"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Tik peržiūrėti"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Pasirinkite norimą redaguoti kontaktą"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Susieti kontaktai"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Pridėti"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Atsieti"</string>
<string name="add_account" msgid="8201790677994503186">"Pridėti paskyrą"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pridėkite naują paskyrą"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Eksportuoti duomenų failus"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"pridėti naują kontaktą"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Sukurti naują kontaktą"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Žr. daugiau"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Žr. mažiau"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Žr. viską"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Naujausi"</string>
<string name="about_card_title" msgid="2920942314212825637">"Apie"</string>
- <string name="send_message" msgid="8938418965550543196">"Siųsti pranešimą"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Kuriama asmeninė kopija..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Vakar"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Kuriama asmeninė kopija..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Rytoj"</string>
<string name="today" msgid="8041090779381781781">"Šiandien"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Šiandien, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Rytoj, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Įvykis be pavadinimo)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Nustatyti"</string>
<string name="header_im_entry" msgid="3581720979640225615">"TP"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Svetainė"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Įvykis"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Ryšys"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Paskyra"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Vardas"</string>
<string name="header_email_entry" msgid="8666093061171624478">"El. paštas"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefonas"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Nuotrauka"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Spustelėkite, kad išskleistumėte kontaktų redagavimo priemonę."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Spustelėkite, kad sutrauktumėte kontaktų redagavimo priemonę."</string>
<string name="content_description_directions" msgid="2686791825798189335">"nuorodos į vietovę"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Neseniai atsiuntė SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Spustelėkite, kad atsakytumėte."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Neseniai atsiuntė SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Spustelėkite, kad atsakytumėte."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gaunamieji"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"siunčiamieji"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"praleistieji"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Neseniai skambino. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Spustelėkite, kad atskambintumėte."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Neseniai skambino. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Spustelėkite, kad atskambintumėte."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Jūs: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"„Hangout“ veikia geriau įvedus asmens „Hangout“ identifikatorių el. pašto ar telefono numerio lauke."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Daugiau laukų"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Keisti nuotrauką"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nepavyko atidaryti redagavimo priemonės."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Saugojimo vieta"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Šiuo metu išsaugoma <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dukart palieskite, kad pasirinktumėte kitą paskyrą."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Susietų kontaktų: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Daugiau laukų"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Pakeisti kontakto nuotrauką"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pridėti kontakto nuotrauką"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontakto nuotrauka"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Nepavyko atidaryti redagavimo priemonės."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Išsaugoma"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontakto informacijos iš <xliff:g id="ACCOUNT">%s</xliff:g> redaguoti negalima"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SUSIETI KONTAKTUS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ATŠAUKTI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> galima tiksli kopija</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> galimos tikslios kopijos</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> galimos tikslios kopijos</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> galimų tikslių kopijų</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> susietas kontaktas</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> susieti kontaktai</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> susieto kontakto</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> susietų kontaktų</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Šis kontaktas"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Galimos tikslios kopijos"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Šie kontaktai gali būti tas pats asmuo. Galite juos susieti kaip vieną kontaktą."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Susieti kontaktai"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Iš jūsų paskyrų"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fotografuoti"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Visos nuotraukos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Pasirinkti nuotrauką"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Iš <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Ištrinti <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Ištrinti <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ištrinti <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Nuotrauka iš <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> nepažymėta"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Nuotrauka iš <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> pažymėta"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nepažymėta nuotrauka iš nežinomos paskyros"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Pažymėta nuotrauka iš nežinomos paskyros"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Adresatų sąrašas atnaujinamas, kad būtų pakeista kalba.\n\nPalaukite..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Pasiūlymai"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Naujiena"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Atidaryti naršymo skydelį"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Uždaryti naršymo skydelį"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiketė „<xliff:g id="LABEL_NAME">%s</xliff:g>“"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketės"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Paskyros"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Peržiūrėkite istoriją kartu"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Įvykiai ir pranešimai"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Įvykiai"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Pranešimai"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Pasiūlymai"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Turėkite tvarkingus ir naudingus kontaktus"</string>
+ <string name="undo" msgid="1425165101664071422">"Anuliuoti"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Skambinti numeriu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Skambinti į namų telefoną"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Skambinti į mobilųjį telefoną"</string>
+ <string name="call_work" msgid="5328785911463744028">"Skambinti į darbo telefoną"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Skambinti į darbo faksą"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Skambinti į namų faksą"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Skambinti į pranešimų gaviklį"</string>
+ <string name="call_other" msgid="8563753966926932052">"Skambinti"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Skambinti atgalinio skambinimo būdu"</string>
+ <string name="call_car" msgid="3280537320306436445">"Skambinti automobilio telefono numeriu"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Skambinti į pagrindinį įmonės telefoną"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Skambinti ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Skambinti į pagrindinį telefoną"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Skambinti fakso numeriu"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Skambinti radijo telefono numeriu"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Skambinti telekso numeriu"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Skambinti TTY / TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Skambinti darbo mobiliuoju telefonu"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Skambinti į darbo pranešimų gaviklį"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Skambinti numeriu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Skambinti MMS telefono numeriu"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (skambutis)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Siųsti žinutę numeriu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Siųsti teksto pranešimą į namų telefoną"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Siųsti teksto pranešimą į mobilųjį telefoną"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Siųsti pranešimą į darbo telefoną"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Siųsti pranešimą į darbo faksą"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Siųsti pranešimą į namų faksą"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Siųsti pranešimą į pranešimų gaviklį"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekstas"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Siųsti pranešimą atgalinio skambinimo numeriu"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Siųsti teksto pranešimą į automobilio telefoną"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Siųsti pranešimą pagrindiniu įmonės telefono numeriu"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Siųsti pranešimą ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Siųsti SMS į pagrindinį telefoną"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Siųsti teksto pranešimą į faksą"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Siųsti teksto pranešimą radijo telefono numeriu"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Siųsti pranešimą telekso numeriu"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Siųsti pranešimą TTY / TDD numeriu"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Siųsti pranešimą į darbo mobilųjį telefoną"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Siųsti pranešimą į darbo teksto pranešimų gaviklį"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Siųsti teksto pranešimą <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Siųsti MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (pranešimas)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Atlikti vaizdo skambutį"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Išvalyti dažniaus. naud. kontaktus?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Išvalysite dažniausių kontaktų sąrašą Kontaktų ir Telefono programose, o el. pašto programoms reikės iš naujo gauti adresavimo nuostatas."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Valomi dažniaus. naud. kontaktai…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Pasiekiamas"</string>
+ <string name="status_away" msgid="1838861100379804730">"Pasišalinęs"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Užsiėmęs"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Kita"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalogas"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Darbo katalogas"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Visi kontaktai"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Spartusis <xliff:g id="NAME">%1$s</xliff:g> kontaktas"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Nėra pavadinimo)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Dažnai susisiekiama"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Visi kontaktai su telefonų numeriais"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Darbo profilio kontaktai"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Žiūrėti naujinius"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Įrenginys"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Pavadinimas"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Slapyvardis"</string>
+ <string name="name_given" msgid="4280790853455320619">"Vardas"</string>
+ <string name="name_family" msgid="7466985689626017037">"Pavardė"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Priešvardis"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Antras vardas"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Povardis"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetinis vardas"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Vardo fonetinė forma"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetinis antrasis vardas"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Pavardės fonetinė forma"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefonas"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"El. paštas"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresas"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"TP"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Ryšys"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Speciali data"</string>
+ <string name="sms" msgid="1756857139634224222">"Teksto pranešimas"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresas"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Įmonė"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Pareigos"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Pastabos"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Tinkintas"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Svetainė"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketės"</string>
+ <string name="email_home" msgid="8573740658148184279">"Namų el. paštas"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Siųsti el. laišką mobiliuoju el. pašto adresu"</string>
+ <string name="email_work" msgid="2807430017302722689">"Siųsti el. laišką į darbo el. paštą"</string>
+ <string name="email_other" msgid="3454004077967657109">"El. paštas"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Siųsti el. laišką adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Siųsti el. paštu"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Gatvė"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Miestas"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Būsena"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Pašto kodas"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Šalis"</string>
+ <string name="map_home" msgid="1243547733423343982">"Žiūrėti namų adresą"</string>
+ <string name="map_work" msgid="1360474076921878088">"Žiūrėti darbo adresą"</string>
+ <string name="map_other" msgid="3817820803587012641">"Žiūrėti adresą"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Peržiūrėti <xliff:g id="CUSTOM_LABEL">%s</xliff:g> adresą"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Kalbėti naudojant AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Kalbėti naudojant „Windows Live“"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Kalbėti naudojant „Yahoo“"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Kalbėti naudojant „Skype“"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Kalbėti naudojant QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Kalbėti naudojant „Google“ pokalbius"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Kalbėti naudojant ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Kalbėti naudojant „Jabber“"</string>
+ <string name="chat" msgid="9025361898797412245">"Kalbėti"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ištrinti"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Rodyti daugiau vardų laukų"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sutraukti vardų laukus"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Rodyti daugiau fonetinių vardų laukų"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sutraukti fonetinių vardų laukus"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Išskleisti"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Sutraukti"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Išskleista"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sutraukta"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Visi kontaktai"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Pažymėta žvaigždute"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Tinkinti"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontaktas"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Visi kiti kontaktai"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Visi kontaktai"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Pašalinti sinchronizuojamą grupę"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Pridėti sinchronizuotą grupę"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Daugiau grupių..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Iš sinchronizavimo pašalinus „<xliff:g id="GROUP">%s</xliff:g>“, bus pašalinti ir nesugrupuoti kontaktai."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Išsaugomos pateikties parinktys..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Tinkintas rodinys"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importuotus kontaktus išsaugoti paskyroje:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM kortelė"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM kortelė „<xliff:g id="SIM_NAME">%1$s</xliff:g>“"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d kontaktas</item>
+ <item quantity="few">%1$d kontaktai</item>
+ <item quantity="many">%1$d kontakto</item>
+ <item quantity="other">%1$d kontaktų</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontaktas • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontaktai • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> kontakto • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktų • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf failas"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nėra nieko, ką būtų galima importuoti"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importuoti kontaktus iš „vCard“?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Atšaukti <xliff:g id="FILENAME">%s</xliff:g> importavimą?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Atšaukti <xliff:g id="FILENAME">%s</xliff:g> eksportavimą?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nepavyko atš. „vCard“ imp. / eksp."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nežinoma klaida."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nepavyko atidaryti „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nepavyko inicijuoti eksportavimo priemonės: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nėra eksportuojamo kontakto."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Išjungėte būtiną leidimą."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksportuojant įvyko klaida: „<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Įvesties / išvesties klaida"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nepakanka atminties. Gali būti, kad failas per didelis."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatas nepalaikomas."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Baigta eksportuoti „<xliff:g id="FILENAME">%s</xliff:g>“."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Baigta eksportuoti kontaktus."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktai baigti eksportuoti. Spustelėkite pranešimą ir bendrinkite kontaktus."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Palieskite, kad bendrintumėte kontaktus."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> eksportavimas atšauktas."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksportuojami adresatų duomenys"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktų duomenys eksportuojami."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepavyko gauti duomenų bazės informacijos."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nėra jokių eksportuotinų kontaktų."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"El. vizitinių kortelių rengyklė nebuvo tinkamai paleista."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nepavyko eksportuoti"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakto duomenys nebuvo eksportuoti.\nPriežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importuojama <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepavyko nuskaityti „vCard“ duomenų"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Baigtas „<xliff:g id="FILENAME">%s</xliff:g>“ el. vizitinės kortelės importavimas"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Atšauktas <xliff:g id="FILENAME">%s</xliff:g> importavimas"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> bus netrukus importuotas."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Failas bus netrukus importuotas."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"El. vizitinės kortelės importavimo užklausa atmesta. Bandykite vėliau."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Netrukus kontaktai bus eksportuoti."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"El. vizitinės kortelės eksportavimo užklausa buvo atmesta. Bandykite vėliau."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktas"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"El. vizitinė (-ės) kortelė (-ės) padedama (-os) į vietinę laikinąją atmintinę. Netrukus bus pradėtas tikrasis importavimas."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nepavyko importuoti el. vizit. kortelės."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Gauta per ALR"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Dedama į talpyklą…"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importuojama <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportuoti į .vcf failą"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rūšiuoti pagal"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Vardo fonetinė forma"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Visada rodyti"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Slėpti, jei lauk. tuščias"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vardas"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Pavardė"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Vardo formatas"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Pirmiausia vardas"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Pirmiausia pavardė"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Paskyros"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Numatytoji naujų kontaktų paskyra"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mano informacija"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Nustatykite profilį"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Apie Kontaktus"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Bendrinti mėgstamiausius kontaktus"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Bendrinti visus kontaktus"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Nepavyko bendrinti kontaktų."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksportuoti kontaktus"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontaktų formos importavimas"</string>
+ <string name="share_error" msgid="948429331673358107">"Šio kontakto negalima bendrinti."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nėra bendrintinų kontaktų."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Pateiktini kontaktai"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Pateiktini kontaktai"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Rodinio tinkinimas"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Išsaugoti"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Ieškokite kontaktų"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Adresynas"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importuoti"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportuoti"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Užblokuoti numeriai"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"naudojant „<xliff:g id="SOURCE">%1$s</xliff:g>“"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> naudojant „<xliff:g id="SOURCE">%2$s</xliff:g>“"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"sustabdyti paiešką"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Išvalyti paiešką"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Paskyra"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Visada naudoti tai skambučiams"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Skambutis su užrašu"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Įveskite užrašą, kurį norite išsiųsti skambindami..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SIŲSTI IR SKAMBINTI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versija"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Atvirojo šaltinio licencijos"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Išsami atvirojo šaltinio programinės įrangos licencijos informacija"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privatumo politika"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Paslaugų teikimo sąlygos"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Atvirojo šaltinio licencijos"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Nepavyko atidaryti URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> pažymėta"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nepažymėta"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Atlikti vaizdo skambutį"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Ištrinti"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Daugtaškis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> val. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Šis spartusis klavišas išjungtas"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktas pašalintas"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importuoti"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Pasirinkti kontaktus"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM kortelėje nėra jokių kontaktų"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontaktas jau yra jūsų kontaktų sąraše"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Importuotas <xliff:g id="COUNT">%d</xliff:g> SIM kortelės kontaktas</item>
+ <item quantity="few">Importuoti <xliff:g id="COUNT">%d</xliff:g> SIM kortelės kontaktai</item>
+ <item quantity="many">Importuota <xliff:g id="COUNT">%d</xliff:g> SIM kortelės kontakto</item>
+ <item quantity="other">Importuota <xliff:g id="COUNT">%d</xliff:g> SIM kortelės kontaktų</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nepavyko importuoti SIM kortelės kontaktų"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importuoti iš SIM kortelės"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Atšaukti"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatinis sinchronizavimas išjungtas. Jei norite įjungti, palieskite."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Atsisakyti"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Paskyros sinchronizavimas išjungtas. Jei norite įjungti, palieskite."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Įjungti automatinį sinchronizavimą?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Pakeitimai, kuriuos atliksite visose programose ir paskyrose (ne tik „Google“ kontaktuose), bus atnaujinami žiniatinklyje ir jūsų įrenginiuose."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Įjungti"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nėra ryšio"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM kort."</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Rodyti daugiau"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kortelės kontaktai importuoti"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Nepavyko importuoti"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nepavyko importuoti kontaktų iš SIM kortelės"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuojami SIM kortelės kontaktai"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Pranešimai"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 5d5985b7e..71c83294d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontaktpersonas"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktpersonas"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kontaktpersonas datu skatīšana"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Kontaktpersonas datu rediģēšana"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontaktpersonas"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Pievienot kontaktpersonu"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontaktpersona"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Tiešais zvans"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Tiešais ziņojums"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Izvēlieties kontaktpersonas saīsni"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Izvēlieties numuru, uz kuru zvanīt"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Izvēlieties numuru, uz kuru sūtīt īsziņu"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontaktpersonas izvēle"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pievienot kontaktpersonai"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontaktpersonas izvēle"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Atlasīt"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Izveidojiet jaunu kontaktpersonu"</string>
- <string name="starredList" msgid="4817256136413959463">"Atzīmēti ar zvaigznīti"</string>
- <string name="frequentList" msgid="7154768136473953056">"Bieži"</string>
- <string name="strequentList" msgid="5640192862059373511">"Izlase"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Informācija par kontaktpersonu"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Rediģēt kontaktpersonu"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Izveidot kontaktpersonu"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Rediģēt grupu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Izveidot grupu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Par"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Atjaunināj."</string>
<string name="searchHint" msgid="8482945356247760701">"Meklēt kontaktpersonas"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Skatīt kontaktpersonu"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pievienot izlasei"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Noņemt no izlases"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Noņemts no izlases"</string>
@@ -49,41 +35,59 @@
<string name="menu_editContact" msgid="9042415603857662633">"Rediģēt"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Dzēst"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Mainīt fotoattēlu"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Novietot sākuma ekrānā"</string>
- <string name="menu_call" msgid="3992595586042260618">"Zvanīt kontaktpersonai"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Sūtīt īsziņu kontaktpersonai"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Izveidot saīsni"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Atsaistīt"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Rediģēt"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Dzēst"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Pievienot kontaktpersonu"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pievienot grupu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Noņemt kontaktpersonas"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Pārdēvēt iezīmi"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Dzēst iezīmi"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Pievienot kontaktpersonu"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Atlasīt kontaktpersonas"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pievienot kontaktpersonas"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Noņemt no iezīmes"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Izveidot iezīmi"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Vai atsaistīt šo kontaktpersonu un sadalīt vairākās kontaktpersonās?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Atsaistīt"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vai vēlaties saglabāt veiktās izmaiņas, atsaistīt šo kontaktpersonu un sadalīt vairākās kontaktpersonās?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Saglabāt un atsaistīt"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vai vēlaties saglabāt veiktās izmaiņas un saistīt ar atlasīto kontaktpersonu?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Saglabāt un saistīt"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Notiek piesaistīšana"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Notiek atsaistīšana"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Saistīt"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Skatīt saistītās kontaktpers."</string>
<string name="menu_save" msgid="1727844363591825909">"Saglabāt"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktu saistīšana"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izvēlieties kontaktpersonu, kuru vēlaties saistīt ar vārdu <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Rādīt visas kontaktpersonas"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Ieteiktās kontaktpersonas"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Visas kontaktpersonas"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ir saistīts"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktpersonas tika saistītas."</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g>: dzēsts"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> un <xliff:g id="NAME_1">%2$s</xliff:g>: dzēsti"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Dzēstās kontaktpersonas: <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="zero">Kontaktpersonas ir izdzēstas</item>
<item quantity="one">Kontaktpersonas ir izdzēstas</item>
<item quantity="other">Kontaktpersonas ir izdzēstas</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersonas</item>
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersona</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersonas</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersona (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"No Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"No konta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Iestatīt zv. signālu"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Visi zvani uz balss pastu"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontaktpersonas no tikai lasāmiem kontiem nevar dzēst, taču tās var paslēpt."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Paslēpt"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Dzēšamajā kontaktpersonā ir ietverta informācija no vairākiem kontiem. Informācija no tikai lasāmiem kontiem tiks paslēpta, nevis izdzēsta."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Lai veiktu saistīšanu, ir jāatlasa vismaz divas kontaktpersonas."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vai saistīt atlasītās kontaktpersonas?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Saistīt"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Maršrutēt uz balss pastu"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Atcelt maršrutēšanu"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Šī kontaktpersona ir tikai lasāma. To nevar dzēst, bet var paslēpt."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Slēpt kontaktpersonu"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Šīs kontaktpersonas tikai lasāmie konti tiks paslēpti, nevis dzēsti."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vai dzēst šo kontaktpersonu?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vai dzēst atlasītās kontaktpersonas?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontaktpersonas no tikai lasāmiem kontiem nevar dzēst, taču tās var paslēpt."</string>
@@ -91,183 +95,125 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Dzēšot šo kontaktpersonu, tiks dzēsta informācija no vairākiem kontiem."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vai dzēst šo kontaktpersonu?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Dzēst"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Atmest izmaiņas"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Šāda kontaktpersona nepastāv."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktpersona ir pievienota sākuma ekrānam."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontaktpersona <xliff:g id="NAME">%s</xliff:g> ir pievienota sākuma ekrānam."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Izveidot jaunu kontaktpersonu"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Izveidot jaunu kontaktpersonu"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizācija"</item>
- <item msgid="7196592230748086755">"Piezīme"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planšetdatorā nav pieejams neviens attēls."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tālrunī nav pieejams neviens attēls."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Ierīcē nav pieejams neviens attēls."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktpersonas fotoattēls"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Pielāgots iezīmes nosaukums"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pāradresēt zvanus tieši uz balss pastu"</string>
<string name="removePhoto" msgid="4898105274130284565">"Noņemt fotoattēlu"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nav kontaktpersonu"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nav grupu."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Lai izveidotu grupas, ir nepieciešams konts."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Šajā grupā nav personu."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Lai pievienotu personas, rediģējiet grupu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Notiek kontaktpersonas saglabāšana…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Jūsu kontaktpersonu saraksts ir tukšs."</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nav nevienas kontaktpersonas ar šo iezīmi."</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Šajā kontā nav nevienas kontaktpersonas."</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Jūsu kontaktpersonu saraksts ir tukšs."</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontaktpersona <xliff:g id="DISPLAY_NAME">%s</xliff:g> saglabāta"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontaktpersona ir saglabāta."</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktpersonas ir atsaistītas"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nevarēja saglabāt kontaktpersonas datu izmaiņas."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nevarēja atsaistīt kontaktpersonu."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nevarēja saistīt kontaktpersonu."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Saglabājot kontaktpersonu, radās kļūda."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nevarēja saglabāt kontaktpersonas fotoattēla izmaiņas."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupa ir saglabāta."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nevarēja saglabāt grupas izmaiņas."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> kontaktpersona ar tālruņa numuriem</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nav nevienas kontaktpersonas ar tālruņa numuru"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="zero">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
- <item quantity="one">Atrasta <xliff:g id="COUNT">%d</xliff:g> kontaktpersona</item>
- <item quantity="other">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nevarēja saglabāt kontaktpersonas datu izmaiņas."</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nevarēja atsaistīt kontaktpersonu."</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nevarēja saistīt kontaktpersonu."</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Saglabājot kontaktpersonu, radās kļūda."</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nevarēja saglabāt kontaktpersonas fotoattēla izmaiņas."</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Neizdevās ielādēt iezīmi"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Iezīme izdzēsta"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Iezīme izveidota"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nevar izveidot iezīmi"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Iezīme atjaunināta"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Noņemtas no iezīmes"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pievienota iezīmei"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nevarēja saglabāt iezīmes izmaiņas."</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Attiecīgā iezīme jau pastāv."</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Dažām kontaktpersonām nav norādīta e-pasta adrese."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Dažām kontaktpersonām nav norādīts tālruņa numurs."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Sūtīt e-pasta ziņojumu"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Sūtīt ziņojumu"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktpersonu izvēle"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Sūtīt"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nav kontaktpersonu"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="zero">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
- <item quantity="one">Atrasta <xliff:g id="COUNT">%d</xliff:g> kontaktpersona</item>
- <item quantity="other">Atrastas <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Visas"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Izlase"</string>
- <string name="callBack" msgid="5498224409038809224">"Atzvanīt"</string>
- <string name="callAgain" msgid="3197312117049874778">"Zvanīt vēlreiz"</string>
- <string name="returnCall" msgid="8171961914203617813">"Atzvanīt"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vai pievienot “<xliff:g id="EMAIL">%s</xliff:g>” kontaktpersonām?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontaktpersonas fotoattēls"</string>
- <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktpersonas(-ām)"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kontaktpersonu vārdi"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Netika atrasta neviena lietotne šīs darbības veikšanai."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Noklikšķiniet, lai atgrieztos iepriekšējā ekrānā."</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pievienojiet tālruņa numuru"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Pievienojiet e-pasta adresi"</string>
<string name="missing_app" msgid="1466111003546611387">"Netika atrasta neviena lietotne šīs darbības veikšanai."</string>
<string name="menu_share" msgid="943789700636542260">"Kopīgot"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Pievienot kontaktpersonām"</string>
- <string name="share_via" msgid="563121028023030093">"Kopīgot kontaktpersonu, izmantojot"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Izveidot grupu šajā kontā:"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Pievienot"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="zero">Kontaktpersonu kopīgošana, izmantojot</item>
+ <item quantity="one">Kontaktpersonu kopīgošana, izmantojot</item>
+ <item quantity="other">Kontaktpersonu kopīgošana, izmantojot</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Konta izvēle"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Iezīmes izveide"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Iezīmes pārdēvēšana"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Iezīmes nosaukums"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nosaukums"</string>
<string name="audio_chat" msgid="2535716629358298691">"Balss tērzēšana"</string>
<string name="video_chat" msgid="1872255818640336072">"Video tērzēšana"</string>
- <string name="connections" msgid="8098440723172028350">"Savienojumi"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Pievienot savienojumu"</string>
- <string name="recent" msgid="2659189233141493004">"Jaunākās"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nesen veiktie atj."</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktpersona"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> konts"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nevar rediģēt šajā lietotnē."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nevar rediģēt šajā ierīcē."</string>
<string name="take_photo" msgid="7496128293167402354">"Uzņemt fotoattēlu"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Uzņemt jaunu fotoattēlu"</string>
<string name="pick_photo" msgid="2129509985223564942">"Izvēlēties fotoattēlu"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Atlasīt jaunu fotoattēlu"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktpersonu saraksts tiek atjaunināts."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Notiek meklēšana..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Rādīt atlasi"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Rādīt visus"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Atlasīt visas"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Noņemt atlasi visam"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pievienot jaunu"</string>
- <string name="add_organization" msgid="7311893231158291197">"Pievienot organizāciju"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datums"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Grupas nosaukums"</string>
- <string name="change_photo" msgid="8530597935483526383">"Mainīt"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Galvenais foto"</string>
- <string name="description_star" msgid="2605854427360036550">"izlase"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Kontaktpersonu rediģēšana"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vai saistīt pašreizējo saturu ar atlasīto kontaktpersonu?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Iezīme"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Atcelt"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Atpakaļ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"aizvērt"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vai pāriet uz atlasītās kontaktpersonas rediģēšanu? Līdz šim ievadītā informācija tiks kopēta."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopēt uz manām kontaktpersonām"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Pievienot mapē Manas kontaktpersonas"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Katalogs <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Pielāgotas"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Iestatījumi"</string>
<string name="menu_settings" msgid="377929915873428211">"Iestatījumi"</string>
<string name="menu_help" msgid="1680178646764069976">"Palīdzība un atsauksmes"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Attēlošanas opcijas"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Tālruņa numurs"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Piev. kontaktpersonām"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pievienot kontaktpersonai"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Aizvērt"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Iekļaut gadu"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontaktpersona"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Notiek ielāde..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izveidot jaunu kontaktpersonu"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pievienot kontu"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importēt kontaktpersonas"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Jaunas grupas izveide"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Izveidot jaunu grupu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="zero"><xliff:g id="COUNT">%0$d</xliff:g> grupu</item>
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupa</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupas</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vai dzēst grupu <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Kontaktpersonas netiks dzēstas.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> personu grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> persona grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personas grupā <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="zero"><xliff:g id="COUNT_1">%1$d</xliff:g> personu</item>
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> persona</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personas</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importēt"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Izveidot jaunu…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Vai dzēst iezīmi “<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Kontaktpersonas netiks dzēstas.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Ievadiet kontaktpersonas vārdu, pirms saistāt to ar citu kontaktpersonu."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopēt starpliktuvē"</string>
<string name="set_default" msgid="4417505153468300351">"Iestatīt kā noklusējumu"</string>
<string name="clear_default" msgid="7193185801596678067">"Notīrīt noklusējuma iestatījumus"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Teksts ir nokopēts"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Vai atmest veiktās izmaiņas un beigt rediģēšanu?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Vai atmest izmaiņas?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Atmest"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Turpināt rediģēšanu"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> — <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Iestatīt savu profilu"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Rakstiet personas vārdu."</string>
- <string name="group_name_hint" msgid="238359485263401293">"Grupas nosaukums"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Atcelt"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vai atmest pielāgojumus?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Meklēt kontaktpersonas"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kontaktpersonu noņemšana"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mans vietējais profils"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mans <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profils"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Tiek attēlotas visas kontaktpersonas"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Nodrošinieties pret kontaktpersonu zudumu pat tālruņa nozaudēšanas gadījumā — sinhronizējiet informāciju ar tiešsaistes pakalpojumu."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konta pievienošana"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Jaunā kontaktinformācija netiks dublēta. Vai pievienot kontu, kurā tiek tiešsaistē dublēta kontaktinformācija?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Veltiet brīdi laika, lai pievienotu kontu un savas kontaktpersonas dublētu ar Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Jaunas kontaktpersonas tiks saglabātas kontā <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izvēlieties noklusējuma kontu, kurā saglabāt jaunās kontaktpersonas:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Pievienošana"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Jauns kontakts"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Rediģēšana"</string>
- <string name="keep_local" msgid="1258761699192993322">"Saglabāt vietēji"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Tikai skatīšana"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Rediģējamās kontaktpersonas izvēle"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Saistītās kontaktpersonas"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Pievienot"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Atsaistīt"</string>
<string name="add_account" msgid="8201790677994503186">"Pievienot kontu"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pievienot jaunu kontu"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Eksportēt datu bāzes failus"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"pievienot jaunu kontaktpersonu"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Izveidot jaunu kontaktpersonu"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Skatīt vairāk"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Skatīt mazāk"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Skatīt visu"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nesenie"</string>
<string name="about_card_title" msgid="2920942314212825637">"Par"</string>
- <string name="send_message" msgid="8938418965550543196">"Sūtīt ziņojumu"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Notiek personīgās kopijas izveide…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Vakar"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Notiek personīgā eksemplāra izveide..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Rīt"</string>
<string name="today" msgid="8041090779381781781">"Šodien"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Šodien plkst. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Rīt plkst. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Pasākums bez nosaukuma)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Iestatīt"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Tūlītējā ziņojumapmaiņa"</string>
@@ -277,66 +223,317 @@
<string name="header_website_entry" msgid="1411467850000824745">"Vietne"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Pasākums"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Saistība"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konts"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nosaukums"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-pasta adrese"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Tālrunis"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotoattēls"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Noklikšķiniet, lai izvērstu kontaktpersonu redaktoru."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Noklikšķiniet, lai sakļautu kontaktpersonu redaktoru."</string>
<string name="content_description_directions" msgid="2686791825798189335">"norādes uz atrašanās vietu"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Nesen saņemta īsziņa. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Noklikšķiniet, lai atbildētu."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Nesen saņemta īsziņa. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Noklikšķiniet, lai atbildētu."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ienākošs"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"izejošs"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"neatbildēts"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Nesen saņemts zvans. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Noklikšķiniet, lai atzvanītu."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Nesen saņemts zvans. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Noklikšķiniet, lai atzvanītu."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Jūs: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Funkcija Hangouts darbojas precīzāk, ja e-pasta vai tālruņa laukā ievadāt personas Hangouts identifikatoru."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Vairāk lauku"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Mainīt fotoattēlu"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Neizdevās atvērt redaktoru."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Tiks saglabāts šajā kontā:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Pašlaik notiek saglabāšana kontā <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Veiciet dubultskārienu, lai izvēlētos citu kontu."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="zero">Saistītas kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Saistītas kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Saistītas kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> saistītas kontaktpersonas"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Vairāk lauku"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Mainīt kontaktpersonas fotoattēlu"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pievienot kontaktpersonas fotoattēlu"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontaktpersonas fotoattēls"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Neizdevās atvērt redaktoru."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Tiks saglabāts šajā kontā:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Konta <xliff:g id="ACCOUNT">%s</xliff:g> kontaktinformāciju nevar rediģēt"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SAISTĪT KONTAKTPERSONAS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ATCELT"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> iespējami dublikāti</item>
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> iespējams dublikāts</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> iespējami dublikāti</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> saistītu kontaktpersonu</item>
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> saistīta kontaktpersona</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> saistītas kontaktpersonas</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="zero">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Šī kontaktpersona"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Iespējamie dublikāti"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Iespējams, šīs kontaktpersonas ir viena un tā pati persona. Varat tās apvienot vienā kontaktpersonā."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Saistītās kontaktpersonas"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"No jūsu kontiem"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Uzņemt fotoattēlu"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Visi fotoattēli"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Fotoattēla izvēle"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"No: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Dzēst: <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Dzēst: <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Dzēst: <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotoattēls no <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nav atlasīts."</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotoattēls no <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ir atlasīts."</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nav atzīmēts fotoattēls no nezināma konta"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Atzīmēts fotoattēls no nezināma konta"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktpersonu saraksts tiek atjaunināts, lai atainotu valodas maiņu.\n\nLūdzu, uzgaidiet..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Ieteikumi"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Jauns"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Atvērt navigācijas atvilktni"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Aizvērt navigācijas atvilktni"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Iezīme “<xliff:g id="LABEL_NAME">%s</xliff:g>”"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Iezīmes"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Konti"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Skatīt visu jūsu vēsturi"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Pasākumi un ziņojumi"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Pasākumi"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Ziņojumi"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Ieteikumi"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Kārtojiet kontaktpersonas un nodrošiniet to noderīgumu"</string>
+ <string name="undo" msgid="1425165101664071422">"Atsaukt"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Zvanīt: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Zvanīt uz mājas numuru"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Zvanīt uz mobilo tālruni"</string>
+ <string name="call_work" msgid="5328785911463744028">"Zvanīt uz darba numuru"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Zvanīt uz darba faksa numuru"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Zvanīt uz mājas faksa numuru"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Zvanīt uz peidžeru"</string>
+ <string name="call_other" msgid="8563753966926932052">"Zvanīt"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Zvanīt uz atzvana numuru"</string>
+ <string name="call_car" msgid="3280537320306436445">"Zvanīt uz automobili"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Zvanīt uz uzņēmuma galveno tālruņa numuru"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Zvanīt uz ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Zvanīt uz galveno tālruņa numuru"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Zvanīt uz faksu"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Zvanīt uz radioierīci"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Zvanīt uz teleksu"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Zvanīt uz teletaipu/surdotālruni"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Zvanīt uz darba mobilo tālruni"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Zvanīt uz darba peidžeru"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Zvanīt: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Zvanīt uz multiziņas numuru"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (zvanīt)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Sūtīt īsziņu: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Sūtīt īsziņu uz mājas tālruņa numuru"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Sūtīt īsziņu uz mobilo tālruni"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Sūtīt īsziņu uz darba numuru"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Sūtīt īsziņu uz darba faksa numuru"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Sūtīt īsziņu uz mājas faksa numuru"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Sūtīt īsziņu uz peidžeru"</string>
+ <string name="sms_other" msgid="806127844607642331">"Sūtīt īsziņu"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Sūtīt īsziņu uz atzvana numuru"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Sūtīt īsziņu uz automobiļa numuru"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Sūtīt īsziņu uz uzņēmuma galveno tālruņa numuru"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Sūtīt īsziņu uz ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Sūtīt īsziņu uz galveno tālruņa numuru"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Sūtīt īsziņu uz faksu"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Sūtīt īsziņu uz radioierīci"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Sūtīt īsziņu uz teleksa numuru"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Sūtīt īsziņu uz teletaipu/surdotālruni"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Sūtīt īsziņu uz darba mobilo tālruni"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Sūtīt īsziņu uz darba peidžeru"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Sūtīt īsziņu: <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Sūtīt multiziņu"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (sūtīt īsziņu)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Veikt videozvanu"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vai dzēst bieži lietotos kontaktus?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Tiks dzēsts bieži lietoto kontaktpersonu saraksts lietotnēs Kontaktpersonas un Tālrunis, un e-pasta lietotnēs no jauna tiks sākta adrešu preferenču saglabāšana."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Bieži lietoto kontaktu dzēšana..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Pieejama"</string>
+ <string name="status_away" msgid="1838861100379804730">"Prombūtnē"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Aizņemts"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Cits"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalogs"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Darba katalogs"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Visas kontaktpersonas"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Ātrā saziņa ar kontaktpersonu <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(nav vārda)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Bieža saziņa"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Visas kontaktpersonas ar tālruņa numuriem"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktpersonas darba profilā"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Skatīt atjaunināj."</string>
+ <string name="account_phone" msgid="7128032778471187553">"Ierīce"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Vārds"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Segvārds"</string>
+ <string name="name_given" msgid="4280790853455320619">"Vārds"</string>
+ <string name="name_family" msgid="7466985689626017037">"Uzvārds"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Uzruna"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Otrais vārds"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Uzruna"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Vārda izruna"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Vārda izruna"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Otrā vārda izruna"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Uzvārda izruna"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Tālrunis"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pasts"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adrese"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Tūlītējā ziņojumapmaiņa"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizācija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Attiecības"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Īpašs datums"</string>
+ <string name="sms" msgid="1756857139634224222">"Īsziņa"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adrese"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Uzņēmums"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Nosaukums"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Piezīmes"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Pielāgota"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Vietne"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Iezīmes"</string>
+ <string name="email_home" msgid="8573740658148184279">"Sūtīt e-pasta ziņojumu uz privāto adresi"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Sūtīt e-pasta ziņojumu uz mobilo tālruni"</string>
+ <string name="email_work" msgid="2807430017302722689">"Sūtīt e-pasta ziņojumu uz darba adresi"</string>
+ <string name="email_other" msgid="3454004077967657109">"Sūtīt e-pasta ziņojumu"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Sūtīt e-pasta ziņojumu: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Sūtīt e-pasta ziņojumu"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Iela"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Pilsēta"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Štats"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Pasta indekss"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Valsts"</string>
+ <string name="map_home" msgid="1243547733423343982">"Skatīt mājas adresi"</string>
+ <string name="map_work" msgid="1360474076921878088">"Skatīt darba adresi"</string>
+ <string name="map_other" msgid="3817820803587012641">"Skatīt adresi"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Skatīt adresi: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Tērzēt, izmantojot AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Tērzēt, izmantojot Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Tērzēt, izmantojot Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Tērzēt, izmantojot Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Tērzēt, izmantojot QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Tērzēt, izmantojot Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Tērzēt, izmantojot ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Tērzēt, izmantojot Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Tērzēt"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"dzēst"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Rādīt vairāk vārdu lauku"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Sakļaut nosaukumu laukus"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Rādīt vairāk vārdu izrunas lauku"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Sakļaut vārda izrunas laukus"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Izvērst"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Sakļaut"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Izvērsts"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Sakļauts"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Visas kontaktpersonas"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Atzīmēts ar zvaigznīti"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Pielāgot"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontaktpersona"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Citas kontaktpersonas"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Visas kontaktpersonas"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Noņemt sinhronizējamo grupu"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Pievienot sinhronizējamu grupu"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Vairāk grupu..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Pārtraucot grupas <xliff:g id="GROUP">%s</xliff:g> sinhronizāciju, tiks pārtraukta arī visu negrupēto kontaktpersonu sinhronizācija."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Notiek attēlojuma opciju saglabāšana..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Pielāgots skatījums"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Saglabāt importētās kontaktpersonas šeit:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM karte"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM karte <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="zero">%1$d kontaktpersonu</item>
+ <item quantity="one">%1$d kontaktpersona</item>
+ <item quantity="other">%1$d kontaktpersonas</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="zero"><xliff:g id="COUNT_2">^1</xliff:g> kontaktpersonu • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> kontaktpersona • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktpersonas • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf fails"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nav vienumu importēšanai"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Vai importēt kontaktpersonas no vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vai atcelt faila <xliff:g id="FILENAME">%s</xliff:g> importēšanu?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vai atcelt faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšanu?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nevarēja atcelt vCard f. import./eksp."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nezināma kļūda."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nevarēja atvērt failu <xliff:g id="FILE_NAME">%1$s</xliff:g>: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nevarēja startēt eksportētāju: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nav nevienas eksportējamas kontaktpersonas."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Jūs esat atspējojis obligātu atļauju."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksportēšanas laikā radās kļūda: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Ievades/izvades kļūda."</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Atmiņā nepietiek vietas. Iespējams, fails ir pārāk liels."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Šāds formāts netiek atbalstīts."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšana pabeigta"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktpersonu eksportēšana ir pabeigta."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktpersonu eksportēšana ir pabeigta. Lai kopīgotu kontaktpersonas, noklikšķiniet uz paziņojuma."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Pieskarieties, lai kopīgotu kontaktpersonas."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšana atcelta"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktpersonu datu eksportēšana"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktpersonu dati tiek eksportēti."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nevarēja iegūt informāciju no datu bāzes."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nav eksportējamu kontaktpersonu."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Netika pareizi startēts vCard veidotājs."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nevarēja eksportēt"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktpersonas dati netika eksportēti.\nIemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Notiek imp.: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nevarēja nolasīt vCard datus."</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard faila <xliff:g id="FILENAME">%s</xliff:g> importēšana ir pabeigta"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Faila <xliff:g id="FILENAME">%s</xliff:g> importēšana atcelta"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fails <xliff:g id="FILENAME">%s</xliff:g> tiks drīzumā importēts."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fails drīzumā tiks importēts."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tika noraidīts vCard faila importēšanas pieprasījums. Vēlāk mēģiniet vēlreiz."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktpersonas drīz tiks eksportētas."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tika noraidīts vCard faila eksportēšanas pieprasījums. Vēlāk mēģiniet vēlreiz."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktpersona"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Notiek vCard failu saglabāšana vietējā pagaidu atmiņā. Importēšana tiks sākta pēc neilga brīža."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nevarēja importēt vCard datus."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"No NFC saņ. kontaktinf."</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Notiek saglabāšana kešatmiņā"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importē <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportēt .vcf failā"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Kārtot pēc:"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Vārda un uzvārda izruna"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vienmēr rādīt"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Paslēpt tukšu lauku"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vārds"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Uzvārds"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Vārda formāts"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Vispirms rādīt vārdu"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Vispirms rādīt uzvārdu"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Konti"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Noklusējuma konts jaunām kontaktpersonām"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mana informācija"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Iestatiet savu profilu"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Par lietotni Kontaktpersonas"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Kopīgot izlases kontaktpersonas"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Kopīgot visas kontaktpersonas"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Neizdevās kopīgot kontaktpersonas."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kontaktpersonu eksportēšana"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontaktpersonu importēšana no:"</string>
+ <string name="share_error" msgid="948429331673358107">"Šo kontaktpersonu nevar kopīgot."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nav nevienas kopīgojamas kontaktpersonas."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Attēlojamās kontaktpersonas"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Attēlojamās kontaktpers."</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Skata pielāgošana"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Saglabāt"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Meklēt kontaktpersonas"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izlase"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importēt"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportēt"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloķētie numuri"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"izmantojot <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, izmantojot <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"pārtraukt meklēšanu"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Notīrīt meklēšanas lauku"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konts"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Vienmēr izmantot zvaniem"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Zvanīt ar piezīmi"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Ievadiet piezīmi, ko nosūtīt ar zvanu…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SŪTĪT un ZVANĪT"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> no <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versija"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Atklātā pirmkoda licences"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licences informācija par atklātā pirmkoda programmatūru"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Konfidencialitātes politika"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Pakalpojumu sniegšanas noteikumi"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Atklātā pirmkoda licences"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Neizdevās atvērt URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> atzīmēts"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nav atzīmēts"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Sākt videozvanu"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Dzēst"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Daudzpunkte"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Šī saīsne ir atspējota."</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktpersona tika noņemta."</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importēt"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Atlasiet kontaktpersonas"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM kartē nav nevienas kontaktpersonas."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontaktpersona jau ir jūsu sarakstā"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="zero">Importētas <xliff:g id="COUNT">%d</xliff:g> SIM kartes kontaktpersonas</item>
+ <item quantity="one">Importēta <xliff:g id="COUNT">%d</xliff:g> SIM kartes kontaktpersona</item>
+ <item quantity="other">Importētas <xliff:g id="COUNT">%d</xliff:g> SIM kartes kontaktpersonas</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Neizdevās importēt SIM kartes kontaktpersonas."</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importēt no SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Atcelt"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automātiskā sinhronizācija ir izslēgta. Pieskarieties, lai to ieslēgtu."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Nerādīt"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Konta sinhronizācija ir izslēgta. Pieskarieties, lai to ieslēgtu."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Vai ieslēgt automātisko sinhronizāciju?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Tīmeklī un jūsu ierīcēs tiks sinhronizētas visās lietotnēs un kontos veiktās izmaiņas, ne tikai Google kontaktpersonu izmaiņas."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ieslēgt"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nav savienojuma"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Rādīt vairāk"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartes importēšana pabeigta"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importēšana neizdevās"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nevarēja importēt kontaktpersonas no SIM kartes."</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Notiek SIM kartes importēšana"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Paziņojumi"</string>
</resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
deleted file mode 100644
index e7b8eb28a..000000000
--- a/res/values-mk-rMK/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контакти"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Прикажи го контактот"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Уреди го контактот"</string>
- <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Директно бирање"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Директна порака"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Избери кратенка за контакт"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Изберете број да се јавите"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Избери број да испратиш порака"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додајте на контакт"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Одбери контакт"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Создај нов контакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Со ѕвезда"</string>
- <string name="frequentList" msgid="7154768136473953056">"Често"</string>
- <string name="strequentList" msgid="5640192862059373511">"Омилени"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Детали на контактот"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Уреди контакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Создај контакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Уреди група"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Создај група"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"За"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ажурирања"</string>
- <string name="searchHint" msgid="8482945356247760701">"Пребарај контакти"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Прикажи контакт"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Додај во омилени"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Отстрани од омилени"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Отстрането од омилени"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Додадено во омилени"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Уреди"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Промени фотографија"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Постави на почетниот екран"</string>
- <string name="menu_call" msgid="3992595586042260618">"Повикај контакт"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Испрати текстуална порака на контакт"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Раздели"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Уреди"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Избриши"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Додај контакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додај група"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Да се раздели контактот на повеќе контакти?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раздели"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Дали сакате да ги зачувате измените што веќе ги направивте и да го разделите контактот на повеќе контакти?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Зачувај и раздели"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Дали сакате да ги зачувате измените што веќе ги направивте и да ги поврзете со избраниот контакт?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Зачувај и поврзи"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Поврзи"</string>
- <string name="menu_save" msgid="1727844363591825909">"Зачувај"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Поврзи контакти"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изберете го контактот што сакате да го поврзете со <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Прикажи ги сите контакти"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Препорачани контакти"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сите контакти"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактите се поврзани"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">Контактот е избришан</item>
- <item quantity="other">Контактите се избришани</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Постави мелодија"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Сите повици кон говорна пошта"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Контактите од сметките само за читање не може да се избришат, но може да се скријат."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Сокриј"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Контактот што ќе се избрише содржи детали од повеќе сметки. Деталите од сметките само за читање ќе се скријат, но нема да се избришат."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Ви требаат најмалку два избрани контакти за да се изврши поврзување."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Да се поврзат избраните контакти?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Поврзи"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Да се избрише овој контакт?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Да се избришат избраните контакти?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Контактите од сметките само за читање не може да се избришат, но може да се скријат."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Контактите што ќе се избришат содржат детали од повеќе сметки. Деталите од сметките само за читање ќе се скријат, но нема да се избришат."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Со бришење на овој контакт ќе се избришат детали од повеќе сметки."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Да се избрише овој контакт?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Избриши"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Отфрли ги промените"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Контактот не постои."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контактот е додаден на Почетен екран."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контактот <xliff:g id="NAME">%s</xliff:g> е додаден на Почетен екран."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Создај нов контакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Создај нов контакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Организација"</item>
- <item msgid="7196592230748086755">"Забелешка"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Не се достапни слики на таблетот."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Не се достапни слики на телефонот."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фотографија за контакт"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Приспособи име на етикета"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Испрати повици директно на говорна пошта"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Отстрани фотографија"</string>
- <string name="noContacts" msgid="4955659076981974652">"Нема контакти"</string>
- <string name="noGroups" msgid="8614664663561385253">"Нема групи."</string>
- <string name="noAccounts" msgid="7768267764545265909">"За да создадете групи ви треба сметка."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Нема луѓе во оваа група."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"За да додадете неколку, уредете ја групата."</string>
- <string name="savingContact" msgid="4075751076741924939">"Контактот се зачувува..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Контактот е зачуван"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактите се раздвоени"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не можеа да се зачуваат промените на контактот."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не може да се прекине врската со контактот."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не можеше да се поврзе контактот."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Грешка при зачувување на контактот."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не можеше да се зачуваат промените на фотографијата на контактот."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Групата е зачувана."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не можеа да се зачуваат промените на групата."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт со телефонски број</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакти со телефонски броеви</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нема контакти со телефонски броеви"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> пронајден</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> пронајдени</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Нема контакти"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> пронајден</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> пронајдени</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Сите"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Омилени"</string>
- <string name="callBack" msgid="5498224409038809224">"Повикај назад"</string>
- <string name="callAgain" msgid="3197312117049874778">"Повикај повторно"</string>
- <string name="returnCall" msgid="8171961914203617813">"Врати повик"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Додај „<xliff:g id="EMAIL">%s</xliff:g>“ во контакти?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"фотографија за контакт"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плус"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакти"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Имиња на вашите контакти"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Не е пронајдена апликација да се справи со ова дејство."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Кликнете за да се вратите на претходниот екран"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Додајте телефонски број"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Додајте е-пошта"</string>
- <string name="missing_app" msgid="1466111003546611387">"Не е пронајдена апликација да се справи со ова дејство."</string>
- <string name="menu_share" msgid="943789700636542260">"Сподели"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Додај во контакти"</string>
- <string name="share_via" msgid="563121028023030093">"Сподели контакт преку"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Создај група под сметка"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Гласовен разговор"</string>
- <string name="video_chat" msgid="1872255818640336072">"Видео разговор"</string>
- <string name="connections" msgid="8098440723172028350">"Врски"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Додај врска"</string>
- <string name="recent" msgid="2659189233141493004">"Скорешни"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Скорешни ажурирања"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> контакт"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Сметка на <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Не се уредува од оваа апликација."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Не може да се уреди на овој уред."</string>
- <string name="take_photo" msgid="7496128293167402354">"Фотографирај"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Направи нова фотографија"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Избери фотографија"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Избери нова фотографија"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Списокот со контакти се ажурира."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Се пребарува..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Прикажи ги избраните"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Прикажи ги сите"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Избери ги сите"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Поништи избор на сѐ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Додај нов запис"</string>
- <string name="add_organization" msgid="7311893231158291197">"Додај организација"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Датум"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Име на група"</string>
- <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Пр. фотографија"</string>
- <string name="description_star" msgid="2605854427360036550">"омилено"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Уреди контакт"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Да се поврзе тековниот контакт со избраниот контакт?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се префрли на уредување на избраниот контакт? Информациите што ги внесовте досега ќе бидат копирани."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Копирај во Мои контакти"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Додај во Мои контакти"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Адресар <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Прилагодено"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Поставки"</string>
- <string name="menu_settings" msgid="377929915873428211">"Поставки"</string>
- <string name="menu_help" msgid="1680178646764069976">"Помош и повратни информации"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Опции за приказ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Телефонски број"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Додај во контакти"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Додај во контакт"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Затвори"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Вклучи година"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Се вчитува..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Создај нов контакт"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Додај сметка"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Увези контакти"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Создај нова група"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Создај нова група"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Избриши ја групата „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контактите нема да се избришат.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> лице од <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> лица од <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> лице</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> лица</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Впишете го името на контактот пред да го поврзете со друг."</string>
- <string name="copy_text" msgid="3257145021583508761">"Копирај во клип-табла"</string>
- <string name="set_default" msgid="4417505153468300351">"Постави стандарден метод"</string>
- <string name="clear_default" msgid="7193185801596678067">"Исчисти стандарден метод"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Текстот е копиран"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Дали да се отфрлат промените и да се прекине уредувањето?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отфрли"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Продолжи со уредување"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Постави мој профил"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Впиши име на лице"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Име на групата"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Мој локален профил"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Мој профил на <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Прикажување на сите контакти"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Чувајте ги вашите контакти безбедни дури и ако го изгубите вашиот телефон: синхронизирајте се со онлајн услуга."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додај сметка"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Нема да се направи резервна копија на вашиот нов контакт. Ќе додадете сметка што прави онлајн-резервна копија на контакти?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новите контакти ќе се зачуваат на <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изберете стандардна сметка за новите контакти:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Додај нов контакт"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Уреди контакт"</string>
- <string name="keep_local" msgid="1258761699192993322">"Задржи локално"</string>
- <string name="add_account" msgid="8201790677994503186">"Додај сметка"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Додај нова сметка"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Извези датотеки од база на податоци"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"додај нов контакт"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Погледни повеќе"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Погледни помалку"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Погледни ги сите"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Неодамнешни"</string>
- <string name="about_card_title" msgid="2920942314212825637">"За"</string>
- <string name="send_message" msgid="8938418965550543196">"Испрати порака"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Се создава лична копија..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Вчера"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Утре"</string>
- <string name="today" msgid="8041090779381781781">"Денес"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Денес во <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Утре во <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Неименуван настан)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Постави"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Организација"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Прекар"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Белешка"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Вебсајт"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Настан"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Врска"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Сметка"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-пошта"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Фотографија"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликнете за да го проширите уредникот за контакти."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликнете за да го соберете уредникот за контакти."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"насоки до локација"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"неодамнешна SMS-порака. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кликни за да одговориш"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"дојдовен"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"појдовен"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропуштен"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"неодамнешен повик. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. кликни за да повикаш назад"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Вие: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts работат подобро кога во полето за е-пошта или за телефон ќе го внесете идентификаторот на Hangouts за лицето."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Повеќе полиња"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промени фотографија"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не успеа да го отвори уредникот."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Се зачувува на"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Моментално се зачувува на <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Допрете двапати за да изберете друга сметка."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Поврзан контакт (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Поврзани контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> поврзани контакти"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ПОВРЗИ КОНТАКТИ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЖИ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> можен дупликат</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> можни дупликати</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> поврзан контакт</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> поврзани контакти</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Овој контакт"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Можни дупликати"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Овие контакти можеби се на истото лице. Може да ги споите во еден контакт."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Поврзани контакти"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Од вашите сметки"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Фотографирај"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Сите фотографии"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Избери фотографија"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Од <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Избриши <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фотографијата од <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>не е избрана"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Фотографијата од <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>е избрана"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Не е избрана фотографија од непозната сметка"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Избрана е фотографија од непозната сметка"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Списокот со контакти се ажурира за да ја одрази промената на јазикот.\n\nПочекајте..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани броеви"</string>
-</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
new file mode 100644
index 000000000..b7b28dbcd
--- /dev/null
+++ b/res/values-mk/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Додајте контакт"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Директно бирање"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Директна порака"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Избирање контакт"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додајте на контакт"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Одбери контакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Изберете"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Создај нов контакт"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Пребарај контакти"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Додај во омилени"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Отстрани од омилени"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Отстрането од омилени"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Додадено во омилени"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Измени"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Промени фотографија"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Создај кратенка"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Раздели"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Отстрани контакти"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Преименувај ја етикетата"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Избриши ја етикетата"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Додај контакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Избери контакти"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додај контакти"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Отстрани од етикетата"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Создај етикета"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Да се раздели контактот на повеќе контакти?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раздели"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Дали сакате да ги зачувате измените што веќе ги направивте и да го разделите контактот на повеќе контакти?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Зачувај и раздели"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Дали сакате да ги зачувате измените што веќе ги направивте и да ги поврзете со избраниот контакт?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Зачувај и поврзи"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Се поврзуваат"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Се раздвојуваат"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Поврзи"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Прикажи поврзани контакти"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Зачувај"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Поврзи контакти"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изберете го контактот што сакате да го поврзете со <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Препорачани контакти"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сите контакти"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> е поврзан"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Контактите се поврзани"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> е избришан"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> и <xliff:g id="NAME_1">%2$s</xliff:g> се избришани"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… се избришани"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">Контактот е избришан</item>
+ <item quantity="other">Контактите се избришани</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакти</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакти · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Од Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Од <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Постави мелодија"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Пренасочување на говорна пошта"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ненасочување на говорна пошта"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Контактов е само за читање. Не може да се избрише, но може да се сокрие."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Сокријте контакт"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Сметките само за читање во контактов ќе се сокријат, но нема да се избришат."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Да се избрише овој контакт?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Да се избришат избраните контакти?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Контактите од сметките само за читање не може да се избришат, но може да се скријат."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Контактите што ќе се избришат содржат детали од повеќе сметки. Деталите од сметките само за читање ќе се скријат, но нема да се избришат."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Со бришење на овој контакт ќе се избришат детали од повеќе сметки."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Да се избрише овој контакт?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Избриши"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Контактот не постои."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контактот е додаден на Почетен екран."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контактот <xliff:g id="NAME">%s</xliff:g> е додаден на Почетен екран."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Не се достапни слики на уредот."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фотографија за контакт"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Приспособи име на етикета"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Отстрани фотографија"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Списокот со контакти е празен"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Нема контакти со етикетава"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Нема контакти во сметкава"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Списокот со контакти е празен"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> е зачуван"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Контактот е зачуван"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Контактите се раздвоени"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не можеше да се зачуваат промените на контактот"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не можеше да се прекине врската со контактот"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не можеше да се поврзе контактот"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при зачувување на контактот"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не можеше да се зачуваат промените на фотографијата на контактот"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Етикетата не успеа да се вчита"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Етикетата е избришана"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Етикетата е создадена"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Етикетата не може да се создаде"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Етикетата е ажурирана"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Отстрането од етикетата"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додадено на етикетата"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не можеше да се зачуваат промените на етикетата"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Етикетата веќе постои"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Некои од контактите немаат е-пошта."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Некои од контактите немаат телефонски број."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Испратете е-пошта"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Испратете порака"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Изберете контакти"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Испрати"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Нема контакти"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Додај „<xliff:g id="EMAIL">%s</xliff:g>“ во контакти?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Имиња на вашите контакти"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Кликнете за да се вратите на претходниот екран"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Додајте телефонски број"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Додајте е-пошта"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Не е пронајдена апликација да се справи со ова дејство."</string>
+ <string name="menu_share" msgid="943789700636542260">"Сподели"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Додај во контакти"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Додај"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Споделете контакт преку</item>
+ <item quantity="other">Споделете контакти преку</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Изберете сметка"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Создајте етикета"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Преименувајте ја етикетата"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Име на етикетата"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име на етикета"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Гласовен разговор"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Видео разговор"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> контакт"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Сметка на <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Фотографирај"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Направи нова фотографија"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Избери фотографија"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Избери нова фотографија"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Се пребарува..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Датум"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Етикета"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Откажи"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затвори"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Да се префрли на уредување на избраниот контакт? Информациите што ги внесовте досега ќе бидат копирани."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Адресар <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Поставки"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Поставки"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Помош и повратни информации"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Телефонски број"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Додај во контакти"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Затвори"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Вклучи година"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Додај сметка"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Увези"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Создајте нова…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Да се избрише етикетата „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контактите нема да се избришат.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Впишете го името на контактот пред да го поврзете со друг."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Копирај во клип-табла"</string>
+ <string name="set_default" msgid="4417505153468300351">"Постави стандарден метод"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Исчисти стандарден метод"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Текстот е копиран"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Да се отфрлат промените?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отфрли"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Откажи"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Да се отфрлат приспособувањата?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Пребарајте контакти"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Отстрани контакти"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Мој локален профил"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Мој профил на <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Одвојте малку време за додавање сметка за бекап на вашите контакти на Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новите контакти ќе се зачуваат на <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изберете стандардна сметка за новите контакти:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Создај нов контакт"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Измени контакт"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Само приказ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Изберете контакт за уредување"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Поврзани контакти"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Додајте"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Прекинете врска"</string>
+ <string name="add_account" msgid="8201790677994503186">"Додај сметка"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Додај нова сметка"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Извези датотеки од база на податоци"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Создај нов контакт"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Погледни повеќе"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Погледни помалку"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Неодамнешни"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"За"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Се создава лична копија..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Утре"</string>
+ <string name="today" msgid="8041090779381781781">"Денес"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Денес во <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Утре во <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Неименуван настан)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Постави"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Организација"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Прекар"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Белешка"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Вебсајт"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Настан"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Врска"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-пошта"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"насоки до локација"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"неодамнешна SMS-порака. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. кликни за да одговориш"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"дојдовен"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"појдовен"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропуштен"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"неодамнешен повик. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. кликни за да повикаш назад"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Вие: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Повеќе полиња"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Променете фотографија за контакт"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додајте фотографија за контакт"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Фотографија за контакт"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Не успеа да го отвори уредникот."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Се зачувува на"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Инфо. за контакт од <xliff:g id="ACCOUNT">%s</xliff:g> не може да се уредуваат"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ПОВРЗИ КОНТАКТИ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЖИ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Овој контакт"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Можни дупликати"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Овие контакти можеби се на истото лице. Може да ги споите во еден контакт."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Избриши <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Предлози"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Отворете фиока за навигација"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Затворете фиока за навигација"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Етикета <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Етикети"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Сметки"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Видете ја заедничката историја"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Настани и пораки"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Настани"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Пораки"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Предлози"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Чувајте ги контактите организирани и корисни"</string>
+ <string name="undo" msgid="1425165101664071422">"Вратете"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Повикајте <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Повикајте домашен број"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Повикајте мобилен"</string>
+ <string name="call_work" msgid="5328785911463744028">"Повикајте службен број"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Повикајте факс на работа"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Повикајте факс дома"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Повикајте пејџер"</string>
+ <string name="call_other" msgid="8563753966926932052">"Повикајте"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Воспоставете повратен повик"</string>
+ <string name="call_car" msgid="3280537320306436445">"Повикајте автомобил"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Повикајте главен број во компанија"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Повикајте ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Повикајте главен број"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Повикајте факс"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Повикајте радио"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Повикајте телекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Повикајте TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Повикајте службен мобилен"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Повикајте службен пејџер"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Повикајте <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Повикајте MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Повик)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Испратете SMS на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Испратете SMS дома"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Испратете SMS на мобилен"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Испратете SMS на работа"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Испратете SMS на факс на работа"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Испратете SMS на факс дома"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Испратете SMS на пејџер"</string>
+ <string name="sms_other" msgid="806127844607642331">"Испратете SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Испратете SMS за повратен повик"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Испратете SMS за автомобил"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Испратете SMS на главен број во компанија"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Испратете SMS на ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Испратете SMS на главен број"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Испратете SMS на факс"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Испратете SMS на радио"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Испратете SMS на телекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Испратете SMS на TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Испратете SMS на службен мобилен"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Испратете SMS на службен пејџер"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Испратете SMS на <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Испратете SMS на MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Порака)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Оствари видеоповик"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Да се исчистат често контактираните?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Ќе го исчистите списокот на често контактирани лица во апликациите „Контакти“ и „Телефон“ и ќе ги принудите апликациите за е-пошта одново да ги дознаат вашите претпочитани поставки за обраќање."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Се чистат често контактираните…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Достапен"</string>
+ <string name="status_away" msgid="1838861100379804730">"Отсутен"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Зафатен"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Друго"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Адресар"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Работен адресар"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Сите контакти"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Брз контакт за <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Без име)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често контактирани"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Сите контакти со телефонски броеви"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти на службениот профил"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Прикажи ажурирања"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Уред"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Прекар"</string>
+ <string name="name_given" msgid="4280790853455320619">"Име"</string>
+ <string name="name_family" msgid="7466985689626017037">"Презиме"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Претставка на име"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Татково име"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Наставка на име"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Фонетско име"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Фонетско име"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Фонетско татково име"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Фонетско презиме"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-пошта"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адреса"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Организација"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Врска"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Посебен датум"</string>
+ <string name="sms" msgid="1756857139634224222">"Текстуална порака"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адреса"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компанија"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Наслов"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Белешки"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Приспособено"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Веб-сајт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Етикети"</string>
+ <string name="email_home" msgid="8573740658148184279">"Домашна е-пошта"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Мобилна е-пошта"</string>
+ <string name="email_work" msgid="2807430017302722689">"Службена е-пошта"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-пошта"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Испратете е-пошта на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-пошта"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Град"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Држава"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Поштенски број"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Земја"</string>
+ <string name="map_home" msgid="1243547733423343982">"Прикажи домашна адреса"</string>
+ <string name="map_work" msgid="1360474076921878088">"Прикажи службена адреса"</string>
+ <string name="map_other" msgid="3817820803587012641">"Прикажи адреса"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Прикажи ја адресата на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Разговор на AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Разговор на Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Разговор на Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Разговор на Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Разговор на QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Разговор на Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Разговор на ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Разговор на Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Разговор"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"избриши"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Прикажи повеќе полиња за име"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Собери ги полињата за име"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Прикажи повеќе полиња за фонетско име"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Собери ги полињата за фонетско име"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Прошири"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Собери"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Проширени"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Собрани"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Сите контакти"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Со ѕвезда"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Приспособи"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Сите други контакти"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Сите контакти"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Отстрани синхронизирана група"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Додај синхронизирана група"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Повеќе групи…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Со отстранувањето на „<xliff:g id="GROUP">%s</xliff:g>“ од синхронизирање, ќе се отстранат и сите негрупирани контакти од синхронизирање."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Се зачувуваат опциите на екранот…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Приспособен приказ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Зачувајте ги увезените контакти на:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-картичка"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d контакт</item>
+ <item quantity="other">%1$d контакти</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контакти • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf датотека"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Нема ништо за увезување"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Да се увезат контакти од vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Да се откаже увозот на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Да се откаже извозот на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не може да се откаже увоз/извоз на vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Непозната грешка."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ не можеше да се отвори: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не можеше да се вклучи извозникот: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нема контакт на кој може да се изврши извоз."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Оневозможивте потребна дозвола."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Настанаи грешка при извоз: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Нема доволно меморија. Датотеката е можеби премногу голема."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматот не е поддржан."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Заврши извозот на <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Извозот на контакти заврши."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Извозот на контакти заврши. Кликнете на известувањето за споделување контакти."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Допрете за споделување контакти."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Извозот на <xliff:g id="FILENAME">%s</xliff:g> е откажан."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Се врши извоз на податоци за контакт"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Во моментов се врши извоз на податоците за контакт."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Не можеше да добие информации за базата на податоци."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нема контакти за извезување."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Композиторот на vCard не започна правилно."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не е можен извоз"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Извозот на податоците за контакт не се изврши.\nПричина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Се врши увоз на <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Не можеше да прочита податоци од vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Заврши увозот на vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Увезувањето на <xliff:g id="FILENAME">%s</xliff:g> е откажано"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Ќе се изврши увоз на <xliff:g id="FILENAME">%s</xliff:g> наскоро."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ќе се изврши увоз на датотеката наскоро."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Барањето за увоз на vCard беше одбиено. Обидете се повторно подоцна."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Наскоро ќе се изврши извоз на контактите."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Барањето за извоз на vCard беше одбиено. Обидете се повторно подоцна."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Се кешираат vCard(s) во локалната привремена меморија. Реалниот увоз ќе започне наскоро."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Не можеше да се изврши увоз на vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт од NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширање"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Се врши увоз на <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Извези во датотеката .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Подредете по"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Фонетско име"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Секогаш прикажувај"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Сокриј ако е празно"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Име"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Презиме"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Формат на име"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Прво името"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Прво презимето"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Сметки"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Стандардна сметка за новите контакти"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Мои информации"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Поставете го профилот"</string>
+ <string name="setting_about" msgid="7014388749752042863">"За „Контакти“"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделете омилени контакти"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Споделете ги сите контакти"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Споделувањето на контактите не успеа."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Извоз на контакти"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Увезете контакти од"</string>
+ <string name="share_error" msgid="948429331673358107">"Контактов не може да се сподели."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контакти за споделување."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за прикажување"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за прикажување"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Приспособување на приказ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Зачувај"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Пребарајте контакти"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омилени"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Изврши увоз"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Изврши извоз"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани броеви"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"од <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"на <xliff:g id="DATE">%1$s</xliff:g> од <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"сопри пребарување"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Исчисти го полето за пребарување"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Сметка"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Секогаш користи го ова за повици"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Повикајте со белешка"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Напишете белешка за да ја испратите со повикот…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ИСПРАТИ И ПОВИКАЈ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Верзија"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Лиценци за софтвер со отворен код"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Детали за лиценцата за софтвер со отворен код"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Политика за приватност"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Услови на користење"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Лиценци за софтвер со отворен код"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Линкот не успеа да се отвори."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> е штиклирано"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> не е штиклирано"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Воспостави видеоповик"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Избриши"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Три точки"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин. <xliff:g id="SECONDS">%2$s</xliff:g> сек."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> час <xliff:g id="MINUTES_1">%2$s</xliff:g> мин. <xliff:g id="SECONDS">%3$s</xliff:g> сек."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Кратенкава е оневозможена"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контактот е отстранет"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Увези"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Изберете контакти"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Нема контакти на вашата SIM-картичка"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Контактот веќе постои во списокот."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Увезен е <xliff:g id="COUNT">%d</xliff:g> контакт од SIM</item>
+ <item quantity="other">Увезени се <xliff:g id="COUNT">%d</xliff:g> контакти од SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не успеа увезувањето контакти од SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Увоз од SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Откажи"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автоматското синхронизирање е исклучено. Допрете за да го вклучите."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Отфрлете"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Автоматското синхронизирање е исклучено. Допрете за да го вклучите."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Да се вклучи автоматско синхронизирање?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Промените што ги правите на сите апликации и сметки, не само на „Контакти на Google“, ќе се ажурираат и на интернет и на вашите уреди."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Вклучи"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Нема мрежа"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Прикажи повеќе"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Увезувањето на SIM-картичката заврши"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Увезувањето не успеа"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не можеше да се увезат контакти од SIM-картичката"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Се увезува SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Известувања"</string>
+</resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
deleted file mode 100644
index 614747f4b..000000000
--- a/res/values-ml-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"വിലാസങ്ങൾ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"വിലാസങ്ങൾ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"കോൺടാക്റ്റ് കാണുക"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"കോൺടാ‌ക്‌റ്റ് എഡിറ്റുചെയ്യുക"</string>
- <string name="contactsList" msgid="8661624236494819731">"വിലാസങ്ങൾ"</string>
- <string name="shortcutContact" msgid="749243779392912958">"കോൺടാക്റ്റ്"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"നേരിട്ടുള്ള ഡയൽ"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"സന്ദേശങ്ങൾ നേരിട്ട്"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"കോൺടാക്റ്റ് ഷോട്ട്‌കട്ട് തിരഞ്ഞെടുക്കൂ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"വിളിക്കാൻ ഒരു നമ്പർ തിരഞ്ഞെടുക്കുക"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"സന്ദേശമയക്കാനുള്ള നമ്പർ എടുക്കൂ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"കോണ്‍‌ടാക്റ്റിലേക്ക് ചേര്‍ക്കുക"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കൂ"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
- <string name="starredList" msgid="4817256136413959463">"നക്ഷത്രമിട്ടവ"</string>
- <string name="frequentList" msgid="7154768136473953056">"പതിവ് കോൺടാക്റ്റുകൾ"</string>
- <string name="strequentList" msgid="5640192862059373511">"പ്രിയപ്പെട്ടവർ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"കോൺടാക്റ്റ് വിശദാംശങ്ങൾ"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"കോൺടാ‌ക്‌റ്റ് തിരുത്തുക"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"കോൺടാക്റ്റ് സൃഷ്‌ടിക്കുക"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ഗ്രൂപ്പ് എഡിറ്റുചെയ്യുക"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ഗ്രൂപ്പ് സൃഷ്ടിക്കുക"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"ആമുഖം"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"അപ്‌ഡേറ്റുകൾ"</string>
- <string name="searchHint" msgid="8482945356247760701">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"കോൺടാക്റ്റ് കാണുക"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർക്കുക"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"പ്രിയപ്പെട്ടവയിൽ നിന്നും നീക്കംചെയ്യുക"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"പ്രിയപ്പെട്ടവയിൽ നിന്നും നീക്കംചെയ്‌തു"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"എഡിറ്റുചെയ്യുക"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"ഇല്ലാതാക്കുക"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ഫോട്ടോ മാറ്റുക"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ഹോം സ്‌ക്രീനിൽ സ്ഥാപിക്കുക"</string>
- <string name="menu_call" msgid="3992595586042260618">"കോൺടാക്റ്റിനെ വിളിക്കുക"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"കോൺടാക്റ്റിന് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"അൺലിങ്കുചെയ്യുക"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"എഡിറ്റുചെയ്യുക"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ഇല്ലാതാക്കുക"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"കോണ്‍‌ടാക്റ്റ് ചേര്‍‌ക്കുക"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ഗ്രൂപ്പ് ചേർക്കുക"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ഈ കോൺടാക്റ്റ് ഒന്നിലധികം കോൺടാക്റ്റുകളായി അൺലിങ്കുചെയ്യണോ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"അൺലിങ്കുചെയ്യുക"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"നിങ്ങൾ ഇതിനകം വരുത്തിയിട്ടുള്ള മാറ്റങ്ങൾ സംരക്ഷിക്കാനും ഒന്നിലധികം കോൺടാക്റ്റുകളായി ഈ കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനും താൽപ്പര്യപ്പെടുന്നുണ്ടോ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"സംരക്ഷിച്ച് അൺലിങ്കുചെയ്യുക"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"നിങ്ങൾ ഇതിനകം വരുത്തിയിട്ടുള്ള മാറ്റങ്ങൾ സംരക്ഷിക്കാനും തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുമായി ലിങ്കുചെയ്യാനും താൽപ്പര്യപ്പെടുന്നുണ്ടോ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"സംരക്ഷിച്ച് ലിങ്കുചെയ്യുക"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"ലിങ്ക്"</string>
- <string name="menu_save" msgid="1727844363591825909">"സംരക്ഷിക്കുക"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> എന്നയാളുമായി ലിങ്കുചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്ന കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കുക:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"എല്ലാ കോൺടാക്റ്റുകളും കാണിക്കുക"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"നിര്‍ദ്ദേശിക്കുന്ന കോണ്‍ടാക്റ്റുകള്‍"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കി</item>
- <item quantity="one">കോൺടാക്റ്റ് ഇല്ലാതാക്കി</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"റിംഗ്‌ടോൺ സജ്ജമാക്കുക"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"എല്ലാം വോയ്‌സ്‌മെയിലിലേക്ക്"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"നിങ്ങളുടെ വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കാൻ കഴിയില്ല, എന്നാൽ അവയെ മറയ്ക്കാവുന്നതാണ്."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"മറയ്ക്കുക"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ഇല്ലാതാക്കേണ്ട കോൺടാക്റ്റിൽ ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ അടങ്ങിയിരിക്കുന്നു. വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ മറയ്‌ക്കുമെങ്കിലും, അവ ഇല്ലാതാക്കില്ല."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ലിങ്കുചെയ്യുന്നതിന് രണ്ട് കോൺടാക്‌റ്റുകളെങ്കിലും തിരഞ്ഞെടുക്കണം."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുകൾ ലിങ്കുചെയ്യണോ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"ലിങ്കുചെയ്യുക"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കണോ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"തിരഞ്ഞെടുത്ത കോൺടാക്‌റ്റുകൾ ഇല്ലാതാക്കണോ?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"നിങ്ങളുടെ വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കാൻ കഴിയില്ല, എന്നാൽ അവയെ മറയ്ക്കാവുന്നതാണ്."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ഇല്ലാതാക്കേണ്ട കോൺടാക്റ്റുകളിൽ ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ അടങ്ങിയിരിക്കുന്നു. വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ മറയ്‌ക്കുമെങ്കിലും, അവ ഇല്ലാതാക്കില്ല."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കുന്നതുവഴി ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ ഇല്ലാതാക്കപ്പെടും."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കണോ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ഇല്ലാതാക്കുക"</string>
- <string name="menu_discard" msgid="6854657936970228164">"മാറ്റങ്ങള്‍‌ നിരാകരിക്കുക"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"കോൺടാക്റ്റ് നിലവിലില്ല."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ഹോം സ്ക്രീനിലേക്ക് കോൺടാക്റ്റ് ചേർത്തു."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"ഹോം സ്ക്രീനിലേക്ക് <xliff:g id="NAME">%s</xliff:g> ചേർത്തു."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ഓര്‍ഗനൈസേഷന്‍"</item>
- <item msgid="7196592230748086755">"കുറിപ്പ്"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ടാബ്‌ലെറ്റിൽ ചിത്രങ്ങളൊന്നും ലഭ്യമല്ല."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ഫോണിൽ ചിത്രങ്ങളൊന്നും ലഭ്യമല്ല."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"കോൺടാക്‌‌റ്റിന്റെ ഫോട്ടോ"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"ഇഷ്‌ടാനുസൃത ലേബൽ പേര്"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"കോളുകൾ നേരിട്ട് വോയ്‌സ്‌മെയിലിലേക്ക് അയയ്‌ക്കുക"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ഫോട്ടോ നീക്കംചെയ്യുക"</string>
- <string name="noContacts" msgid="4955659076981974652">"കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
- <string name="noGroups" msgid="8614664663561385253">"ഗ്രൂപ്പുകൾ ഒന്നുമില്ല."</string>
- <string name="noAccounts" msgid="7768267764545265909">"ഗ്രൂപ്പുകൾ സൃഷ്‌ടിക്കാൻ നിങ്ങൾക്ക് ഒരു അക്കൗണ്ട് ആവശ്യമാണ്."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ഈ ഗ്രൂപ്പിൽ ആരുമില്ല."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"കുറച്ചുപേരെ ചേർക്കാൻ ഗ്രൂപ്പ് എഡിറ്റുചെയ്യുക."</string>
- <string name="savingContact" msgid="4075751076741924939">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നു…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"കോൺടാക്റ്റ് സംരക്ഷിച്ചു"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"കോൺടാക്റ്റുകൾ അൺലിങ്കുചെയ്തു"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"കോൺടാക്റ്റ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനായില്ല."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"കോൺടാക്റ്റ് ലിങ്കുചെയ്യാൻ കഴിഞ്ഞില്ല."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നതില്‍ പിശക്"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"കോൺടാക്റ്റ് ഫോട്ടോ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ഗ്രൂപ്പ് സംരക്ഷിച്ചു."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ഗ്രൂപ്പ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">ഫോൺ നമ്പറുള്ള <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്‌റ്റുകൾ</item>
- <item quantity="one">ഫോൺ നമ്പറുള്ള ഒരു കോൺടാക്റ്റ്</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ഫോൺ നമ്പറുകളോട് കൂടിയ കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> എണ്ണം കണ്ടെത്തി</item>
- <item quantity="one">ഒന്ന് കണ്ടെത്തി</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> എണ്ണം കണ്ടെത്തി</item>
- <item quantity="one">ഒന്ന് കണ്ടെത്തി</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"എല്ലാം"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"പ്രിയപ്പെട്ടവ"</string>
- <string name="callBack" msgid="5498224409038809224">"തിരിച്ചുവിളിക്കുക"</string>
- <string name="callAgain" msgid="3197312117049874778">"വീണ്ടും വിളിക്കുക"</string>
- <string name="returnCall" msgid="8171961914203617813">"കോളിലേക്ക് മടങ്ങുക"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"കോൺടാക്റ്റുകളിലേക്ക് \"<xliff:g id="EMAIL">%s</xliff:g>\" ചേർക്കണോ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"കോൺടാക്‌‌റ്റിന്റെ ഫോട്ടോ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"പ്ലസ്"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> കോൺടാക്റ്റുകൾ"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ പേരുകൾ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ഈ പ്രവർത്തനം കൈകാര്യം ചെയ്യാൻ അപ്ലിക്കേഷനുകളൊന്നും കണ്ടെത്തിയില്ല."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"മുമ്പത്തെ സ്‌ക്രീനിലേക്ക് മടങ്ങാൻ ക്ലിക്കുചെയ്യുക"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ഫോണ്‍ നമ്പര്‍ ചേര്‍ക്കുക"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ഇമെയില്‍‌ ചേര്‍‌ക്കുക"</string>
- <string name="missing_app" msgid="1466111003546611387">"ഈ പ്രവർത്തനം കൈകാര്യം ചെയ്യാൻ അപ്ലിക്കേഷനുകളൊന്നും കണ്ടെത്തിയില്ല."</string>
- <string name="menu_share" msgid="943789700636542260">"പങ്കിടുക"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"കോൺടാക്‌റ്റുകളിൽ ചേർക്കുക"</string>
- <string name="share_via" msgid="563121028023030093">"ഇതുവഴി കോൺടാക്റ്റുകൾ പങ്കിടുക"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"അക്കൗണ്ടിന് കീഴിൽ ഗ്രൂപ്പ് സൃഷ്‌ടിക്കുക"</string>
- <string name="audio_chat" msgid="2535716629358298691">"വോയ്സ് ചാറ്റ്"</string>
- <string name="video_chat" msgid="1872255818640336072">"വീഡിയോ ചാറ്റ്"</string>
- <string name="connections" msgid="8098440723172028350">"കണക്ഷനുകൾ"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"കണക്ഷൻ ചേർക്കുക"</string>
- <string name="recent" msgid="2659189233141493004">"പുതിയത്"</string>
- <string name="recent_updates" msgid="4267258535615860710">"പുതിയ അപ്‌ഡേറ്റുകൾ"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> കോൺടാക്റ്റ്"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> അക്കൗണ്ട്"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ഈ അപ്ലിക്കേഷനിൽ നിന്നും എഡിറ്റുചെയ്യാനാകില്ല."</string>
- <string name="group_read_only" msgid="1061762906115697637">"ഈ ഉപകരണത്തിൽ എഡിറ്റുചെയ്യാനാകില്ല."</string>
- <string name="take_photo" msgid="7496128293167402354">"ഫോട്ടോ എടുക്കുക"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"പുതിയ ഫോട്ടോ എടുക്കുക"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"പുതിയ ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"കോൺടാക്റ്റ് ലിസ്റ്റ് അപ്‌ഡേറ്റുചെയ്യുന്നു."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"തിരയുന്നു…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"തിരഞ്ഞെടുത്തവ കാണിക്കുക"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"എല്ലാം കാണിക്കുക"</string>
- <string name="menu_select_all" msgid="621719255150713545">"എല്ലാം തിരഞ്ഞെടുക്കുക"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"തിരഞ്ഞെടുത്തത് എല്ലാം മാറ്റുക"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"പുതിയത് ചേർക്കുക"</string>
- <string name="add_organization" msgid="7311893231158291197">"ഓർഗനൈസേഷൻ ചേർക്കുക"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"തീയതി"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ഗ്രൂപ്പിന്റെ പേര്"</string>
- <string name="change_photo" msgid="8530597935483526383">"മാറ്റുക"</string>
- <string name="primary_photo" msgid="8517942231868516999">"പ്രാഥമിക ഫോട്ടോ"</string>
- <string name="description_star" msgid="2605854427360036550">"പ്രിയപ്പെട്ടതാക്കുക"</string>
- <string name="edit_contact" msgid="7529281274005689512">"കോൺടാ‌ക്‌റ്റ് തിരുത്തുക"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുമായി നിലവിലെ കോൺടാക്റ്റ് ലിങ്കുചെയ്യണോ?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുന്നതിലേക്ക് മാറണോ? ഇതുവരെ നിങ്ങൾ നൽകിയ വിവരങ്ങൾ പകർത്തപ്പെടും."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"എന്റെ കോൺടാക്റ്റുകളിലേക്ക് പകർത്തുക"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"എന്റെ കോൺടാക്റ്റുകളിൽ ചേർക്കുക"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ഡയറക്‌ടറി <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ഇഷ്‌ടാനുസൃതം"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ക്രമീകരണം"</string>
- <string name="menu_settings" msgid="377929915873428211">"ക്രമീകരണം"</string>
- <string name="menu_help" msgid="1680178646764069976">"സഹായവും ഫീഡ്‌ബാക്കും"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ഡിസ്‌പ്ലേ ഓപ്‌ഷനുകൾ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ഫോൺ നമ്പർ"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"കോൺടാക്റ്റുകളിൽ ചേർക്കുക"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"കോണ്‍‌ടാക്റ്റിലേക്ക് ചേര്‍ക്കുക"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"അടയ്‌ക്കുക"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"വർഷം ഉൾപ്പെടുത്തുക"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"കോൺടാക്റ്റ്"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ലോഡുചെയ്യുന്നു..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"അക്കൗണ്ട് ചേർക്കുക"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുക"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"പുതുഗ്രൂപ്പ് സൃഷ്‌ടിക്കൂ"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"പുതുഗ്രൂപ്പ് സൃഷ്‌ടിക്കൂ"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ഗ്രൂപ്പുകൾ</item>
- <item quantity="one">ഒരു ഗ്രൂപ്പ്</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" എന്ന ഗ്രൂപ്പ് ഇല്ലാതാക്കണോ? (കോൺടാക്റ്റുകൾ സ്വയം ഇല്ലാതാകില്ല.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_2">%1$d</xliff:g> പേർ</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> എന്നതിൽ നിന്നുള്ള <xliff:g id="COUNT_0">%1$d</xliff:g> ആൾ</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> പേർ</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ആൾ</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"മറ്റൊരു കോൺടാക്റ്റുമായി ലിങ്കുചെയ്യുന്നതിന് മുമ്പ് കോൺടാക്റ്റിന്റെ പേര് ടൈപ്പുചെയ്യുക."</string>
- <string name="copy_text" msgid="3257145021583508761">"ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക"</string>
- <string name="set_default" msgid="4417505153468300351">"സ്ഥിരമായി സജ്ജമാക്കുക"</string>
- <string name="clear_default" msgid="7193185801596678067">"സ്ഥിരമായത് മായ്‌ക്കുക"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"വാചകം പകർത്തി"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"നിങ്ങളുടെ മാറ്റങ്ങൾ തള്ളിക്കളയുകയും എഡിറ്റുചെയ്യൽ ഉപേക്ഷിക്കുകയും ചെയ്യണോ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"നിരസിക്കുക"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"എഡിറ്റുചെയ്യുന്നത് തുടരുക"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"പ്രൊഫൈൽ സജ്ജമാക്കൂ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"വ്യക്തിയുടെ പേര് ടൈപ്പുചെയ്യുക"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ഗ്രൂപ്പിന്റെ പേര്"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"എന്റെ പ്രാദേശിക പ്രൊഫൈൽ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"എന്റെ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> പ്രൊഫൈൽ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"എല്ലാ കോൺടാക്റ്റുകളും പ്രദർശിപ്പിക്കുന്നു"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"നിങ്ങൾക്ക് ഫോൺ നഷ്‌ടമാകുകയാണെങ്കിൽപ്പോലും നിങ്ങളുടെ കോൺടാക്റ്റുകൾ സുരക്ഷിതമായി സൂക്ഷിക്കുക: ഒരു ഓൺലൈൻ സേവനവുമായി സമന്വയിപ്പിക്കുക."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ഒരു അക്കൗണ്ട് ചേർക്കുക"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"നിങ്ങളുടെ പുതിയ കോൺടാക്റ്റ് ബാക്കപ്പുചെയ്യില്ല. കോൺടാക്റ്റുകളെ ഓൺലൈനിൽ ബാക്കപ്പുചെയ്യുന്ന ഒരു അക്കൗണ്ട് ചേർക്കണോ?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"പുതിയ കോൺടാക്റ്റുകൾ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കപ്പെടും."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"പുതിയ കോൺടാക്റ്റുകൾക്ക് ഒരു ഡിഫോൾട്ട് അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"പുതിയവ ചേർക്കൂ"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"എഡിറ്റുചെയ്യുക"</string>
- <string name="keep_local" msgid="1258761699192993322">"പ്രാദേശികമായി സൂക്ഷിക്കുക"</string>
- <string name="add_account" msgid="8201790677994503186">"അക്കൗണ്ട് ചേർക്കുക"</string>
- <string name="add_new_account" msgid="5748627740680940264">"പുതിയ അക്കൗണ്ട് ചേർക്കുക"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ഡാറ്റാബേസ് ഫയലുകൾ എക്‌സ്‌പോർട്ടുചെയ്യുക"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"പുതിയവ ചേർക്കൂ"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"കൂടുതൽ‍ കാണുക"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"കുറച്ച് കാണുക"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"എല്ലാം കാണുക"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"പുതിയത്"</string>
- <string name="about_card_title" msgid="2920942314212825637">"ആമുഖം"</string>
- <string name="send_message" msgid="8938418965550543196">"സന്ദേശം അയയ്ക്കുക"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ഒരു വ്യക്തിഗത പകർപ്പ് സൃഷ്‌ടിക്കുന്നു…"</string>
- <string name="yesterday" msgid="6840858548955018569">"ഇന്നലെ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"നാളെ"</string>
- <string name="today" msgid="8041090779381781781">"ഇന്ന്"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ഇന്ന് <xliff:g id="TIME_INTERVAL">%s</xliff:g> മണിയ്‌ക്ക്"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"നാളെ <xliff:g id="TIME_INTERVAL">%s</xliff:g> മണിയ്‌ക്ക്"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ശീർഷകമില്ലാത്ത ഇവന്റ്)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"സജ്ജമാക്കുക"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ഓര്‍ഗനൈസേഷന്‍"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"വിളിപ്പേര്"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"കുറിപ്പ്"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"വെബ്‌സൈറ്റ്"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ഇവന്‍റ്"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"ബന്ധം"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"അക്കൗണ്ട്"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"പേര്"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ഇമെയിൽ"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ഫോണ്‍"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ഫോട്ടോ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"കോൺടാക്‌റ്റ് എഡിറ്റർ വിപുലീകരിക്കാൻ ക്ലിക്കുചെയ്യുക."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"കോൺടാക്‌റ്റ് എഡിറ്റർ ചുരുക്കാൻ ക്ലിക്കുചെയ്യുക."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"ലൊക്കേഷനിലേക്കുള്ള വഴികൾ"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"പുതിയ sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. മറുപടി നൽകാൻ ക്ലിക്കുചെയ്യുക"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ഇൻകമിംഗ്"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ഔട്ട്‌ഗോയിംഗ്"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"മിസ്‌ഡ് കോളുകൾ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"പുതിയ കോൾ. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. തിരികെ വിളിക്കാൻ ക്ലിക്കുചെയ്യുക"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"നിങ്ങൾ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ഇമെയിൽ ഫീൽഡിലോ ഫോൺ ഫീൽഡിലോ വ്യക്തിയുടെ Hangouts ഐഡന്റിഫയർ നൽകുമ്പോൾ, Hangouts മികച്ചതായി പ്രവർത്തിക്കുന്നു."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"കൂടുതൽ ഫീൽഡുകൾ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ഫോട്ടോ മാറ്റുക"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"എഡിറ്റർ തുറക്കുന്നത് പരാജയപ്പെട്ടു."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ഇതിലേക്ക് സംരക്ഷിക്കുന്നു"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"നിലവിൽ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കുന്നു. മറ്റൊരു അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കാൻ രണ്ടുതവണ ടാപ്പുചെയ്യുക."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">ലിങ്കുചെയ്ത കോൺടാക്റ്റ്</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ലിങ്കുചെയ്ത <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"റദ്ദാക്കുക"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">സാധ്യതയുള്ള <xliff:g id="COUNT">%d</xliff:g> ഡ്യൂപ്ലിക്കേറ്റുകൾ</item>
- <item quantity="one">സാധ്യതയുള്ള ഒരു ഡ്യൂപ്ലിക്കേറ്റ്</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">ലിങ്കുചെയ്ത <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ</item>
- <item quantity="one">ലിങ്കുചെയ്ത ഒരു കോൺടാക്റ്റ്</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ഈ കോൺടാക്റ്റ്"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"സാധ്യതയുള്ള ഡ്യൂപ്ലിക്കേറ്റുകൾ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ഈ കോൺടാക്റ്റുകൾ, ഒരേ വ്യക്തി ആയേക്കാം, ഒരൊറ്റ കോൺടാക്റ്റായി നിങ്ങൾക്കിവ ലിങ്കുചെയ്യാവുന്നതാണ്."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"നിങ്ങളുടെ അക്കൗണ്ടുകളിൽ നിന്നും"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ഒരു ഫോട്ടോ എടുക്കുക"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"എല്ലാ ഫോട്ടോകളും"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> എന്നതിൽ നിന്ന്"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ഇല്ലാതാക്കുക"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ഇല്ലാതാക്കുക"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> എന്നതിൽ നിന്നുള്ള ഫോട്ടോ ചെക്കുചെയ്തില്ല"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> എന്നതിൽ നിന്നുള്ള ഫോട്ടോ ചെക്കുചെയ്തു"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"തിരിച്ചറിയാനാകാത്ത അക്കൗണ്ടിൽ നിന്നുള്ള ഫോട്ടോ തിരഞ്ഞെടുത്തിട്ടില്ല"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"തിരിച്ചറിയാനാകാത്ത അക്കൗണ്ടിൽ നിന്നുള്ള ഫോട്ടോ തിരഞ്ഞെടുത്തു"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ഭാഷാ മാറ്റം പ്രതിഫലിപ്പിക്കുന്നതിന് കോൺടാക്റ്റ് ലിസ്റ്റ് അപ്‌ഡേറ്റ് ചെയ്തുകൊണ്ടിരിക്കുന്നു.\n\nകാക്കുക..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
-</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
new file mode 100644
index 000000000..597014c75
--- /dev/null
+++ b/res/values-ml/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"വിലാസങ്ങൾ"</string>
+ <string name="contactsList" msgid="8661624236494819731">"വിലാസങ്ങൾ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"കോൺടാക്റ്റ് ചേർക്കുക"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"കോൺടാക്റ്റ്"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"നേരിട്ടുള്ള ഡയൽ"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"സന്ദേശങ്ങൾ നേരിട്ട്"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"കോൺടാക്‌റ്റ് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"കോണ്‍‌ടാക്റ്റിലേക്ക് ചേര്‍ക്കുക"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"തിരഞ്ഞെടുക്കുക"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"പുതുവിലാസം സൃഷ്‌ടിക്കൂ"</string>
+ <string name="searchHint" msgid="8482945356247760701">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർക്കുക"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"പ്രിയപ്പെട്ടവയിൽ നിന്നും നീക്കംചെയ്യുക"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"പ്രിയപ്പെട്ടവയിൽ നിന്നും നീക്കംചെയ്‌തു"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"പ്രിയപ്പെട്ടവയിലേക്ക് ചേർത്തു"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"എഡിറ്റുചെയ്യുക"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"ഇല്ലാതാക്കുക"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ഫോട്ടോ മാറ്റുക"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"കുറുക്കുവഴി സൃഷ്‌ടിക്കുക"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"അൺലിങ്കുചെയ്യുക"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"കോൺടാക്‌റ്റുകൾ നീക്കംചെയ്യൂ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ലേബലിന്റെ പേരുമാറ്റുക"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ലേബല്‍ ഇല്ലാതാക്കുക"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"കോൺടാക്റ്റ് ചേർക്കുക"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"കോണ്‍‌ടാക്റ്റുകൾ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"കോൺടാക്റ്റുകൾ ചേർക്കുക"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ലേബ‌ലിൽ നിന്ന് നീക്കംചെയ്യുക"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ലേബല്‍ സൃഷ്ടിക്കുക"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ഈ കോൺടാക്റ്റ് ഒന്നിലധികം കോൺടാക്റ്റുകളായി അൺലിങ്കുചെയ്യണോ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"അൺലിങ്കുചെയ്യുക"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"നിങ്ങൾ ഇതിനകം വരുത്തിയിട്ടുള്ള മാറ്റങ്ങൾ സംരക്ഷിക്കാനും ഒന്നിലധികം കോൺടാക്റ്റുകളായി ഈ കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനും താൽപ്പര്യപ്പെടുന്നുണ്ടോ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"സംരക്ഷിച്ച് അൺലിങ്കുചെയ്യുക"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"നിങ്ങൾ ഇതിനകം വരുത്തിയിട്ടുള്ള മാറ്റങ്ങൾ സംരക്ഷിക്കാനും തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുമായി ലിങ്കുചെയ്യാനും താൽപ്പര്യപ്പെടുന്നുണ്ടോ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"സംരക്ഷിച്ച് ലിങ്കുചെയ്യുക"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"ലിങ്കുചെയ്യുന്നു"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"അൺലിങ്കുചെയ്യുന്നു"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"ലിങ്ക്"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"ലിങ്കുചെയ്‌ത കോൺടാക്‌റ്റുകൾ കാണുക"</string>
+ <string name="menu_save" msgid="1727844363591825909">"സംരക്ഷിക്കുക"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> എന്നയാളുമായി ലിങ്കുചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്ന കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കുക:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"നിര്‍ദ്ദേശിക്കുന്ന കോണ്‍ടാക്റ്റുകള്‍"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ലിങ്കുചെയ്‌തു"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> എന്ന കോൺടാക്റ്റിനെ ഇല്ലാതാക്കി"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g>,<xliff:g id="NAME_1">%2$s</xliff:g> എന്നീ കോൺടാക്റ്റുകളെ ഇല്ലാതാക്കി"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> എന്നീ കോൺടാക്റ്റുകളെ ഇല്ലാതാക്കി…"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കി</item>
+ <item quantity="one">കോൺടാക്റ്റ് ഇല്ലാതാക്കി</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> കോൺടാക്റ്റുകൾ</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> കോൺടാക്റ്റ്</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> കോൺടാക്‌റ്റുകൾ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> കോൺടാക്‌റ്റ് · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google-ൽ നിന്നുള്ളവ"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> അക്കൗണ്ടിൽ നിന്നുള്ളവ"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"റിംഗ്‌ടോൺ സജ്ജമാക്കുക"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"വോയ്‌സ്‌മെയിലിൽ റൂട്ടുചെയ്യുക"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"വോയ്‌സ്‌മെയിലിൽ അൺറൂട്ടുചെയ്യൂ"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ഈ കോൺടാക്‌റ്റ്‌ വായിക്കാൻ മാത്രമുള്ളതാണ്‌. അത് ഇല്ലാതാക്കാനാവില്ല, എന്നാൽ മറയ്‌ക്കാനാവും."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"കോൺടാക്‌‌റ്റ്‌ മറയ്‌ക്കുക"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ഈ കോൺടാക്‌റ്റിലെ വായിക്കാൻ മാത്രമുള്ള അക്കൗണ്ടുകൾ മറയ്‌ക്കുന്നതാണ്‌, എന്നാൽ അവ ഇല്ലാതാക്കില്ല."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കണോ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"തിരഞ്ഞെടുത്ത കോൺടാക്‌റ്റുകൾ ഇല്ലാതാക്കണോ?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"നിങ്ങളുടെ വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള കോൺടാക്റ്റുകൾ ഇല്ലാതാക്കാൻ കഴിയില്ല, എന്നാൽ അവയെ മറയ്ക്കാവുന്നതാണ്."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ഇല്ലാതാക്കേണ്ട കോൺടാക്റ്റുകളിൽ ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ അടങ്ങിയിരിക്കുന്നു. വായന-മാത്രമായ അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ മറയ്‌ക്കുമെങ്കിലും, അവ ഇല്ലാതാക്കില്ല."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കുന്നതുവഴി ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ ഇല്ലാതാക്കപ്പെടും."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കണോ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ഇല്ലാതാക്കുക"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"കോൺടാക്റ്റ് നിലവിലില്ല."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ഹോം സ്ക്രീനിലേക്ക് കോൺടാക്റ്റ് ചേർത്തു."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"ഹോം സ്ക്രീനിലേക്ക് <xliff:g id="NAME">%s</xliff:g> ചേർത്തു."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ഉപകരണത്തിൽ ചിത്രങ്ങളൊന്നും ലഭ്യമല്ല."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"കോൺടാക്‌‌റ്റിന്റെ ഫോട്ടോ"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"ഇഷ്‌ടാനുസൃത ലേബൽ പേര്"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ഫോട്ടോ നീക്കംചെയ്യുക"</string>
+ <string name="noContacts" msgid="2228592924476426108">"നിങ്ങളുടെ കോൺടാക്‌റ്റ് ലിസ്‌റ്റ് ശൂന്യമാണ്"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ഈ ലേബലുള്ള കോൺടാക്‌റ്റുകളൊന്നുമില്ല"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ഈ അക്കൗണ്ടിൽ കോൺടാക്‌റ്റുകളൊന്നുമില്ല"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"നിങ്ങളുടെ കോൺടാക്‌റ്റ് ലിസ്‌റ്റ് ശൂന്യമാണ്"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> സംരക്ഷിച്ചു"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"കോൺടാക്റ്റ് സംരക്ഷിച്ചു"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"കോൺടാക്റ്റുകൾ അൺലിങ്കുചെയ്തു"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"കോൺടാക്റ്റ് മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനായില്ല"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"കോൺടാക്റ്റ് ലിങ്കുചെയ്യാനായില്ല"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നതില്‍ പിശക്"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"കോൺടാക്റ്റ് ഫോട്ടോയിലെ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ലേബൽ ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ലേബൽ ഇല്ലാതാക്കി"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ലേബൽ സൃഷ്‌ടിച്ചു"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ലേബൽ സൃഷ്‌ടിക്കാൻ കഴിയുന്നില്ല"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ലേബൽ അപ്ഡേറ്റുചെയ്‌തു"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ലേബലിൽ നിന്ന് നീക്കംചെയ്‌തു"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ലേബലിൽ ചേർത്തു"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ലേബൽ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ആ ലേബൽ നിലവിലുണ്ട്"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ചില കോൺടാക്റ്റുകൾക്ക് ഇമെയിലുകൾ ഇല്ല."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ചില കോൺടാക്റ്റുകൾക്ക് ഫോൺ നമ്പറുകൾ ഇല്ല."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ഇമെയില്‍ അയയ്ക്കുക"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"സന്ദേശം അയയ്‌ക്കുക"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"അയയ്‌ക്കുക"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"കോൺടാക്റ്റുകളൊന്നുമില്ല"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"കോൺടാക്റ്റുകളിലേക്ക് \"<xliff:g id="EMAIL">%s</xliff:g>\" ചേർക്കണോ?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ പേരുകൾ"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"മുമ്പത്തെ സ്‌ക്രീനിലേക്ക് മടങ്ങാൻ ക്ലിക്കുചെയ്യുക"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ഫോണ്‍ നമ്പര്‍ ചേര്‍ക്കുക"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ഇമെയില്‍‌ ചേര്‍‌ക്കുക"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ഈ പ്രവർത്തനം കൈകാര്യം ചെയ്യാൻ അപ്ലിക്കേഷനുകളൊന്നും കണ്ടെത്തിയില്ല."</string>
+ <string name="menu_share" msgid="943789700636542260">"പങ്കിടുക"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"കോൺടാക്‌റ്റുകളിൽ ചേർക്കുക"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ചേർക്കുക"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">ഇതുവഴി കോൺടാക്‌റ്റുകൾ പങ്കിടുക</item>
+ <item quantity="one">ഇതുവഴി കോൺടാക്‌റ്റ് പങ്കിടുക</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ലേബല്‍ സൃഷ്ടിക്കുക"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ലേബലിന്റെ പേരുമാറ്റുക"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ലേബല്‍ പേര്"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ലേബല്‍ പേര്"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"വോയ്സ് ചാറ്റ്"</string>
+ <string name="video_chat" msgid="1872255818640336072">"വീഡിയോ ചാറ്റ്"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> കോൺടാക്റ്റ്"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> അക്കൗണ്ട്"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ഫോട്ടോ എടുക്കുക"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"പുതിയ ഫോട്ടോ എടുക്കുക"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"പുതിയ ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"തിരയുന്നു…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"തീയതി"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ലേബൽ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"റദ്ദാക്കുക"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"മടങ്ങുക"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"അടയ്‌ക്കുക"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റ് എഡിറ്റുചെയ്യുന്നതിലേക്ക് മാറണോ? ഇതുവരെ നിങ്ങൾ നൽകിയ വിവരങ്ങൾ പകർത്തപ്പെടും."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ഡയറക്‌ടറി <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ക്രമീകരണം"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ക്രമീകരണം"</string>
+ <string name="menu_help" msgid="1680178646764069976">"സഹായവും ഫീഡ്‌ബാക്കും"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ഫോൺ നമ്പർ"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"കോൺടാക്റ്റുകളിൽ ചേർക്കുക"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"അടയ്‌ക്കുക"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"വർഷം ഉൾപ്പെടുത്തുക"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"അക്കൗണ്ട് ചേർക്കുക"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ഇമ്പോർട്ടുചെയ്യുക"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"പുതിയത് സൃഷ്‌ടിക്കുക…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ലേബൽ ഇല്ലാതാക്കണോ? (കോൺടാക്റ്റുകൾ സ്വയം ഇല്ലാതാക്കപ്പെടില്ല.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"മറ്റൊരു കോൺടാക്റ്റുമായി ലിങ്കുചെയ്യുന്നതിന് മുമ്പ് കോൺടാക്റ്റിന്റെ പേര് ടൈപ്പുചെയ്യുക."</string>
+ <string name="copy_text" msgid="3257145021583508761">"ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക"</string>
+ <string name="set_default" msgid="4417505153468300351">"സ്ഥിരമായി സജ്ജമാക്കുക"</string>
+ <string name="clear_default" msgid="7193185801596678067">"സ്ഥിരമായത് മായ്‌ക്കുക"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"വാചകം പകർത്തി"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"മാറ്റങ്ങൾ നിരസിക്കണോ?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"നിരസിക്കുക"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"റദ്ദാക്കൂ"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ഇഷ്‌ടാനുസൃതമാക്കലുകൾ നിരസിക്കണോ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"കോൺടാക്‌റ്റുകൾ നീക്കംചെയ്യൂ"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"എന്റെ പ്രാദേശിക പ്രൊഫൈൽ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"എന്റെ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> പ്രൊഫൈൽ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"കുറച്ചുസമയമെടുത്ത് ഒരു അക്കൗണ്ട് ചേർക്കുക, അത് Google-ൽ നിങ്ങളുടെ കോൺടാക്‌റ്റുകളുടെ ബായ്‌ക്കപ്പെടുക്കുന്നതിനിടയാക്കും."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"പുതിയ കോൺടാക്റ്റുകൾ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കപ്പെടും."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"പുതിയ കോൺടാക്റ്റുകൾക്ക് ഒരു ഡിഫോൾട്ട് അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"എഡിറ്റുചെയ്യുക"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"കാഴ്‌ച മാത്രം"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"എഡിറ്റുചെയ്യാനുള്ള കോൺടാക്‌റ്റ്‌ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ചേർക്കുക"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"അൺലിങ്കുചെയ്യുക"</string>
+ <string name="add_account" msgid="8201790677994503186">"അക്കൗണ്ട് ചേർക്കുക"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"പുതിയ അക്കൗണ്ട് ചേർക്കുക"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ഡാറ്റാബേസ് ഫയലുകൾ എക്‌സ്‌പോർട്ടുചെയ്യുക"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"കൂടുതൽ‍ കാണുക"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"കുറച്ച് കാണുക"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"പുതിയത്"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"ആമുഖം"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ഒരു വ്യക്തിഗത പകർപ്പ് സൃഷ്‌ടിക്കുന്നു…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"നാളെ"</string>
+ <string name="today" msgid="8041090779381781781">"ഇന്ന്"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ഇന്ന് <xliff:g id="TIME_INTERVAL">%s</xliff:g> മണിയ്‌ക്ക്"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"നാളെ <xliff:g id="TIME_INTERVAL">%s</xliff:g> മണിയ്‌ക്ക്"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ശീർഷകമില്ലാത്ത ഇവന്റ്)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"സജ്ജമാക്കുക"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ഓര്‍ഗനൈസേഷന്‍"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"വിളിപ്പേര്"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"കുറിപ്പ്"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"വെബ്‌സൈറ്റ്"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ഇവന്‍റ്"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"ബന്ധം"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"പേര്"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ഇമെയിൽ"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ഫോണ്‍"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"ലൊക്കേഷനിലേക്കുള്ള വഴികൾ"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"പുതിയ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. മറുപടി നൽകാൻ ക്ലിക്കുചെയ്യുക"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ഇൻകമിംഗ്"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ഔട്ട്‌ഗോയിംഗ്"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"മിസ്‌ഡ് കോളുകൾ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"പുതിയ കോൾ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. തിരികെ വിളിക്കാൻ ക്ലിക്കുചെയ്യുക"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"നിങ്ങൾ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"കൂടുതൽ ഫീൽഡുകൾ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"കോൺടാക്‌റ്റ് ഫോട്ടോ മാറ്റുക"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"കോൺടാക്‌റ്റ് ഫോട്ടോ ചേർക്കുക"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"കോൺടാക്‌‌റ്റിന്റെ ഫോട്ടോ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"എഡിറ്റർ തുറക്കുന്നത് പരാജയപ്പെട്ടു."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ഇതിലേക്ക് സംരക്ഷിക്കുന്നു"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> എന്നതിലുള്ള കോൺടാക്‌റ്റ്‌ എഡിറ്റുചെയ്യാനാവില്ല"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"റദ്ദാക്കുക"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ഈ കോൺടാക്റ്റ്"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"സാധ്യതയുള്ള ഡ്യൂപ്ലിക്കേറ്റുകൾ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ഈ കോൺടാക്റ്റുകൾ, ഒരേ വ്യക്തി ആയേക്കാം, ഒരൊറ്റ കോൺടാക്റ്റായി നിങ്ങൾക്കിവ ലിങ്കുചെയ്യാവുന്നതാണ്."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ഇല്ലാതാക്കുക"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ഇല്ലാതാക്കുക"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"നിര്‍ദ്ദേശങ്ങള്‍"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"പുതിയത്"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"നാവിഗേഷൻ ഡ്രോയർ തുറക്കുക"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"നാവിഗേഷൻ ഡ്രോയർ അടയ്‌ക്കുക"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ലേബൽ"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ലേബലുകൾ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"അക്കൗണ്ടുകൾ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ചരിത്രം ഒന്നിച്ചുകാണൂ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ഇവന്റുകളും സന്ദേശങ്ങളും"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ഇവന്റുകൾ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"സന്ദേശങ്ങള്‍‌"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"നിര്‍ദ്ദേശങ്ങള്‍"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"നിങ്ങളുടെ കോൺടാക്‌റ്റുകൾ ചിട്ടപ്പെടുത്തി, ഉപയോഗപ്രദമായ രീതിയിൽ സൂക്ഷിക്കുക"</string>
+ <string name="undo" msgid="1425165101664071422">"പഴയപടിയാക്കുക"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> എന്ന നമ്പറിൽ വിളിക്കുക"</string>
+ <string name="call_home" msgid="1990519474420545392">"വീട്ടിലെ ഫോണിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"മൊബൈലിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_work" msgid="5328785911463744028">"ഔദ്യോഗിക ഫോണിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"ഔദ്യോഗിക ഫാക്‌സിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"വീട്ടിലെ ഫാക്‌സിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_pager" msgid="9003902812293983281">"പേജറിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_other" msgid="8563753966926932052">"വിളിക്കുക"</string>
+ <string name="call_callback" msgid="1910165691349426858">"കോൾബാക്ക് നമ്പറിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_car" msgid="3280537320306436445">"കാർ നമ്പറിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"കമ്പനിയിലെ പ്രധാന ഫോണിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN-ലേക്ക് വിളിക്കുക"</string>
+ <string name="call_main" msgid="6082900571803441339">"പ്രധാന ഫോണിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ഫാക്‌സിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_radio" msgid="8296755876398357063">"റേഡിയോയിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ടെലക്‌സിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD-യിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ഔദ്യോഗിക മൊബൈലിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ഔദ്യോഗിക പേജറിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> എന്ന നമ്പറിൽ വിളിക്കുക"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ഫോണിലേക്ക് വിളിക്കുക"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (വിളിക്കുക)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> എന്ന നമ്പറിലേക്ക് സന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_home" msgid="7524332261493162995">"വീട്ടിലെ ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"മൊബൈലിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ഔദ്യോഗിക ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ഔദ്യോഗിക ഫാക്‌സിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"വീട്ടിലെ ഫാക്‌സിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"പേജറിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_other" msgid="806127844607642331">"വാചകസന്ദേശം"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"കോൾബാക്ക് ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_car" msgid="7444227058437359641">"കാർ ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"കമ്പനി പ്രധാന ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN-ലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_main" msgid="8621625784504541679">"പ്രധാന ഫോണിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ഫാക്‌സിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"റേഡിയോയിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ടെലക്‌സിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD എന്നതിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ഔദ്യോഗിക മൊബൈലിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ഔദ്യോഗിക പേജറിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> എന്നതിലേക്ക് വാചക സന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS നമ്പറിലേക്ക് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (സന്ദേശം)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"വീഡിയോ കോൾ ചെയ്യുക"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവരെ മായ്‌ക്കണോ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"നിങ്ങൾ കോൺടാക്‌റ്റുകളുടെയും ഫോണിന്റെയും അപ്ലിക്കേഷനുകളിലെ പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവരുടെ ലിസ്റ്റ് മായ്‌ക്കുകയും സ്‌ക്രാച്ചിൽ നിന്നും ബന്ധപ്പെടൽ മുൻഗണനകൾ അറിയാൻ ഇമെയിൽ അപ്ലിക്കേഷനുകളെ പ്രേരിപ്പിക്കുകയും ചെയ്യും."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവരെ മായ്‌ക്കുന്നു…"</string>
+ <string name="status_available" msgid="5586870015822828392">"ലഭ്യം"</string>
+ <string name="status_away" msgid="1838861100379804730">"ലഭ്യമല്ല"</string>
+ <string name="status_busy" msgid="9147992455450257136">"തിരക്കിൽ"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"മറ്റുള്ളവ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ഡയറക്‌ടറി"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ഔദ്യോഗിക ഡയറക്‌ടറി"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> എന്നയാളുടെ ദ്രുത കോൺടാക്റ്റ്"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(പേരില്ല)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവർ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ഫോൺ നമ്പറുകളുള്ള എല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"ഔദ്യോഗിക പ്രൊഫൈൽ കോൺടാക്റ്റുകൾ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"അപ്‌ഡേറ്റുകള്‍ കാണുക"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ഉപകരണം"</string>
+ <string name="account_sim" msgid="6519016427905087952">"സിം"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"പേര്"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"വിളിപ്പേര്"</string>
+ <string name="name_given" msgid="4280790853455320619">"ഫസ്റ്റ് നെയിം"</string>
+ <string name="name_family" msgid="7466985689626017037">"ലാസ്റ്റ് നെയിം"</string>
+ <string name="name_prefix" msgid="59756378548779822">"പേരിന്റെ പ്രിഫിക്‌സ്"</string>
+ <string name="name_middle" msgid="8467433655992690326">"മിഡിൽ നെയിം"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"പേരിന്റെ സഫിക്‌സ്"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ഉച്ചാരണപ്രകാരമുള്ള പേര്"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ഫസ്റ്റ് നെയിം"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ഉച്ചാരണപ്രകാരമുള്ള മിഡിൽ നെയിം"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"പേരിന്റെ അവസാന ഭാഗം"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ഫോണ്‍"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ഇമെയില്‍"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"വിലാസം"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ഓര്‍ഗനൈസേഷന്‍"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ബന്ധം"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"പ്രത്യേക തീയതി"</string>
+ <string name="sms" msgid="1756857139634224222">"വാചക സന്ദേശം"</string>
+ <string name="postal_address" msgid="8765560217149624536">"വിലാസം"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"കമ്പനി"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ശീർഷകം"</string>
+ <string name="label_notes" msgid="8337354953278341042">"കുറിപ്പുകള്‍"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ഇഷ്‌ടാനുസൃതം"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"വെബ്‌സൈറ്റ്"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ലേബലുകൾ"</string>
+ <string name="email_home" msgid="8573740658148184279">"വീട്ടിലെ ഇമെയിൽ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"മൊബൈൽ ഇമെയിൽ"</string>
+ <string name="email_work" msgid="2807430017302722689">"ഔദ്യോഗിക ഇമെയിൽ"</string>
+ <string name="email_other" msgid="3454004077967657109">"ഇമെയില്‍"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> എന്നതിലേക്ക് ഇമെയിൽ അയയ്‌ക്കുക"</string>
+ <string name="email" msgid="5668400997660065897">"ഇമെയില്‍"</string>
+ <string name="postal_street" msgid="8133143961580058972">"സ്ട്രീറ്റ്"</string>
+ <string name="postal_city" msgid="6597491300084895548">"നഗരം"</string>
+ <string name="postal_region" msgid="6045263193478437672">"സംസ്ഥാനം"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"തപാൽ കോഡ്"</string>
+ <string name="postal_country" msgid="7638264508416368690">"രാജ്യം"</string>
+ <string name="map_home" msgid="1243547733423343982">"വീട്ടുവിലാസം കാണുക"</string>
+ <string name="map_work" msgid="1360474076921878088">"ഔദ്യോഗിക വിലാസം കാണുക"</string>
+ <string name="map_other" msgid="3817820803587012641">"വിലാസം കാണുക"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> വിലാസം കാണുക"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber ഉപയോഗിച്ച് ചാറ്റുചെയ്യുക"</string>
+ <string name="chat" msgid="9025361898797412245">"ചാറ്റുചെയ്യുക"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ഇല്ലാതാക്കുക"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"പേരിന്റെ കൂടുതൽ ഫീൽഡുകൾ കാണിക്കുക"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"പേരിന്റെ ഫീൽഡുകൾ ചുരുക്കുക"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ഉച്ചാരണപ്രകാരമുള്ള പേരിന്റെ കൂടുതൽ ഫീൽഡുകൾ കാണിക്കുക"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ഫൊണറ്റിക് പേരിന്റെ ഫീൽഡുകൾ ചുരുക്കുക"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"വികസിപ്പിക്കുക"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ചുരുക്കുക"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"വികസിപ്പിച്ചു"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ചുരുക്കി"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"നക്ഷത്രമിട്ടവ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"കോൺടാക്റ്റ്"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"മറ്റെല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"സമന്വയ ഗ്രൂപ്പ് നീക്കംചെയ്യുക"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"സമന്വയ ഗ്രൂപ്പ് ചേർക്കുക"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"കൂടുതൽ ഗ്രൂപ്പുകൾ…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"സമന്വയത്തിൽ നിന്നും \"<xliff:g id="GROUP">%s</xliff:g>\" നീക്കംചെയ്യുന്നത്, സമന്വയത്തിൽ നിന്നും ഗ്രൂപ്പുചെയ്യാത്ത എല്ലാ കോൺടാക്റ്റുകളേയും നീക്കംചെയ്യുന്നതിനിടയാക്കും."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ഡിസ്‌പ്ലേ ഓപ്‌ഷനുകൾ സംരക്ഷിക്കുന്നു…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ഇഷ്‌ടാനുസൃത കാഴ്‌ച"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ഇമ്പോർട്ടുചെയ്ത കോൺടാക്റ്റുകൾ ഇനിപ്പറയുന്നതിലേക്ക് സംരക്ഷിക്കുക:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"സിം കാർഡ്‌"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"സിം, <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%d കോൺടാക്‌റ്റുകൾ</item>
+ <item quantity="one">ഒരു കോൺടാക്‌റ്റ്</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> കോൺടാക്‌റ്റുകൾ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> കോൺടാക്‌റ്റ്‌ • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ഫയൽ"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ഇമ്പോർട്ടുചെയ്യാനൊന്നുമില്ല"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard-ൽ നിന്ന്‌ കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്യണോ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് ഇമ്പോർട്ടുചെയ്യുന്നത് റദ്ദാക്കണോ?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് എക്‌സ്‌പോർട്ടുചെയ്യുന്നത് റദ്ദാക്കണോ?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ഇമ്പോർട്ടുചെയ്യൽ/എക്‌സ്‌പോർട്ടുചെയ്യൽ റദ്ദാക്കാനായില്ല"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"അജ്ഞാത പിശക്."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" തുറക്കാനായില്ല: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"എക്‌സ്‌പോർട്ടർ ആരംഭിക്കാനായില്ല: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റ് ഒന്നുമില്ല."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"ആവശ്യമായ ഒരു അനുമതി നിങ്ങൾ പ്രവർത്തനരഹിതമാക്കി."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"എക്‌സ്‌പോർട്ടുചെയ്യുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O പിശക്"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ആവശ്യമായ മെമ്മറിയില്ല. ഫയൽ വളരെ വലുതായിരിക്കാം."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ഫോർമാറ്റിനെ പിന്തുണയ്‌ക്കില്ല."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി, കോൺടാക്റ്റുകൾ പങ്കിടുന്നതിന് അറിയിപ്പിൽ ക്ലിക്കുചെയ്യുക."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"കോൺടാക്റ്റുകൾ പങ്കിടാൻ ടാപ്പുചെയ്യുക."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> എക്‌സ്‌പോർട്ടുചെയ്യൽ റദ്ദാക്കി."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"കോൺടാക്റ്റ് ഡാറ്റ എക്‌സ്‌പോർട്ടുചെയ്യുന്നു"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"കോൺടാക്റ്റ് ഡാറ്റ എക്സ്പോർട്ടുചെയ്യുകയാണ്."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ഡാറ്റാബേസ് വിവരം നേടാനായില്ല."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റുകളൊന്നുമില്ല."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard കമ്പോസർ ശരിയായി ആരംഭിച്ചില്ല."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"എക്‌സ്‌പോർട്ടുചെയ്യാനായില്ല"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"കോൺടാക്റ്റ് ഡാറ്റ എക്‌സ്‌പോർട്ടുചെയ്‌തില്ല.\nകാരണം: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> എന്നയാളെ ഇമ്പോർട്ടുചെയ്യുന്നു"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ഡാറ്റ വായിക്കാനായില്ല"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ഇമ്പോർട്ടുചെയ്യൽ പൂർത്തിയായി"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ഇമ്പോർട്ടുചെയ്യൽ റദ്ദാക്കി"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് ഉടൻ ഇമ്പോർട്ടുചെയ്യും."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ഫയൽ ഉടൻ ഇമ്പോർട്ടുചെയ്യും."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ഇമ്പോർട്ടുചെയ്യൽ അഭ്യർത്ഥന നിരസിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"കോൺടാക്റ്റുകൾ താമസിയാതെ എക്സ്പോർട്ടുചെയ്യും."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard എക്‌സ്‌പോർട്ടുചെയ്യൽ അഭ്യർത്ഥന നിരസിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"കോൺടാക്റ്റ്"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"പ്രാദേശിക താൽക്കാലിക സംഭരണത്തിലേക്ക് vCard (vCard-കൾ) കാഷെ ചെയ്യുന്നു. യഥാർത്ഥ ഇമ്പോർട്ടുചെയ്യൽ ഉടൻ ആരംഭിക്കും."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ഇമ്പോർട്ടുചെയ്യാനായില്ല."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC മുഖേന ലഭിച്ച കോൺടാക്റ്റ്"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"കാഷെ ചെയ്യൽ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ഇമ്പോർട്ടുചെയ്യുന്നു: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ഫയലിലേക്ക് എക്സ്പോർട്ട് ചെയ്യൂ"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ഇപ്രകാരം അടുക്കുക"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ഉച്ചാരണപ്രകാരമുള്ള പേര്"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"എപ്പോഴും പ്രദര്‍ശിപ്പിക്കുക"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ശൂന്യമാണെങ്കിൽ മറയ്‌ക്കുക"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ഫസ്റ്റ് നെയിം"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"ലാസ്റ്റ് നെയിം"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"പേരിന്റെ ഫോർമാറ്റ്"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ഫസ്റ്റ് നെയിം ആദ്യം"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ലാസ്റ്റ് നെയിം ആദ്യം"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"അക്കൗണ്ടുകൾ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"പുതുകോൺടാക്റ്റുകൾക്കുള്ള ഡിഫോൾട്ട് അക്കൗണ്ട്"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"എന്റെ വിവരം"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"നിങ്ങളുടെ പ്രൊഫൈൽ സജ്ജമാക്കുക"</string>
+ <string name="setting_about" msgid="7014388749752042863">"കോണ്‍ടാക്റ്റുകളെ കുറിച്ച്"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"പ്രിയപ്പെട്ട കോൺടാക്റ്റുകൾ പങ്കിടുക"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"എല്ലാ കോൺടാക്റ്റുകളും പങ്കിടുക"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"കോൺടാക്റ്റുകൾ പങ്കിടുന്നത് പരാജയം."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യുക"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"ഇതിൽ നിന്ന്‌ കോൺടാക്‌റ്റ് ഇമ്പോർട്ടുചെയ്യൂ"</string>
+ <string name="share_error" msgid="948429331673358107">"ഈ കോൺടാക്റ്റ് പങ്കിടാനാകില്ല."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"പങ്കിടാൻ കോൺടാക്റ്റുകളൊന്നും ഇല്ല."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ദൃശ്യമാക്കേണ്ട കോൺടാക്റ്റുകൾ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ദൃശ്യമാക്കേണ്ട കോൺടാക്റ്റുകൾ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"കാഴ്‌ച ഇഷ്‌ടാനുസൃതമാക്കൂ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"സംരക്ഷിക്കുക"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"പ്രിയപ്പെട്ടവ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ഇമ്പോർട്ടുചെയ്യുക"</string>
+ <string name="menu_export" msgid="2658783911863503902">"എക്‌സ്‌പോർട്ട് ചെയ്യുക"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> വഴി"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> വഴി <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"തിരയൽ നിർത്തുക"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"തിരയൽ മായ്ക്കുക"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"അക്കൗണ്ട്"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ഇത് എല്ലായ്‌പ്പോഴും കോളുകൾക്കായി ഉപയോഗിക്കുക"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"കുറിപ്പിനൊപ്പം വിളിക്കുക"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"കോളിനൊപ്പം അയയ്‌ക്കാൻ ഒരു കുറിപ്പ് ടൈപ്പുചെയ്യുക..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"അയയ്ക്കുക, വിളിക്കുക"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ബിൽഡ് പതിപ്പ്"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയറിനായുള്ള ലൈസൻസ് വിശദാംശങ്ങൾ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"സ്വകാര്യതാ നയം"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"സേവന നിബന്ധനകൾ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url തുറക്കാനായില്ല."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ചെക്കുചെയ്തു"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ചെക്കുചെയ്തില്ല"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"വീഡിയോ കോൾ ചെയ്യുക"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ഇല്ലാതാക്കുക"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"എല്ലിപ്‌സിസ്"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> സെ."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> മി <xliff:g id="SECONDS">%2$s</xliff:g> സെ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES_1">%2$s</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%3$s</xliff:g> സെക്കൻഡ്"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ഈ കുറുക്കുവഴി പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"കോൺടാക്‌റ്റ് നീക്കംചെയ്‌തു"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ഇമ്പോർട്ടുചെയ്യുക"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"കോണ്‍‌ടാക്റ്റുകൾ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"നിങ്ങളുടെ സിം കാർഡിൽ കോൺടാക്‌റ്റുകളില്ല"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"കോൺടാക്‌റ്റ്‌ നിലവിൽ നിങ്ങളുടെ ലിസ്‌റ്റിലുണ്ട്‌"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> സിം കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്‌തു</item>
+ <item quantity="one">ഒരു സിം കോൺടാക്‌റ്റ് ഇമ്പോർട്ടുചെയ്‌തു</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"സിം കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്യാനായില്ല"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"സിം കാർഡിൽ നിന്ന്‌ ഇമ്പോർട്ടുചെയ്യുക"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"റദ്ദാക്കുക"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"സ്വയ സമന്വയം ഓഫാണ്. ഓണാക്കാൻ ടാപ്പുചെയ്യുക."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"നിരസിക്കുക"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"അക്കൗണ്ട് സമന്വയം ഓഫാണ്. ഓണാക്കാൻ ടാപ്പുചെയ്യുക."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"സ്വയ സമന്വയം ഓണാക്കണോ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google കോൺടാക്‌റ്റുകളിൽ മാത്രമല്ല, എല്ലാ ആപ്‌സുകളിലും അക്കൗണ്ടുകളിലും വരുത്തുന്ന മാറ്റങ്ങളെ വെബിലും നിങ്ങളുടെ ഉപകരണങ്ങളിലും അപ്‌റ്റു‌ഡേറ്റായി നിലനിർത്തും."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ഓൺ ചെയ്യുക"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"കണക്ഷനൊന്നുമില്ല"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"സിം"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"കൂടുതൽ കാണിക്കൂ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"സിം കാർഡ് ഇമ്പോർട്ടുചെയ്‌തു"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ഇമ്പോർട്ടുചെയ്യൽ പരാജയപ്പെട്ടു"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"സിം കാർഡിൽ നിന്ന്‌ കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്യാനായില്ല"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"സിം കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുന്നു"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"അറിയിപ്പുകൾ"</string>
+</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
deleted file mode 100644
index 681d3f95a..000000000
--- a/res/values-mn-rMN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Харилцагчид"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Харилцагчид"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Харилцагчийн хаягийг харах"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Харилцагчийн хаягийг засварлах"</string>
- <string name="contactsList" msgid="8661624236494819731">"Харилцагчид"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Харилцагч"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Шууд залгах"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Шууд зурвас"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Харилцагчийн товчилборыг сонгоно уу"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Залгах дугаарыг сонгоно уу"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Зурвас илгээх дугаарыг сонгох"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Харилцагчид нэмэх"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Харилцагч сонгоно уу"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Шинэ харилцагч үүсгэх"</string>
- <string name="starredList" msgid="4817256136413959463">"Одтой"</string>
- <string name="frequentList" msgid="7154768136473953056">"Байнга"</string>
- <string name="strequentList" msgid="5640192862059373511">"Дуртай"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Харилцагчийн мэдээлэл"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Харилцагч засварлах"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Харилцагч үүсгэх"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Бүлгэм засварлах"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Бүлгэм үүсгэх"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Тухай"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Шинэчлэлтүүд"</string>
- <string name="searchHint" msgid="8482945356247760701">"Харилцагчдаас хайх"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Харилцагчийг харах"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Таалагдсан руу нэмэх"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Дуртайгаас хасах"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Дуртайгаас хасах"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Дуртайд нэмэх"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Засах"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Устгах"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Зураг солих"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Үндсэн дэлгэц дээр байршуулах"</string>
- <string name="menu_call" msgid="3992595586042260618">"Харилцагч руу залгах"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Харилцагч руу зурвас илгээх"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Холбоосыг салгах"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Засах"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Устгах"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Харилцагч нэмэх"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Бүлгэм нэмэх"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Энэ харилцагчийн хаягийг олон харилцагч болгон салгах уу?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Салгах"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Та энэ харилцагчийн жагсаалтыг салгаад, олон харилцагч болгосон өөрчлөлтийг хадгалах уу?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Хадгалаад холбоосыг салгах"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Та хийсэн өөрчлөлтөө хадгалж, сонгосон харилцагчтай холбох уу?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Хадгалаад холбох"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Холбох"</string>
- <string name="menu_save" msgid="1727844363591825909">"Хадгалах"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Харилцагчийн жагсаалтыг холбох"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> харилцагчтай холбохыг хүсэж буй харилцагчийг сонгоно уу:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Бүх харилцагчдыг харуулах"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Санал болгосон харилцагчид"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бүх харилцагчид"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Холбосон харилцагчид"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Харилцагчийг устгасан</item>
- <item quantity="one">Харилцагчийг устгасан</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Хонхны ая суулгах"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Бүх дуудлагыг дуут шуудан руу"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Таны зөвхөн унших боломжтой бүртгэлийн харилцагчийг устгах боломжгүй, харин нуух боломжтой."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Нуух"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Энэхүү устгах гэж байгаа харилцагчийн хаяг нь хэд хэдэн бүртгэлийн дэлгэрэнгүй мэдээллийг агуулсан байна. Зөвхөн унших боломжтой бүртгэлийн мэдээллийг нууж болно, харин устгах боломжгүй."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Холбохын тулд та доод тал нь хоёр харилцагч сонгох ёстой."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Сонгосон харилцагчийг холбох уу?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Холбох"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Энэ харилцагчийн хаягийг устгах уу?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Сонгосон харилцагч хаягийг устгах уу?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Зөвхөн унших боломжтой бүртгэлийн харилцагчийг устгах боломжгүй, харин нуух боломжтой."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Энэ харилцагчийн хаягт хэд хэдэн бүртгэлийн мэдээллийг агуулсан учир устгах боломжгүй.Зөвхөн унших боломжтой бүртгэлийг нуух боломжтой ч, устгах боломжгүй."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Энэ харилцагчийг устгаснаар хэд хэдэн бүртгэлийн мэдээллийг устгах болно."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Энэ харилцагчийг устгах уу?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Устгах"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Өөрчлөлтүүдийг цуцлах"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Харилцагч байхгүй байна."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Харилцагчийг нүүр хуудсанд нэмсэн."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>-г нүүр хуудсанд нэмсэн."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Шинэ харилцагч үүсгэх"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Шинэ харилцагч үүсгэх"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Байгууллага"</item>
- <item msgid="7196592230748086755">"Тэмдэглэл"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Таблетэнд зураг байхгүй байна."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Утсанд зураг байхгүй байна."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Харилцагчийн зураг"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Захиалгат шошгын нэр"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Дуут шуудан руу шууд дуудлага хийх"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Зургийг арилгах"</string>
- <string name="noContacts" msgid="4955659076981974652">"Харилцагч байхгүй"</string>
- <string name="noGroups" msgid="8614664663561385253">"Бүлгэм байхгүй байна."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Бүлгэм үүсгэхийн тулд танд бүртгэл хэрэгтэй."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Энэ бүлгэмд хүн алга."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Нэмэхийн тулд бүлгэмд өөрчлөлт оруулна уу."</string>
- <string name="savingContact" msgid="4075751076741924939">"Харилцагчийг хадгалж байна…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Харилцагчийг хадгалсан"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Харилцагчийг салгасан"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Харилцагчийн өөрчлөлтүүдийг хадгалж чадсангүй."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Харилцагчийг салгаж чадсангүй."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Харилцагчийг холбож чадсангүй."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Харилцагчийн хаягийг хадгалахад алдаа гарлаа."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Харилцагчийн зургийн өөрчлөлтийг хадгалж чадсангүй."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Бүлгэм хадгалагдлаа."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Бүлгэмийн өөрчлөлтүүдийг хадгалж чадсангүй."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">Утасны дугаар бүхий <xliff:g id="COUNT">%d</xliff:g> хаяг байна</item>
- <item quantity="one">Утасны дугаар бүхий 1 хаяг байна</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Утасны дугаартай харилцагч байхгүй"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> олдсон байна</item>
- <item quantity="one">1 олдсон байна</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Харилцагч байхгүй"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> олдсон байна</item>
- <item quantity="one">1 олсон байна</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Бүгд"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Дуртай"</string>
- <string name="callBack" msgid="5498224409038809224">"Буцааж залгах"</string>
- <string name="callAgain" msgid="3197312117049874778">"Дахин залгана уу"</string>
- <string name="returnCall" msgid="8171961914203617813">"Буцааж залгах"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"-г харилцагчдад нэмэх үү?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"харилцагчийн зураг"</string>
- <string name="description_plus_button" msgid="515164827856229880">"нэмэх"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"нийт <xliff:g id="TOTAL_NUMBER">%s</xliff:g> харилцагчдын <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Таны харилцагчдын нэрс"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Тус үйлдлийг гүйцэтгэх апп олдсонгүй."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Өмнөх дэлгэц рүү буцахын тулд товших"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Утасны дугаар нэмэх"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Имэйл нэмэх"</string>
- <string name="missing_app" msgid="1466111003546611387">"Тус үйлдлийг гүйцэтгэх апп олдсонгүй."</string>
- <string name="menu_share" msgid="943789700636542260">"Хуваалцах"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Харилцагчдад нэмэх"</string>
- <string name="share_via" msgid="563121028023030093">"Харилцагчийг дараахаар хуваалцах"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Бүртгэл дотор бүлгэм үүсгэх"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Дуут чат"</string>
- <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
- <string name="connections" msgid="8098440723172028350">"Холболтууд"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Холболт нэмэх"</string>
- <string name="recent" msgid="2659189233141493004">"Саяхны"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Саяхны шинэчлэлтүүд"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> харилцагч"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> бүртгэл"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Тус апп-с засварлах боломжгүй."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Энэ төхөөрөмж дээр засах боломжгүй."</string>
- <string name="take_photo" msgid="7496128293167402354">"Зураг авах"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Шинэ зураг авах"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Зураг сонгох"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Шинэ зураг сонгох"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Харилцагчдын жагсаалтыг шинэчилж байна."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Хайж байна..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Сонгоснуудыг харуулах"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Бүгдийг харуулах"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Бүгдийг сонгох"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Бүх сонголтыг цуцлах"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Шинийг нэмэх"</string>
- <string name="add_organization" msgid="7311893231158291197">"Байгууллага нэмэх"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Огноо"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Бүлгэмийн нэр"</string>
- <string name="change_photo" msgid="8530597935483526383">"Солих"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Ерөнхий зураг"</string>
- <string name="description_star" msgid="2605854427360036550">"дуртай"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Харилцагчийг засварлах"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Энэ харилцагчийг сонгосон харилцагчтай холбох уу?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Сонгосон харилцагчийг засварлах руу шилжих үү? Таны оруулсан мэдээллүүд хуулагдах болно."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Миний Харилцагчид руу хуулах"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Миний харилцагчдад нэмэх"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Директор <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Тохируулсан"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Тохиргоо"</string>
- <string name="menu_settings" msgid="377929915873428211">"Тохиргоо"</string>
- <string name="menu_help" msgid="1680178646764069976">"Тусламж, санал хүсэлт"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Харуулах сонголтууд"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Утасны дугаар"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Харилцагчдад нэмэх"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Харилцагчид нэмэх"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Хаах"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Жил оруулах"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Харилцагч"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Ачаалж байна..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Шинэ харилцагч үүсгэх"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Бүртгэл нэмэх"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Харилцагчид импортлох"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Шинэ бүлгэм үүсгэх"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Шинэ бүлгэм үүсгэх"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> бүлэг</item>
- <item quantity="one">1 бүлэг</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" бүлгэмийг устгах уу? (Доторх харилцагчид нь устахгүй.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>-с <xliff:g id="COUNT_2">%1$d</xliff:g> хүн</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> -с <xliff:g id="COUNT_0">%1$d</xliff:g> хүн</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> хүн</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> хүн</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Өөр харилцагчийн жагсаалттай холбохын тулд харилцагчийн нэрийг бичнэ үү."</string>
- <string name="copy_text" msgid="3257145021583508761">"Түр санах ойд хуулах"</string>
- <string name="set_default" msgid="4417505153468300351">"Үндсэн болгох"</string>
- <string name="clear_default" msgid="7193185801596678067">"Үндсэнээс хасах"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Текст хуулагдав"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Таны өөрчлөлтийн устгал, засварыг болих уу?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Устгах"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Үргэлжлүүлэн засах"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Миний профайлын тохиргоо"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Хүний нэрийг бичнэ үү"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Бүлгэмийн Нэр"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Миний дотоод профайл"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Миний <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайл"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Бүх харилцагчийг харуулж байна"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Утсаа гээсэн ч харилцагчдаа найдвартай хадгалаарай: онлайн үйлчилгээгээр синк хийгээрэй."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Бүртгэл нэмэх"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Таны шинэ харилцагч нөөцлөгдөхгүй. Харилцагчдыг онлайнаар нөөцөлдөг акаунтыг нэмэх үү?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Шинэ харилцагчийн хаягийг <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>-д хадгална."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Шинэ харилцагчид өгөгдмөл бүртгэл сонгох:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Шинэ харилцагч нэмэх"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Харилцагчийг засварлах"</string>
- <string name="keep_local" msgid="1258761699192993322">"Дотор хадгалах"</string>
- <string name="add_account" msgid="8201790677994503186">"Бүртгэл нэмэх"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Шинэ бүртгэл нэмэх"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Өгөгдлийн сангийн файлуудыг экспорт хийх"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"шинэ харилцагч нэмэх"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Дэлгэрэнгүй үзэх"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Цөөнийг харах"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Бүгдийг харах"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Саяхны"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Тухай"</string>
- <string name="send_message" msgid="8938418965550543196">"Зурвас илгээх"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Хувийн хуулбар үүсгэж байна..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Өчигдөр"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Маргааш"</string>
- <string name="today" msgid="8041090779381781781">"Өнөөдөр"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Өнөөдөр <xliff:g id="TIME_INTERVAL">%s</xliff:g>-д"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Маргааш <xliff:g id="TIME_INTERVAL">%s</xliff:g>-д"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Гарчиггүй үйл явдал)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Тохируулах"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Байгууллага"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Хоч"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Тэмдэглэл"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Вэбсайт"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Үйл явдал"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Хамаарал"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Бүртгэл"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Нэр"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Имэйл"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Утас"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Зураг"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Харилцагчдын засварлагчийг дэлгэхийг хүсвэл дарна уу."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Харилцагчдын засварлагчийг буулгахыг хүсвэл дарна уу."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"байршил руу очих чиглэл"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"саяхны sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. хариу бичихийн тулд товшино уу"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ирж байгаа"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"гарах"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"аваагүй"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"саяхны дуудлага. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. буцааж залгахын тулд товшино уу"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Та: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts апликейшн нь таныг найзуудынхаа мэдээллийг харилцагчийн и-мэйл эсвэл гар утасны талбарт оруулбал илүү сайн ажилладаг."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Нэмэлт талбар"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Зураг солих"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Засварлагчийг нээж чадсангүй."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Дараахад хадгалж байна"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Одоогоор <xliff:g id="ACCOUNT_NAME">%s</xliff:g>-д хадгалж байна. Өөр бүртгэл сонгохын тулд хоёр товшино уу."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Холбосон харилцагч (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Холбосон харилцагч</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> холбосон харилцагч"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ХАРИЛЦАГЧДЫГ ХОЛБОХ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЦУЦЛАХ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> боломжит хуулбар</item>
- <item quantity="one">1 боломжит хуулбар</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> холбогдсон харилцагч</item>
- <item quantity="one">1 холбогдсон харилцагч</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Энэ харилцагч"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Боломжит хуулбар"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Эдгээр харилцагчийн хаяг нь ижил хүн байж болзошгүй. Та нэг харилцагчийн хаяг болгон холбох боломжтой."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Холбосон харилцагчид"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Таны бүртгэлээс"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Зураг авах"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Бүх зураг"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Зураг сонгох"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Илгээгч: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>-г устгах"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>-г устгах"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-н зургийг сонгоогүй"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-н зургийг сонгосон"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Үл мэдэгдэх бүртгэлийн зургийг сонгоогүй"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Үл мэдэгдэх бүртгэлийн зургийг сонгосон"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Хэлний өөрчлөлтийг тусгахын тулд харилцагчдын жагсаалтыг шинэчилж байна.\n\nТүр хүлээнэ үү..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блоклосон дугаар"</string>
-</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
new file mode 100644
index 000000000..266ffd936
--- /dev/null
+++ b/res/values-mn/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Харилцагчид"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Харилцагчид"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Харилцагч нэмэх"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Харилцагч"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Шууд залгах"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Шууд зурвас"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Харилцагч сонгох"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Харилцагчид нэмэх"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Харилцагч сонгоно уу"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Сонгох"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Шинэ харилцагч үүсгэх"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Харилцагчдаас хайх"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Таалагдсан руу нэмэх"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Дуртайгаас хасах"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Дуртайгаас хасах"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Дуртайд нэмэх"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Засах"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Устгах"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Зураг солих"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Товчлол үүсгэх"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Холбоосыг салгах"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Харилцагчдыг арилгах"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Шошгын нэрийг өөрчлөх"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Шошго устгах"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Харилцагч нэмэх"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Харилцагчдыг сонгох"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Харилцагч нэмэх"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Шошгоос хасах"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Шошго үүсгэх"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Энэ харилцагчийн хаягийг олон харилцагч болгон салгах уу?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Салгах"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Та энэ харилцагчийн жагсаалтыг салгаад, олон харилцагч болгосон өөрчлөлтийг хадгалах уу?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Хадгалаад холбоосыг салгах"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Та хийсэн өөрчлөлтөө хадгалж, сонгосон харилцагчтай холбох уу?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Хадгалаад холбох"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Холбож байна"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Салгаж байна"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Холбох"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Холбогдсон харилцагчдыг харах"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Хадгалах"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Харилцагчийн жагсаалтыг холбох"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> харилцагчтай холбохыг хүсэж буй харилцагчийг сонгоно уу:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Санал болгосон харилцагчид"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Бүх харилцагчид"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g>-г холбосон"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Холбосон харилцагчид"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g>-г устгасан"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>-г устгасан"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... устгасан"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Харилцагчийг устгасан</item>
+ <item quantity="one">Харилцагчийг устгасан</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> харилцагч</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> харилцагч</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google-с"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>-с"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Хонхны ая суулгах"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Дуут шуудан руу илгээх"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Дуут шуудан руу илгээхгүй"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Энэ харилцагч зөвхөн унших боломжтой. Та үүнийг устгах боломжгүй ч нууцлах боломжтой."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Харилцагчийг нуух"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Энэ харилцагч доторх зөвхөн уншиж болох бүртгэлүүдийг устгахгүйгээр нууцлах болно."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Энэ харилцагчийн хаягийг устгах уу?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Сонгосон харилцагч хаягийг устгах уу?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Зөвхөн унших боломжтой бүртгэлийн харилцагчийг устгах боломжгүй, харин нуух боломжтой."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Энэ харилцагчийн хаягт хэд хэдэн бүртгэлийн мэдээллийг агуулсан учир устгах боломжгүй.Зөвхөн унших боломжтой бүртгэлийг нуух боломжтой ч, устгах боломжгүй."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Энэ харилцагчийг устгаснаар хэд хэдэн бүртгэлийн мэдээллийг устгах болно."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Энэ харилцагчийг устгах уу?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Устгах"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Харилцагч байхгүй байна."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Харилцагчийг нүүр хуудсанд нэмсэн."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>-г нүүр хуудсанд нэмсэн."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Төхөөрөмжинд зураг байхгүй байна."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Харилцагчийн зураг"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Захиалгат шошгын нэр"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Зургийг арилгах"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Таны харилцагчдын жагсаалт хоосон байна"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Ийм шошготой харилцагч байхгүй"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Энэ бүртгэлд харилцагч байхгүй байна"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Таны харилцагчдын жагсаалт хоосон байна"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> хадгалагдсан"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Харилцагчийг хадгалсан"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Харилцагчийг салгасан"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Харилцагчийн өөрчлөлтүүдийг хадгалж чадсангүй"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Харилцагчийг салгаж чадсангүй"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Харилцагчийг холбож чадсангүй"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Харилцагчийг хадгалахад алдаа гарсан"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Харилцагчийн зургийн өөрчлөлтийг хадгалж чадсангүй"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Шошгыг ачаалж чадсангүй"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Шошгыг устгасан"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Шошго үүсгэсэн"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Шошго үүсгэх боломжгүй"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Шошгыг шинэчилсэн"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Шошгоос хассан"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Шошгонд нэмсэн"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Шошгын өөрчлөлтийг хадгалж чадсангүй"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Энэ шошго байна"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Зарим харилцагчид имэйл хаяггүй байна."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Зарим харилцагчид утасны дугааргүй байна."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Имэйл илгээх"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Зурвас илгээх"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Харилцагчдыг сонгоно уу"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Илгээх"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Харилцагч байхгүй"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"-г харилцагчдад нэмэх үү?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Таны харилцагчдын нэрс"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Өмнөх дэлгэц рүү буцахын тулд товших"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Утасны дугаар нэмэх"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Имэйл нэмэх"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Тус үйлдлийг гүйцэтгэх апп олдсонгүй."</string>
+ <string name="menu_share" msgid="943789700636542260">"Хуваалцах"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Харилцагчдад нэмэх"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Нэмэх"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other"> Харилцагчийг хуваалцах</item>
+ <item quantity="one">Харилцагчийг хуваалцах</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Бүртгэл сонгох"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Шошго үүсгэх"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Шошгын нэрийг өөрчлөх"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Шошгын нэр"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Шошгын нэр"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Дуут чат"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Видео чат"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> харилцагч"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> бүртгэл"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Зураг авах"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Шинэ зураг авах"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Зураг сонгох"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Шинэ зураг сонгох"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Хайж байна..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Огноо"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Шошго"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Цуцлах"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Буцах"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"хаах"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Сонгосон харилцагчийг засварлах руу шилжих үү? Таны оруулсан мэдээллүүд хуулагдах болно."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Директор <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Тохиргоо"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Тохиргоо"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Тусламж, санал хүсэлт"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Утасны дугаар"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Харилцагчдад нэмэх"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Хаах"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Жил оруулах"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Бүртгэл нэмэх"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортлох"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Шинийг үүсгэх..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" шошгыг устгах уу? (Харилцагчид нь устахгүй.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Өөр харилцагчийн жагсаалттай холбохын тулд харилцагчийн нэрийг бичнэ үү."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Түр санах ойд хуулах"</string>
+ <string name="set_default" msgid="4417505153468300351">"Үндсэн болгох"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Үндсэнээс хасах"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Текст хуулагдав"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Өөрчлөлтийг цуцлах уу?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Устгах"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Цуцлах"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Тохируулгыг устгах уу?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Харилцагчдаас хайх"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Харилцагчдыг арилгах"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Миний дотоод профайл"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Миний <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайл"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Өөрийн харилцагчдыг Google дээр нөөцлөхийн тулд бүртгэл нэмэхэд нэг минут зарцуулна уу."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Шинэ харилцагчийн хаягийг <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>-д хадгална."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Шинэ харилцагчид өгөгдмөл бүртгэл сонгох:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Шинэ харилцагч үүсгэх"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Харилцагчийг засварлах"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Зөвхөн харах"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Засварлах харилцагчийг сонгоно уу"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Холбогдсон харилцагчид"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Нэмэх"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Холбоосыг салгах"</string>
+ <string name="add_account" msgid="8201790677994503186">"Бүртгэл нэмэх"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Шинэ бүртгэл нэмэх"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Өгөгдлийн сангийн файлуудыг экспорт хийх"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Шинэ харилцагч үүсгэх"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Дэлгэрэнгүй үзэх"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Цөөнийг харах"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Саяхны"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Тухай"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Хувийн хуулбар үүсгэж байна…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Маргааш"</string>
+ <string name="today" msgid="8041090779381781781">"Өнөөдөр"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Өнөөдөр <xliff:g id="TIME_INTERVAL">%s</xliff:g>-д"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Маргааш <xliff:g id="TIME_INTERVAL">%s</xliff:g>-д"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Гарчиггүй үйл явдал)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Тохируулах"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Байгууллага"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Хоч"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Тэмдэглэл"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Вэбсайт"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Үйл явдал"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Хамаарал"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Нэр"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Имэйл"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Утас"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"байршил руу очих чиглэл"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"саяхны sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. хариу бичихийн тулд товшино уу"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ирж байгаа"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"гарах"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"аваагүй"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"саяхны дуудлага. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. буцааж залгахын тулд товшино уу"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Та: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Нэмэлт талбар"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Харилцагчийн зургийг өөрчлөх"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Харилцагчийн зураг нэмэх"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Харилцагчийн зураг"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Засварлагчийг нээж чадсангүй."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Хадгалж байна"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>-н харилцагчийн мэдээллийг засварлах боломжгүй"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ХАРИЛЦАГЧДЫГ ХОЛБОХ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЦУЦЛАХ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Энэ харилцагч"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Боломжит хуулбар"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Эдгээр харилцагчийн хаяг нь ижил хүн байж болзошгүй. Та нэг харилцагчийн хаяг болгон холбох боломжтой."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>-г устгах"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>-г устгах"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Санал болголт"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Шинэ"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Навигацын шургуулгыг нээх"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Навигацын шургуулгыг хаах"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> шошго"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Шошго"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Бүртгэл"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Өөрийн түүхийг хамтад нь харна уу"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Арга хэмжээ болон зурвасууд"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Үйл явдал"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Зурвас"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Санал болголт"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Харилцагчдаа цэгцтэй, хэрэгцээтэй байдлаар хадгалаарай"</string>
+ <string name="undo" msgid="1425165101664071422">"Буцаах"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> руу залгах"</string>
+ <string name="call_home" msgid="1990519474420545392">"Гэрийн утас руу залгах"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Гар утас руу залгах"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ажил руу залгах"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Ажлын факс руу залгах"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Гэрийн факс руу залгах"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Пейжер рүү залгах"</string>
+ <string name="call_other" msgid="8563753966926932052">"Залгах"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Дуудлага хүлээж авахаар залгах"</string>
+ <string name="call_car" msgid="3280537320306436445">"Машин руу залгах"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Компанийн үндсэн дугаар руу залгах"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN руу залгах"</string>
+ <string name="call_main" msgid="6082900571803441339">"Үндсэн дугаар руу залгах"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Факс руу залгах"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Радио руу залгах"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Телекс рүү залгах"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD рүү залгах"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ажлын гар утас руу залгах"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ажлын пейжер рүү залгах"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> руу залгах"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS рүү залгах"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Залгах)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> руу мессеж бичих"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Гэрийн утас руу зурвас илгээх"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Гар утас руу зурвас илгээх"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Ажил руу зурвас илгээх"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Ажлын факс руу зурвас илгээх"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Гэрийн факс руу зурвас илгээх"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Пейжер рүү зурвас илгээх"</string>
+ <string name="sms_other" msgid="806127844607642331">"Зурвас илгээх"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Дуудлага авах зурвас илгээх"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Машин руу зурвас илгээх"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Компанийн үндсэн дугаар руу зурвас илгээх"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN рүү зурвас илгээх"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Үндсэн дугаар руу зурвас илгээх"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Факс руу зурвас илгээх"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Радио руу зурвас илгээх"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Телекс рүү зурвас илгээх"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD рүү зурвас илгээх"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Ажлын гар утас руу зурвас илгээх"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Ажлын пейжэр рүү зурвас илгээх"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> руу зурвас бичих"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS руу зурвас илгээх"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Зурвас)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Видео дуудлага хийх"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Байнга холбоо барьдаг харилцагчдын жагсаалтыг устгах уу?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Та Харилцагч болон Утас апп-ууд дахь байнга холбоо барьсан харилцагчдын жагсаалтыг устгаж, ингэснээрээ имэйл апп-уудыг таны имэйл хаяглах хандлагыг бүр эхнээс нь суралцахад хүргэнэ."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Байнга холбоо барьдаг харилцагчдын жагсаалтыг устгаж байна…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Холбогдсон"</string>
+ <string name="status_away" msgid="1838861100379804730">"Холдсон"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Завгүй"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Бусад"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Директор"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Ажлын лавлагаа"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Бүх харилцагчид"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>-тай шууд холбогдох"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Нэр байхгүй)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Байнга холбоо барьдаг"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Утасны дугаартай бүх харилцагчид"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Ажлын профайлын харилцагч"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Шинэчлэлтүүдийг харах"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Төхөөрөмж"</string>
+ <string name="account_sim" msgid="6519016427905087952">"СИМ"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Нэр"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Хоч"</string>
+ <string name="name_given" msgid="4280790853455320619">"Өөрийн нэр"</string>
+ <string name="name_family" msgid="7466985689626017037">"Овог"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Нэрийн урьдитгал"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Дундах нэр"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Нэрийн дагавар"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Авианы нэр"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Өөрийн нэрийн дуудлага"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Дундах авианы нэр"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Овгийн дуудлага"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Утас"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Имэйл"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Хаяг"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Байгууллага"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Хамаарал"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Баярт өдөр"</string>
+ <string name="sms" msgid="1756857139634224222">"Зурвас"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Хаяг"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компани"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Гарчиг"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Тэмдэглэл"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Тусгай"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Вэбсайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Шошгууд"</string>
+ <string name="email_home" msgid="8573740658148184279">"Гэрийн имэйл рүү"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Гар утас руу имэйлдэх"</string>
+ <string name="email_work" msgid="2807430017302722689">"Ажлын имэйл рүү"</string>
+ <string name="email_other" msgid="3454004077967657109">"Имэйл"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> руу имэйлдэх"</string>
+ <string name="email" msgid="5668400997660065897">"Имэйл"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Гудамж"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Хот"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Муж улс"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Зип код"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Улс"</string>
+ <string name="map_home" msgid="1243547733423343982">"Гэрийн хаяг харах"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ажлын хаяг харах"</string>
+ <string name="map_other" msgid="3817820803587012641">"Хаяг харах"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> хаяг харах"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM ашиглан чатлах"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live ашиглан чатлах"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ашиглан чатлах"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype ашиглан чатлах"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ ашиглан чатлах"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk ашиглан чатлах"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ ашиглан чатлах"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber ашиглан чатлах"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"устгах"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Бусад нэрийн талбаруудыг харуулах"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Нэрийн талбарыг хумих"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Бусад галиглах нэрийн талбаруудыг харуулах"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Галиглах нэрийн талбарыг хумих"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Дэлгэх"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Хумих"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Дэлгэсэн"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Хумисан"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Бүх харилцагчид"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Одтой"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Тохируулах"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Харилцагч"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Бусад бүх харилцагчид"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Бүх харилцагчид"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Синк бүлгэмийг арилгах"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Синк бүлгэм нэмэх"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Өөр бүлгэмүүд…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\"-г синкээс хассанаар бүлгэмээс хасагдсан бүх харилцагчдыг мөн синкээс хасах болно."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Харуулах тохиргоог хадгалж байна…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Тусгай харагдац"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Импортолсон харилцагчийн хаягийг хадгалах:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM карт"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d харилцагч</item>
+ <item quantity="one">1 харилцагч</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> харилцагч • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> харилцагч • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf файл"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Импортлох зүйл байхгүй"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard-с харилцагчдыг импортлох үү?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g>-г импорт хийхийг цуцлах уу?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>-г экспорт хийхийг цуцлах уу?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard импорт/экспорт хийхийг цуцлаж чадсангүй"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Тодорхойгүй алдаа."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"-г нээж чадсангүй: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорт хийгчийг эхлүүлж чадсангүй: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспорт хийж болох харилцагч байхгүй."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Та шаардлагатай зөвшөөрлийг идэвхгүй болгосон байна."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорт хийх явцад алдаа гарсан: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O алдаа"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Санах ой хүрэхгүй байна. Файл хэт том байж магадгүй."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат нь дэмжигдэхгүй байна."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-г экспорт хийж дууссан."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Харилцагчдыг экспортолж дууслаа."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Харилцагчдыг экспортолж дууссан. Харилцагчдыг хуваалцахын тулд мэдэгдлийг дарна уу."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Харилцагчдыг хуваалцахын тулд дарна уу."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g>-г экспорт хийхийг цуцлав."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Харилцагчийн өгөгдлийг экспорт хийж байна"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Харилцагчийн датаг экспортолсон."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Өгөгдлийн сангийн мэдээллийг авч чадсангүй"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортлох харилцагчид байхгүй байна."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard бичигч зохих ёсоор эхэлсэнгүй."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорт хийж чадсангүй"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Харилцагчийн өгөгдлийг экспорт хийгээгүй.\nШалтгаан: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>-г импорт хийж байна"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard өгөгдлийг уншиж чадсангүй"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> -г импорт хийж дуусав"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-г импорт хийхийг цуцлав"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>-г удахгүй импортлох болно."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файлыг удахгүй импортлох болно."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard импортлох хүсэлтийг зөвшөөрсөнгүй. Дараа дахин оролдоно уу."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Харилцагчдыг удахгүй экспортлох болно."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard экспорт хийх хүсэлтийг зөвшөөрсөнгүй. Дараа дахин оролдоно уу."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"харилцагч"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-г дотоод түр санд кеш хийж байна. Удахгүй бодитоор импорт хийж эхлэх болно."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-г импорт хийж чадсангүй."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-р хүлээн авсан харилцагч"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кеш хийж байна"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт хийж байна <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf файл болгож экспортлох"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Эрэмбэлэх"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Авианы нэр"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Байнга харуулах"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Хоосон бол нуух"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Өөрийн нэр"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Овог"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Нэрийн формат"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Нэрийг эхэнд нь"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Овгийг эхэнд нь"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Бүртгэл"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Шинэ харилцагчийн өгөгдмөл бүртгэл"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Миний мэдээлэл"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Өөрийн профайлыг тохируулна уу"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Харилцагчдын тухай"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Дуртай харилцагчдаа хуваалцах"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Бүх харилцагчдыг хуваалцах"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Харилцагчдыг хуваалцаж чадсангүй."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Харилцагчдыг экспортлох"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Харилцагчдыг импортлох"</string>
+ <string name="share_error" msgid="948429331673358107">"Энэ харилцагчийг хуваалцах боломжгүй."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Хуваалцах харилцагчид байхгүй байна."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Харуулах харилцагчид"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Харуулах харилцагчид"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Харагдацыг тааруулах"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Хадгалах"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Харилцагч хайх"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Таалагддаг"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Импортлох"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Экспортлох"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блоклосон дугаар"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>-р"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-р"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"хайлтыг зогсоох"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Хайлтыг цэвэрлэх"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Бүртгэл"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Дуудлагад байнга үүнийг ашиглах"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Тэмдэглэл бүхий дуудлага хийх"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Дуудлагаар илгээх тэмдэглэл бичнэ үү..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ИЛГЭЭХ &amp; ЗАЛГАХ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Боловсруулсан хувилбар"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Нээлттэй эхийн лиценз"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Нээлттэй эхийн програм хангамжийн лицензийн мэдээлэл"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Нууцлалын бодлого"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Үйлчилгээний нөхцөл"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Нээлттэй эхийн лиценз"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL-г нээж чадсангүй."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>-г шалгасан"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g>-г шалгаагүй"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Видео дуудлага хийх"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Устгах"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Эллипс"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> цаг <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Энэ товчилборыг идэвхгүй болгосон"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Харилцагчийг хассан"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Импортлох"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Харилцагчдыг сонгох"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Таны SIM картанд харилцагчид байхгүй байна"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Харилцагч аль хэдийн таны жагсаалтанд байна"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-н харилцагчдыг импорт хийсэн</item>
+ <item quantity="one">1 SIM-н харилцагчийг импорт хийсэн</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM-н харилцагчдыг импортолж чадсангүй"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM-с импортлох"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Цуцлах"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автомат синк идэвхгүй байна. Идэвхжүүлэх бол товшино уу."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Хаах"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Автомат синк идэвхгүй байна. Идэвхжүүлэх бол товшино уу."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Автомат синкийг асаах уу?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google Харилцагч төдийгүй бүх апп болон бүртгэлд таны оруулсан өөрчлөлтийг вэб болон таны бусад төхөөрөмжүүд хооронд шинэчилж байх болно."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Идэвхжүүлэх"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Холболт байхгүй"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Дэлгэрэнгүй үзэх"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM картыг импорт хийж дууссан"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Импортолж чадсангүй"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM картнаас харилцагчдыг импортолж чадсангүй"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-г импорт хийж байна"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Мэдэгдэл"</string>
+</resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
deleted file mode 100644
index 40a5b8051..000000000
--- a/res/values-mr-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"संपर्क"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"संपर्क"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"संपर्क पहा"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"संपर्क संपादित करा"</string>
- <string name="contactsList" msgid="8661624236494819731">"संपर्क"</string>
- <string name="shortcutContact" msgid="749243779392912958">"संपर्क"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"थेट डायल करा"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"थेट संदेश"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"संपर्क शॉर्टकट निवडा"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"कॉल करण्यासाठी एक नंबर निवडा"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"संदेश करण्यासाठी नंबर निवडा"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"संपर्कामध्ये जोडा"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"संपर्क निवडा"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नवीन संपर्क तयार करा"</string>
- <string name="starredList" msgid="4817256136413959463">"तारांकित"</string>
- <string name="frequentList" msgid="7154768136473953056">"वारंवार"</string>
- <string name="strequentList" msgid="5640192862059373511">"आवडते"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"संपर्क तपशील"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"संपर्क संपादित करा"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"संपर्क तयार करा"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"गट संपादित करा"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"गट तयार करा"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"विषयी"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"अद्यतने"</string>
- <string name="searchHint" msgid="8482945356247760701">"संपर्क शोधा"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"संपर्क पहा"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"आवडीमध्ये जोडा"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"आवडी मधून काढा"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"आवडींमधून काढले"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"आवडींमध्ये जोडले"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"संपादित करा"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"हटवा"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"फोटो बदला"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"मुख्‍य स्क्रीन वर ठेवा"</string>
- <string name="menu_call" msgid="3992595586042260618">"संपर्कास कॉल करा"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"संपर्कास मजकूर पाठवा"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"दुवा रद्द करा"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"संपादित करा"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"हटवा"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"संपर्क जोडा"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"गट जोडा"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करायचा?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"दुवा रद्द करा"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"आपण आधीपासून केलेले बदल आपण जतन करू आणि एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करू इच्छिता?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"जतन करा आणि दुवा रद्द करा"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"आपण आधीपासून केलेले बदल आपण जतन करू आणि निवडलेल्या संपर्काशी दुवा जोडू इच्छिता?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"जतन करा आणि दुवा जोडा"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"दुवा साधा"</string>
- <string name="menu_save" msgid="1727844363591825909">"जतन करा"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"संपर्कांचा दुवा साधा"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"आपण <xliff:g id="NAME">%s</xliff:g> सह ज्या संपर्काचा दुवा जोडू इच्छिता तो निवडा:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सर्व संपर्क दर्शवा"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सूचित संपर्क"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सर्व संपर्क"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"संपर्कांचा दुवा साधला"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">संपर्क हटविला</item>
- <item quantity="other">संपर्क हटविले</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करा"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"सर्व कॉल व्हॉइसमेलवर"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"आपल्‍या केवळ-वाचनीय खात्यांमधील संपर्क हटविले जाऊ शकत नाहीत परंतु ते लपविले जाऊ शकतात."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"लपवा"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"जो संपर्क हटवायचा आहे त्यामध्‍ये एकाधिक खात्यांमधील तपशील आहेत. केवळ-वाचनीय खात्यांमधील तपशील लपविले जातील, हटविले जाणार नाहीत."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"दुवा साधण्‍यासाठी आपण कमीतकमी दोन संपर्क निवडलेले असणे आवश्‍यक आहे."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"निवडलेल्या संपर्कांचा दुवा जोडायचा?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"दुवा साधा"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"हा संपर्क हटवायचा?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"निवडलेले संपर्क हटवायचे?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"आपल्‍या केवळ-वाचनीय खात्यांमधील संपर्क हटविले जाऊ शकत नाहीत परंतु ते लपविले जाऊ शकतात."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"जे संपर्क हटवायचे आहेत त्यामध्‍ये एकाधिक खात्यांमधील तपशील आहेत. केवळ-वाचनीय खात्यांमधील तपशील लपविले जातील, हटविले जाणार नाहीत."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"हा संपर्क हटविल्याने एकाधिक खात्‍यांमधून तपशील हटविले जातील."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"हा संपर्क हटवायचा?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"हटवा"</string>
- <string name="menu_discard" msgid="6854657936970228164">"बदल टाकून द्या"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"संपर्क अस्तित्वात नाही."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"संपर्क मुख्‍यपृष्‍ठावर जोडला."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ना मुख्‍यपृष्‍ठावर जोडले."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"नवीन संपर्क तयार करा"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"नवीन संपर्क तयार करा"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"संस्था"</item>
- <item msgid="7196592230748086755">"टीप"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"टॅब्‍लेटवर कोणतीही चित्रे उपलब्ध नाहीत."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"फोनवर कोणतीही चित्रे उपलब्ध नाहीत."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"संपर्क फोटो"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"लेबल नाव सानुकूलित करा"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"कॉल थेट व्हॉइसमेलवर पाठवा"</string>
- <string name="removePhoto" msgid="4898105274130284565">"फोटो काढा"</string>
- <string name="noContacts" msgid="4955659076981974652">"कोणतेही संपर्क नाहीत"</string>
- <string name="noGroups" msgid="8614664663561385253">"कोणतेही गट नाहीत."</string>
- <string name="noAccounts" msgid="7768267764545265909">"गट तयार करण्‍यासाठी आपल्‍याला खात्‍याची आवश्‍यकता अाहे."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"या गटात कोणतेही लोक नाहीत."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"काही जोडण्‍यासाठी, गट संपादित करा."</string>
- <string name="savingContact" msgid="4075751076741924939">"संपर्क जतन करीत आहे..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"संपर्क जतन केला"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"संपर्कांचा दुवा रद्द केला"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"संपर्क बदल जतन करू शकलो नाही."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"संपर्काचा दुवा रद्द करणे शक्य झाले नाही."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"संपर्काचा दुवा जोडणे शक्य झाले नाही."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"संपर्क जतन करताना त्रुटी."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"संपर्क फोटो बदल जतन करणे शक्य झाले नाही."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"गट जतन केला."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"गट बदल जतन करू शकलो नाही."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- <item quantity="other">फोन नंबरसह <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फोन नंबरसह कोणतेही संपर्क नाहीत"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> आढळला</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> आढळले</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"कोणतेही संपर्क नाहीत"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> आढळला</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> आढळले</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"सर्व"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"मनपसंत"</string>
- <string name="callBack" msgid="5498224409038809224">"पुन्हा कॉल करा"</string>
- <string name="callAgain" msgid="3197312117049874778">"पुन्हा कॉल करा"</string>
- <string name="returnCall" msgid="8171961914203617813">"उलट कॉल करा"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"संपर्कांमध्ये \"<xliff:g id="EMAIL">%s</xliff:g>\" जोडायचे?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"संपर्क फोटो"</string>
- <string name="description_plus_button" msgid="515164827856229880">"अधिक"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> पैकी <xliff:g id="CURRENT_NUMBER">%s</xliff:g> संपर्क"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"आपल्या संपर्कांची नावे"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ही क्रिया हाताळण्यासाठी कोणताही अ‍ॅप आढळला नाही."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"पूर्वीच्या स्क्रीनवर परत येण्यासाठी क्लिक करा"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"फोन नंबर जोडा"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ईमेल जोडा"</string>
- <string name="missing_app" msgid="1466111003546611387">"ही क्रिया हाताळण्यासाठी कोणताही अ‍ॅप आढळला नाही."</string>
- <string name="menu_share" msgid="943789700636542260">"सामायिक करा"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"संपर्कांमध्ये जोडा"</string>
- <string name="share_via" msgid="563121028023030093">"द्वारे संपर्क सामायिक करा"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"खात्याअंतर्गत गट तयार करा"</string>
- <string name="audio_chat" msgid="2535716629358298691">"व्हॉइस चॅट"</string>
- <string name="video_chat" msgid="1872255818640336072">"व्हिडिओ चॅट"</string>
- <string name="connections" msgid="8098440723172028350">"कनेक्शन"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"कनेक्शन जोडा"</string>
- <string name="recent" msgid="2659189233141493004">"अलीकडील"</string>
- <string name="recent_updates" msgid="4267258535615860710">"अलीकडील अद्यतने"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> संपर्क"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाते"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"या अ‍ॅप वरून संपादन करण्‍यायोग्‍य नाही."</string>
- <string name="group_read_only" msgid="1061762906115697637">"या डिव्हाइसवर संपादन करण्‍यायोग्‍य नाही."</string>
- <string name="take_photo" msgid="7496128293167402354">"फोटो घ्‍या"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"नवीन फोटो घ्या"</string>
- <string name="pick_photo" msgid="2129509985223564942">"फोटो निवडा"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"नवीन फोटो निवडा"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"संपर्क सूची अद्यतनित केली जात आहे."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"शोधत आहे..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"निवडलेले दर्शवा"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"सर्व दर्शवा"</string>
- <string name="menu_select_all" msgid="621719255150713545">"सर्व निवडा"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"सर्व निवड रद्द करा"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"नवीन जोडा"</string>
- <string name="add_organization" msgid="7311893231158291197">"संस्‍था जोडा"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"तारीख"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"गट नाव"</string>
- <string name="change_photo" msgid="8530597935483526383">"बदला"</string>
- <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक फोटो"</string>
- <string name="description_star" msgid="2605854427360036550">"आवडते"</string>
- <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करा"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"वर्तमान संपर्काचा निवडलेल्‍या संपर्कासह दुवा जोडायचा?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"निवडलेले संपर्क संपादित करण्‍यावर स्‍विच करायचे? आपण आत्तापर्यंत प्रविष्‍ट केलेली माहिती कॉपी केली जाईल."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"माझे संपर्क वर कॉपी करा"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"माझे संपर्क मध्ये जोडा"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"सानुकूल"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग्ज"</string>
- <string name="menu_settings" msgid="377929915873428211">"सेटिंग्ज"</string>
- <string name="menu_help" msgid="1680178646764069976">"मदत आणि अभिप्राय"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"प्रदर्शन पर्याय"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"फोन नंबर"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"संपर्कांमध्ये जोडा"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"संपर्कामध्ये जोडा"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"बंद करा"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"वर्ष समाविष्‍ट करा"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"संपर्क"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"लोड करीत आहे..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"नवीन संपर्क तयार करा"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"खाते जोडा"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"संपर्क आयात करा"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"नवीन गट तयार करा"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"नवीन गट तयार करा"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> गट</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> गट</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" गट हटवायचा? (संपर्क आपणहून हटविले जाणार नाहीत.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> मधील <xliff:g id="COUNT_2">%1$d</xliff:g> व्यक्ती</item>
- <item quantity="other"> <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> मधील <xliff:g id="COUNT_2">%1$d</xliff:g> लोक</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> व्‍यक्‍ती</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> लोक</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"दुसर्‍यासह दुवा जोडण्‍याआधी संपर्क नाव टाइप करा."</string>
- <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डवर कॉपी करा"</string>
- <string name="set_default" msgid="4417505153468300351">"डीफॉल्ट म्हणून सेट करा"</string>
- <string name="clear_default" msgid="7193185801596678067">"डीफॉल्ट साफ करा"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"मजकूर कॉपी केला"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"आपले बदल टाकून देऊन संपादन सोडायचे?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"टाकून द्या"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"संपादन करणे सुरु ठेवा"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"माझे प्रोफाईल सेट करा"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"व्‍यक्तीचे नाव टाईप करा"</string>
- <string name="group_name_hint" msgid="238359485263401293">"गटाचे नाव"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"माझे स्थानिक प्रोफाइल"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"माझे <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाईल"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सर्व संपर्क प्रदर्शित करीत आहे"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"आपण आपला फोन गमावला तरीही आपले संपर्क सुरक्षित ठेवा: ऑनलाइन सेवेसह संकालित करा."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"खाते जोडा"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"आपल्‍या नवीन संपर्काचा बॅकअप घेतला जाणार नाही. संपर्कांचे ऑनलाइन बॅकअप घेणारे खाते जोडायचे?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नवीन संपर्क <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> वर जतन केले जातील."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नवीन संपर्कांसाठी एक डीफॉल्ट खाते निवडा:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"नवीन संपर्क जोडा"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"संपर्क संपादित करा"</string>
- <string name="keep_local" msgid="1258761699192993322">"स्थानिक ठेवा"</string>
- <string name="add_account" msgid="8201790677994503186">"खाते जोडा"</string>
- <string name="add_new_account" msgid="5748627740680940264">"नवीन खाते जोडा"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"डेटाबेस फाईल निर्यात करा"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"नवीन संपर्क जोडा"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"अधिक पहा"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कमी पहा"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"सर्व पहा"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"अलीकडील"</string>
- <string name="about_card_title" msgid="2920942314212825637">"विषयी"</string>
- <string name="send_message" msgid="8938418965550543196">"संदेश पाठवा"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"वैयक्तिक प्रत तयार करीत आहे..."</string>
- <string name="yesterday" msgid="6840858548955018569">"काल"</string>
- <string name="tomorrow" msgid="6241969467795308581">"उद्या"</string>
- <string name="today" msgid="8041090779381781781">"आज"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"आज <xliff:g id="TIME_INTERVAL">%s</xliff:g> वाजता"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"उद्या <xliff:g id="TIME_INTERVAL">%s</xliff:g> वाजता"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(अशीर्षकांकित इव्‍हेंट)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"सेट करा"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"संस्था"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"टोपणनाव"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"टीप"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"वेबसाइट"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"इव्‍हेंट"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"संबंध"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"खाते"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"नाव"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ईमेल करा"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"फोटो"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"संपर्क संपादक विस्तृत करण्‍यासाठी क्लिक करा."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"संपर्क संपादक संकुचित करण्‍यासाठी क्लिक करा."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"स्थानाचे दिशानिर्देश"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"अलीकडील एसएमएस. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. प्रतिसाद देण्यासाठी क्लिक करा"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"येणारे"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"केले जाणारे"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"सुटलेले"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"अलीकडील कॉल. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. परत कॉल करण्यासाठी क्लिक करा"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"आपण: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"आपण ईमेल फिल्डमध्ये किंवा फोन फिल्डमध्ये एखाद्या व्यक्तीचे Hangouts अभिज्ञापक प्रविष्ट करता तेव्हा Hangouts उत्कृष्ट कार्य करते."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"आणखी फील्ड"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"फोटो बदला"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"संपादक उघडण्यात अयशस्वी."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"यावर जतन करीत आहे"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"सध्या <xliff:g id="ACCOUNT_NAME">%s</xliff:g> मध्ये जतन करीत आहे. भिन्न खाते निवडण्यासाठी दोनदा टॅप करा."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">दुवा जोडलेला संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">दुवा जोडलेले संपर्क (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> दुवा जोडलेले संपर्क"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्कांचा दुवा साधा"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द करा"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> संभाव्य डुप्लिकेट</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> संभाव्य डुप्लिकेट</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> दुवा साधलेला संपर्क</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> दुवा साधलेले संपर्क</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"हा संपर्क"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभाव्य डुप्लिकेट"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"हे संपर्क म्हणजे कदाचित एकच व्यक्ती असू शकते. आपण त्या सर्वांना एकल दुवा म्हणून एकत्र जोडू शकता."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"दुवा साधलेले संपर्क"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"आपल्‍या खात्यांमधून"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"एक फोटो घ्या"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"सर्व फोटो"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"फोटो निवडा"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> कडील"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> हटवा"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटवा"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>कडील फोटो चेक केला नाही"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>कडील फोटो चेक केला"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खात्यामधील फोटो चेक केला नाही"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खात्यामधील फोटो चेक केला"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"भाषेचे बदल दर्शवण्यासाठी संपर्क सूची अद्यतनित केली जात आहे. \n\nकृपया प्रतीक्षा करा..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित केलेले नंबर"</string>
-</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
new file mode 100644
index 000000000..cec4a158c
--- /dev/null
+++ b/res/values-mr/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"संपर्क"</string>
+ <string name="contactsList" msgid="8661624236494819731">"संपर्क"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"संपर्क जोडा"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"संपर्क"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"थेट डायल करा"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"थेट संदेश"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"संपर्क निवडा"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"संपर्कामध्ये जोडा"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"संपर्क निवडा"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"निवडा"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नवीन संपर्क तयार करा"</string>
+ <string name="searchHint" msgid="8482945356247760701">"संपर्क शोधा"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"आवडीमध्ये जोडा"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"आवडी मधून काढा"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"आवडींमधून काढले"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"आवडींमध्ये जोडले"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"संपादित करा"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"हटवा"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"फोटो बदला"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"शॉर्टकट तयार करा"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"दुवा रद्द करा"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"संपर्क काढा"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"लेबल पुनर्नामित करा"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"लेबल हटवा"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"संपर्क जोडा"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"संपर्क निवडा"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"संपर्क जोडा"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबलवरून काढा"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल तयार करा"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करायचा?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"दुवा रद्द करा"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"आपण आधीपासून केलेले बदल आपण जतन करू आणि एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करू इच्छिता?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"जतन करा आणि दुवा रद्द करा"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"आपण आधीपासून केलेले बदल आपण जतन करू आणि निवडलेल्या संपर्काशी दुवा जोडू इच्छिता?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"जतन करा आणि दुवा जोडा"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"दुवा साधत आहे"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"दुवा रद्द करत आहे"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"दुवा साधा"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"दुवा जोडलेले संपर्क"</string>
+ <string name="menu_save" msgid="1727844363591825909">"जतन करा"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"संपर्कांचा दुवा साधा"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"आपण <xliff:g id="NAME">%s</xliff:g> सह ज्या संपर्काचा दुवा जोडू इच्छिता तो निवडा:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सूचित संपर्क"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सर्व संपर्क"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> चा दुवा जोडला"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"संपर्कांचा दुवा साधला"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> हटविले"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> आणि <xliff:g id="NAME_1">%2$s</xliff:g> हटविले"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... हटविले"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">संपर्क हटविला</item>
+ <item quantity="other">संपर्क हटविले</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google वरील"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> मधील"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिंगटोन सेट करा"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"व्हॉइसमेल मार्गस्थ करा"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"व्हॉइसमेलवर मार्गस्थ रद्द करा"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"हा संपर्क केवळ-वाचनीय आहे, तो हटवणे शक्य नाही, परंतु आपण तो लपवू शकता."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"संपर्क लपवा"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"या संंपर्कावरील केवळ-वाचनीय खाती लपविली जातील, हटविली जाणार नाहीत."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"हा संपर्क हटवायचा?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"निवडलेले संपर्क हटवायचे?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"आपल्‍या केवळ-वाचनीय खात्यांमधील संपर्क हटविले जाऊ शकत नाहीत परंतु ते लपविले जाऊ शकतात."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"जे संपर्क हटवायचे आहेत त्यामध्‍ये एकाधिक खात्यांमधील तपशील आहेत. केवळ-वाचनीय खात्यांमधील तपशील लपविले जातील, हटविले जाणार नाहीत."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"हा संपर्क हटविल्याने एकाधिक खात्‍यांमधून तपशील हटविले जातील."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"हा संपर्क हटवायचा?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"हटवा"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"संपर्क अस्तित्वात नाही."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"संपर्क मुख्‍यपृष्‍ठावर जोडला."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ना मुख्‍यपृष्‍ठावर जोडले."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"डिव्हाइसवर कोणतीही चित्रे उपलब्ध नाहीत."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"संपर्क फोटो"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"लेबल नाव सानुकूलित करा"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"फोटो काढा"</string>
+ <string name="noContacts" msgid="2228592924476426108">"आपली संपर्क सूची रिक्त आहे"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"या लेबलसह कोणतेही संपर्क नाहीत"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"या खात्यामध्ये कोणतेही संपर्क नाहीत"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"आपली संपर्क सूची रिक्त आहे"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> जतन केले"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"संपर्क जतन केला"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"संपर्कांचा दुवा रद्द केला"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"संपर्क बदल जतन करणे शक्य झाले नाही"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"संपर्काचा दुवा रद्द करणे शक्य झाले नाही"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"संपर्काचा दुवा जोडणे शक्य झाले नाही"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क जतन करताना त्रुटी"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फोटो बदल जतन करणे शक्य झाले नाही"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करण्यात अयशस्वी झाले"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटविले"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल तयार केले"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल तयार करू शकत नाही"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबल अद्यतनित केले"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबल मधून काढले"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबलमध्ये जोडले"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबल बदल जतन करणे शक्य झाले नाही"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ते लेबल आधीपासून अस्तित्वात आहे"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"काही संपर्कांमध्ये ईमेल नाहीत."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"काही संपर्कांमध्ये फोन नंबर नाहीत."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ईमेल पाठवा"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"संदेश पाठवा"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"संपर्क निवडा"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"पाठवा"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"कोणतेही संपर्क नाहीत"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"संपर्कांमध्ये \"<xliff:g id="EMAIL">%s</xliff:g>\" जोडायचे?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"आपल्या संपर्कांची नावे"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"पूर्वीच्या स्क्रीनवर परत येण्यासाठी क्लिक करा"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"फोन नंबर जोडा"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ईमेल जोडा"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ही क्रिया हाताळण्यासाठी कोणताही अ‍ॅप आढळला नाही."</string>
+ <string name="menu_share" msgid="943789700636542260">"सामायिक करा"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"संपर्कांमध्ये जोडा"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"जोडा"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">संपर्क याद्वारे सामायिक करा</item>
+ <item quantity="other">संपर्क याद्वारे सामायिक करा</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"खाते निवडा"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"लेबल बनवा"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"लेबल पुनर्नामित करा"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"लेबल नाव"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबल नाव"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"व्हॉइस चॅट"</string>
+ <string name="video_chat" msgid="1872255818640336072">"व्हिडिओ चॅट"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> संपर्क"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाते"</string>
+ <string name="take_photo" msgid="7496128293167402354">"फोटो घ्‍या"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"नवीन फोटो घ्या"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"फोटो निवडा"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"नवीन फोटो निवडा"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"शोधत आहे..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"तारीख"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द करा"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"परत"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करा"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"निवडलेले संपर्क संपादित करण्‍यावर स्‍विच करायचे? आपण आत्तापर्यंत प्रविष्‍ट केलेली माहिती कॉपी केली जाईल."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"सेटिंग्ज"</string>
+ <string name="menu_settings" msgid="377929915873428211">"सेटिंग्ज"</string>
+ <string name="menu_help" msgid="1680178646764069976">"मदत आणि अभिप्राय"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"फोन नंबर"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"संपर्कांमध्ये जोडा"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"बंद करा"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"वर्ष समाविष्‍ट करा"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"खाते जोडा"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात करा"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"नवीन तयार करा…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" लेबल हटवायचे? (संपर्क आपणहून हटविले जाणार नाहीत.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"दुसर्‍यासह दुवा जोडण्‍याआधी संपर्क नाव टाइप करा."</string>
+ <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डवर कॉपी करा"</string>
+ <string name="set_default" msgid="4417505153468300351">"डीफॉल्ट म्हणून सेट करा"</string>
+ <string name="clear_default" msgid="7193185801596678067">"डीफॉल्ट साफ करा"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"मजकूर कॉपी केला"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"बदल टाकून द्यायचे?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"टाकून द्या"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द करा"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"सानुकूलीकरणेे टाकूून द्यायची?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"संपर्क शोधा"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"संपर्क काढा"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"माझे स्थानिक प्रोफाइल"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"माझे <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाईल"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google वर आपल्या संपर्कांचा बॅक अप घेणारे खाते जोडण्‍यासाठी एक मिनिट घ्या."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नवीन संपर्क <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> वर जतन केले जातील."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नवीन संपर्कांसाठी एक डीफॉल्ट खाते निवडा:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"नवीन संपर्क तयार करा"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"संपर्क संपादित करा"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"केवळ दर्शनीय"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"संपादित करण्यासाठी संपर्क निवडा"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"दुवा साधलेले संपर्क"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"जोडा"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"दुवा रद्द करा"</string>
+ <string name="add_account" msgid="8201790677994503186">"खाते जोडा"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"नवीन खाते जोडा"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"डेटाबेस फाईल निर्यात करा"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"नवीन संपर्क तयार करा"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"अधिक पहा"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कमी पहा"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"अलीकडील"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"विषयी"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"वैयक्तिक प्रत तयार करीत आहे..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"उद्या"</string>
+ <string name="today" msgid="8041090779381781781">"आज"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"आज <xliff:g id="TIME_INTERVAL">%s</xliff:g> वाजता"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"उद्या <xliff:g id="TIME_INTERVAL">%s</xliff:g> वाजता"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(अशीर्षकांकित इव्‍हेंट)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"सेट करा"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"संस्था"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"टोपणनाव"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"टीप"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"वेबसाइट"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"इव्‍हेंट"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"संबंध"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"नाव"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ईमेल करा"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"स्थानाचे दिशानिर्देश"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"अलीकडील एसएमएस. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. प्रतिसाद देण्यासाठी क्लिक करा"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"येणारे"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"केले जाणारे"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"सुटलेले"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"अलीकडील कॉल. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. परत कॉल करण्यासाठी क्लिक करा"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"आपण: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"आणखी फील्ड"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"संपर्क फोटो बदला"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"संपर्क फोटो जोडा"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"संपर्क फोटो"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"संपादक उघडण्यात अयशस्वी."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"यावर जतन करीत आहे"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> वरील संपर्क माहिती संपादनयोग्य नाही"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्कांचा दुवा साधा"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द करा"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"हा संपर्क"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभाव्य डुप्लिकेट"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"हे संपर्क म्हणजे कदाचित एकच व्यक्ती असू शकते. आपण त्या सर्वांना एकल दुवा म्हणून एकत्र जोडू शकता."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> हटवा"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटवा"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"सूचना"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नवीन"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"नेव्हिगेशन ड्रॉवर उघडा"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"नेव्हिगेशन ड्रॉवर बंद करा"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> लेबल"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"लेबले"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"खाती"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"येथे आपला इतिहास एकत्र पहा"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"इव्हेंट आणि संदेश"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"इव्हेंट"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"संदेश"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"सूचना"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"आपले संपर्क व्यवस्थापित आणि उपयुक्त ठेवा"</string>
+ <string name="undo" msgid="1425165101664071422">"पूर्ववत करा"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ला कॉल करा"</string>
+ <string name="call_home" msgid="1990519474420545392">"निवासस्‍थानी कॉल करा"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"मोबाईलवर कॉल करा"</string>
+ <string name="call_work" msgid="5328785911463744028">"कार्यस्‍थानी कॉल करा"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"कार्यस्‍थानी फॅक्‍स वर कॉल करा"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"निवास फॅक्‍स वर कॉल करा"</string>
+ <string name="call_pager" msgid="9003902812293983281">"पेजर वर कॉल करा"</string>
+ <string name="call_other" msgid="8563753966926932052">"कॉल करा"</string>
+ <string name="call_callback" msgid="1910165691349426858">"कॉलबॅकवर कॉल करा"</string>
+ <string name="call_car" msgid="3280537320306436445">"कारला कॉल करा"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"कंपनी मुख्‍य ला कॉल करा"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN कॉल करा"</string>
+ <string name="call_main" msgid="6082900571803441339">"मुख्य वर कॉल करा"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"फॅक्स वर कॉल करा"</string>
+ <string name="call_radio" msgid="8296755876398357063">"रेडिओ वर कॉल करा"</string>
+ <string name="call_telex" msgid="2223170774548648114">"टेलेक्स वर कॉल करा"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD वर कॉल कर"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"कार्यस्‍थानी मोबाईलवर कॉल करा"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"कार्यस्‍थानी पेजरवर कॉल करा"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ला कॉल करा"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS वर कॉल करा"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (कॉल करा)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> वर मजकूर पाठवा"</string>
+ <string name="sms_home" msgid="7524332261493162995">"निवासस्थानी मजकूर पाठवा"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"मोबाईलवर मजकूर पाठवा"</string>
+ <string name="sms_work" msgid="2269624156655267740">"कार्यस्थानी मजकूर पाठवा"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"कार्य फॅक्सवर मजकूर पाठवा"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"घर फॅक्सवर मजकूर पाठवा"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"पेजरवर मजकूर पाठवा"</string>
+ <string name="sms_other" msgid="806127844607642331">"मजकूर"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"कॉलबॅक वर मजकूर पाठवा"</string>
+ <string name="sms_car" msgid="7444227058437359641">"कार वर मजकूर पाठवा"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"कंपनी मुख्य वर मजकूर पाठवा"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN वर मजकूर पाठवा"</string>
+ <string name="sms_main" msgid="8621625784504541679">"मुख्य वर मजकूर पाठवा"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"फॅक्सवर मजकूर पाठवा"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"रेडिओवर मजकूर पाठवा"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"टेलेक्सवर मजकूर पाठवा"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD वर मजकूर पाठवा"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"कार्य मोबाईलवर मजकूर पाठवा"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"कार्य पेजरवर मजकूर पाठवा"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> मजकूर पाठवा"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS वर मजकूर पाठवा"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (संदेश)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"व्‍हिडिओ कॉल करा"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"वारंवार सपर्क साधलेले साफ करायचे?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"आपण संपर्क आणि फोन अ‍ॅप्‍स मधील वारंवार संपर्क साधलेली सूची साफ कराल आणि ईमेल अ‍ॅप्‍सना सुरवातीपासून आपली पत्ता प्राधान्‍ये जाणून घेण्‍याची सक्ती कराल."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"वारंवार सपर्क साधलेले साफ करीत आहे..."</string>
+ <string name="status_available" msgid="5586870015822828392">"उपलब्ध"</string>
+ <string name="status_away" msgid="1838861100379804730">"दूर आहे"</string>
+ <string name="status_busy" msgid="9147992455450257136">"व्यस्त"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"अन्य"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"कार्य निर्देशिका"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"सर्व संपर्क"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> साठी द्रुत संपर्क"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(नाव नाही)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"वारंवार संपर्क केलेले"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"फोन नंबरसह सर्व संपर्क"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफाईल संपर्क"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"अद्यतने पहा"</string>
+ <string name="account_phone" msgid="7128032778471187553">"डिव्हाइस"</string>
+ <string name="account_sim" msgid="6519016427905087952">"सिम"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"नाव"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"टोपणनाव"</string>
+ <string name="name_given" msgid="4280790853455320619">"नाव"</string>
+ <string name="name_family" msgid="7466985689626017037">"आडनाव"</string>
+ <string name="name_prefix" msgid="59756378548779822">"नाव प्रत्यय"</string>
+ <string name="name_middle" msgid="8467433655992690326">"मधले नाव"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"नाव"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ध्वन्यात्मक नाव"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ध्वन्यात्मक नाव"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ध्वन्यात्मक मधले नाव"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ध्वन्यात्मक आडनाव"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"फोन"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ईमेल"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"पत्ता"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"संस्था"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"नातेसंबंध"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"विशिष्ट तारीख"</string>
+ <string name="sms" msgid="1756857139634224222">"मजकूर संदेश"</string>
+ <string name="postal_address" msgid="8765560217149624536">"पत्ता"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"कंपनी"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"शीर्षक"</string>
+ <string name="label_notes" msgid="8337354953278341042">"टिपा"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"सानुकूल"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"वेबसाइट"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"लेबले"</string>
+ <string name="email_home" msgid="8573740658148184279">"निवासस्‍थानी ईमेल करा"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"मोबाईलवर ईमेल करा"</string>
+ <string name="email_work" msgid="2807430017302722689">"कार्यस्‍थानावर ईमेल करा"</string>
+ <string name="email_other" msgid="3454004077967657109">"ईमेल"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> वर ईमेल करा"</string>
+ <string name="email" msgid="5668400997660065897">"ईमेल"</string>
+ <string name="postal_street" msgid="8133143961580058972">"मार्ग"</string>
+ <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
+ <string name="postal_region" msgid="6045263193478437672">"राज्य"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"पिनकोड"</string>
+ <string name="postal_country" msgid="7638264508416368690">"देश"</string>
+ <string name="map_home" msgid="1243547733423343982">"निवास पत्ता पहा"</string>
+ <string name="map_work" msgid="1360474076921878088">"कार्य पत्ता पहा"</string>
+ <string name="map_other" msgid="3817820803587012641">"पत्ता पहा"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> पत्ता पहा"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM चा वापर करून चॅट करा"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live चा वापर करून चॅट करा"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo चा वापर करून चॅट करा"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype चा वापर करून चॅट करा"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ चा वापर करून चॅट करा"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk चा वापर करून चॅट करा"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ चा वापर करून चॅट करा"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber चा वापर करून चॅट करा"</string>
+ <string name="chat" msgid="9025361898797412245">"चॅट करा"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"हटवा"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"अधिक नाव फील्ड दर्शवा"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"नाव फील्ड संकुचित करा"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"अधिक ध्वन्यात्मक नाव फील्ड दर्शवा"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ध्वन्यात्मक नाव फील्ड संकुचित करा"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत करा"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"संकुचित करा"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत केले"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"संकुचित केले"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"सर्व संपर्क"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"तारांकित"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"सानुकूलित करा"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"संपर्क"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"इतर सर्व संपर्क"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"सर्व संपर्क"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"संकालन समूह काढून टाका"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"संकालन गट जोडा"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"अधिक गट..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"संकालन करा मधून \"<xliff:g id="GROUP">%s</xliff:g>\" हटविल्‍याने संकालन करा मधून कोणत्‍याही गटबद्ध न केलेल्‍या संपर्कांना देखील हटवेल."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन पर्याय जतन करत आहे…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"सानुकूलित दृश्य"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयात केलेले संपर्क यावर जतन करा:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"सिम कार्ड"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"सिम <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d संपर्क</item>
+ <item quantity="other">%1$d संपर्क</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> संपर्क • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> संपर्क • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf फाईल"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"आयात करण्यासाठी काहीही नाही"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard मधून संपर्क आयात करायचे?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> चे आयात रद्द करायचे?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> चे निर्यात रद्द करायचे?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द करू शकल नाही"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात त्रुटी."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" उघडू शकलो नाही: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता प्रारंभ करू शकला नाही: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कोणताही निर्यात करण्‍यायोग्‍य संपर्क नाही."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"आपण आवश्‍यक असलेली एक परवानगी अक्षम केली आहे."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"निर्यात दरम्‍यान त्रुटी आलीt: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटी"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"पुरेशी मेमरी नाही. फाईल कदाचित खूप मोठी असू शकते."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"स्वरूपन समर्थित नाही."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> निर्यात करणे समाप्त झाले."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"संपर्क आयात करणे समाप्त झाले"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"संपर्क निर्यात करणे समाप्त झाले, संपर्क सामायिक करण्यासाठी सूचनेवर क्लिक करा."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"संपर्क सामायिक करण्यासाठी टॅप करा."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> निर्यात करणे रद्द केले."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"संपर्क डेटा निर्यात करीत आहे"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"संपर्क डेटा निर्यात केला जात आहे."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस माहिती मिळवू शकलो नाही."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"कोणतेही निर्यात करण्यायोग्य संपर्क नाहीत."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard रचनाकाराने योग्‍यरित्‍या प्रारंभ केला नाही."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात करू शकलो नाही"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"संपर्क डेटा निर्यात केला नाही.\nकारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> आयात करीत आहे"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard डेटा वाचू शकलो नाही"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात करणे समाप्त झाले"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> आयात करणे रद्द झाले"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> लवकरच आयात केली जाईल."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फाईल लवकरच आयात केली जाईल."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard आयात विनंती नाकारली. नंतर पुन्हा प्रयत्न करा."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"संपर्क लवकरच निर्यात केले जातील."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard निर्यात विनंती नाकारली. नंतर पुन्हा प्रयत्न करा."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"संपर्क"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"स्‍थानिक तात्‍पुरत्‍या संचयनावर vCard(s) कॅश करीत आहे. वास्‍तविक आयात लवकरच प्रारंभ होईल."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard आयात करू शकलो नाही."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC वर संपर्क प्राप्त केला"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"कॅश करीत आहे"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"आयात करत आहे <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf फाईलवर निर्यात करा"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"नुसार क्रमवारी लावा"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ध्वन्यात्मक नाव"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"नेहमी दर्शवा"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"रिक्त असल्यास लपवा"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"नाव"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"आडनाव"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"नाव स्वरूपन"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"नाव प्रथम"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"आडनाव प्रथम"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"खाती"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"नवीन संपर्कांसाठी डीफॉल्ट खाते"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"माझी माहिती"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"आपले प्रोफाईल सेट करा"</string>
+ <string name="setting_about" msgid="7014388749752042863">"संपर्कांबद्दल"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"आवडते संपर्क सामायिक करा"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"सर्व संपर्क सामायिक करा"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्क सामायिक करण्यात अयशस्वी झाले."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"संपर्क निर्यात करा"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"यावरून संपर्क आयात करा"</string>
+ <string name="share_error" msgid="948429331673358107">"हा संपर्क सामायिक केला जाऊ शकत नाही."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"सामायिक करण्यासाठी कोणतेही संपर्क नाहीत."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शित करण्यासाठी संपर्क"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शित करण्यासाठी संपर्क"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"दृश्य सानुकूल करा"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"जतन करा"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"संपर्क शोधा"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"आवडते"</string>
+ <string name="menu_import" msgid="6107961135813836467">"आयात करा"</string>
+ <string name="menu_export" msgid="2658783911863503902">"निर्यात"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित केलेले नंबर"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> द्वारे"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारे <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"शोध थांबवा"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"शोध साफ करा"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"खाते"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"कॉलसाठी हे नेहमी वापरा"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"टीपसह कॉल करा"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"कॉलसह पाठविण्‍यासाठी एक टीप टाइप करा..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"पाठवा आणि कॉल करा"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"बिल्ड आवृत्ती"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"मुक्त स्रोत परवाने"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"मुक्त स्त्रोत सॉफ्टवेअरसाठी परवाना तपशील"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"गोपनीयता धोरण"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"सेवा अटी"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"मुक्त स्रोत परवाने"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url उघडण्यात अयशस्वी झाले."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> चेक केले"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> चेक केले नाही"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"व्हिडिओ कॉल करा"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"हटवा"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"पदलोप"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मि. <xliff:g id="SECONDS">%2$s</xliff:g>सेकंद"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ता. <xliff:g id="MINUTES_1">%2$s</xliff:g> मि. <xliff:g id="SECONDS">%3$s</xliff:g> सेकंद"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"हा शॉर्टकट अक्षम केला गेला आहे"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"संपर्क काढला होता"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"आयात करा"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"संपर्क निवडा"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"आपल्‍या सिम कार्डवर कोणतेही संपर्क नाहीत"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"संपर्क आधीपासून आपल्या सूचीमध्ये विद्यमान आहे"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात केला</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सिम संपर्क आयात केले</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"सिम संपर्क आयात करण्यात अयशस्वी"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"सिम वरून आयात करा"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"रद्द करा"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"स्वयं-संकालन बंद आहे. चालू करण्यासाठी टॅप करा."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"डिसमिस करा"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"स्वयं-संकालन बंद आहे. चालू करण्यासाठी टॅप करा."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"स्वयं-संकालन चालू करायचे?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"फक्त संपर्कांमध्ये नाही, तर आपण सर्व अॅप्स आणि खात्यांमध्ये करता ते बदल, वेब आणि आपल्या अन्य डिव्हाइसेस दरम्यान अद्यतनित ठेवले जातील."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"चालू करा"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"कोणतेही कनेक्शन नाही"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"सिम"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"अधिक दर्शवा"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"सिम कार्ड आयात करणे समाप्त झाले"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात अयशस्वी झाले"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"सिम कार्ड वरून संपर्क आयात करणेे शक्य झाले नाही"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"सिम आयात करीत आहे"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"सूचना"</string>
+</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
deleted file mode 100644
index 451366fcc..000000000
--- a/res/values-ms-rMY/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kenalan"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kenalan"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Lihat Kenalan"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edit Kenalan"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kenalan"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kenalan"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Dail terus"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesej langsung"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pilih pintasan kenalan"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pilih nombor utk panggilan"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pilih nombor untuk menghantar mesej"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Tambahkan pada kenalan"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pilih kenalan"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Buat kenalan baharu"</string>
- <string name="starredList" msgid="4817256136413959463">"Dibintangkan"</string>
- <string name="frequentList" msgid="7154768136473953056">"Kerap"</string>
- <string name="strequentList" msgid="5640192862059373511">"Kegemaran"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Butiran kenalan"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edit kenalan"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Wujudkan kenalan"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edit kumpulan"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Buat kumpulan"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Perihal"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Kemas kini"</string>
- <string name="searchHint" msgid="8482945356247760701">"Cari dalam kenalan"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Papar kenalan"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Tambah ke kegemaran"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Alih keluar daripada kegemaran"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Dialih keluar daripada kegemaran"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ditambah ke kegemaran"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Padam"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Tukar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Letakkan pada skrin Utama"</string>
- <string name="menu_call" msgid="3992595586042260618">"Panggil kenalan"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kepada kenalan"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Nyahpaut"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Padam"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Tambah Kenalan"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Tambah Kumpulan"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Nyahpaut kenalan ini menjadi beberapa kenalan?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Nyahpaut"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Adakah anda ingin menyimpan perubahan yang telah dibuat dan menyahpaut kenalan ini menjadi beberapa kenalan?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Simpan dan nyahpaut"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Adakah anda ingin menyimpan perubahan yang telah dibuat dan memaut kenalan yang dipilih?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Simpan dan paut"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Pautkan"</string>
- <string name="menu_save" msgid="1727844363591825909">"Simpan"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Paut kenalan"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pilih kenalan yang anda mahu pautkan dengan <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tunjukkan semua kenalan"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan cadangan"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kenalan dipaut"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Kenalan dipadamkan</item>
- <item quantity="one">Kenalan dipadamkan</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Tetapkan nada dering"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Semua panggilan ke mel suara"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kenalan daripada akaun baca sahaja tidak boleh dipadamkan tetapi boleh disembunyikan."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Sembunyikan"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kenalan yang hendak dipadamkan mempunyai butiran daripada berbilang akaun. Butiran daripada akaun baca sahaja akan disembunyikan, bukan dipadamkan."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Anda perlu memilih sekurang-kurangnya dua kenalan untuk melakukan pautan."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Paut kenalan dipilih?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Pautkan"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Padam kenalan ini?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Padam kenalan yang dipilih?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kenalan daripada akaun baca sahaja tidak boleh dipadamkan tetapi boleh disembunyikan."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kenalan yang hendak dipadamkan mempunyai butiran daripada berbilang akaun. Butiran daripada akaun baca sahaja akan disembunyikan, bukan dipadamkan."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Memadamkan kenalan ini akan memadamkan butiran daripada berbilang akaun."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Padam kenalan ini?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Padam"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Buang perubahan"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kenalan tidak wujud."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kenalan ditambahkan pada Skrin utama."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ditambahkan pada Skrin utama."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Buat kenalan baharu"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Buat kenalan baharu"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisasi"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tiada gambar yang tersedia pada tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tidak ada gambar yang tersedia pada telefon."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto kenalan"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nama label peribadi"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Hantar panggilan terus ke peti suara"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Alih keluar foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Tiada kenalan"</string>
- <string name="noGroups" msgid="8614664663561385253">"Tiada kumpulan."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Anda memerlukan akaun untuk membuat kumpulan."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Tiada orang dalam kumpulan ini."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Untuk menambah beberapa orang, edit kumpulan itu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Simpan kenalan..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kenalan disimpan."</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kenalan dinyahpaut"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Tidak dapat menyimpan perubahan kenalan."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Tidak dapat menyahpaut kenalan."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Tidak dapat memaut kenalan."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Ralat semasa menyimpan kenalan."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Tidak dapat menyimpan perubahan foto kenalan."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Kumpulan sudah disimpan."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Tidak dapat menyimpan perubahan kumpulan."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan dengan nombor telefon</item>
- <item quantity="one">1 kenalan dengan nombor telefon</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Tiada kenalan dengan nombor telefon"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemui</item>
- <item quantity="one">1 ditemui</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Tiada kenalan"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ditemui</item>
- <item quantity="one">1 ditemui</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Semua"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Kegemaran"</string>
- <string name="callBack" msgid="5498224409038809224">"Panggil balik"</string>
- <string name="callAgain" msgid="3197312117049874778">"Panggil semula"</string>
- <string name="returnCall" msgid="8171961914203617813">"Balas panggilan"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambah \"<xliff:g id="EMAIL">%s</xliff:g>\" kepada kenalan?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto kenalan"</string>
- <string name="description_plus_button" msgid="515164827856229880">"tambah"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> daripada <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kenalan"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan anda"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Tiada aplikasi ditemui untuk mengendalikan tindakan ini."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik untuk kembali ke skrin sebelumnya"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tambah nombor telefon"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Tambah e-mel"</string>
- <string name="missing_app" msgid="1466111003546611387">"Tiada apl ditemui untuk mengendalikan tindakan ini."</string>
- <string name="menu_share" msgid="943789700636542260">"Kongsi"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Tambahkan pada kenalan"</string>
- <string name="share_via" msgid="563121028023030093">"Kongsi kenalan melalui"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Buat kumpulan di bawah akaun"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Sembang suara"</string>
- <string name="video_chat" msgid="1872255818640336072">"Sembang video"</string>
- <string name="connections" msgid="8098440723172028350">"Sambungan"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Tambah sambungan"</string>
- <string name="recent" msgid="2659189233141493004">"Terbaru"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Kemas kini terbaru"</string>
- <string name="account_type_format" msgid="718948015590343010">"Kenalan <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Akaun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Tidak boleh diedit dari aplikasi ini."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Tidak boleh diedit pada peranti ini."</string>
- <string name="take_photo" msgid="7496128293167402354">"Ambil foto"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Ambil foto baru"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Pilih foto"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baharu"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Senarai kenalan sedang dikemas kini."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Mencari..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Tunjukkan pilihan"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Tunjukkan semua"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Pilih semua"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Nyahpilih semua"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tambah baru"</string>
- <string name="add_organization" msgid="7311893231158291197">"Tambah organisasi"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarikh"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nama kumpulan"</string>
- <string name="change_photo" msgid="8530597935483526383">"Tukar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto utama"</string>
- <string name="description_star" msgid="2605854427360036550">"kegemaran"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edit kenalan"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Pautkan kenalan semasa dengan kenalan pilihan?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bertukar kepada mengedit kenalan pilihan? Maklumat yang anda masukkan setakat ini akan disalin."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Salin ke Kenalan Saya"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan pada Kenalan Saya"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Direktori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Peribadi"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Tetapan"</string>
- <string name="menu_settings" msgid="377929915873428211">"Tetapan"</string>
- <string name="menu_help" msgid="1680178646764069976">"Bantuan &amp; maklum balas"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Pilihan paparan"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Nombor telefon"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Tambah ke kenalan"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Tambah ke kenalan"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Tutup"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Termasuk tahun"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kenalan"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Memuatkan…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kenalan baharu"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tambahkan akaun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Import kenalan"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Buat kumpulan baru"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Buat kumpulan baharu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> kumpulan</item>
- <item quantity="one">1 kumpulan</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Padamkan kumpulan \" <xliff:g id="GROUP_LABEL">%1$s</xliff:g> \"? (Kenalan itu sendiri tidak akan dipadamkan.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang daripada <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> orang</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> orang</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Taipkan nama kenalan sebelum memautkan dengan yang lain."</string>
- <string name="copy_text" msgid="3257145021583508761">"Salin ke papan keratan"</string>
- <string name="set_default" msgid="4417505153468300351">"Tetapkan lalai"</string>
- <string name="clear_default" msgid="7193185801596678067">"Kosongkan lalai"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Teks disalin"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Buang perubahan anda dan keluar daripada pengeditan?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Buang"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Teruskan mengedit"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Sediakan profil saya"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Taip nama orang"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nama kumpulan"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Profil setempat saya"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> saya"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Memaparkan semua kenalan"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Pastikan kenalan anda selamat walaupun jika anda kehilangan telefon anda: segerakkan dengan perkhidmatan dalam talian."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tambah akaun"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Kenalan baharu anda tidak akan dibuat sandaran. Tambahkan akaun yang membuat sandaran kenalan dalam talian?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kenalan baharu akan disimpan ke <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pilih akaun lalai untuk kenalan baharu:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Tambah kenalan baru"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit kenalan"</string>
- <string name="keep_local" msgid="1258761699192993322">"Simpan setempat"</string>
- <string name="add_account" msgid="8201790677994503186">"Tambah akaun"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Tambah akaun baharu"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Eksport fail pangkalan data"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"tambah kenalan baharu"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Lihat lagi"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Lihat kurang"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Lihat semua"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Terbaharu"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Mengenai"</string>
- <string name="send_message" msgid="8938418965550543196">"Hantar mesej"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Membuat salinan peribadi..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Semalam"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Esok"</string>
- <string name="today" msgid="8041090779381781781">"Hari ini"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Hari ini pada <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Esok pada <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Acara tidak bertajuk)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Tetapkan"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Organisasi"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Nama panggilan"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Nota"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Tapak web"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Acara"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Hubungan"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Akaun"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-mel"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk kembangkan editor kenalan."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk runtuhkan editor kenalan."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"arah ke lokasi"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaharu. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk membalas"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"masuk"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"keluar"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tidak dijawab"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan terbaharu. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk memanggil balik"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts berfungsi lebih baik apabila anda memasukkan pengecam Hangouts individu itu ke dalam medan e-mel atau telefon."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Lagi medan"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Tukar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Gagal membuka editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Menyimpan ke"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Pada masa ini menyimpan ke <xliff:g id="ACCOUNT_NAME">%s</xliff:g> . Ketik dua kali untuk memilih akaun yang lain."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Kenalan dipaut (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Kenalan dipaut</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kenalan dipaut"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PAUT KENALAN"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BATAL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Pendua berkemungkinan</item>
- <item quantity="one">1 Pendua berkemungkinan</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan dipaut</item>
- <item quantity="one">1 kenalan dipaut</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kenalan ini"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Pendua berkemungkinan"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kenalan ini mungkin orang yang sama. Anda boleh memautnya bersama sebagai satu kenalan."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Kenalan yang dipaut"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Daripada akaun anda"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Ambil foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Semua foto"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Pilih foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Daripada <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Padamkan <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Padamkan <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto daripada <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>tidak ditandai"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto daripada <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ditandai"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto daripada akaun yang tidak diketahui tidak ditandai"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto daripada akaun yang tidak diketahui ditandai"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Senarai kenalan sedang dikemas kini untuk menggambarkan penukaran bahasa.\n\nSila tunggu..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nombor yang disekat"</string>
-</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
new file mode 100644
index 000000000..fa06426d5
--- /dev/null
+++ b/res/values-ms/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kenalan"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kenalan"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Tambah kenalan"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kenalan"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Dail terus"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesej langsung"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pilih kenalan"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Tambahkan pada kenalan"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pilih kenalan"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pilih"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Buat kenalan baharu"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Cari dalam kenalan"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Tambah ke kegemaran"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Alih keluar daripada kegemaran"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Dialih keluar daripada kegemaran"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Ditambah ke kegemaran"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Edit"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Padam"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Tukar foto"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Buat pintasan"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Nyahpaut"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Alih keluar kenalan"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Namakan semula label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Padamkan label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Tambahkan kenalan"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Pilih kenalan"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tambahkan kenalan"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Alih keluar daripada label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Buat label"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Nyahpaut kenalan ini menjadi beberapa kenalan?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Nyahpaut"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Adakah anda ingin menyimpan perubahan yang telah dibuat dan menyahpaut kenalan ini menjadi beberapa kenalan?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Simpan dan nyahpaut"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Adakah anda ingin menyimpan perubahan yang telah dibuat dan memaut kenalan yang dipilih?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Simpan dan paut"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Memaut"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Menyahpaut"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Pautkan"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Lihat kenalan yang dipautkan"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Simpan"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Paut kenalan"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pilih kenalan yang anda mahu pautkan dengan <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kenalan cadangan"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Semua kenalan"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> dipaut"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kenalan dipaut"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> dipadamkan"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> dan <xliff:g id="NAME_1">%2$s</xliff:g> dipadamkan"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… dipadamkan"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Kenalan dipadamkan</item>
+ <item quantity="one">Kenalan dipadamkan</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kenalan</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kenalan</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kenalan · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kenalan · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Daripada Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Daripada <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Tetapkan nada dering"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Halakan ke mel suara"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nyahhalakan ke mel suara"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Kenalan ini bersifat baca sahaja. Kenalan ini tidak boleh dipadamkan, tetapi anda boleh menyembunyikannya."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Sembunyikan Kenalan"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Akaun baca sahaja dalam kenalan ini akan disembunyikan, bukan dipadamkan."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Padam kenalan ini?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Padam kenalan yang dipilih?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kenalan daripada akaun baca sahaja tidak boleh dipadamkan tetapi boleh disembunyikan."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kenalan yang hendak dipadamkan mempunyai butiran daripada berbilang akaun. Butiran daripada akaun baca sahaja akan disembunyikan, bukan dipadamkan."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Memadamkan kenalan ini akan memadamkan butiran daripada berbilang akaun."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Padam kenalan ini?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Padam"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kenalan tidak wujud."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kenalan ditambahkan pada Skrin utama."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ditambahkan pada Skrin utama."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Tiada gambar tersedia pada peranti."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto kenalan"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nama label peribadi"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Alih keluar foto"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Senarai kenalan anda kosong"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Tiada kenalan dengan label ini"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Tiada kenalan dalam akaun ini"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Senarai kenalan anda kosong"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> disimpan"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kenalan disimpan."</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kenalan dinyahpaut"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Tidak dapat menyimpan perubahan kenalan"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Tidak dapat menyahpaut kenalan"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Tidak dapat memaut kenalan"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ralat menyimpan kenalan"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kenalan"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuatkan label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label dipadamkan"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label dibuat"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tidak dapat membuat label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label dikemaskinikan"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Dialih keluar daripada label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Ditambahkan pada label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Tidak dapat menyimpan perubahan label"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Label itu sudah wujud"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Sesetengah kenalan tiada e-mel."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Sesetengah kenalan tiada nombor telefon."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Hantar e-mel"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Hantar mesej"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pilih Kenalan"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Hantar"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Tiada kenalan"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambah \"<xliff:g id="EMAIL">%s</xliff:g>\" kepada kenalan?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan anda"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik untuk kembali ke skrin sebelumnya"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tambah nombor telefon"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Tambah e-mel"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Tiada apl ditemui untuk mengendalikan tindakan ini."</string>
+ <string name="menu_share" msgid="943789700636542260">"Kongsi"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Tambahkan pada kenalan"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Tambah"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kongsi kenalan melalui</item>
+ <item quantity="one">Kongsi kenalan melalui</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Pilih akaun"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Buat label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Namakan semula label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nama label"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nama label"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Sembang suara"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Sembang video"</string>
+ <string name="account_type_format" msgid="718948015590343010">"Kenalan <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Akaun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Ambil foto"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Ambil foto baru"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Pilih foto"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baharu"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Mencari..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarikh"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Batal"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Kembali"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bertukar kepada mengedit kenalan pilihan? Maklumat yang anda masukkan setakat ini akan disalin."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Direktori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Tetapan"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Tetapan"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Bantuan &amp; maklum balas"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Nombor telefon"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Tambah ke kenalan"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Tutup"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Termasuk tahun"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tambahkan akaun"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Buat baharu…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Padamkan label \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kenalan itu sendiri tidak akan dipadamkan.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Taipkan nama kenalan sebelum memautkan dengan yang lain."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Salin ke papan keratan"</string>
+ <string name="set_default" msgid="4417505153468300351">"Tetapkan lalai"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Kosongkan lalai"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Teks disalin"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Buang perubahan?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Buang"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Batal"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Buang penyesuaian?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Cari dalam kenalan"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Alih keluar kenalan"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Profil setempat saya"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> saya"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Luangkan sedikit masa untuk menambah akaun yang akan menyandarkan kenalan anda ke Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kenalan baharu akan disimpan ke <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pilih akaun lalai untuk kenalan baharu:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Buat kenalan baharu"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edit kenalan"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Lihat sahaja"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Pilih kenalan untuk diedit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Kenalan dipautkan"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Tambah"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Nyahpaut"</string>
+ <string name="add_account" msgid="8201790677994503186">"Tambah akaun"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Tambah akaun baharu"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Eksport fail pangkalan data"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Buat kenalan baharu"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Lihat lagi"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Lihat kurang"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Terbaharu"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Mengenai"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Membuat salinan peribadi..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Esok"</string>
+ <string name="today" msgid="8041090779381781781">"Hari ini"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Hari ini pada <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Esok pada <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Acara tidak bertajuk)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Tetapkan"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Organisasi"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Nama panggilan"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Nota"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Tapak web"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Acara"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Hubungan"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-mel"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"arah ke lokasi"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaharu. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk membalas"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"masuk"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"keluar"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tidak dijawab"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"panggilan terbaharu. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk memanggil balik"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Anda: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Lebih banyak medan"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Tukar foto kenalan"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tambahkan foto kenalan"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto kenalan"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Gagal membuka editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Menyimpan ke"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Maklumat kenalan daripada <xliff:g id="ACCOUNT">%s</xliff:g> tidak boleh diedit"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PAUT KENALAN"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BATAL"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kenalan ini"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Pendua berkemungkinan"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kenalan ini mungkin orang yang sama. Anda boleh memautnya bersama sebagai satu kenalan."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Padamkan <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Padamkan <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Cadangan"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Baharu"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Buka laci navigasi"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Tutup laci navigasi"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Label <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Label"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Akaun"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Lihat sejarah anda bersama-sama"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Acara dan mesej"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Acara"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mesej"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Cadangan"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Pastikan kenalan anda tersusun dan berguna"</string>
+ <string name="undo" msgid="1425165101664071422">"Buat asal"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Panggil <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Panggil nombor rumah"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Panggil nombor mudah alih"</string>
+ <string name="call_work" msgid="5328785911463744028">"Panggil tempat kerja"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Panggil faks tempat kerja"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Panggil faks rumah"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Panggil alat kelui"</string>
+ <string name="call_other" msgid="8563753966926932052">"Panggil"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Panggil nombor panggil balik"</string>
+ <string name="call_car" msgid="3280537320306436445">"Panggil kereta"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Panggil nombor utama syarikat"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Panggil ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Panggil nombor utama"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Panggil faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Panggil radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Panggil telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Panggil TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Panggil telefon mudah alih tempat kerja"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Panggil alat kelui tempat kerja"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Panggil <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Panggil MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Panggil)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Hantar teks kepada <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS ke rumah"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS ke telefon mudah alih"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS tempat kerja"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS faks tempat kerja"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS ke faks rumah"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS alat kelui"</string>
+ <string name="sms_other" msgid="806127844607642331">"Teks"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS ke nombor panggil balik"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS ke kereta"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS nombor utama syarikat"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS ke ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS ke nombor utama"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Faks teks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS ke radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS ke teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS ke TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS ke telefon mudah alih tempat kerja"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS alat kelui tempat kerja"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS ke <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS kepada MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Hantar mesej)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Buat panggilan video"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Padam bersih senarai kerap dihubungi?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Anda akan mengosongkan senarai yang kerap dihubungi dalam apl Kenalan dan Telefon serta memaksa apl e-mel untuk mempelajari pilihan alamat anda dari awal."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Memadam bersih senarai kerap dihubungi..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Ada"</string>
+ <string name="status_away" msgid="1838861100379804730">"Tiada"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Sibuk"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Lain-lain"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktori"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Direktori kerja"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Semua kenalan"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Kenalan cepat untuk <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Tiada nama)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Kerap dihubungi"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Semua kenalan dengan nombor telefon"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kenalan profil kerja"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Lihat kemas kini"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Peranti"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nama panggilan"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nama pertama"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nama keluarga"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Awalan nama"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Nama tengah"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Akhiran nama"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nama fonetik"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nama pertama fonetik"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Nama tengah fonetik"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nama keluarga fonetik"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mel"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Alamat"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisasi"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Hubungan"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Tarikh khas"</string>
+ <string name="sms" msgid="1756857139634224222">"Mesej teks"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Alamat"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Syarikat"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Tajuk"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Nota"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Tersuai"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Tapak web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Label"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mel rumah"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mel telefon mudah alih"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mel tempat kerja"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mel"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-mel <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mel"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Jalan"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Bandar"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Negeri"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poskod"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Negara"</string>
+ <string name="map_home" msgid="1243547733423343982">"Lihat alamat rumah"</string>
+ <string name="map_work" msgid="1360474076921878088">"Lihat alamat tempat kerja"</string>
+ <string name="map_other" msgid="3817820803587012641">"Lihat alamat"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Lihat alamat <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Sembang menggunakan AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Sembang menggunakan Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Sembang menggunakan Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Sembang menggunakan Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Sembang menggunakan QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Sembang menggunakan Bual Google"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Sembang menggunakan ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Sembang menggunakan Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Sembang"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"padam"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Tunjukkan lagi medan nama"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Runtuhkan medan nama"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Tunjukkan lagi medan nama fonetik"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Runtuhkan medan nama fonetik"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Kembangkan"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Runtuhkan"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Dikembangkan"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Diruntuhkan"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Semua kenalan"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Dibintangkan"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Sesuaikan"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kenalan"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Semua kenalan lain"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Semua kenalan"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Alih keluar kumpulan penyegerakan"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Tambah kumpulan segerak"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Lagi kumpulan..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Mengalih keluar \"<xliff:g id="GROUP">%s</xliff:g>\" daripada penyegerakan juga akan turut mengalih keluar sebarang kenalan tanpa kumpulan dari penyegerakan."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Menyimpan pilihan paparan..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Paparan yang disesuaikan"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Simpan kenalan yang diimport ke:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Kad SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kenalan</item>
+ <item quantity="one">1 kenalan</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kenalan • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kenalan • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Fail .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Tiada apa-apa untuk diimport"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Import kenalan daripada vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Batalkan pengimportan <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan pengeksportan <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dapat membatalkan import/eksport vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Ralat tidak diketahui."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Tidak boleh memulakan pengeksport: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Tiada kenalan yang boleh dieksport."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Anda telah melumpuhkan kebenaran yang diperlukan."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ralat berlaku semasa pengeksportan: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Ralat I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Tidak cukup memori. Fail itu mungkin terlalu besar."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format tidak disokong."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Selesai mengeksport <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Selesai mengeksport kenalan."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Selesai mengeksport kenalan, klik pemberitahuan untuk berkongsi kenalan."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Ketik untuk berkongsi kenalan."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Pengeksportan <xliff:g id="FILENAME">%s</xliff:g> dibatalkan."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Mengeksport data kenalan"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data kenalan sedang dieksport."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tidak boleh mendapatkan maklumat pangkalan data."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Tiada kenalan yang boleh dieksport."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Komposer vCard tidak bermula dengan betul."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Tidak boleh mengeksport"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data kenalan tidak dieksport.\nAlasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Mengimport <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Tidak dapat membaca data vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Selesai mengimport vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Pengimportan <xliff:g id="FILENAME">%s</xliff:g> dibatalkan"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> akan diimport sebentar lagi."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fail akan diimport sebentar lagi."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Permintaan import vCard telah ditolak. Cuba lagi nanti."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kenalan akan dieksport sebentar lagi."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Permintaan eksport vCard telah ditolak. Cuba lagi nanti."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kenalan"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Membuat cache vCard ke storan sementara tempatan. Pengimportan sebenar akan bermula tidak lama lagi."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Tidak dapat mengimport vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Knln melalui NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Mengcache..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimport <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksport ke fail .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Isih mengikut"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nama fonetik"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Sentiasa tunjukkan"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Sembunyikan jika kosong"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nama pertama"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nama keluarga"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format nama"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nama pertama dahulu"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Nama keluarga dahulu"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Akaun"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Akaun lalai untuk kenalan baharu"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Maklumat saya"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Sediakan profil anda"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Perihal Kenalan"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Kongsi kenalan kegemaran"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Kongsi semua kenalan"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal berkongsi kenalan."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksport kenalan"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Import kenalan daripada"</string>
+ <string name="share_error" msgid="948429331673358107">"Kenalan ini tidak boleh dikongsi."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Tiada kenalan untuk dikongsi."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kenalan untuk dipaparkan"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kenalan untuk dipaparkan"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Sesuaikan paparan"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Simpan"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Cari kenalan"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kegemaran"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Import"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksport"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nombor yang disekat"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"melalui <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"berhenti mencari"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Kosongkan carian"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Akaun"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Sentiasa gunakan ini utk panggilan"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Panggilan dengan nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Taip nota untuk dihantar dengan panggilan…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"HANTAR &amp; PANGGIL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versi binaan"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Lesen sumber terbuka"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Butiran lesen untuk perisian sumber terbuka"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Dasar privasi"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Syarat perkhidmatan"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Lesen sumber terbuka"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Gagal membuka url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> disemak"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> tidak disemak"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Buat panggilan video"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Padam"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saat"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> saat"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> jam <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> saat"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pintasan ini telah dilumpuhkan"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kenalan telah dialih keluar"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Pilih kenalan"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Tiada kenalan pada kad SIM anda"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kenalan sudah wujud dalam senarai anda"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan SIM diimport</item>
+ <item quantity="one">1 kenalan SIM diimport</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Gagal mengimport kenalan SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import daripada SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Batal"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Auto segerak dimatikan. Ketik untuk menghidupkannya."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ketepikan"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Penyegerakan akaun dimatikan. Ketik untuk menghidupkannya."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Hidupkan autosegerak?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Perubahan yang anda buat kepada semua apl dan akaun, bukan hanya Kenalan Google, akan dikemas kini antara web dengan peranti anda."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Hidupkan"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Tiada sambungan"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Tunjukkan lagi"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Selesai mengimport kad SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Pengimportan gagal"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Tidak dapat mengimport kenalan daripada kad SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Mengimport SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Pemberitahuan"</string>
+</resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
deleted file mode 100644
index 98093a6b6..000000000
--- a/res/values-my-rMM/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"အဆက်အသွယ်များ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"အဆက်အသွယ်များ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"အဆက်အသွယ်ကို ကြည့်ပါ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"အဆက်အသွယ်ကို တည်းဖြတ်ပါ"</string>
- <string name="contactsList" msgid="8661624236494819731">"အဆက်အသွယ်များ"</string>
- <string name="shortcutContact" msgid="749243779392912958">"အဆက်အသွယ်"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"တိုက်ရိုက်ခေါ်ဆိုခြင်း"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"တိုက်ရိုက်စာပို့ခြင်း"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"လိပ်စာအတိုကောက် တစ်ခုရွေးပါ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ခေါ်ဆိုရန် နံပါတ်တစ်ခုရွေးပါ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"စာတိုပို့ရန် နံပါတ်တစ်ခုရွေးပါ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"လိပ်စာသို့ထည့်ပါ"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"လိပ်စာတစ်ခုရွေးပါ"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"အဆက်အသွယ် အသစ် ဖန်တီးရန်"</string>
- <string name="starredList" msgid="4817256136413959463">"စတားပေးထားသော အရာ"</string>
- <string name="frequentList" msgid="7154768136473953056">"မကြာခဏ"</string>
- <string name="strequentList" msgid="5640192862059373511">"အနှစ်သက်ဆုံးများ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"အဆက်အသွယ် အသေးစိတ်"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"အဆက်အသွယ်အား ပြင်ရန်"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"အဆက်အသွယ်တစ်ခု ပြုလုပ်ရန်"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"အုပ်စုအားပြင်ရန်"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"အုပ်စုသစ်ပြုလုပ်ရန်"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"အကြောင်း"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"အဆင့်မြှင့်မှု"</string>
- <string name="searchHint" msgid="8482945356247760701">"အဆက်အသွယ်များရှာပါ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"အဆက်အသွယ်အား ကြည့်ရန်"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"အနှစ်သက်ဆုံးများထဲ ထည့်ပါ"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"အနှစ်သက်ဆုံးများမှ ထုတ်ပါ"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"အကြိုက်ဆုံးများထဲမှ ထုတ်လိုက်ပါပြီ"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"အကြိုက်ဆုံးများ ထဲကို ထည့်ပြီး"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"ပြင်ဆင်ရန်"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"ဖျက်ရန်"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ဓာတ်ပုံပြောင်းရန်"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ပင်မစာမျက်နှာတွင် တင်ထားပါ"</string>
- <string name="menu_call" msgid="3992595586042260618">"အဆက်အသွယ်ကို ခေါ်ပါ"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"အဆက်အသွယ်ကို စာတိုပို့ရန်"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"လင့်ခ် ဖြုတ်ရန်"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ပြင်ဆင်ရန်"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ဖျက်ရန်"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"လိပ်စာထပ်ထည့်ပါ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"အုပ်စု ထပ်ထည့်ပါ"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လျက် အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ချိတ်ဆက်မှုဖြုတ်ပါ"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သိမ်းဆည်းလျက် ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လိုက်ကာ အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"သိမ်းဆည်းလျက် ချိတ်ဆက်မှုဖြုတ်လိုက်ပါ"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သိမ်းဆည်းလျက် ရွေးထားသည့် အဆက်အသွယ်များနှင့် ချိတ်ဆက်ပေးလိုပါသလား။"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"သိမ်းထားလျက် ချိတ်ဆက်ပေးပါ"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"လင့်ခ်"</string>
- <string name="menu_save" msgid="1727844363591825909">"သိမ်းဆည်းရန်"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"အဆက်အသွယ်များ ချိတ်ဆက်ရန်"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> နှင့်ချိတ်လိုသည့် အဆက်အသွယ်ကို ရွေးပါ −"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"အဆက်အသွယ်များအားလုံးအားပြပါ"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"အကြုံပြုလိုသော အဆက်အသွယ်များ"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"လိပ်စာများအားလုံး"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"ကွင်းဆက်ထားသည့် အဆက်အသွယ်များ"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other"> အဆက်အသွယ်ကို ဖျက်လိုက်သည်</item>
- <item quantity="one"> အဆက်အသွယ်ကို ဖျက်လိုက်သည်</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ဖုန်းမြည်သံသတ်မှတ်ရန်"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ဖုန်းအားလုံးအသံစာပို့စနစ်သို့"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ဖတ်ရန် သက်သက် အကောင့်များကို ဖျက်မရနိုင်သော်လည်း ဝှက်ထားနိုင်ပါသည်။"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ဝှက်ထားပါ"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ဖျက်မည့် အဆက်အသွယ်ထဲတွင် အကောင့်အများအပြားမှ အချက်အလက်များ ပါဝင်ပါသည်။ ဖတ်ရန်သက်သက် အကောင့်များမှ အချက်အလက်များကို ဝှက်ထားမှာဖြစ်ပြီး ဖျက်ပစ်မည် မဟုတ်ပါ"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"လင့်ခ်တစ်ခုကို ဖန်တီးရန် ရွေးထားသည့် အဆက်အသွယ် အနည်းဆုံး နှစ်ခု လိုအပ်သည်။"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ရွေးထားသည့် အဆက်အသွယ်များကို ချိတ်ဆက်ပေးရမလား။"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"လင့်"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ဤအဆက်အသွယ်ကို ဖျက်မလား။"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"ရွေးထားသော အဆက်အသွယ်များကို ဖျက်မလား။"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ဖတ်ရန် သက်သက် အကောင့်များကို ဖျက်မရနိုင်သော်လည်း ဝှက်ထားနိုင်ပါသည်။"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ဖျက်ခံရမည့် အဆက်အသွယ်များထဲတွင် အကောင့် အများအပြားဆိုင်ရာ အသေးစိတ်များ ပါရှိနေသည်။ ဖတ်ရန် သက်သက် အကောင့်များထံမှ အသေးစိတ်များကို ဝှက်ထားမည်၊ ဖျက်ခံရမည် မဟုတ်ပါ။"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ဤအဆက်အသွယ်ကို ဖျက်လိုက်လျှင် အကောင့် အများအပြားထဲရှိ ဆက်နွယ်အချက်အလက်များကိုပါ ဖျက်ပါမည်။"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ဤအဆက်အသွယ်ကို ဖျက်မလား။"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ဖျက်ရန်"</string>
- <string name="menu_discard" msgid="6854657936970228164">"အပြောင်းအလဲများ ဖယ်ပစ်ရန်"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"လိပ်စာ မရှိပါ"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"အဆက်အသွယ်ကို ပင်မ မျက်နှာပြင်သို့ ထည့်လိုက်ပြီ။"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ကို ပင်မ မျက်နှာပြင်သို့ ထည့်ပေးလိုက်ပြီ။"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"အဆက်အသွယ်သစ်တစ်ခု ပြုလုပ်ရန်"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"အဆက်အသွယ်သစ်တစ်ခု ပြုလုပ်ရန်"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"အဖွဲ့အစည်း"</item>
- <item msgid="7196592230748086755">"မှတ်စု"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"တက်ဘလက်ထဲတွင် ပုံများ မရှိပါ"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ဖုန်းထဲတွင် ပုံများ မရှိပါ"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"လိပ်စာရဲ့ဓာတ်ပုံ"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"စိတ်ကြိုက် အညွှန်းအမည်"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ဖုန်းများအား အသံစာပို့စနစ်သို့ ပို့လိုက်ပါ"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ပုံကို ဖယ်ရှားပါ"</string>
- <string name="noContacts" msgid="4955659076981974652">"အဆက်အသွယ်များမရှိပါ"</string>
- <string name="noGroups" msgid="8614664663561385253">"အုပ်စုများမရှိပါ"</string>
- <string name="noAccounts" msgid="7768267764545265909">"အုပ်စုများ ပြုလုပ်ရန် အကောင့်တစ်ခု လိုအပ်ပါသည်"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ဒီအုပ်စုထဲမှာ လူတစ်ယောက်မှမရှိပါ"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"တချို့ကိုထည့်ရန်, အုပ်စုကိုပြင်ပါ"</string>
- <string name="savingContact" msgid="4075751076741924939">"အဆက်အသွယ်အား သိမ်းဆည်းနေစဉ်…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"အဆက်အသွယ်အား သိမ်းဆည်းပြီးပါပြီ"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"အဆက်အသွယ်များကို လင့်ခ်ဖြုတ်လိုက်ပြီ"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"လိပ်စာပြောင်းလဲမှုအား သိမ်းဆည်းလို့မရပါ"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"အဆက်အသွယ်ကို လင့်ခ်ဖြုတ်၍မရပါ"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"အဆက်အသွယ်ကို ကွင်းဆက်ချိတ်၍မရပါ။"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"အဆက်အသွယ် သိမ်းဆည်းရာတွင် ပြဿနာရှိနေသည်။"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"အဆက်အသွယ်၏ ဓာတ်ပုံပြောင်းလဲမှု သိမ်းဆည်းနိုင်ခြင်းမရှိပါ။"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"အုပ်စုသိမ်းဆည်ပြီးပါပြီ"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"အုပ်စုအတွက် ထပ်ပြင်မှုများဟာ သိမ်းဆည်းလို့မရပါ"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">ဖုန်းနံပါတ်များပါသောအဆက်အသွယ်<xliff:g id="COUNT">%d</xliff:g>ခု</item>
- <item quantity="one">ဖုန်းနံပါတ်ပါသောအဆက်အသွယ်1ခု</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ဖုန်းနံပါတ်ပါသော လိပ်စာများမရှိပါ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ခု တွေ့ရှိသည်</item>
- <item quantity="one">1ခု တွေ့ရှိသည်</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"အဆက်အသွယ်များမရှိ"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ခုတွေ့ရှိသည်</item>
- <item quantity="one">1ခု တွေ့ရှိသည်</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"အားလုံး"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"အကြိုက်ဆုံး"</string>
- <string name="callBack" msgid="5498224409038809224">"ပြန်ခေါ်ပါ"</string>
- <string name="callAgain" msgid="3197312117049874778">"ပြန်လည်ခေါ်ဆိုရန်"</string>
- <string name="returnCall" msgid="8171961914203617813">"ဖုန်းပြန်ခေါ်ရန်"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ကို လိပ်စာထဲ ထည့်မလား?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"လိပ်စာမှ ဓာတ်ပုံ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"အပေါင်း"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ၏ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> လိပ်စာ"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"အဆက်အသွယ်များ၏နာမည်များ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ဤလုပ်ဆောင်ချက်ကို ပြုလုပ်ပေးမည့် အက်ပ်မရှိပါ။"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ယခင် မျက်နှာပြင်သို့ ပြန်ရန် ကလစ်ပါ"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ဖုန်းနံပါတ် ထည့်ရန်"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"အီးမေးလ် ထည့်ရန်"</string>
- <string name="missing_app" msgid="1466111003546611387">"ဤလုပ်ဆောင်ချက်ကို ပြုလုပ်မည့် အက်ပ်မရှိပါ။"</string>
- <string name="menu_share" msgid="943789700636542260">"မျှဝေခြင်း"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"အဆက်အသွယ်များ ထဲသို့ ထည့်ရန်"</string>
- <string name="share_via" msgid="563121028023030093">"အောက်ပါတို့မှတဆင့် အဆယ်အသွယ်ကို မျှဝေသည်"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"အကောင့်အောက်မှာ အုပ်စုပြုလုပ်ပါ"</string>
- <string name="audio_chat" msgid="2535716629358298691">"အသံဖြင့် ချက်တင်း"</string>
- <string name="video_chat" msgid="1872255818640336072">"ဗီဒီယိုဖြင့်စကားပြောခြင်း"</string>
- <string name="connections" msgid="8098440723172028350">"အဆက်အသွယ်များ"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"လူမှုဆက်သွယ်မှုထည့်ရန်"</string>
- <string name="recent" msgid="2659189233141493004">"လတ်တလော"</string>
- <string name="recent_updates" msgid="4267258535615860710">"လတ်တလောအဆင့်မြင့်ခြင်းများ"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> လိပ်စာ"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> အကောင့်"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ဤအပ်ပလီကေးရှင်းမှ ပြင်ခွင့်မရှိပါ"</string>
- <string name="group_read_only" msgid="1061762906115697637">"ဒီစက်ပေါ်မှာ ပြင်လို့ မရနိုင်ပါ"</string>
- <string name="take_photo" msgid="7496128293167402354">"ဓာတ်ပုံရိုက်ရန်"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ဓာတ်ပုံအသစ်ရိုက်ပါ"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ပုံရွေးရန်"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ပုံသစ်ရွေးရန်"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"အဆက်အသွယ်စာရင်းအား ပြုပြင်နေစဉ်"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"ရှာဖွေနေသည်…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"ရွေးချယ်ထားသည်ကိုပြပါ"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"အားလုံးကို ပြသရန်"</string>
- <string name="menu_select_all" msgid="621719255150713545">"အားလုံးရွေးရန်"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"အားလုံးရွေးထားမှု ဖျက်ပါ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"အသစ်ထည့်ရန်"</string>
- <string name="add_organization" msgid="7311893231158291197">"အဖွဲ့အစည်းထည့်ရန်"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ရက်စွဲ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"အုပ်စုနာမည်"</string>
- <string name="change_photo" msgid="8530597935483526383">"ပြောင်းရန်"</string>
- <string name="primary_photo" msgid="8517942231868516999">"အဓိက ဓာတ်ပုံ"</string>
- <string name="description_star" msgid="2605854427360036550">"အနှစ်သက်ဆုံး"</string>
- <string name="edit_contact" msgid="7529281274005689512">"အဆက်အသွယ်အားပြင်ရန်"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"လက်ရှိအဆက်အသွယ်ကို ရွေးချယ်ထားသည့်အဆက်အသွယ်နှင့် ကွင်းဆက်ချိတ်မလား။"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ရွေးထားသော လိပ်စာအား ပြင်ဆင်ခြင်းသို့ပြောင်းမလား? သင် အခုထိ ရိုက်ထားသော စာများအားလုံး ကူးယူပြီးဖြစ်ပါလိမ့်မည်"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ကျွန်ုပ်၏လိပ်စာများထဲ ထည့်ပါ"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ကျွန်ုပ်၏လိပ်စာများထဲ ထည့်ပါ"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"အကန့် <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"မိမိစိတ်ကြိုက်"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"အပြင်အဆင်များ"</string>
- <string name="menu_settings" msgid="377929915873428211">"အပြင်အဆင်များ"</string>
- <string name="menu_help" msgid="1680178646764069976">"အကူအညီနှင့် အကြံပြုချက်"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ပြသမှုအတွက်ရွေးစရာများ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ဖုန်းနံပါတ်"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"လိပ်စာများထဲသို့ ထည့်ပါ"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"လိပ်စာသို့ထည့်ပါ"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"ပိတ်ရန်"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"နှစ်ကို ထည့်ရန်"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"အဆက်အသွယ်"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ဖွင့်နေစဉ်…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"အဆက်အသွယ်သစ်တစ်ခု ပြုလုပ်ပါ"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"အကောင့်ထည့်ရန်"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"အဆက်အသွယ်များ သွင်းပါ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"အုပ်စုသစ်ပြုလုပ်ရန်"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"အုပ်စုအသစ်ပြုလုပ်ရန်"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other">အုပ်စု <xliff:g id="COUNT">%0$d</xliff:g>စု</item>
- <item quantity="one">အုပ်စု 1စု</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" အုပ်စုကို ဖျက်ပစ်ပါမလား? (လိပ်စာများ ကိုယ်တိုင်တော့ ပျက်သွားမည်မဟုတ်ပါ)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> မှ လူ<xliff:g id="COUNT_2">%1$d</xliff:g> ယောက်</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> မှ လူ<xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other">လူ <xliff:g id="COUNT_1">%1$d</xliff:g> ယောက်</item>
- <item quantity="one">လူ <xliff:g id="COUNT_0">%1$d</xliff:g> ယောက်</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"အခြားတစ်ခုနှင့် ကွင်းဆက်မချိတ်မီ အဆက်အသွယ်အမည်ကိုရိုက်ပါ။"</string>
- <string name="copy_text" msgid="3257145021583508761">"ခဏကူးယူထားပါ"</string>
- <string name="set_default" msgid="4417505153468300351">"ပုံသေအဖြစ် သတ်မှတ်ခြင်း"</string>
- <string name="clear_default" msgid="7193185801596678067">"မူရင်းများကို ရှင်းလင်းခြင်း"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"စာသားကူးယူပြီး"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"သင့်ပြောင်းလဲမှုများကို ဖယ်ပစ်ပြီး တည်းဖြတ်မှုကို ရပ်မလား။"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ဖယ်ပစ်ရန်"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"ဆက်လက်တည်းဖြတ်ပါ"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"မိမိပရိုဖိုင်းအား သတ်မှတ်ရန်"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"လူနာမည်ရိုက်ထည့်ပါ"</string>
- <string name="group_name_hint" msgid="238359485263401293">"အုပ်စု၏အမည်"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"မိမိ၏ဖုန်းမှပရိုဖိုင်လ်"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ကျွန်ုပ်၏ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ကိုယ်ရေးအကောင့်"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"အဆက်အသွယ်အားလုံးအားပြနေစဉ်"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"အွန်လိုင်း ဝန်ဆောင်မှုဖြင့် ထပ်တူကျအောင် ပြုလုပ်ထားခြင်းအားဖြင့် ဖုန်းပျောက်သွားသည့်တိုင်အောင် အဆက်အသွယ်များအား လုံခြုံစွာ သိမ်းထားနိုင်ပါသည်"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"အကောင့်တစ်ခုထည့်ပါ"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"သင်၏အဆက်အသွယ်အသစ်ကို မိတ္တူကူးမထားပါ။ အဆယ်အသွယ်များကို အွန်လိုင်းတွင် ကူးထားရန် အကောင့်သစ် ထပ်ထည့်ချင်ပါသလား။"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"အဆက်အသွယ် အသစ်ကို <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> တွင်သိမ်းလိုက်ပါမည်။"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"အဆက်အသွယ် အသစ်များအတွက် မူရင်းအကောင့်ကို ရွေးပါ။"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"အဆက်အသွယ်သစ် ထည့်မည်"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"အဆက်အသွယ်အားပြင်ရန်"</string>
- <string name="keep_local" msgid="1258761699192993322">"ဖုန်းထဲတွင်သာသိမ်းပါ"</string>
- <string name="add_account" msgid="8201790677994503186">"အကောင့်ထည့်ရန်"</string>
- <string name="add_new_account" msgid="5748627740680940264">"အကောင့်အသစ်ထည့်ပါ"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ဒေ့ဘာဘေ့စ်ဖိုင်များကို အပြင်သို့ထုတ်ပါ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"အဆက်အသွယ် အသစ်ကို ထည့်ရန်"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ပိုပြီး ကြည့်ရန်"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"လျှော့ပြီး ကြည့်ရန်"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"အားလုံးကို ကြည့်ရန်"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"မကြာမီက"</string>
- <string name="about_card_title" msgid="2920942314212825637">"အကြောင်း"</string>
- <string name="send_message" msgid="8938418965550543196">"စာတို ပို့ရန်"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ကိုယ်ပိုင် ကော်ပီကို ဖန်တီးနေ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"မနေ့က"</string>
- <string name="tomorrow" msgid="6241969467795308581">"နက်ဖြန်"</string>
- <string name="today" msgid="8041090779381781781">"ယနေ့"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ယနေ့ <xliff:g id="TIME_INTERVAL">%s</xliff:g> တွင်"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"နက်ဖြန်<xliff:g id="TIME_INTERVAL">%s</xliff:g>တွင်"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ခေါင်းစဉ်မဲ့ ဖြစ်ရပ်)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"လက်ခံရန်"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"အဖွဲ့အစည်း"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"နာမည်ပြောင်"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"မှတ်ချက်"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ဝဘ်ဆိုက်"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ဖြစ်ရပ်"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"တော်စပ်ပုံ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"အကောင့်"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"အမည်"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"အီးမေးလ်"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ဖုန်း"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ဓာတ်ပုံ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"အဆက်အသွယ် အယ်ဒီတာအား ချဲ့ရန် ကလစ်နှိပ်ပါ။"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"အဆက်အသွယ် အယ်ဒီတာအား ခေါက်ချရန် ကလစ်နှိပ်ပါ။"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"တည်နေရာများသို့ လမ်းညွှန်ချက်"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"မကြာမီက စာတို။ <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. တုံ့ပြန်ရန် ကလစ်ပါ"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"အဝင်"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"အထွက်"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"လွတ်သွား"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"မကြာမီက ခေါ်ဆိုမှု။ <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ပြန်ခေါ်ရန် ကလစ်ပါ"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"သင်: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"အီးမေးအကွက် သို့မဟုတ် ဖုန်းနံပါတ် အကွက်တွင် တစ်ခြားသူ၏ Hangouts အမှတ်သညာအား သင်ရိုက်ထည့်သည့်အခါ Hangouts ပိုမိုလွယ်ကူကောင်းမွန်စွာ အလုပ်လုပ်သည်။"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"နောက်ထပ် အကွက်များ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ဓာတ်ပုံပြောင်းရန်"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"တည်းဖြတ်သူကို ဖွင့်ခြင်းမအောင်မြင်ပါ။"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"သိမ်းဆည်းရန်နေရာ"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"လောလောဆယ်မှာ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>သို့ သိမ်းဆည်းနေသည်။ အခြားအကောင့်ကို ရွေးရန် နှစ်ကြိမ် တို့ပါ။"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">ကွင်းဆက်ချိတ်ထားသည့်အကောင့် (<xliff:g id="COUNT">%d</xliff:g>) ခု</item>
- <item quantity="one"> ကွင်းဆက်ချိတ်ထားသည့် အဆက်အသွယ်</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ကွင်းဆက်ချိတ်ထားသည့် အကောင့် <xliff:g id="COUNT">%d</xliff:g> ခု"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"အဆက်အသွယ်များ ချိတ်ဆက်ပါ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"မလုပ်တော့"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">ဖြစ်နိုင်သည့် မိတ္တုပွား <xliff:g id="COUNT">%d</xliff:g> ခု</item>
- <item quantity="one">ဖြစ်နိုင်သည့် မိတ္တုပွား ၁ ခု</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">ချိတ်ဆက်ထားသည့် အဆက်အသွယ် <xliff:g id="COUNT">%d</xliff:g> ခု</item>
- <item quantity="one">ချိတ်ဆက်ထားသည့် အဆွက်အသွယ် ၁ ခု</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ဤအဆက်အသွယ်"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ဖြစ်နိုင်သည့် မိတ္တုပွားများ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ယင်းအဆက်အသွယ်များ လူတစ်ဦးတည်း ဖြစ်နိုင်ပါသည်။ ၎င်းတို့ကို တစ်ခုတည်းသော အဆက်အသွယ် အဖြစ် ချိတ်ဆက်ပေးနိုင်ပါသည်။"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ကွင်းဆက် အဆက်အသွယ်များ"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"သင့်အကောင့်များမှ"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ဓာတ်ပုံရိုက်ရန်"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ဓာတ်ပုံများအားလုံး"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ဓာတ်ပုံ ရွေးပါ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> မှ"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ကိုဖျက်ပါ"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ကိုဖျက်ပါ"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ထံမှ ဓာတ်ပုံကို မစစ်ကြည့်ရသေးပါ"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ထံမှ ဓာတ်ပုံကို စစ်ကြည့်ပြီးပြီ"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"အမည်မသိအကောင့်မှ ဓာတ်ပုံဓာတ်ပုံ မစစ်ဆေးရသေးပါ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"အမည်မသိအကောင့်မှ ဓာတ်ပုံ စစ်ဆေးပြီးပါပြီ"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ဆက်သွယ်ရန် စာရင်းကို ဘာသာစကားဆိုင်ရာ အပြောင်းအလဲအား ထင်ဟပ်ပေးရန် အပ်ဒိတ် လုပ်ပေးနေပါသည်။ \n\nခဏစောင့်ပါ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"ပိတ်ဆို့ထားသည့် နံပါတ်များ"</string>
-</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
new file mode 100644
index 000000000..bf2c84dda
--- /dev/null
+++ b/res/values-my/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"အဆက်အသွယ်များ"</string>
+ <string name="contactsList" msgid="8661624236494819731">"အဆက်အသွယ်များ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"အဆက်အသွယ် ထည့်ရန်"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"အဆက်အသွယ်"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"တိုက်ရိုက်ခေါ်ဆိုခြင်း"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"တိုက်ရိုက်စာပို့ခြင်း"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"အဆက်အသွယ်ကို ရွေးချယ်ပါ"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"လိပ်စာသို့ထည့်ပါ"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"လိပ်စာတစ်ခုရွေးပါ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ရွေးရန်"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"လိပ်စာသစ် ထည့်ရန်"</string>
+ <string name="searchHint" msgid="8482945356247760701">"အဆက်အသွယ်များရှာပါ"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"အနှစ်သက်ဆုံးများထဲ ထည့်ပါ"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"အနှစ်သက်ဆုံးများမှ ထုတ်ပါ"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"အကြိုက်ဆုံးများထဲမှ ထုတ်လိုက်ပါပြီ"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"အကြိုက်ဆုံးများ ထဲကို ထည့်ပြီး"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"ပြင်ဆင်ရန်"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"ဖျက်ရန်"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ဓာတ်ပုံပြောင်းရန်"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ဖြတ်လမ်းလင့်ခ် ပြုလုပ်ရန်"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"လင့်ခ် ဖြုတ်ရန်"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"အဆက်အသွယ်များ ဖယ်ရှားရန်"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"အညွှန်းအမည်ပြောင်းပါ"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"အညွှန်းကိုဖျက်ပါ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"အဆက်အသွယ်ထည့်ပါ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"အဆက်အသွယ်များရွေးရန်"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"အဆက်အသွယ်များထည့်ရန်"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"အညွှန်းမှဖယ်ရှားပါ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"အညွှန်း ဖန်တီးရန်"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လျက် အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ချိတ်ဆက်မှုဖြုတ်ပါ"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သိမ်းဆည်းလျက် ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လိုက်ကာ အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"သိမ်းဆည်းလျက် ချိတ်ဆက်မှုဖြုတ်လိုက်ပါ"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သိမ်းဆည်းလျက် ရွေးထားသည့် အဆက်အသွယ်များနှင့် ချိတ်ဆက်ပေးလိုပါသလား။"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"သိမ်းထားလျက် ချိတ်ဆက်ပေးပါ"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"လင့်ခ်ချိတ်နေသည်"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"လင့်ခ်ဖြုတ်နေသည်"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"လင့်ခ်"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"လင့်ခ်အဆက်အသွယ်များ ကြည့်ရန်"</string>
+ <string name="menu_save" msgid="1727844363591825909">"သိမ်းဆည်းရန်"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"အဆက်အသွယ်များ ချိတ်ဆက်ရန်"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> နှင့်ချိတ်လိုသည့် အဆက်အသွယ်ကို ရွေးပါ −"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"အကြုံပြုလိုသော အဆက်အသွယ်များ"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"လိပ်စာများအားလုံး"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ကို လင့်ခ်ချိတ်လိုက်ပါပြီ"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"ကွင်းဆက်ထားသည့် အဆက်အသွယ်များ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ကို ဖျက်ပြီး"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> နှင့် <xliff:g id="NAME_1">%2$s</xliff:g> တို့ကို ဖျက်ပြီး"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ဖျက်လိုက်ပါပြီ"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other"> အဆက်အသွယ်ကို ဖျက်လိုက်သည်</item>
+ <item quantity="one"> အဆက်အသွယ်ကို ဖျက်လိုက်သည်</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other">အဆက်အသွယ် <xliff:g id="COUNT_1">%d</xliff:g> ခု</item>
+ <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">%d</xliff:g> ခု</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other">အဆက်အသွယ် <xliff:g id="COUNT_2">%1$d</xliff:g> ခု · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">%1$d</xliff:g> ခု · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google မှ"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> မှ"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ဖုန်းမြည်သံသတ်မှတ်ရန်"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"အသံမေးလ်သို့ ပို့ရန်"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"အသံမေးလ်သို့ မပို့ရန်"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ဤအဆက်အသွယ်မှာ ဖတ်ရန်သီးသန့်ဖြစ်ပါသည်။ ၎င်းကို မဖျက်နိုင်သော်လည်း ဖျောက်ထားနိုင်ပါသည်။"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"အဆက်အသွယ် ဖျောက်ထားရန်"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ဤအဆက်အသွယ်ရှိ ဖတ်ရန်သီးသန့်အကောင့်များကို ဖျောက်ထားမည်ဖြစ်ပြီး မဖျက်ပစ်ပါ။"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ဤအဆက်အသွယ်ကို ဖျက်မလား။"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"ရွေးထားသော အဆက်အသွယ်များကို ဖျက်မလား။"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ဖတ်ရန် သက်သက် အကောင့်များကို ဖျက်မရနိုင်သော်လည်း ဝှက်ထားနိုင်ပါသည်။"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ဖျက်ခံရမည့် အဆက်အသွယ်များထဲတွင် အကောင့် အများအပြားဆိုင်ရာ အသေးစိတ်များ ပါရှိနေသည်။ ဖတ်ရန် သက်သက် အကောင့်များထံမှ အသေးစိတ်များကို ဝှက်ထားမည်၊ ဖျက်ခံရမည် မဟုတ်ပါ။"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ဤအဆက်အသွယ်ကို ဖျက်လိုက်လျှင် အကောင့် အများအပြားထဲရှိ ဆက်နွယ်အချက်အလက်များကိုပါ ဖျက်ပါမည်။"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ဤအဆက်အသွယ်ကို ဖျက်မလား။"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ဖျက်ရန်"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"လိပ်စာ မရှိပါ"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"အဆက်အသွယ်ကို ပင်မ မျက်နှာပြင်သို့ ထည့်လိုက်ပြီ။"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ကို ပင်မ မျက်နှာပြင်သို့ ထည့်ပေးလိုက်ပြီ။"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ဤကိရိယာတွင် ပုံများမရှိပါ။"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"လိပ်စာရဲ့ဓာတ်ပုံ"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"စိတ်ကြိုက် အညွှန်းအမည်"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ပုံကို ဖယ်ရှားပါ"</string>
+ <string name="noContacts" msgid="2228592924476426108">"သင့်အဆက်အသွယ်များစာရင်းတွင် မည်သူမျှမရှိပါ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ဤအညွှန်းဖြင့်အဆက်အသွယ်များ မရှိပါ"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ဤအကောင့်တွင် အဆက်အသွယ်များ မရှိပါ"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"သင့်အဆက်အသွယ်များစာရင်းတွင် မည်သူမျှမရှိပါ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ကို သိမ်းဆည်းလိုက်ပါပြီ"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"အဆက်အသွယ်အား သိမ်းဆည်းပြီးပါပြီ"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"အဆက်အသွယ်များကို လင့်ခ်ဖြုတ်လိုက်ပြီ"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"အဆက်အသွယ်ပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"အဆက်အသွယ်ကို လင့်ခ်ဖြုတ်၍မရပါ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"အဆက်အသွယ်ကို လင့်ခ်ချိတ်ဆက်၍မရပါ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"အဆက်အသွယ်သိမ်းဆည်းရာတွင် အမှားအယွင်းရှိပါသည်"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"အဆက်အသွယ်ဓာတ်ပုံပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"အညွှန်းဖော်ပြ၍မရပါ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"အညွှန်းဖျက်ပြီးပါပြီ"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"အညွှန်းဖန်တီးပြီးပါပြီ"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"အညွှန်းဖန်တီး၍ မရပါ"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"အညွှန်းကို အပ်ဒိတ်လုပ်ပြီးပါပြီ"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"အညွှန်းမှ ဖယ်ရှားပြီးပါပြီ"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"အညွှန်းသို့ ထည့်ထားပါသည်"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"အညွှန်းပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ထိုအညွှန်းမှာ ရှိပြီးသားဖြစ်ပါသည်"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"အချို့အဆက်အသွယ်များတွင် အီးမေးလ်မရှိကြပါ။"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"အချို့အဆက်အသွယ်များတွင် ဖုန်းနံပါတ်မရှိကြပါ။"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"အီးမေးလ် ပို့ရန်"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"မက်ဆေ့ဂျ် ပို့ရန်"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"အဆက်အသွယ်များ ရွေးရန်"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ပို့ရန်"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"အဆက်အသွယ်များမရှိ"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ကို လိပ်စာထဲ ထည့်မလား?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"အဆက်အသွယ်များ၏နာမည်များ"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ယခင် မျက်နှာပြင်သို့ ပြန်ရန် ကလစ်ပါ"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ဖုန်းနံပါတ် ထည့်ရန်"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"အီးမေးလ် ထည့်ရန်"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ဤလုပ်ဆောင်ချက်ကို ပြုလုပ်မည့် အက်ပ်မရှိပါ။"</string>
+ <string name="menu_share" msgid="943789700636542260">"မျှဝေခြင်း"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"အဆက်အသွယ်များ ထဲသို့ ထည့်ရန်"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ထည့်ရန်"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">ဤအက်ပ်မှတစ်ဆင့် အဆက်အသွယ်များကို မျှဝေပါ</item>
+ <item quantity="one">ဤအက်ပ်မှတစ်ဆင့် အဆက်အသွယ်ကို မျှဝေပါ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"အကောင့်ရွေးပါ"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"အညွှန်းဖန်တီးပါ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"အညွှန်းအမည်ပြောင်းပါ"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"အညွှန်းအမည်"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"အညွှန်းအမည်"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"အသံဖြင့် ချက်တင်း"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ဗီဒီယိုဖြင့်စကားပြောခြင်း"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> လိပ်စာ"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> အကောင့်"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ဓာတ်ပုံရိုက်ရန်"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ဓာတ်ပုံအသစ်ရိုက်ပါ"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ပုံရွေးရန်"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ပုံသစ်ရွေးရန်"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"ရှာဖွေနေသည်…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ရက်စွဲ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"အညွှန်း"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"မလုပ်တော့"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"နောက်သို့"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ပိတ်ရန်"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ရွေးထားသော လိပ်စာအား ပြင်ဆင်ခြင်းသို့ပြောင်းမလား? သင် အခုထိ ရိုက်ထားသော စာများအားလုံး ကူးယူပြီးဖြစ်ပါလိမ့်မည်"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"အကန့် <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ဆက်တင်များ"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ဆက်တင်များ"</string>
+ <string name="menu_help" msgid="1680178646764069976">"အကူအညီနှင့် အကြံပြုချက်"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ဖုန်းနံပါတ်"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"လိပ်စာများထဲသို့ ထည့်ပါ"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"ပိတ်ရန်"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"နှစ်ကို ထည့်ရန်"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"အကောင့်ထည့်ရန်"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"တင်သွင်းရန်"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"အသစ်ဖန်တီးပါ…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" အညွှန်းကို ဖျက်ပစ်မလား။ (အဆက်အသွယ်များအနေဖြင့် ပျက်သွားမည်မဟုတ်ပါ။)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"အခြားတစ်ခုနှင့် ကွင်းဆက်မချိတ်မီ အဆက်အသွယ်အမည်ကိုရိုက်ပါ။"</string>
+ <string name="copy_text" msgid="3257145021583508761">"ခဏကူးယူထားပါ"</string>
+ <string name="set_default" msgid="4417505153468300351">"ပုံသေအဖြစ် သတ်မှတ်ခြင်း"</string>
+ <string name="clear_default" msgid="7193185801596678067">"မူရင်းများကို ရှင်းလင်းခြင်း"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"စာသားကူးယူပြီး"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ပြင်ဆင်မှုများကို ဖယ်ပစ်မလား။"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ဖယ်ပစ်ရန်"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"မလုပ်တော့"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"စိတ်ကြိုက်ပြုလုပ်ခြင်းများကို ဖယ်ပစ်မလား။"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"အဆက်အသွယ်များရှာပါ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"အဆက်အသွယ်များ ဖယ်ရှားရန်"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"မိမိ၏ဖုန်းမှပရိုဖိုင်လ်"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ကျွန်ုပ်၏ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ကိုယ်ရေးအကောင့်"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google သို့ သင့်အဆက်အသွယ်များကို မိတ္တူကူးယူပေးမည့် အကောင့်တစ်ခုထည့်ရန် တစ်မိနစ်လောက် အချိန်ပေးလိုက်ပါ။"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"အဆက်အသွယ် အသစ်ကို <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> တွင်သိမ်းလိုက်ပါမည်။"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"အဆက်အသွယ် အသစ်များအတွက် မူရင်းအကောင့်ကို ရွေးပါ။"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"လိပ်စာသစ် ထည့်ရန်"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"အဆက်အသွယ်အားပြင်ရန်"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ကြည့်ရန်အတွက်သာ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ပြင်ဆင်လိုသည့် အဆက်အသွယ်ကို ရွေးချယ်ပါ"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"လင့်ခ်ချိတ်ထားသောအဆက်အသွယ်များ"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ထည့်ရန်"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"လင့်ခ်ဖြုတ်ရန်"</string>
+ <string name="add_account" msgid="8201790677994503186">"အကောင့်ထည့်ရန်"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"အကောင့်အသစ်ထည့်ပါ"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ဒေ့ဘာဘေ့စ်ဖိုင်များကို အပြင်သို့ထုတ်ပါ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"လိပ်စာသစ် ထည့်ရန်"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ပိုပြီး ကြည့်ရန်"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"လျှော့ပြီး ကြည့်ရန်"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"မကြာမီက"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"အကြောင်း"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"မိမိအတွက် ကိုယ်ပိုင်ကော်ပီ ပြုလုပ်နေစဉ်…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"နက်ဖြန်"</string>
+ <string name="today" msgid="8041090779381781781">"ယနေ့"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ယနေ့ <xliff:g id="TIME_INTERVAL">%s</xliff:g> တွင်"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"နက်ဖြန်<xliff:g id="TIME_INTERVAL">%s</xliff:g>တွင်"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ခေါင်းစဉ်မဲ့ ဖြစ်ရပ်)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"လက်ခံရန်"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"အဖွဲ့အစည်း"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"နာမည်ပြောင်"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"မှတ်ချက်"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ဝဘ်ဆိုက်"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ဖြစ်ရပ်"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"တော်စပ်ပုံ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"အမည်"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"အီးမေးလ်"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ဖုန်း"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"တည်နေရာများသို့ လမ်းညွှန်ချက်"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"မကြာမီက စာတို။ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. တုံ့ပြန်ရန် ကလစ်ပါ"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"အဝင်"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"အထွက်"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"လွတ်သွား"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"မကြာမီက ခေါ်ဆိုမှု။ <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ပြန်ခေါ်ရန် ကလစ်ပါ"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"သင်: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"နောက်ထပ်အကွက်များ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"အဆက်အသွယ်ဓာတ်ပုံ ပြောင်းရန်"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"အဆက်အသွယ်ဓာတ်ပုံ ထည့်ရန်"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"အဆက်အသွယ်ဓာတ်ပုံ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"အယ်ဒီတာကို ဖွင့်၍မရပါ။"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"အောက်ပါသို့ သိမ်းနေပါသည်"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ထံမှအဆက်အသွယ်ကို ပြင်ဆင်၍မရပါ"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"အဆက်အသွယ်များ ချိတ်ဆက်ပါ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"မလုပ်တော့"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ဤအဆက်အသွယ်"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ဖြစ်နိုင်သည့် မိတ္တုပွားများ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ယင်းအဆက်အသွယ်များ လူတစ်ဦးတည်း ဖြစ်နိုင်ပါသည်။ ၎င်းတို့ကို တစ်ခုတည်းသော အဆက်အသွယ် အဖြစ် ချိတ်ဆက်ပေးနိုင်ပါသည်။"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ကိုဖျက်ပါ"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ကိုဖျက်ပါ"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"အကြံပြုချက်များ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"အသစ်"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"လမ်းညွှန်ချက်အကွက်ကို ဖွင့်ပါ"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"လမ်းညွှန်ချက်အကွက်ကို ပိတ်ပါ"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> လေဘယ်လ်"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"အညွှန်းများ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"အကောင့်များ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"သင့်မှတ်တမ်းကို တစ်ပြိုင်တည်း ကြည့်လိုက်ပါ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"အစီအစဉ်များနှင့် မက်ဆေ့ဂျ်များ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"အစီအစဥ်များ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"မက်ဆေ့ဂျ်များ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"အကြံပြုချက်များ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"သင်၏အဆက်အသွယ်များကို စနစ်တကျနှင့် အသုံးဝင်စွာ ထားလိုက်ပါ"</string>
+ <string name="undo" msgid="1425165101664071422">"တစ်ဆင့်နောက်ပြန်ရန်"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ထံ ဖုန်းခေါ်ရန်"</string>
+ <string name="call_home" msgid="1990519474420545392">"အိမ်ဖုန်းနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"မိုဘိုင်းနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_work" msgid="5328785911463744028">"အလုပ်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"အလုပ်ဖက်စ်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"အိမ်ဖက်စ်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ပေဂျာနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_other" msgid="8563753966926932052">"ခေါ်ရန်"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ပြန်ခေါ်ရန်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_car" msgid="3280537320306436445">"ကားဖုန်းနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ကုမ္ပဏီပင်မနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN ကို ခေါ်ရန်"</string>
+ <string name="call_main" msgid="6082900571803441339">"ပင်မနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ဖက်စ်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ရေဒီယိုဖုန်းနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_telex" msgid="2223170774548648114">"တဲလက်ဇ်နံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD ကို ခေါ်ရန်"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"အလုပ်မိုဘိုင်းနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"အလုပ်ပေဂျာနံပါတ်ကို ခေါ်ရန်"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ထံ ဖုန်းခေါ်ရန်"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ကို ခေါ်ရန်"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ခေါ်ရန်)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ထံ စာပို့ရန်"</string>
+ <string name="sms_home" msgid="7524332261493162995">"အိမ်ဖုန်းနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"မိုဘိုင်းနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_work" msgid="2269624156655267740">"အလုပ်ဖုန်းနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"အလုပ်ဖက်စ်နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"အိမ်ဖက်စ်နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ပေဂျာနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_other" msgid="806127844607642331">"စာပို့ရန်"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ပြန်ခေါ်ရန်နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ကားဖုန်းနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ကုမ္ပဏီပင်မနံပါတ်ကို စာပို့ပါ"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ပင်မနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ဖက်စ်နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ရေဒီယိုနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"တဲလက်စ်နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"အလုပ်မိုဘိုင်းနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"အလုပ်ပေဂျာနံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> သို့ စာပို့ရန်"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS နံပါတ်သို့ စာပို့ရန်"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (မက်ဆေ့ဂျ်ပို့ရန်)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ဗီဒီယိုခေါ်ဆိုမှု ပြုလုပ်ရန်"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"မကြာခဏဆက်သွယ်လေ့ရှိသူများစာရင်းကို ရှင်းမလား။"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"အဆက်အသွယ်များနှင့် ဖုန်းအက်ပ်များရှိ မကြာခဏဆက်သွယ်လေ့ရှိသူများစာရင်းကို ရှင်းပစ်မည်ဖြစ်ပြီး အီးမေးလ်အက်ပ်များအား သင်၏ဦးစားပေးလိပ်မူခြင်းများကို အစမှပြန်၍မှတ်သားလေ့လာစေပါမည်။"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"မကြာခဏဆက်သွယ်လေ့ရှိသူများစာရင်းကို ရှင်းနေသည်…"</string>
+ <string name="status_available" msgid="5586870015822828392">"အားနေသည်"</string>
+ <string name="status_away" msgid="1838861100379804730">"အဝေးရောက်နေသည်"</string>
+ <string name="status_busy" msgid="9147992455450257136">"အလုပ်များနေသည်"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"အခြား"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"လမ်းညွှန်"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"အလုပ်လမ်းညွှန်"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"အဆက်အသွယ်အားလုံး"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> အတွက် အမြန်အဆက်အသွယ်"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(အမည်မရှိ)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"မကြာခဏဆက်သွယ်လေ့ရှိသူများ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ဖုန်းနံပါတ်ပါအဆက်အသွယ်အားလုံး"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"အလုပ်ပရိုဖိုင်အဆက်အသွယ်များ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"အပ်ဒိတ်များ ကြည့်ရန်"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ကိရိယာ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"အမည်"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"အမည်ပြောင်"</string>
+ <string name="name_given" msgid="4280790853455320619">"ရှေ့အမည်"</string>
+ <string name="name_family" msgid="7466985689626017037">"နောက်အမည်"</string>
+ <string name="name_prefix" msgid="59756378548779822">"အမည်ရှေ့ဆက်"</string>
+ <string name="name_middle" msgid="8467433655992690326">"အလယ်အမည်"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"အမည်နောက်ဆက်"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"အသံထွက်အမည်"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ရှေ့အမည် အသံထွက်"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"အလယ်အမည် အသံထွက်"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"နောက်အမည် အသံထွက်"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ဖုန်း"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"အီးမေးလ်"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"လိပ်စာ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"အဖွဲ့အစည်း"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ဆက်နွှယ်မှု"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"အထူးနေ့"</string>
+ <string name="sms" msgid="1756857139634224222">"စာသားမက်ဆေ့ဂျ်"</string>
+ <string name="postal_address" msgid="8765560217149624536">"လိပ်စာ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ကုမ္ပဏီ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ခေါင်းစဉ်"</string>
+ <string name="label_notes" msgid="8337354953278341042">"မှတ်စုများ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"စိတ်ကြိုက်"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ဝဘ်ဆိုဒ်"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"အညွှန်းများ"</string>
+ <string name="email_home" msgid="8573740658148184279">"အိမ်အီးမေးလ်သို့ ပို့ရန်"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"မိုဘိုင်းအီးမေးလ်သို့ ပို့ရန်"</string>
+ <string name="email_work" msgid="2807430017302722689">"အလုပ်အီးမေးလ်သို့ ပို့ရန်"</string>
+ <string name="email_other" msgid="3454004077967657109">"အီးမေးလ်ပို့ရန်"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ထံ အီးမေးလ်ပို့ရန်"</string>
+ <string name="email" msgid="5668400997660065897">"အီးမေးလ်"</string>
+ <string name="postal_street" msgid="8133143961580058972">"လမ်း"</string>
+ <string name="postal_city" msgid="6597491300084895548">"မြို့"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ပြည်နယ်"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"စာပို့သင်္ကေတ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"နိုင်ငံ"</string>
+ <string name="map_home" msgid="1243547733423343982">"အိမ်လိပ်စာကြည့်ရန်"</string>
+ <string name="map_work" msgid="1360474076921878088">"အလုပ်လိပ်စာကြည့်ရန်"</string>
+ <string name="map_other" msgid="3817820803587012641">"လိပ်စာကြည့်ရန်"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> လိပ်စာ ကြည့်ရန်"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber သုံး၍ ချတ်လုပ်ရန်"</string>
+ <string name="chat" msgid="9025361898797412245">"ချတ်လုပ်ရန်"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ဖျက်ရန်"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"အမည်အကွက်များကို ပိုပြရန်"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"အမည်အကွက်များ ချုံ့ပြရန်"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"အသံထွက်အမည်အကွက်များကို ပိုပြရန်"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"အသံထွက်အမည်အကွက်များ ချုံ့ပြရန်"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ချဲ့ကြည့်ရန်"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ချုံ့ပြရန်"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ချဲ့ထားသည်"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ချုံ့ထားသည်"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"အဆက်အသွယ်အားလုံး"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ကြယ်ပွင့်ပြထားသော"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"စိတ်ကြိုက်ကြည့်ရန်"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"အဆက်အသွယ်"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"အခြားအဆက်အသွယ်အားလုံး"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"အဆက်အသွယ်အားလုံး"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"ပြိုင်တူညှိခြင်းအဖွဲ့ကို ဖယ်ရှားရန်"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"ပြိုင်တူညှိခြင်းအဖွဲ့ထည့်ရန်"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"နောက်ထပ်အဖွဲ့များ…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ပြိုင်တူညှိခြင်းမှ \"<xliff:g id="GROUP">%s</xliff:g>\" ကို ဖယ်ခြင်းက အဖွဲ့ဖွဲ့မထားသောအဆက်အသွယ်များကိုပါ ပြိုင်တူညှိခြင်းမှ ဖယ်ရှားပါလိမ့်မည်။"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ပြသရေးရွေးစရာများကို သိမ်းနေသည်…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"စိတ်ကြိုက်ကြည့်ရှုမှု"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"တင်သွင်းထားသောအဆက်အသွယ်များကို သိမ်းရမည့်အကောင့် -"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ဆင်းမ်ကဒ်"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> ဆင်းမ်ကဒ်"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">အဆက်အသွယ် %1$d ခု</item>
+ <item quantity="one">အဆက်အသွယ် ၁ ခု</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other">အဆက်အသွယ် <xliff:g id="COUNT_2">^1</xliff:g> ခု • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">^1</xliff:g> ခု • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ဖိုင်"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"တင်သွင်းစရာ မရှိပါ"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"လိပ်စာကဒ်မှ အဆက်အသွယ်များကို တင်သွင်းမလား။"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> တင်သွင်းခြင်းကို မလုပ်တော့ဘူးလား။"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> တင်ပို့ခြင်းကို မလုပ်တော့ဘူးလား။"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"လိပ်စာကဒ် တင်သွင်း/ပို့ခြင်း ဖျက်မရပါ"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"မသိရသောအမှားအယွင်း"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ကို ဖွင့်၍မရပါ - <xliff:g id="EXACT_REASON">%2$s</xliff:g>။"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"တင်ပို့ရေးစတင်၍ မရပါ - \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"။"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"တင်ပို့နိုင်သောအဆက်အသွယ် မရှိပါ။"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"လိုအပ်သောခွင့်ပြုချက်ကို သင်ပိတ်ထားသည်။"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"တင်ပို့နေစဉ် အမှားအယွင်းတစ်ခု ဖြစ်သွားပါသည် - \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"။"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O အမှား"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"သိုလှောင်ရန်နေရာ မလုံလောက်ပါ။ ဖိုင်အလွန်ကြီးနေနိုင်ပါသည်။"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ဤဖော်မက်ကို ပံ့ပိုးမထားပါ။"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> တင်ပို့ပြီးပါပြီ။"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"အဆက်အသွယ်များ တင်ပို့ပြီးပါပြီ။"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"အဆက်အသွယ်များ တင်ပို့ပြီးပါပြီ၊ အဆက်အသွယ်များမျှဝေရန် အကြောင်းကြားချက်ကို နှိပ်ပါ။"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"အဆက်အသွယ်များမျှဝေရန် နှိပ်ပါ။"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> တင်ပို့ခြင်း ပယ်ဖျက်လိုက်သည်။"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"အဆက်အသွယ်ဒေတာကို တင်ပို့နေသည်"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"အဆက်အသွယ်ဒေတာကို တင်ပို့နေသည်။"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ဒေတာဘေ့စ်အချက်အလက်များ မရယူနိုင်ပါ။"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"တင်ပို့နိုင်သောအဆက်အသွယ်များ မရှိပါ။"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"လိပ်စာကဒ်ပြုလုပ်ရေး မှန်ကန်စွာမစတင်နိုင်ပါ။"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"တင်ပို့၍မရပါ"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"အဆက်အသွယ်ဒေတာကို တင်ပို့၍မရပါ။\nအကြောင်းမှာ - \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> တင်သွင်းနေသည်"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"လိပ်စာကဒ်ဒေတာ ဖတ်၍မရပါ"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> လိပ်စာကဒ်တင်သွင်းပြီးပါပြီ"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> တင်သွင်းခြင်း ပယ်ဖျက်လိုက်သည်"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ကို မကြာမီ တင်သွင်းပါမည်။"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ဖိုင်ကို မကြာမီ တင်သွင်းပါမည်။"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"လိပ်စာကဒ်တင်သွင်းခြင်းတောင်းဆိုမှုကို ငြင်းပယ်လိုက်သည်။ နောက်မှ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"အဆက်အသွယ်များကို မကြာမီ တင်ပို့သွားပါမည်။"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"လိပ်စာကဒ်တင်ပို့ခြင်းတောင်းဆိုမှုကို ငြင်းပယ်လိုက်သည်။ နောက်မှ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"အဆက်အသွယ်"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"လိပ်စာကဒ်(များ)ကို စက်တွင်းယာယီသိုလှောင်ရေးတွင် သိမ်းနေပါသည်။ အမှန်တကယ်တင်သွင်းခြင်း မကြာမီစပါမည်။"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"လိပ်စာကဒ်ကို တင်သွင်း၍မရပါ။"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC မှ အဆက်အသွယ်ရရှိပါသည်။"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ယာယီသိမ်းနေသည်"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"တင်သွင်းနေသည် <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> - <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ဖိုင်သို့ တင်ပို့ရန်"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"အောက်ပါအတိုင်းစီရန်"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"အမည် အသံထွက်"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"အမြဲပြရန်"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ဗလာဖြစ်နေလျှင် ဝှက်ရန်"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ရှေ့အမည်"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"နောက်အမည်"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"အမည်ဖော်မက်"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ရှေ့အမည်ဖြင့်စ၍"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"နောက်အမည်ဖြင့်စ၍"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"အကောင့်များ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"အဆက်အသွယ်အသစ်များအတွက် မူရင်းအကောင့်"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ကျွန်ုပ်၏အချက်အလက်"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"သင့်ပရိုဖိုင်ကို သတ်မှတ်ရန်"</string>
+ <string name="setting_about" msgid="7014388749752042863">"အဆက်အသွယ်များအကြောင်း"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"အကြိုက်ဆုံးအဆက်အသွယ်များကို မျှဝေရန်"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"အဆက်အသွယ်အားလုံးမျှဝေရန်"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"အဆက်အသွယ်များ မျှဝေ၍မရပါ။"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"အဆက်အသွယ်များ တင်ပို့ပါ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"အောက်ပါထံမှ အဆက်အသွယ်များ တင်သွင်းပါ"</string>
+ <string name="share_error" msgid="948429331673358107">"ဤအဆက်အသွယ်ကို မျှဝေ၍မရပါ။"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"မျှဝေရန်အဆက်အသွယ် မရှိပါ။"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ပြရန်အဆက်အသွယ်များ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ပြသပေးရန်အဆက်အသွယ်များ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"စိတ်ကြိုက်ပြင်ဆင်ရန်"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"သိမ်းရန်"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"အဆက်အသွယ်များရှာပါ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"အကြိုက်ဆုံးများ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"တင်သွင်းရန်"</string>
+ <string name="menu_export" msgid="2658783911863503902">"တင်ပို့ရန်"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"ပိတ်ထားသည့် နံပါတ်များ"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> မှတဆင့်"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> မှတဆင့်"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ရှာဖွေမှုရပ်ရန်"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ရှာဖွေမှုကို ရှင်းပါ"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"အကောင့်"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ခေါ်ဆိုမှုများအတွက် ဤအရာကို အမြဲသုံးရန်"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"မှတ်စုတစ်ခုဖြင့် ခေါ်ဆိုရန်"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ခေါ်ဆိုမှုနှင့်အတူပို့ရန် မှတ်စုတစ်ခု ရေးပါ…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"တည်ဆောက်မှုဗားရှင်း"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"အခမဲ့ရင်းမြစ်လိုင်စင်များ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"အခမဲ့ရင်းမြစ်ဆော့ဖ်ဝဲအတွက် လိုင်စင်အသေးစိတ်များ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"ပုဂ္ဂိုလ်ရေးဆိုင်ရာမူဝါဒ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"ဝန်ဆောင်မှုဆိုင်ရာစည်းမျဉ်းများ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"အခမဲ့ရင်းမြစ်လိုင်စင်များ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url ကို ဖွင့်၍မရပါ။"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ကို စစ်ဆေးပြီးပါပြီ"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ကို မစစ်ဆေးရသေးပါ"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ဗီဒီယိုခေါ်ဆိုမှု ပြုလုပ်ရန်"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ဖျက်ရန်"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"အစက်သုံးစက်"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> မိနစ် <xliff:g id="SECONDS">%2$s</xliff:g> စက္ကန့်"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> နာရီ <xliff:g id="MINUTES_1">%2$s</xliff:g> မိနစ် <xliff:g id="SECONDS">%3$s</xliff:g> စက္ကန့်"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ဤဖြတ်လမ်းလင့်ခ်ကို ပိတ်ထားပါသည်"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"အဆက်အသွယ်ကို ဖယ်ရှားခဲ့ပါသည်"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"တင်သွင်းရန်"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"အဆက်အသွယ်များကို ရွေးပါ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ဆင်းမ်ကဒ်ထဲတွင် လိပ်စာ မရှိပါ"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"အဆက်အသွယ်က သင့်စာရင်းတွင် ရှိနှင့်နေပါပြီ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">ဆင်းမ်အဆက်အသွယ် <xliff:g id="COUNT">%d</xliff:g> ခုကို တင်သွင်းပြီးပါပြီ</item>
+ <item quantity="one">ဆင်းမ်အဆက်အသွယ် ၁ ခုကို တင်သွင်းပြီးပါပြီ</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"ဆင်းမ်အဆက်အသွယ်များကို တင်သွင်း၍မရပါ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"ဆင်းမ်ကဒ်မှ တင်သွင်းပါ"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"မလုပ်တော့"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"အလိုအလျောက်စင့်ခ်လုပ်ခြင်းကို ပိတ်ထားသည်။ ဖွင့်ရန်အတွက် တို့ပါ။"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ပယ်ရန်"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"အကောင့်စင့်ခ်လုပ်ခြင်းကို ပိတ်ထားသည်။ ဖွင့်ရန်အတွက် တို့ပါ။"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"အလိုအလျောက်စင့်ခ်လုပ်ခြင်းကို ဖွင့်မလား။"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google အဆက်အသွယ်များသာမက အက်ပ်နှင့် အကောင့်အားလုံးတွင် သင်ပြုလုပ်သော အပြောင်းအလဲများကို ဝဘ်နှင့် သင့်ကိရိယာများအကြား အချိန်နှင့်တပြေးညီ မွမ်းမံပေးသွားပါမည်။"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ဖွင့်ရန်"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ချိတ်ဆက်မှုမရှိပါ"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"ဆင်းမ်ကဒ်"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"နောက်ထပ်ပြရန်"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"ဆင်းမ်ကဒ်ကို တင်သွင်းပြီးပါပြီ"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"တင်သွင်း၍မရပါ"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"ဆင်းမ်ကဒ်မှ အဆက်အသွယ်များကို တင်သွင်း၍မရပါ"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ဆင်းမ်ကဒ်ကို တင်သွင်းနေသည်"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"အကြောင်းကြားချက်များ"</string>
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1667a4f16..961edd53e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakter"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakter"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Se kontakten"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Endre kontakten"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Legg til kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Ring"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Send melding"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Velg en kontaktsnarvei"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Velg et nummer å ringe"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Velg et nummer for SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Velg en kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Legg til kontakt"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Velg en kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Velg"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Opprett ny kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Med stjerne"</string>
- <string name="frequentList" msgid="7154768136473953056">"Mest brukt"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritter"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Egenskaper for kontakt"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Rediger kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Opprett kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Rediger gruppe"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Opprett gruppe"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Info"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Oppdat."</string>
<string name="searchHint" msgid="8482945356247760701">"Søk i kontakter"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Se på kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Legg til som favoritt"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra favoritter"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjernet fra favoritter"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Rediger"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Slett"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Bytt bilde"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plassér på startsiden"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ring kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Send SMS til kontakt"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Lag snarvei"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Del opp"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Rediger"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Slett"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Legg til kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Legg til gruppe"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Fjern kontakter"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Endre etikettens navn"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Slett etiketten"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Legg til som kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Velg kontakter"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Legg til kontakter"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Fjern fra etiketten"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Lag en etikett"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Vil du dele denne kontakten opp i flere kontakter?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Del opp"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vil du lagre endringene du allerede har gjort, og dele opp denne kontakten i flere kontakter?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Lagre og del opp"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vil du lagre endringene du allerede har gjort og knytte sammen med den valgte kontakten?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Lagre og knytt sammen"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Knytter sammen"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Fjerner tilknytning"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Knytt sammen"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Se sammenknyttede kontakter"</string>
<string name="menu_save" msgid="1727844363591825909">"Lagre"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Knytt sammen kontakter"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Slå sammen kontaktene"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Velg kontakten du vil knytte sammen med <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Vis alle kontakter"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Forslag"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle kontakter"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ble linket"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktene er sammenknyttet"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> er slettet"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> og <xliff:g id="NAME_1">%2$s</xliff:g> er slettet"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> … er slettet"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kontakter er slettet</item>
<item quantity="one">Kontakten er slettet</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakter</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Fra Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Fra <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Angi ringetone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle samtaler til talepost"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakter fra skrivebeskyttede kontoer kan ikke slettes, men de kan skjules."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Skjul"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakten du vil slette, inneholder informasjon fra flere kontoer. Informasjon fra skrivebeskyttede kontoer kan bare skjules, ikke slettes."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Du må velge minst to kontakter for å utføre en sammenknytting."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vil du knytte sammen de valgte kontaktene?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Knytt sammen"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Videresend til telefonsvarer"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ikke videresend til telefonsvarer"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Denne kontaken kan bare vises. Kontakten kan ikke slettes, men du kan skjule den."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Skjul kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Kontoer som bare kan vises blir skjult, men slettes ikke."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vil du slette denne kontakten?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vil du slette de valgte kontaktene?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakter fra skrivebeskyttede kontoer kan ikke slettes, men de kan skjules."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Hvis du sletter denne kontakten, sletter du informasjon fra flere kontoer."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vil du slette denne kontakten?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Slett"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Forkast endringene"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakten finnes ikke."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakten er lagt til på startskjermen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> er lagt til på startskjermen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Opprett ny kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Opprett ny kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisasjon"</item>
- <item msgid="7196592230748086755">"Notat"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Ingen bilder er tilgjengelige på nettbrettet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Det er ingen bilder på telefonen."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Ingen bilder er tilgjengelige på enheten."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbilde"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Egendefinert etikett"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send anrop direkte til telefonsvarer."</string>
<string name="removePhoto" msgid="4898105274130284565">"Fjern bilde"</string>
- <string name="noContacts" msgid="4955659076981974652">"Ingen kontakter"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ingen grupper."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Du må ha en konto for å opprette grupper."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Det er ingen personer i denne gruppen."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Endre gruppen for å legge til noen."</string>
- <string name="savingContact" msgid="4075751076741924939">"Lagrer kontakt…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Kontaktlisten din er tom"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Ingen kontakter har denne etiketten"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Ingen kontakter i denne kontoen"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlisten din er tom"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> er lagret"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt er lagret"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Tilknytningen mellom kontaktene er fjernet"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kunne ikke lagre kontaktendringene."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kunne ikke fjerne tilknytningen for kontakten."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kunne ikke knytte sammen kontakten."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Feil ved lagring av kontakt."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kunne ikke lagre endringene av kontaktbildene."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Gruppe er lagret."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kunne ikke lagre gruppeendringer."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnumre</item>
- <item quantity="one">1 kontakt med telefonnummer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ingen kontakter med telefonnummer"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> er funnet</item>
- <item quantity="one">1 er funnet</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kunne ikke lagre kontaktendringene"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kunne ikke fjerne tilknytningen for kontakten"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kunne ikke tilknytte kontakten"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Feil ved lagring av kontakt"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kunne ikke lagre endringene av kontaktbildene"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kunne ikke laste inn etiketten"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten er slettet"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketten ble opprettet"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan ikke opprette etiketten"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketten ble oppdatert"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Fjernet fra etiketten"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Lagt til i etiketten"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kunne ikke lagre etikettendringene"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Denne etiketten finnes allerede"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Noen av kontaktene mangler e-postadresse."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Noen av kontaktene mangler telefonnummer."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Send e-post"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send melding"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Velg kontakter"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Ingen kontakter"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> er funnet</item>
- <item quantity="one">1 er funnet</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alle"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritter"</string>
- <string name="callBack" msgid="5498224409038809224">"Ring tilbake"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ring på nytt"</string>
- <string name="returnCall" msgid="8171961914203617813">"Ring tilbake"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Legg til «<xliff:g id="EMAIL">%s</xliff:g>» som kontakt?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbilde"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Navn på kontakter"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Det ble ikke funnet noen app som kan håndtere denne handlingen."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klikk for å gå tilbake til den forrige skjermen"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Legg til telefonnummer"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Legg til e-post"</string>
<string name="missing_app" msgid="1466111003546611387">"Kunne ikke finne noen app som kan håndtere denne handlingen."</string>
<string name="menu_share" msgid="943789700636542260">"Del"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Legg til i kontakter"</string>
- <string name="share_via" msgid="563121028023030093">"Del kontakten via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Opprett gruppe under konto"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Legg til"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Del kontaktene via</item>
+ <item quantity="one">Del kontakten via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Velg konto"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Opprett en etikett"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Endre etikettens navn"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etikettnavn"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etikettnavn"</string>
<string name="audio_chat" msgid="2535716629358298691">"Taleprat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videonettprat"</string>
- <string name="connections" msgid="8098440723172028350">"Tilknytninger"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Legg til tilknytning"</string>
- <string name="recent" msgid="2659189233141493004">"Nylige"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nylige oppdateringer"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Kan ikke redigeres fra denne appen."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Kan ikke redigeres på denne enheten."</string>
<string name="take_photo" msgid="7496128293167402354">"Ta bilde"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Ta nytt bilde"</string>
<string name="pick_photo" msgid="2129509985223564942">"Velg et bilde"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Velg et nytt bilde"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktlisten er under oppdatering."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Søker …"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Vis valgte"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Vis alle"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Marker alle"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Fjern alle markeringer"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Legg til ny"</string>
- <string name="add_organization" msgid="7311893231158291197">"Legg til organisasjon"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Gruppenavn"</string>
- <string name="change_photo" msgid="8530597935483526383">"Endre"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Hovedbilde"</string>
- <string name="description_star" msgid="2605854427360036550">"favoritt"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Rediger kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vil du knytte sammen gjeldende kontakt med den valgte kontakten?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Avbryt"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Tilbake"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"lukk"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Bytt til redigering av gjeldende kontakt? Informasjonen du har lagt til så langt blir kopiert."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiér til mine kontakter"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Legg til i Mine kontakter"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Egendefinert"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Innstillinger"</string>
<string name="menu_settings" msgid="377929915873428211">"Innstillinger"</string>
<string name="menu_help" msgid="1680178646764069976">"Hjelp og tilbakemelding"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Vis grupper"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Legg til i kontakter"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Legg til kontakt"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Lukk"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Legg til år"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Laster inn …"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opprett en ny kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Legg til konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importér kontakter"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Opprett ny gruppe"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Opprett en ny gruppe"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
- <item quantity="one">1 gruppe</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vil du slette gruppen <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Selve kontaktene blir ikke slettet.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer fra <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person fra <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importér"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Opprett ny…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Vil du slette etiketten «<xliff:g id="GROUP_LABEL">%1$s</xliff:g>»? (Selve kontaktene blir ikke slettet.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Skriv inn navnet på kontakten før du knytter vedkommende sammen med en annen."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopier til utklippstavlen"</string>
<string name="set_default" msgid="4417505153468300351">"Angi som standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Fjern som standard"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst kopiert"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Vil du forkaste endringene og avslutte endringsmodusen?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Vil du forkaste endringene?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Forkast"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Fortsett å endre"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Konfigurer profilen"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Tast inn personens navn"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Gruppens navn"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Avbryt"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vil du forkaste tilpasningene?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Søk etter kontakter"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Fjern kontakter"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Min lokale profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Min profil for <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Viser alle kontakter"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hold kontaktene dine trygge selv om du mister telefonen: synkroniser med en nettbasert tjeneste."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Legg til en konto"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Den nye kontakten blir ikke sikkerhetskopiert. Vil du legge til en konto for sikkerhetskopiering av kontakter på nettet?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Bruk noen minutter på å opprette en konto som sikkerhetskopierer kontaktene dine til Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nye kontakter blir lagret i <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Velg en standardkonto for nye kontakter."</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Legg til ny kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Opprett ny kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Rediger"</string>
- <string name="keep_local" msgid="1258761699192993322">"Behold lokalt"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Kun visning"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Velg kontakten du vil endre"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Sammenknyttede kontakter"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Legg til"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Del opp"</string>
<string name="add_account" msgid="8201790677994503186">"Legg til konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Legg til ny konto"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Eksporter databasefilene"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"legg til ny kontakt"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Opprett ny kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Se mer"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Se mindre"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Se alle"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nylige"</string>
<string name="about_card_title" msgid="2920942314212825637">"Info"</string>
- <string name="send_message" msgid="8938418965550543196">"Send melding"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Oppretter personlig kopi …"</string>
- <string name="yesterday" msgid="6840858548955018569">"I går"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Oppretter personlig kopi …"</string>
<string name="tomorrow" msgid="6241969467795308581">"I morgen"</string>
<string name="today" msgid="8041090779381781781">"I dag"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgen kl.<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Aktivitet uten navn)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Angi"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Nettprat"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Nettsted"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Aktivitet"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Tilknytning"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klikk for å utvide redigeringsvinduet for kontakter"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klikk for å skjule redigeringsvinduet for kontakter"</string>
<string name="content_description_directions" msgid="2686791825798189335">"veibeskrivelse til posisjon"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nylig tekstmelding. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klikk for å svare"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nylig tekstmelding. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klikk for å svare"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"innkommende"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"utgående"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tapte"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nylig oppringning. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klikk for å ringe tilbake"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nylig oppringning. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klikk for å ringe tilbake"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Du: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerer bedre når du går inn i personenes Hangouts-identifikatorer i e-postfeltet eller telefonfeltet."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Flere felt"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Bytt bilde"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kunne ikke åpne redigeringsvinduet."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Lagres i"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Lagrer på <xliff:g id="ACCOUNT_NAME">%s</xliff:g> for øyeblikket. Dobbelttrykk for å velge en annen konto."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Sammenknyttede kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Sammenknyttet kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> sammenknyttede kontakter"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KNYTT SAMMEN KONTAKTER"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Flere felt"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Endre kontaktbilde"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Legg til kontaktbilde"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontaktbilde"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Kunne ikke åpne redigeringsvinduet."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Lagres i"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktinformasjonen fra <xliff:g id="ACCOUNT">%s</xliff:g> kan ikke endres"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SLÅ SAMMEN KONTAKTENE"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"AVBRYT"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mulige duplikater</item>
- <item quantity="one">1 mulig duplikat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sammenknyttede kontakter</item>
- <item quantity="one">1 sammenknyttet kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Denne kontakten"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mulige duplikater"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Disse kontaktene kan være den samme personen. Du kan knytte dem sammen til én enkelt kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Sammenknyttede kontakter"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Fra kontoene dine"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Ta et bilde"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alle bildene"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Velg bilde"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Fra <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Slett <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Slett <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Slett <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Bilde fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er ikke markert"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Bilde fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er markert"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Det er ikke merket av for noe bilde fra en ukjent konto"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Det er merket av for et bilde fra en ukjent konto"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlisten er oppdatert med nytt språk.\n\nVent litt ..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Forslag"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nye"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Åpne uttrekksmenyen"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Lukk uttrekksmenyen"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g>-etikett"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketter"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Kontoer"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Se felles aktiviteter og meldinger"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Aktiviteter og meldinger"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Aktiviteter"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Meldinger"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Forslag"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Hold kontaktene dine organisert, slik at de alltid er nyttige"</string>
+ <string name="undo" msgid="1425165101664071422">"Angre"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Ring <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Ring (privat)"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Ring mobil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ring (arbeid)"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Anrop faks (arbeid)"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Anrop faks (privat)"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Ring personsøker"</string>
+ <string name="call_other" msgid="8563753966926932052">"Ring"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Ring tilbakering"</string>
+ <string name="call_car" msgid="3280537320306436445">"Ring (bil)"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Ring firma (sentralbord)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Ring ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Ring hovednummer"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Ring til faksnummer"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Ring (radio)"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Ring teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Ring teksttelefon"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ring arbeidsmobil"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ring arbeidspersonsøker"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Ring <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Ring MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ring)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Send tekstmelding til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Send SMS (privat)"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Send SMS (mobil)"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Send SMS (arbeid)"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Send SMS til faks (arbeid)"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Send SMS til faks (privat)"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Send SMS (personsøker)"</string>
+ <string name="sms_other" msgid="806127844607642331">"Send tekstmelding"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Send SMS til tilbakeringer"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Send SMS (bil)"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Send SMS til firma (sentralbord)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Send SMS til ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Send SMS til hovednummer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Send tekstmelding til faksnummer"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Send SMS (radio)"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Send SMS til teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Send SMS til teksttelefon"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Send SMS til arbeidsmobil"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Send SMS til arbeidspersonsøker"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Send SMS til <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Send MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (send en melding)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Start en videosamtale"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Fjerne ofte kontaktede personer?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Du fjerner listen over ofte kontaktede personer i Kontakter- og Telefon-appene, og tvinger e-postappene til å lære seg adresseinnstillingene dine på nytt."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Fjerner ofte kontaktede personer"</string>
+ <string name="status_available" msgid="5586870015822828392">"Tilgjengelig"</string>
+ <string name="status_away" msgid="1838861100379804730">"Borte"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Opptatt"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Andre"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Jobbkatalog"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alle kontakter"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Hurtigkontakt for <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Uten navn)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofte kontaktet"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alle kontakter med telefonnumre"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Jobbprofilkontakter"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Se oppdateringer"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Enhet"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-kort"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Kallenavn"</string>
+ <string name="name_given" msgid="4280790853455320619">"Fornavn"</string>
+ <string name="name_family" msgid="7466985689626017037">"Etternavn"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Første del av navn"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Mellomnavn"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Navnesuffiks"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetisk navn"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetisk fornavn"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetisk mellomnavn"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetisk etternavn"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-post"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresse"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Lynmeldinger"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisering"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relasjon"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Spesialdato"</string>
+ <string name="sms" msgid="1756857139634224222">"Tekstmelding"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresse"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Firma"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Tittel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notater"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Spesialtilpasset"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Nettsted"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketter"</string>
+ <string name="email_home" msgid="8573740658148184279">"Send e-post (privat)"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Skriv e-post (mobil)"</string>
+ <string name="email_work" msgid="2807430017302722689">"Send e-post (arbeid)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-post"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-post <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-post"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Gate"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Poststed"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Poststed"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Vis privat adresse"</string>
+ <string name="map_work" msgid="1360474076921878088">"Vis jobbadresse"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vis adresse"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Se <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-adressen"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Nettprat med AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Nettprat med Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Nettprat med Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Nettprat med Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Nettprat med QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Nettprat med Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Nettprat med ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Nettprat med Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Nettprat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"slett"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Vis flere navnefelt"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Skjul navnefelt"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Vis flere fonetiske navnefelt"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Skjul fonetiske navnefelt"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Vis"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Skjul"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Utvidet"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Skjult"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle kontakter"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjernemerket"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Tilpass"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alle andre kontakter"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alle kontaktene"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Fjern synkronisert gruppe"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Legg til synkronisert gruppe"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Flere grupper…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Hvis du fjerner «<xliff:g id="GROUP">%s</xliff:g>» fra synkroniseringen, fjernes også alle ugrupperte kontakter fra synkroniseringen."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Lagrer viste grupper…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Tilpasset visning"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Lagre importerte kontakter i:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakter</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakter • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-fil"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ingenting å importere"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Vil du importere kontakter fra vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vil du avbryte importen av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du avbryte eksporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kunne ikke kansellere imp./eksp. av vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Ukjent feil."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan ikke åpne «<xliff:g id="FILE_NAME">%1$s</xliff:g>»: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kunne ikke starte eksporteringen: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Du har ikke noen kontakt som kan eksporteres."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Du har slått av en nødvendig tillatelse."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Det oppsto en feil under eksporteringen: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Inn-/ut-feil"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ikke nok minne. Det er mulig at filen er for stor."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet støttes ikke."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Eksportering av <xliff:g id="FILENAME">%s</xliff:g> er fullført."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportering av kontaktene er fullført."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktdataene er eksportert. Klikk på varselet for å dele kontaktene."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Trykk for å dele kontaktene."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Eksportering av <xliff:g id="FILENAME">%s</xliff:g> ble avbrutt."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktdataene eksporteres."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kunne ikke hente databaseinformasjon."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ingen kontakter kan eksporteres."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-oppretteren startet ikke som den skulle."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport mislyktes"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktdataene ble ikke eksportert.\nGrunn: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importerer <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kunne ikke lese vCard-data"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import av vCard-filen <xliff:g id="FILENAME">%s</xliff:g> er fullført"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importeringen av <xliff:g id="FILENAME">%s</xliff:g> ble avbrutt"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> vil importeres snart."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen importeres snart."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Forespørselen om vCard-import ble avvist. Prøv på nytt senere."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktene eksporteres snart."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Forespørselen om eksport av vCard ble avvist. Prøv på nytt senere."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Bufrer vCard for import til lokal, midlertidig lagring. Selve importen starter snart."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Kunne ikke importere vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt mottatt per NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Bufrer"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportér til .vcf-fil"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortér etter"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetisk navn"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vis alltid"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Skjul hvis feltet er tomt"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornavn"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Etternavn"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Navneformat"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Fornavnet først"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Etternavnet først"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Kontoer"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Standardkonto for nye kontakter"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Min informasjon"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Definer profilen din"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Om Kontakter"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Del favorittkontaktene"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktene"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kunne ikke dele kontaktene."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksporter kontakter"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importér kontakter fra"</string>
+ <string name="share_error" msgid="948429331673358107">"Denne kontakten kan ikke deles."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Det finnes ingen kontakter å dele."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter som vises"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter som vises"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Tilpass visningen"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Lagre"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Søk i kontakter"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritter"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importér"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportér"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokkerte telefonnumre"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"avslutt søket"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Slett søk"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Bruk alltid dette for samtaler"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Ring med et notat"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Skriv et notat å sende med anropet …"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SEND OG RING"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Delversjon"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Lisenser for åpen kildekode"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lisensdetaljer for programvare med åpen kildekode"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Personvern"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Vilkår"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Lisenser for åpen kildekode"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Kunne ikke åpne nettadressen."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Det er merket av for <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Det er ikke merket av for <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Start et videoanrop"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Slett"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sek"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Denne snarveien er slått av"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakten ble fjernet"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importér"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Velg kontakter"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Du har ingen kontakter på SIM-kortet ditt"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakten er allerede i listen din"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-kontakter ble importert</item>
+ <item quantity="one">Én SIM-kontakt ble importert</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kunne ikke importere SIM-kontakter"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importér fra SIM-kort"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Avbryt"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering er slått av. Trykk for å slå det på."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Fjern"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Synkronisering av kontoer er slått av. Trykk for å slå det på."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Vil du slå på automatisk synkronisering?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Endringer du gjør i alle apper og kontoer, ikke bare Google-kontakter, oppdateres på nett mellom enhetene dine."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Slå på"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ingen tilkobling"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kort"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Vis mer"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importen fra SIM-kortet er ferdig"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importeringen mislyktes"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kunne ikke importére kontakter fra SIM-kortet"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importerer fra SIM-kortet"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Varsler"</string>
</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
deleted file mode 100644
index 28b431c8b..000000000
--- a/res/values-ne-rNP/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"सम्पर्कहरू"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"सम्पर्कहरू"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"सम्पर्क हेर्नुहोस्"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"सम्पर्क सम्पादन गर्नुहोस्"</string>
- <string name="contactsList" msgid="8661624236494819731">"सम्पर्क"</string>
- <string name="shortcutContact" msgid="749243779392912958">"ठेगाना"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"सीधा डायल गर्नुहोस्"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"सीधा सन्देश"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"सम्पर्कको सर्टकट छान्नुहोस्"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"कल गर्नका लागि एउटा नम्बर छान्नुहोस्"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"सन्देश पठाउन नम्बर छान्नुहोस्"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"सम्पर्कमा थप्नुहोस्"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"एउटा सम्पर्क छान्नुहोस्"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
- <string name="starredList" msgid="4817256136413959463">"ताराङ्कित"</string>
- <string name="frequentList" msgid="7154768136473953056">"कहिले कहीँ"</string>
- <string name="strequentList" msgid="5640192862059373511">"मनपर्नेहरू"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"विवरणहरूलाई सम्पर्क गर्नुहोस्"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"सम्पर्क सम्पादन गर्नुहोस्"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ठेगाना बनाउनुहोस्"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"समूह सम्पादन गर्नुहोस्"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"समूह सिर्जना गर्नुहोस्"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"बारेमा"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"अद्यावधिकहरू"</string>
- <string name="searchHint" msgid="8482945356247760701">"सम्पर्कहरू खोज्नुहोस्"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"सम्पर्क हेर्नुहोस्"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"मनपर्नेहरूमा थप्नुहोस्"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"मनपर्नेहरूबाट हटाउनुहोस्"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"मनपर्नेहरूबाट हटाइयो"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"मनपर्नेमा थपियो"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"सम्पादन गर्नुहोस्"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"मेट्नुहोस्"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"तस्बिर परिवर्तन गर्नुहोस्"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"होम स्क्रिनमा राख्नुहोस्"</string>
- <string name="menu_call" msgid="3992595586042260618">"सम्पर्कलाई कल गर्नुहोस्"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"पाठ सम्पर्क"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"अनलिंक"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"सम्पादन गर्नुहोस्"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"मेट्नुहोस्"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"सम्पर्क थप्नुहोस्"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"समूह थप्नुहोस्"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"यस सम्पर्कलाई बहु सम्पर्कमा अनलिंक गर्न चाहनुहुन्छ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"अनलिकं गर्नुहोस्"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"तपाईँले पहिल्यै गरेका परिवर्तनहरू सुरक्षित गर्न र यस सम्पर्कलाई बहु सम्पर्कहरूमा अनलिंक गर्न चाहनुहुन्छ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"सुरक्षित गरी अनलिकं गर्नुहोस्"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"तपाईँले पहिलेनै गरिएका परिवर्तनहरूलाई तपाईँले चयन गरेका सम्पर्क ठेगाना सँग सुरक्षित गरी लिंक गर्न चाहनुहुन्छ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"सुरक्षित गर्नुहोस् र लिंक गर्नुहोस्"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"लिंक"</string>
- <string name="menu_save" msgid="1727844363591825909">"सुरक्षित गर्नुहोस्"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"तपाईँले <xliff:g id="NAME">%s</xliff:g> मा लिंक हुन चाहनु भएको सम्पर्क ठेगाना चयन गर्नुहोस्:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"सबै सम्पर्कहरू देखाउनुहोस्"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाव गरिएका सम्पर्कहरू"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सबै सम्पर्कहरू"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"सम्पर्क ठेगानाहरू लिंक गरियो"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">सम्पर्क ठेगानाहरू मेटिए</item>
- <item quantity="one"> सम्पर्क ठेगाना मेटियो</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिङ्टोन मिलाउनुहोस्"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"भ्वाइसमेलमा सम्पूर्ण कल"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"तपाईँको पढ्ने-मात्र मिल्ने खाताहरूबाट सम्पर्क मेटाउन सकिँदैन, तर तिनीहरूलाई लुकाउन सकिन्छ।"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"लुकाउनुहोस्"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"मेटाउनु पर्ने सम्पर्कको विवरण बहु खाताहरूबाट छन्। पढ्ने-मात्र मिल्ने खाताहरूबाट विवरणहरू लुकाइनेछन्, मेटाइने छैनन्।"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"तपाईँले लिंक गर्नको लागि कम्तीमा दुई सम्पर्क ठेगानाहरू चयन गर्न आवश्यक छ।"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"चयन गरिएका सम्पर्क ठेगानाहरू लिंक गर्ने हो?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"लिंक"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"यो सम्पर्क मेटाउने हो?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"चयन गरिएका सम्पर्क ठेगानाहरू मेटाउने हो?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"तपाईँका पढ्ने-मात्र मिल्ने खाताहरूबाट सम्पर्क ठेगानाहरू मेटाउन सकिँदैन, तर तिनीहरूलाई लुकाउन सकिन्छ।"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"मेटाउनु पर्ने सम्पर्क ठेगानाको बहु खाताहरूमा विवरणहरू छन्। पढ्न-मात्र मिल्ने खाताहरूबाट विवरणहरू लुकाइनेछन्, मेटाइनेछैनन्।"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"यो सम्पर्क ठेगाना हटाउँदा बहु खाताहरूबाट विवरणहरू मेटाइनेछन्।"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"यो सम्पर्क ठेगाना मेटाउने हो?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"मेटाउनुहोस्"</string>
- <string name="menu_discard" msgid="6854657936970228164">"परिवर्तनहरू रद्द गर्नुहोस्"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"सम्पर्क उपलब्ध छैन।"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"सम्पर्क गृह स्क्रिनमा थपियो।"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> गृह स्क्रिनमा थपियो।"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"संगठन"</item>
- <item msgid="7196592230748086755">"नोट"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ट्याब्लेटमा कुनै पनि तस्वीरहरू उपलव्ध छैनन्।"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"कुनै पनि चित्रहरू फोनमा उपलब्ध छैनन्।"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"सम्पर्क तस्बिर"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"आफू अनुकूल पारिएको लेबलको नाम"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"कलहरू सिधै भ्वाइसमेलमा पठाउनुहोस्"</string>
- <string name="removePhoto" msgid="4898105274130284565">"तस्बिर मेट्नुहोस्"</string>
- <string name="noContacts" msgid="4955659076981974652">"कुनै सम्पर्कहरू छैन।"</string>
- <string name="noGroups" msgid="8614664663561385253">"कुनै समूहहरू छैनन्।"</string>
- <string name="noAccounts" msgid="7768267764545265909">"समूह बनाउनका लागि एउटा खाताको आवश्यक्ता हुन्छ।"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"यो समूहमा कोही छैन।"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"केही थपनका लागि, समुह सम्पादन गर्नुहोस्।"</string>
- <string name="savingContact" msgid="4075751076741924939">"सम्पर्क बचत गर्दै..."</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"सम्पर्क बचत गरियो।"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"सम्पर्क ठेगानाहरू अनलिंक गरियो"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"सम्पर्क परिवर्तनहरू सुरक्षित गर्न सकेन।"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"सम्पर्क अनलिंक गर्न सकेन।"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"सम्पर्क ठेगाना लिंक गर्न सकिएन।"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"सम्पर्क सुरक्षित गर्दा त्रूटि।"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"सम्पर्क तस्बिर परिवर्तनहरू सुरक्षित गर्न सकिएन।"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"समूह बचत गरियो।"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"समूह परिवर्तनहरू बचत गर्न सकेन।"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>सम्पर्कहरू फोन नम्बर सहित</item>
- <item quantity="one">फोन नम्बर सहित 1 सम्पर्क</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"फोन नम्बर भएका कुनै सम्पर्कहरू छैनन्"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> फेला पर्‍यो</item>
- <item quantity="one">१ फेला पर्‍यो</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"कुनै सम्पर्कहरू छैनन्।"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> फेला पर्‍यो</item>
- <item quantity="one">1 फेला पर्‍यो</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"सबै"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"मनपर्ने"</string>
- <string name="callBack" msgid="5498224409038809224">"कल फर्काउने"</string>
- <string name="callAgain" msgid="3197312117049874778">"फेरि कल गर्नुहोस्"</string>
- <string name="returnCall" msgid="8171961914203617813">"कल फर्काउनुहोस्"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" लाई सम्पर्कमा थप्ने?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"तस्बिर सम्पर्क गर्नुहोस्"</string>
- <string name="description_plus_button" msgid="515164827856229880">"जोड"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>को <xliff:g id="TOTAL_NUMBER">%s</xliff:g> सम्पर्क"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"तपाईँका सम्पर्कहरूका नामहरू"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"यो कार्य सम्हाल्न कुनै पनि अनुप्रयोग पाइएन।"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"अघिल्लो पर्दामा फर्कनको लागि क्लिक गर्नुहोस्"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"फोन नम्बर थप्नुहोस्"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"इमेल थप्नुहोस्"</string>
- <string name="missing_app" msgid="1466111003546611387">"यो कार्य सम्हाल्न कुनै पनि अनुप्रयोग पाइएन।"</string>
- <string name="menu_share" msgid="943789700636542260">"साझेदारी गर्नुहोस्"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"सम्पर्कहरूमा थप्नुहोस्"</string>
- <string name="share_via" msgid="563121028023030093">"यस मार्फत सम्पर्क ‍साझेदारी गर्नुहोस्"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"खाता अन्तर्गत समूह बनाउनुहोस्"</string>
- <string name="audio_chat" msgid="2535716629358298691">"भ्वाइस च्याट"</string>
- <string name="video_chat" msgid="1872255818640336072">"भिडियो च्याट"</string>
- <string name="connections" msgid="8098440723172028350">"जडानहरू"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"जडान थप्नुहोस्"</string>
- <string name="recent" msgid="2659189233141493004">"हालैको"</string>
- <string name="recent_updates" msgid="4267258535615860710">"हालसालैका अद्यावधिकहरू"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> सम्पर्क"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाता"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"यो अनुप्रयोगबाट सम्पादन गर्न नमिल्ने।"</string>
- <string name="group_read_only" msgid="1061762906115697637">"यस उपकरणमा सम्पादनयोग्य छैन।"</string>
- <string name="take_photo" msgid="7496128293167402354">"तस्बिर लिनुहोस्"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"नयाँ तस्बिर खिच्नुहोस्"</string>
- <string name="pick_photo" msgid="2129509985223564942">"तस्बिर छान्नुहोस्"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"नयाँ तस्बिर चयन गर्नुहोस्"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"सम्पर्क सूची अद्यावधिक हुदै छ।"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"खोजी कार्य गर्दै..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"चयनित देखाउनुहोस्"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"सबै देखाउनुहोस्"</string>
- <string name="menu_select_all" msgid="621719255150713545">"सबैलाई चयन गर्नुहोस्"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"सबैलाई अचयन गर्नुहोस्"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"नयाँ खाता थप्नुहोस्"</string>
- <string name="add_organization" msgid="7311893231158291197">"संगठन थप्नुहोस्"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"मिति"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"समूह नाम"</string>
- <string name="change_photo" msgid="8530597935483526383">"परिवर्तन गर्नुहोस्"</string>
- <string name="primary_photo" msgid="8517942231868516999">"प्राथमिक तस्बिर"</string>
- <string name="description_star" msgid="2605854427360036550">"मनपर्ने"</string>
- <string name="edit_contact" msgid="7529281274005689512">"सम्पर्क सम्पादन गर्नुहोस्"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"हालको सम्पर्क ठेगानालाई चयन गरिएको सम्पर्क ठेगानासँग लिंक गर्ने हो?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित सम्पर्कको सम्पादन गर्नका लागि स्विच गर्ने हो? तपाईँले अहिलेसम्म प्रविष्टि गरिएका जानकारीहरू प्रतिलिप हुने छन्।"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"मेरा सम्पर्कहरूमा प्रतिलिपि गर्नुहोस्"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"मेरो सम्पर्कहरूमा थप्नुहोस्"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका<xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"आफू अनुकूल"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"सेटिङहरू"</string>
- <string name="menu_settings" msgid="377929915873428211">"सेटिङहरू"</string>
- <string name="menu_help" msgid="1680178646764069976">"मद्दत &amp; प्रतिक्रिया"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"विकल्पहरू प्रदर्शन गर्नुहोस्"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g> , <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"फोन नम्बर"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"सम्पर्कहरूमा जोड्नुहोस्"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"सम्पर्कमा थप्नुहोस्"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"बन्द गर्नुहोस्"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> ( <xliff:g id="PHONETIC_NAME">%2$s</xliff:g> )"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"वर्ष सामेल गर्नुहोस्"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"ठेगाना"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"लोड हुँदै..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"एउटा नयाँ सम्पर्क बनाउनुहोस्"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"खाता थप्नुहोस्"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"सम्पर्कहरूलाई आयात गर्नुहोस्"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"नयाँ समूह बनाउनुहोस्"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"नयाँ समूह बनाउनुहोस्"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> समूहहरू</item>
- <item quantity="one">1 समूह</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" समूह हटाउने हो? (सम्पर्कहरू आफैँ हट्दैनन्।)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> व्यक्तिहरू <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> बाट</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> व्यक्ति <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> बाट</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> व्यक्तिहरु</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> व्यक्ति</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"अर्कोसँग लिंक हुनुअघि सम्पर्क नाम टाइप गर्नुहोस्।"</string>
- <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्"</string>
- <string name="set_default" msgid="4417505153468300351">"पूर्वनिर्धारित मिलाउनुहोस्"</string>
- <string name="clear_default" msgid="7193185801596678067">"पूर्वनिर्धारित हटाउनुहोस्"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"पाठको प्रतिलिपि गरियो"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"तपाईंका परिवर्तनहरू खारेज गरी सम्पादनलाई छाड्ने हो?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"खारेज गर्नुहोस्"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"सम्पादन गरिरहनुहोस्"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"मेरो प्रोफाइल सेट गर्नुहोस्"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"व्यक्तिको नाम टाइप गर्नुहोस्"</string>
- <string name="group_name_hint" msgid="238359485263401293">"समूहको नाम"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"मेरो स्थानीय प्रोफाइल"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"मेरो <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाइल"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सबै सम्पर्कहरू प्रदर्शन गरिदै"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"तपाईँले फोन नै हराउनु भएको अवस्थामा पनि आफ्ना सम्पर्कहरूलाई सुरक्षित राख्नुहोस्: कुनै अनलाइन सेवासँग सिन्क्रोनाइज गर्नुहोस्।"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"एउटा खाता थप्नुहोस्"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"तपाईँको नयाँ सम्पर्कको ब्याकअप गरिने छैन। अनलाइन ब्याकअप गर्ने एउटा खाता थप्ने हो?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नयाँ सम्पर्कहरू <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> मा सुरक्षित गरिनेछन्।"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नयाँ सम्पर्क ठेगानाहरूका लागि पूर्वनिर्धारित खाता छान्‍नुहोस्:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"नयाँ सम्पर्क थप्ने"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"सम्पर्क सम्पादन"</string>
- <string name="keep_local" msgid="1258761699192993322">"स्थानीय राख्नुहोस्"</string>
- <string name="add_account" msgid="8201790677994503186">"खाता थप्नुहोस्"</string>
- <string name="add_new_account" msgid="5748627740680940264">"नयाँ खाता थप्नुहोस्"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"डेटाबेस फाइलहरू निर्यात गर्नुहोस्"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"नयाँ सम्पर्क थप्नुहोस्"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"थप हेर्नुहोस्"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम हेर्नुहोस्"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"सबै हेर्नुहोस्"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"हालैको"</string>
- <string name="about_card_title" msgid="2920942314212825637">"बारेमा"</string>
- <string name="send_message" msgid="8938418965550543196">"सन्देश पठाउनुहोस्"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"व्यक्तिगत प्रतिलिपि बनाउँदै..."</string>
- <string name="yesterday" msgid="6840858548955018569">"हिजो"</string>
- <string name="tomorrow" msgid="6241969467795308581">"भोलि"</string>
- <string name="today" msgid="8041090779381781781">"आज"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g>मा आज"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g>मा भोलि"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(शीर्षकविहीन घटना)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"सेट गर्नुहोस्"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"संगठन"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"उपनाम"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"टिप्पणी"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"वेबसाइट"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"घटना"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"सम्बन्ध"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"खाता"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"नाम"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"इमेल"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"तस्बिर"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"सम्पर्क सम्पादक विस्तार गर्न क्लिक गर्नुहोस्।"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"सम्पर्क सम्पादक समाप्त गर्न क्लिक गर्नुहोस्।"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"स्थानको लागि निर्देशनहरू"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"हालैको SMS। <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. प्रतिक्रियाको लागि क्लिक गर्नुहोस्"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"आगमन"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"बहिर्गमन"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"छुटेको"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"हालैको कल। <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. कल फिर्ता गर्न क्लिक गर्नुहोस्"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"तपाईँ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"तपाईंले इमेल क्षेत्र वा फोन क्षेत्रमा व्यक्तिको Hangouts परिचायक प्रविष्ट गर्नु हुँदा Hangouts राम्रो काम गर्दछ।"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"थप क्षेत्रहरू"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"तस्बिर परिवर्तन गर्नुहोस्"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"सम्पादक खोल्न असफल भयो।"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"यसमा सुरक्षित गर्दै"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> मा हाल सुरक्षित गर्दै। भिन्‍न खाता परिवर्तन गर्न डबल ट्याप गर्नुहोस्।"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">लिंक गरिएका सम्पर्क ठेगानाहरू (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">लिंक गरिएको सम्पर्क ठेगाना</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> लिंक गरिएका सम्पर्क ठेगानाहरू"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ( <xliff:g id="PHONETIC_NAME">%s</xliff:g> )"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द गर्नुहोस्"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सम्भावित प्रतिलिपिहरू</item>
- <item quantity="one">१ सम्भावित प्रतिलिपि</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> लिंक गरिएका सम्पर्क ठेगानाहरू</item>
- <item quantity="one">१ लिंक गरिएको सम्पर्क ठेगाना</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यो सम्पर्क ठेगाना"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"सम्भावित प्रतिलिपिहरू"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"यी सम्पर्कहरू एउटै व्यक्तिको हुन सक्छ। तपाईँले एउटै सम्पर्कको रूपमा तिनीहरूलाई सँगै लिंक गर्न सक्नुहुन्छ।"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"लिंक गरिएका सम्पर्क ठेगानाहरू"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"तपाईंका खाताहरूबाट"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"तस्बिर खिच्नुहोस्"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"सबै तस्बिरहरू"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"तस्बिर छान्‍नुहोस्"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> बाट"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> मेट्नुहोस्"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> मेट्नुहोस्"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> बाट तस्बिर जाँच गरिएको छैन"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> बाट तस्बिर जाँच गरियो"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खाताको तस्बिर जाँच गरिएन"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खाताको तस्बिर जाँच गरियो"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"भाषा परिवर्तन प्रतिविम्ब गराउन सम्पर्क सूची अद्यावधिक भइरहेको छ। \n \n कृपया प्रतीक्षा गर्नुहोस्..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"रोक लगाइएका नम्बरहरू"</string>
-</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
new file mode 100644
index 000000000..b7a9f913e
--- /dev/null
+++ b/res/values-ne/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"सम्पर्कहरू"</string>
+ <string name="contactsList" msgid="8661624236494819731">"सम्पर्क"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"सम्पर्क थप्नुहोस्"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"ठेगाना"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"सीधा डायल गर्नुहोस्"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"सीधा सन्देश"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"सम्पर्क छनौट गर्नुहोस्"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"सम्पर्कमा थप्नुहोस्"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"एउटा सम्पर्क छान्नुहोस्"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"चयन गर्नुहोस्"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
+ <string name="searchHint" msgid="8482945356247760701">"सम्पर्कहरू खोज्नुहोस्"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"मनपर्नेहरूमा थप्नुहोस्"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"मनपर्नेहरूबाट हटाउनुहोस्"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"मनपर्नेहरूबाट हटाइयो"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"मनपर्नेमा थपियो"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"सम्पादन गर्नुहोस्"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"मेट्नुहोस्"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"तस्बिर परिवर्तन गर्नुहोस्"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"सर्टकट सिर्जना गर्नुहोस्"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"अनलिंक"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"सम्पर्कहरू हटाउनुहोस्"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"लेबलको पुन:नामाकरण गर्नुहोस्"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"लेबल मेटाउनुहोस"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"सम्पर्क थप्नुहोस्"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"सम्पर्कहरू चयन गर्नुहोस्"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"सम्पर्कहरू थप्नुहोस्"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबलबाट हटाउनुहोस्"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल सिर्जना गर्नुहोस्"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"यस सम्पर्कलाई बहु सम्पर्कमा अनलिंक गर्न चाहनुहुन्छ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"अनलिकं गर्नुहोस्"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"तपाईँले पहिल्यै गरेका परिवर्तनहरू सुरक्षित गर्न र यस सम्पर्कलाई बहु सम्पर्कहरूमा अनलिंक गर्न चाहनुहुन्छ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"सुरक्षित गरी अनलिकं गर्नुहोस्"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"तपाईँले पहिलेनै गरिएका परिवर्तनहरूलाई तपाईँले चयन गरेका सम्पर्क ठेगाना सँग सुरक्षित गरी लिंक गर्न चाहनुहुन्छ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"सुरक्षित गर्नुहोस् र लिंक गर्नुहोस्"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"लिङ्क गर्दै"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"अनलिङ्क गर्दै"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"लिंक"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"लिंक गरिएका सम्पर्कहरू हेर्ने"</string>
+ <string name="menu_save" msgid="1727844363591825909">"सुरक्षित गर्नुहोस्"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"तपाईँले <xliff:g id="NAME">%s</xliff:g> मा लिंक हुन चाहनु भएको सम्पर्क ठेगाना चयन गर्नुहोस्:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"सुझाव गरिएका सम्पर्कहरू"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"सबै सम्पर्कहरू"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> लिङ्क गरियो"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"सम्पर्क ठेगानाहरू लिंक गरियो"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> मेटाइयो"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> र <xliff:g id="NAME_1">%2$s</xliff:g> मेटाइयो"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… मेटाइयो"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">सम्पर्क ठेगानाहरू मेटिए</item>
+ <item quantity="one"> सम्पर्क ठेगाना मेटियो</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सम्पर्कहरू</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सम्पर्क</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> सम्पर्कहरू · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> सम्पर्क · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google बाट"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> बाट"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"रिङ्टोन मिलाउनुहोस्"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"भ्वाइस मेलमा पठाउनुहोस्"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"भ्वाइस मेलमा नपठाउनुहोस्"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"यो सम्पर्क पढ्न-मात्र मिल्ने खालको हो। यसलाई मेटाउन सकिँदैन तर तपाईंले यसलाई लुकाउन सक्नुहुन्छ।"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"सम्पर्क लुकाउनुहोस्"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"यस सम्पर्कमा रहेका पढ्न-मात्र मिल्ने खाताहरूलाई लुकाइनेछ, मेटाइने छैन।"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"यो सम्पर्क मेटाउने हो?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"चयन गरिएका सम्पर्क ठेगानाहरू मेटाउने हो?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"तपाईँका पढ्ने-मात्र मिल्ने खाताहरूबाट सम्पर्क ठेगानाहरू मेटाउन सकिँदैन, तर तिनीहरूलाई लुकाउन सकिन्छ।"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"मेटाउनु पर्ने सम्पर्क ठेगानाको बहु खाताहरूमा विवरणहरू छन्। पढ्न-मात्र मिल्ने खाताहरूबाट विवरणहरू लुकाइनेछन्, मेटाइनेछैनन्।"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"यो सम्पर्क ठेगाना हटाउँदा बहु खाताहरूबाट विवरणहरू मेटाइनेछन्।"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"यो सम्पर्क ठेगाना मेटाउने हो?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"मेटाउनुहोस्"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"सम्पर्क उपलब्ध छैन।"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"सम्पर्क गृह स्क्रिनमा थपियो।"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> गृह स्क्रिनमा थपियो।"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"यन्त्रमा कुनै पनि तस्बिरहरू उपलब्ध छैनन्।"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"सम्पर्क तस्बिर"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"आफू अनुकूल पारिएको लेबलको नाम"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"तस्बिर मेट्नुहोस्"</string>
+ <string name="noContacts" msgid="2228592924476426108">"तपाईंको सम्पर्क ठेगानाहरूको सूची खाली छ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"यो लेबल अन्तर्गत कुनै सम्पर्कहरू छैनन्"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"यस खातामा कुनै सम्पर्क ठेगानाहरू छैनन्"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"तपाईंको सम्पर्क ठेगानाहरूको सूची खाली छ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> सुरक्षित गरियो"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"सम्पर्क बचत गरियो।"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"सम्पर्क ठेगानाहरू अनलिंक गरियो"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"सम्पर्कमा गरिएका परिवर्तनहरू सुरक्षित गर्न सकिएन"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"सम्पर्कलाई अनलिंक गर्न सकिएन"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"सम्पर्क ठेगानामा लिंक गर्न सकिएन"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"सम्पर्क सुरक्षित गर्दा त्रुटि भयो"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"सम्पर्क सम्बन्धी तस्बिरमा गरिएका परिवर्तनहरू सुरक्षित गर्न सकिएन"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड गर्न सकिएन"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"लेबल मेटाइयो"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल सिर्जना गरियो"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल सिर्जना गर्न सकिँदैन"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"लेबललाई अद्यावधिक गरियो"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"लेबलबाट हटाइयो"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"लेबलमा थपियो"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"लेबलमा गरिएका परिवर्तनहरूलाई सुरक्षित गर्न सकिएन"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"उक्त लेबल पहिले नै अवस्थित छ"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"केही सम्पर्कहरूका इमेल ठेगाना छैनन्"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"केही सम्पर्कहरूका फोन नम्बर छैनन्"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"इमेल पठाउनुहोस्"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"सन्देश पठाउनुहोस्"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"सम्पर्कहरू छान्नुहोस्"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"पठाउनुहोस्"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"कुनै सम्पर्कहरू छैनन्।"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" लाई सम्पर्कमा थप्ने?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"तपाईँका सम्पर्कहरूका नामहरू"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"अघिल्लो पर्दामा फर्कनको लागि क्लिक गर्नुहोस्"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"फोन नम्बर थप्नुहोस्"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"इमेल थप्नुहोस्"</string>
+ <string name="missing_app" msgid="1466111003546611387">"यो कार्य सम्हाल्न कुनै पनि अनुप्रयोग पाइएन।"</string>
+ <string name="menu_share" msgid="943789700636542260">"साझेदारी गर्नुहोस्"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"सम्पर्कहरूमा थप्नुहोस्"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"थप्नुहोस्"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">यस मार्फत सम्पर्कहरू ‍साझेदारी गर्नुहोस्</item>
+ <item quantity="one">यस मार्फत सम्पर्क ‍साझेदारी गर्नुहोस्</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"खाता छान्नुहोस्"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"लेबल सिर्जना गर्नुहोस्"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"लेबलको पुन:नामाकरण गर्नुहोस्"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"लेबलको नाम"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबलको नाम"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"भ्वाइस च्याट"</string>
+ <string name="video_chat" msgid="1872255818640336072">"भिडियो च्याट"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> सम्पर्क"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाता"</string>
+ <string name="take_photo" msgid="7496128293167402354">"तस्बिर लिनुहोस्"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"नयाँ तस्बिर खिच्नुहोस्"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"तस्बिर छान्नुहोस्"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"नयाँ तस्बिर चयन गर्नुहोस्"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"खोजी कार्य गर्दै..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"मिति"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"लेबल"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द गर्नुहोस्"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"पछाडि"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बन्द गर्नुहोस्"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"चयनित सम्पर्कको सम्पादन गर्नका लागि स्विच गर्ने हो? तपाईँले अहिलेसम्म प्रविष्टि गरिएका जानकारीहरू प्रतिलिप हुने छन्।"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"निर्देशिका<xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"सेटिङहरू"</string>
+ <string name="menu_settings" msgid="377929915873428211">"सेटिङहरू"</string>
+ <string name="menu_help" msgid="1680178646764069976">"मद्दत &amp; प्रतिक्रिया"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g> , <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"फोन नम्बर"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"सम्पर्कहरूमा जोड्नुहोस्"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"बन्द गर्नुहोस्"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"वर्ष सामेल गर्नुहोस्"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"खाता थप्नुहोस्"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात गर्नुहोस्"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"नयाँ लेबल सिर्जना गर्नुहोस्..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" लेबललाई हटाउने हो? (सम्पर्कहरू मेटिने छैनन्।)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"अर्कोसँग लिंक हुनुअघि सम्पर्क नाम टाइप गर्नुहोस्।"</string>
+ <string name="copy_text" msgid="3257145021583508761">"क्लिपबोर्डमा प्रतिलिपि गर्नुहोस्"</string>
+ <string name="set_default" msgid="4417505153468300351">"पूर्वनिर्धारित मिलाउनुहोस्"</string>
+ <string name="clear_default" msgid="7193185801596678067">"पूर्वनिर्धारित हटाउनुहोस्"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"पाठको प्रतिलिपि गरियो"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"परिवर्तनहरू खारेज गर्ने हो?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"खारेज गर्नुहोस्"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द गर्नुहोस्"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"आफू अनुकूल पारिएका कुरालाई खारेज गर्ने हो?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"सम्पर्कहरू खोज्नुहोस्"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"सम्पर्कहरू हटाउनुहोस्"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"मेरो स्थानीय प्रोफाइल"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"मेरो <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाइल"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"एक मिनेट जति लगाएर एउटा खाता थप्नुहोस् जसले तपाईंका सम्पर्कहरूलाई Google मा ब्याक अप गर्ने छ।"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नयाँ सम्पर्कहरू <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> मा सुरक्षित गरिनेछन्।"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नयाँ सम्पर्क ठेगानाहरूका लागि पूर्वनिर्धारित खाता छान्‍नुहोस्:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"नयाँ सम्पर्क बनाउने"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"सम्पर्क सम्पादन"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"अवलोकन मात्र"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"सम्पादन गर्न सम्पर्क छान्नुहोस्"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"लिंक गरिएका सम्पर्कहरू"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"थप्नुहोस्"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"अनलिंक गर्ने"</string>
+ <string name="add_account" msgid="8201790677994503186">"खाता थप्नुहोस्"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"नयाँ खाता थप्नुहोस्"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"डेटाबेस फाइलहरू निर्यात गर्नुहोस्"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"थप हेर्नुहोस्"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम हेर्नुहोस्"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"हालैको"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"बारेमा"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"एउटा व्यक्तिगत प्रतिलिपि बनाउँदै..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"भोलि"</string>
+ <string name="today" msgid="8041090779381781781">"आज"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"<xliff:g id="TIME_INTERVAL">%s</xliff:g>मा आज"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"<xliff:g id="TIME_INTERVAL">%s</xliff:g>मा भोलि"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(शीर्षकविहीन घटना)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"सेट गर्नुहोस्"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"संगठन"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"उपनाम"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"टिप्पणी"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"वेबसाइट"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"घटना"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"सम्बन्ध"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"नाम"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"इमेल"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"फोन"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"स्थानको लागि निर्देशनहरू"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"हालैको SMS। <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. प्रतिक्रियाको लागि क्लिक गर्नुहोस्"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"आगमन"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"बहिर्गमन"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"छुटेको"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"हालैको कल। <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. कल फिर्ता गर्न क्लिक गर्नुहोस्"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"तपाईं: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"थप क्षेत्रहरू"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"सम्पर्कको तस्बिर बदल्नुहोस्"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"सम्पर्कको तस्बिर थप्नुहोस्"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"सम्पर्कको तस्बिर"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"सम्पादक खोल्न सकिएन।"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"यसमा सुरक्षित गरिँदै"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> को सम्पर्क सम्बन्धी जानकारी सम्पादन गर्न मिल्दैन"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द गर्नुहोस्"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यो सम्पर्क ठेगाना"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"सम्भावित प्रतिलिपिहरू"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"यी सम्पर्कहरू एउटै व्यक्तिको हुन सक्छ। तपाईँले एउटै सम्पर्कको रूपमा तिनीहरूलाई सँगै लिंक गर्न सक्नुहुन्छ।"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> मेट्नुहोस्"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> मेट्नुहोस्"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"सुझावहरू"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नयाँ"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"नेभिगेसन ड्रअर खोल्नुहोस्"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"नेभिगेसन ड्रअर बन्द गर्नुहोस्"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> लेबल"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"लेबलहरू"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"खाताहरू"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"आफ्नो इतिहास संयुक्त रूपमा हेर्नुहोस्"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"कार्यक्रम र सन्देशहरू"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"घटनाक्रमहरू"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"सन्देशहरू"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"सुझावहरू"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"अाफ्ना सम्पर्कहरूलाई व्यवस्थित र उपयोगी बनाइराख्नुहोस्"</string>
+ <string name="undo" msgid="1425165101664071422">"अनडू गर्नुहोस्"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> मा कल गर्नुहोस्"</string>
+ <string name="call_home" msgid="1990519474420545392">"घरमा कल गर्नुहोस्"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"मोबाइलमा कल गर्नुहोस्"</string>
+ <string name="call_work" msgid="5328785911463744028">"काममा कल गर्नुहोस्"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"काम गर्ने ठाँउको फ्याक्समा कल गर्नुहोस्"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"घरको फ्याक्समा कल गर्नुहोस्"</string>
+ <string name="call_pager" msgid="9003902812293983281">"पेजर कल गर्नुहोस्"</string>
+ <string name="call_other" msgid="8563753966926932052">"कल गर्नुहोस्"</string>
+ <string name="call_callback" msgid="1910165691349426858">"कलब्याकलाई कल गर्नुहोस्"</string>
+ <string name="call_car" msgid="3280537320306436445">"कार कल गर्नुहोस्"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"कम्पनीको मुख्यलाई कल गर्नुहोस्"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDNमा कल गर्नुहोस्"</string>
+ <string name="call_main" msgid="6082900571803441339">"मुख्य कल गर्नुहोस्"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"फ्याक्स कल गर्नुहोस्"</string>
+ <string name="call_radio" msgid="8296755876398357063">"रेडियोमा कल गर्नुहोस्"</string>
+ <string name="call_telex" msgid="2223170774548648114">"टेलेक्स कल गर्नुहोस्"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD कल गर्नुहोस्"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"कामको मोबाइलमा कल गर्नुहोस्"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"कामको पेजरमा कल गर्नुहोस्"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> मा कल गर्नुहोस्"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS कल"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (कल गर्नुहोस्)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> मा पाठ सन्देश पठाउनुहोस्"</string>
+ <string name="sms_home" msgid="7524332261493162995">"पाठ गृह"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"पाठ मोबाइल"</string>
+ <string name="sms_work" msgid="2269624156655267740">"पाठ काम"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"पाठलाई काममा फ्याक्स गर्नुहोस्"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"पाठलाई घर फ्याक्स गर्नुहोस्"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"पाठ सन्देश पेजरमा"</string>
+ <string name="sms_other" msgid="806127844607642331">"पाठ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"पाठ कलब्याक"</string>
+ <string name="sms_car" msgid="7444227058437359641">"पाठ कार"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"कार्पायलय मूख्यमा पाठ सन्देश"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"पाठ ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"पाठ मूल"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"पाठ फ्याक्स"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"पाठ रेडियो"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"पाठ टेलेक्स"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"पाठ TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"पाठ काम मोबाइल"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"पाठ कार्य पेजर"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"पाठ <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"पाठ MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (सन्देश पठाउनुहोस्)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"भिडियो कल बनाउनुहोस्"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"प्रायः सम्पर्क गरिएकाहरूलाई हटाउने हो?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"तपाईंले सम्पर्कहरू र फोन अनुप्रयोगहरूमा बारम्बार सम्पर्क गरेको सूची खाली गर्नुहुनेछ र स्क्रयाचबाट तपाईंको ठेगाना प्राथमिकताहरू सिक्नको लागि इमेल अनुप्रयोगहरूलाई दबाब दिनुहुनेछ।"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"प्रायः सम्पर्क गरिएकाहरूलाई हटाउँदै...."</string>
+ <string name="status_available" msgid="5586870015822828392">"उपलब्ध"</string>
+ <string name="status_away" msgid="1838861100379804730">"टाढा"</string>
+ <string name="status_busy" msgid="9147992455450257136">"व्यस्त"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"अन्य"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"कार्यको निर्देशिका"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"सबै सम्पर्कहरू"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>का लागि छिटो सम्पर्क"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(नाम छैन)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"लगातार सम्पर्क गरिएको"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"फोन नम्बर भएका सबै सम्पर्कहरू"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफाइलका सम्पर्कहरू"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"अद्यावधिकहरू हेर्नुहोस्"</string>
+ <string name="account_phone" msgid="7128032778471187553">"यन्त्र"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"नाम"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"उपनाम"</string>
+ <string name="name_given" msgid="4280790853455320619">"पहिलो नाम"</string>
+ <string name="name_family" msgid="7466985689626017037">"थर"</string>
+ <string name="name_prefix" msgid="59756378548779822">"नाम उपसर्ग"</string>
+ <string name="name_middle" msgid="8467433655992690326">"बिचको नाम"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"नाम प्रत्यय"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"फोनेटिक नाम"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ध्वनितात्त्विक नाम"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"बीचको फोनेटिक नाम"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"फोनेटिक थर"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"फोन"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"इमेल"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ठेगाना"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"संगठन"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"सम्बन्ध"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"विशेष मिति"</string>
+ <string name="sms" msgid="1756857139634224222">"पाठ सन्देश"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ठेगाना"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"कम्पनी"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"शीर्षक"</string>
+ <string name="label_notes" msgid="8337354953278341042">"टिप्पणीहरू"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"आफू अनुकूल"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"वेबसाइट"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"लेबलहरू"</string>
+ <string name="email_home" msgid="8573740658148184279">"इमेल घर"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"इमेल मोबाइल"</string>
+ <string name="email_work" msgid="2807430017302722689">"कार्यालय इमेल"</string>
+ <string name="email_other" msgid="3454004077967657109">"इमेल"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> मा इमेल पठाउनुहोस्"</string>
+ <string name="email" msgid="5668400997660065897">"इमेल"</string>
+ <string name="postal_street" msgid="8133143961580058972">"सडक"</string>
+ <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
+ <string name="postal_region" msgid="6045263193478437672">"स्थिति"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ZIP कोड"</string>
+ <string name="postal_country" msgid="7638264508416368690">"देश"</string>
+ <string name="map_home" msgid="1243547733423343982">"घरको ठेगाना हेर्नुहोस्"</string>
+ <string name="map_work" msgid="1360474076921878088">"काम गर्ने ठाउँको ठेगाना हेर्नुहोस्"</string>
+ <string name="map_other" msgid="3817820803587012641">"ठेगाना हेर्नुहोस्"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ठेगाना हेर्नुहोस्"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM को प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"विन्डोज लाइभ प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"याहुको प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"स्काइपको प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ को प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google टकको प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ को प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"ज्याबरको प्रयोग गरेर च्याट गर्नुहोस्"</string>
+ <string name="chat" msgid="9025361898797412245">"कुराकानी"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"मेटाउनुहोस्"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"नामका थप क्षेत्रहरू देखाउनुहोस्"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"नामका क्षेत्रहरू संक्षिप्त गर्नुहोस्"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ध्वनितात्त्विक नामका थप क्षेत्रहरू देखाउनुहोस्"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ध्वनितात्त्विक नामका क्षेत्रहरू विस्तृत गर्नुहोस्"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"विस्तृत गर्नुहोस्"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"संक्षिप्त गर्नुहोस्"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"विस्तृत गरियो"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"संक्षिप्त गरियो"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"सबै सम्पर्कहरू"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ताराङ्कित"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"आफू अनुकूल बनाउनुहोस्"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"ठेगाना"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"अन्य सबै सम्पर्कहरू"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"सबै सम्पर्कहरू"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"सिंक समूह हटाउनुहोस्"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"सिंक समूह थप्नुहोस्"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"अधिक समूहहरू"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\" <xliff:g id="GROUP">%s</xliff:g> \" लाई सिङ्कबाट हटाउनाले समूहमा नरहेका सम्पर्कहरूलाई पनि हटाउने छ।"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन विकल्पहरू बचत‍ गर्दै ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"आफू अनुकूल पारिएको दृश्य"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयातीत सम्पर्कहरू निम्नमा सुरक्षित गर्नुहोस्:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM कार्ड"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d सम्पर्कहरू</item>
+ <item quantity="one">१ सम्पर्क</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> सम्पर्कहरू • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> सम्पर्क • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf फाइल"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"आयात गर्न केही छैन"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard बाट सम्पर्कहरू पुनर्स्थापना गर्नुहोस्?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g>को आयात रद्द गर्ने?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>को निर्यात रद्द गर्ने?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द गर्न सकिएन"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात त्रुटि।"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"खोल्न सकेन \" <xliff:g id="FILE_NAME">%1$s</xliff:g> : \" <xliff:g id="EXACT_REASON">%2$s</xliff:g> ।"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" सुरु गर्न सकेन्।"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कुनै निर्यात गर्न मिल्ने सम्पर्क छैन।"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"तपाईँले आवश्यक अनुमति असक्षम पार्नुभएको छ।"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"\"<xliff:g id="EXACT_REASON">%s</xliff:g>\": निर्यात गर्ने क्रममा त्रुटि भयो।"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटि"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"मेमोरी प्रयाप्त छैन। फाइल धेरै ठूलो हुन सक्छ।"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ढाँचा समर्थित छैन।"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> निर्यात कार्य सकियो।"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"सम्पर्क ठेगानाहरूलाई निर्यात गर्ने काम सकियो।"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"सम्पर्कहरूलाई निर्यात गर्ने काम सकियो, सम्पर्कहरूलाई साझेदारी गर्न सूचनामा क्लिक गर्नुहोस्।"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"सम्पर्कहरूलाई आदान-प्रदान गर्न ट्याप गर्नुहोस्।"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"निर्यात <xliff:g id="FILENAME">%s</xliff:g> रद्द गरियो।"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"सम्पर्क डेटा निर्यात हुँदै"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"सम्पर्क सम्बन्धी डेटा निर्यात भइरहेको छ।"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस जानकारी प्राप्त गर्न सकेन।"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"निर्यात गर्न मिल्ने सम्पर्कहरू छैनन्।"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard कम्पोजर राम्ररी सुर भएन।"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात गर्न सकेन"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"सम्पर्क डेटा निर्यात गर्न सकिएन \n कारण: \" <xliff:g id="FAIL_REASON">%s</xliff:g> \""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>आयात गर्दै"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"VCard डेटा पढ्न सकेन"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात कार्य सकियो"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>आयात रद्द गरियो"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> शीघ्र आयात गरिने छ।"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फाइल छिट्टै आयात गरिने छ।"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard निर्यात अनुरोध अस्वीकार गरिएको छ । कृपया पछि पर्यास गर्नुहोस्"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"सम्पर्कहरूलाई चॉंडै निर्यात गरिने छ।"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard निर्यात अनुरोध अस्वीकार गरियो। पछि पुनःप्रयास गर्नुहोस्।"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"सम्पर्क"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(s) लाई स्थानीय अस्थायी भण्डारणमा क्यास गर्दै। वास्तविक आयात छिट्टै सुरु हुन्छ।"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"VCard आयात गर्न सकेन।"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFCमा सम्पर्क प्राप्त गरियो"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"केसिङ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"आयात गर्दै <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf फाइलमा निर्यात गर्ने"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"यस आधारमा क्रमबद्ध गर्नुहोस्"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ध्वनितात्त्विक नाम"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"सधैँ देखाउनुहोस्"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"खाली छ भने लुकाउनुहोस्"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"पहिलो नाम"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"थर"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"नामको ढाँचा"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"नाम पहिले"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"थर पहिले"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"खाताहरू"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"नयाँ सम्पर्कहरूका लागि पूर्वनिर्धारित खाता"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"मेरा बारेमा जानकारी"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"आफ्नो प्रोफाइल सेट अप गर्नुहोस्"</string>
+ <string name="setting_about" msgid="7014388749752042863">"सम्पर्कहरूका बारेमा"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"मनपर्ने सम्पर्कहरू आदान-प्रदान गर्नुहोस्"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"सबै सम्पर्क आदान-प्रदान गर्ने"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"सम्पर्कहरू आदान-प्रदान गर्न सकिएन।"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"सम्पर्क ठेगानाहरू निर्यात गर्नुहोस्"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"निम्नबाट सम्पर्कहरू आयात गर्नुहोस्"</string>
+ <string name="share_error" msgid="948429331673358107">"यो सम्पर्क साझेदारी गर्न मिल्दैन।"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"आदान-प्रदान गर्न कुनै सम्पर्क ठेगानाहरू छैनन्।"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शन गर्नका लागि सम्पर्क"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शन गर्नका लागि सम्पर्क"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"दृश्यलाई आफू अनुकूल पार्नुहोस्"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"सुरक्षित गर्ने"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"सम्पर्क ठेगानाहरू खोज्नुहोस्"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"मनपर्ने"</string>
+ <string name="menu_import" msgid="6107961135813836467">"आयात गर्नुहोस्"</string>
+ <string name="menu_export" msgid="2658783911863503902">"निर्यात गर्नुहोस्"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"रोक लगाइएका नम्बरहरू"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g>मार्फत"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> मार्फत <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"खोजी गर्न रोक्नुहोस्"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"खोजी सफा गर्नुहोस्"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"खाता"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"कल गर्न सधैं यसको प्रयोग गर्नुहोस्"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"एउटा टिपोटसहित कल गर्नुहोस्"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"कलसँग पठाउन एउटा टिपोट टाइप गर्नुहोस्…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"पठाउनुहोस् र कल गर्नुहोस्"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"बिल्ड संस्करण"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"खुला स्रोतका इजाजतपत्रहरू"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"खुला स्रोतको सफ्टवेयरका लागि इजाजतपत्रका विवरणहरू"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"गोपनीयता नीति"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"सेवा सर्तहरू"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"खुला स्रोतका इजाजतपत्रहरू"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url खोल्न सकिएन।"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> जाँच गरियो"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> जाँच गरिएन"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"भिडियो कल गर्नुहोस्"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"मेट्नुहोस्"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"पदलोपचिन्ह"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मिनेट <xliff:g id="SECONDS">%2$s</xliff:g> सेकेन्ड"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> घन्टा <xliff:g id="MINUTES_1">%2$s</xliff:g> मिनेट <xliff:g id="SECONDS">%3$s</xliff:g> सेेकेन्ड"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"यो सर्टकटलाई असक्षम पारिएको छ"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"सम्पर्क हटाइएको थियो"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"आयात गर्नुहोस्"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"सम्पर्कहरू चयन गर्नुहोस्"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"तपाईँको SIM कार्डमा कुनै पनि सम्पर्कहरू छैनन्।"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"तपाईंको सूचीमा सम्पर्क पहिले नै विद्यमान छ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">SIM को <xliff:g id="COUNT">%d</xliff:g> सम्पर्कहरू आयात गरिए</item>
+ <item quantity="one">SIM को १ सम्पर्क आयात गरियो</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM को सम्पर्कहरू आयात गर्न सकिएन"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM बाट आयात गर्नुहोस्"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"रद्द गर्नुहोस्"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"स्वत:सिङ्क गर्ने सेवा निष्क्रिय छ। सक्रिय गर्न ट्याप गर्नुहोस्।"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"खारेज गर्नुहोस्"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"खाता सिङ्क गर्ने सेवा निष्क्रिय छ। सक्रिय पार्न ट्याप गर्नुहोस्।"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"स्वत: सिंक सेवा सक्रिय गर्ने हो?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"तपाईंले Google सम्पर्कहरूमा मात्र नभई, सबै अनुप्रयोग र खाताहरूमा गरेका परिवर्तनहरू वेब र तपाईंका अन्य यन्त्रहरूका बीचमा अद्यावधिक हुने छन्।"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"खोल्नुहोस्"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"जडान छैन"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"थप देखाउनुहोस्"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM कार्ड आयात गर्ने काम सम्पन्न भयो"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात गर्न सकिएन"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM कार्डबाट सम्पर्कहरू आयात गर्न सकिएन"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM आयात गरिँदै"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"सूचनाहरू"</string>
+</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 74d066a45..6caa08875 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contacten"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contacten"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Contact bekijken"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Contact bewerken"</string>
<string name="contactsList" msgid="8661624236494819731">"Contacten"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Contact toevoegen"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contacten"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direct bellen"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direct bericht"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kies een contactsnelkoppeling"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Kies een nummer om te bellen"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Kies een nummer voor bericht"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Contact kiezen"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Aan contact toevoegen"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Een contact kiezen"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecteren"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Nieuw contact maken"</string>
- <string name="starredList" msgid="4817256136413959463">"Met ster"</string>
- <string name="frequentList" msgid="7154768136473953056">"Vaak"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favorieten"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Details van contact"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Contact bewerken"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Contact maken"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Groep bewerken"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Groep maken"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Over"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
<string name="searchHint" msgid="8482945356247760701">"Contacten zoeken"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Contact weergeven"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Toevoegen aan favorieten"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Uit favorieten verwijderen"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Verwijderd uit favorieten"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Bewerken"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Verwijderen"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Foto wijzigen"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Op startscherm plaatsen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Contact bellen"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Sms\'en naar contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Snelkoppeling maken"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Link verwijderen"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Bewerken"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Verwijderen"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Contact toevoegen"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Groep toevoegen"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Contacten verwijderen"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Label hernoemen"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Label verwijderen"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Contact toevoegen"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Contacten selecteren"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Contacten toevoegen"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Verwijderen uit label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Label maken"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Dit contact loskoppelen tot meerdere contacten?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Loskoppelen"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Wil je de aangebrachte wijzigingen opslaan en dit contact loskoppelen tot meerdere contacten?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Opslaan en loskoppelen"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Wil je de aangebrachte wijzigingen opslaan en linken met het geselecteerde contact?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Opslaan en linken"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Linken"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Link verwijderen"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Koppelen"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Gelinkte contacten bekijken"</string>
<string name="menu_save" msgid="1727844363591825909">"Opslaan"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Contacten linken"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Kies het contact dat je wilt linken met <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Alle contacten weergeven"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mogelijke contacten"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alle contacten"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> gelinkt"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacten gekoppeld"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> verwijderd"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> en <xliff:g id="NAME_1">%2$s</xliff:g> verwijderd"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… verwijderd"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Contacten verwijderd</item>
<item quantity="one">Contact verwijderd</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacten</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacten · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Van Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Van <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Beltoon instellen"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alle oproepen naar voicemail"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Contacten uit alleen-lezen accounts kunnen niet worden verwijderd, maar kunnen wel worden verborgen."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Verbergen"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Het contact dat je verwijdert, bevat gegevens uit meerdere accounts. Gegevens uit alleen-lezen accounts worden verborgen, maar niet verwijderd."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Je moet minimaal twee contacten selecteren om te kunnen koppelen."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Geselecteerde contacten linken?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Linken"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Doorsturen naar voicemail"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Niet doorsturen naar voicemail"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Dit contact is alleen-lezen. Het kan niet worden verwijderd, maar je kunt het wel verbergen."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Contact verbergen"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Gegevens van dit contact uit alleen-lezen accounts worden verborgen, niet verwijderd."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Dit contact verwijderen?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Geselecteerde contacten verwijderen?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Contacten uit alleen-lezen accounts kunnen niet worden verwijderd, maar kunnen wel worden verborgen."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Als je dit contact verwijdert, worden gegevens van meerdere accounts verwijderd."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Dit contact verwijderen?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Verwijderen"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Wijzigingen niet opslaan"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Het contact bestaat niet."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact is toegevoegd aan het startscherm."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> is toegevoegd aan het startscherm."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Nieuw contact maken"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Nieuw contact maken"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisatie"</item>
- <item msgid="7196592230748086755">"Opmerking"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Er zijn geen foto\'s beschikbaar op de tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Er zijn geen foto\'s beschikbaar op de telefoon."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Er zijn geen foto\'s beschikbaar op het apparaat."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contactfoto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Aangepaste labelnaam"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Oproepen rechtstreeks naar voicemail verzenden"</string>
<string name="removePhoto" msgid="4898105274130284565">"Foto verwijderen"</string>
- <string name="noContacts" msgid="4955659076981974652">"Geen contacten"</string>
- <string name="noGroups" msgid="8614664663561385253">"Geen groepen."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Je hebt een account nodig om groepen te maken."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Geen personen in deze groep."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Bewerk de groep om leden toe te voegen."</string>
- <string name="savingContact" msgid="4075751076741924939">"Contact opslaan..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Je contactenlijst is leeg"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Geen contacten met dit label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Geen contacten in dit account"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Je contactenlijst is leeg"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> opgeslagen"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contact opgeslagen"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contacten losgekoppeld"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kan wijzigingen in contact niet opslaan."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kan contact niet loskoppelen."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kan contact niet linken."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Fout bij opslaan van contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kan wijzigingen in contactfoto niet opslaan."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Groep opgeslagen."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Kan wijzigingen in groep niet opslaan."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacten met telefoonnummers</item>
- <item quantity="one">1 contact met telefoonnummer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Geen contacten met telefoonnummers"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevonden</item>
- <item quantity="one">1 gevonden</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kan wijzigingen in contact niet opslaan"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kan link voor contact niet verwijderen"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kan contact niet linken"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fout bij opslaan van contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kan wijzigingen in contactfoto niet opslaan"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kan label niet laden"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Label verwijderd"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Label gemaakt"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan label niet maken"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Label geüpdatet"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Verwijderd uit label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Toegevoegd aan label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Kan labelwijzigingen niet opslaan"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Dat label bestaat al"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Sommige contacten hebben geen e-mailadres."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Sommige contacten hebben geen telefoonnummer."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-mail verzenden"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Bericht verzenden"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Contacten kiezen"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Verzenden"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Geen contacten"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gevonden</item>
- <item quantity="one">1 gevonden</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alle"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favorieten"</string>
- <string name="callBack" msgid="5498224409038809224">"Terugbellen"</string>
- <string name="callAgain" msgid="3197312117049874778">"Opnieuw bellen"</string>
- <string name="returnCall" msgid="8171961914203617813">"Terugbellen"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" toe aan contactpersonen?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"contactfoto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacten"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Namen van je contacten"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Er is geen app gevonden om deze actie uit te voeren."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik om terug te keren naar het vorige scherm"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefoonnummer toevoegen"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"E-mailadres toevoegen"</string>
<string name="missing_app" msgid="1466111003546611387">"Er is geen app gevonden om deze actie uit te voeren."</string>
<string name="menu_share" msgid="943789700636542260">"Delen"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Toevoegen aan contacten"</string>
- <string name="share_via" msgid="563121028023030093">"Contact delen via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Groep in account maken"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Toevoegen"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Contacten delen via</item>
+ <item quantity="one">Contact delen via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Account kiezen"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Label maken"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Label hernoemen"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Labelnaam"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Labelnaam"</string>
<string name="audio_chat" msgid="2535716629358298691">"Voicechat"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
- <string name="connections" msgid="8098440723172028350">"Connecties"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Connectie toevoegen"</string>
- <string name="recent" msgid="2659189233141493004">"Recent"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Recente updates"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-account"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Kan niet worden bewerkt vanuit deze app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Kan niet worden bewerkt op dit apparaat."</string>
<string name="take_photo" msgid="7496128293167402354">"Foto maken"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Nieuwe foto nemen"</string>
<string name="pick_photo" msgid="2129509985223564942">"Foto kiezen"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Nieuwe foto selecteren"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Lijst met contactpersonen wordt bijgewerkt."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Zoeken..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Selectie weergeven"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Alles weergeven"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Alles selecteren"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Selectie ongedaan maken"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Nieuw toevoegen"</string>
- <string name="add_organization" msgid="7311893231158291197">"Organisatie toevoegen"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Groepsnaam"</string>
- <string name="change_photo" msgid="8530597935483526383">"Wijzigen"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primaire foto"</string>
- <string name="description_star" msgid="2605854427360036550">"favoriet"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Contact bewerken"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Wil je het huidige contact linken met het geselecteerde contact?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Labelen"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuleren"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Terug"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sluiten"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wil je overschakelen naar het bewerken van het geselecteerde contact? Gegevens die je tot nu toe hebt ingevoerd, worden gekopieerd."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiëren naar mijn contacten"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Toevoegen aan Mijn contacten"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Aangepast"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Instellingen"</string>
<string name="menu_settings" msgid="377929915873428211">"Instellingen"</string>
<string name="menu_help" msgid="1680178646764069976">"Help en feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Weergaveopties"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefoonnummer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Toevoegen aan contacten"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Aan contact toevoegen"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Sluiten"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inclusief jaar"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacten"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Laden..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Een nieuw contact maken"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Account toevoegen"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Contacten importeren"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Nieuwe groep maken"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Nieuwe groep maken"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> groepen</item>
- <item quantity="one">1 groep</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"De groep \'<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\' verwijderen? (De contacten zelf worden niet verwijderd.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> mensen uit <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon uit <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> mensen</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoon</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importeren"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Nieuwe maken…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Het label <xliff:g id="GROUP_LABEL">%1$s</xliff:g> verwijderen? (Contacten zelf worden niet verwijderd.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Geef een contactnaam op voordat je dit contact linkt met een ander contact."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiëren naar klembord"</string>
<string name="set_default" msgid="4417505153468300351">"Standaard instellen"</string>
<string name="clear_default" msgid="7193185801596678067">"Standaardwaarden wissen"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst gekopieerd"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Je wijzigingen weggooien en ophouden met bewerken?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Wijzigingen annuleren?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Weggooien"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Blijven bewerken"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Mijn profiel instellen"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Typ de naam van de persoon"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Naam van de groep"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuleren"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Wijzigingen opslaan?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Contacten zoeken"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Contacten verwijderen"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mijn lokale profiel"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mijn <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profiel"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Alle contacten worden weergegeven"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Zorg dat je contacten veilig zijn, zelfs wanneer je je telefoon verliest: synchroniseer met een online service."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Account toevoegen"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Er wordt geen back-up van je nieuwe contact gemaakt. Een account toevoegen waarmee online een back-up van contacten wordt gemaakt?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Voeg snel een account toe om een back-up van je contacten te maken op Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nieuwe contacten worden opgeslagen in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Kies een standaardaccount voor nieuwe contacten"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Contact toevoegen"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Nieuw contact maken"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Contact bewerken"</string>
- <string name="keep_local" msgid="1258761699192993322">"Lokaal opslaan"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Alleen weergeven"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Contact kiezen om te bewerken"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Gelinkte contacten"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Toevoegen"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Verwijder link"</string>
<string name="add_account" msgid="8201790677994503186">"Account toevoegen"</string>
<string name="add_new_account" msgid="5748627740680940264">"Nieuw account toevoegen"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Databasebestanden exporteren"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"nieuw contact toevoegen"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Nieuw contact maken"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Meer weergeven"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Minder weergeven"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Alles weergeven"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
<string name="about_card_title" msgid="2920942314212825637">"Over"</string>
- <string name="send_message" msgid="8938418965550543196">"Bericht verzenden"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Een persoonlijke kopie maken..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Gisteren"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Een persoonlijke kopie maken..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Morgen"</string>
<string name="today" msgid="8041090779381781781">"Vandaag"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Vandaag om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Morgen om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Naamloze afspraak)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Instellen"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evenement"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relatie"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefoon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om contacteditor uit te vouwen."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om contacteditor samen te vouwen."</string>
<string name="content_description_directions" msgid="2686791825798189335">"routebeschrijving naar locatie"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"recente sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om te reageren"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"recente sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om te reageren"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"binnenkomend"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"uitgaand"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"gemist"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"recente oproep. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om terug te bellen"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"recente oproep. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om terug te bellen"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Jij: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts werkt beter wanneer je de Hangouts-ID van de betreffende persoon in het veld \'E-mail\' of \'Telefoon\' opgeeft."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Meer velden"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Foto wijzigen"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Kan editor niet openen."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Opslaan in"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Wordt momenteel opgeslagen in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om een ander account te kiezen."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Gelinkte contacten (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Gelinkt contact</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> gelinkte contacten"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Meer velden"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Contactfoto wijzigen"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Contactfoto toevoegen"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Contactfoto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Kan editor niet openen."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Opslaan in"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contactgegevens van <xliff:g id="ACCOUNT">%s</xliff:g> kunnen niet worden bewerkt"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"CONTACTEN LINKEN"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULEREN"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mogelijke duplicaten</item>
- <item quantity="one">1 mogelijk duplicaat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gelinkte contacten</item>
- <item quantity="one">1 gelinkt contact</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Dit contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogelijke duplicaten"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Deze contacten zijn mogelijk dezelfde persoon. Je kunt ze linken tot één contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Gekoppelde contacten"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Vanuit je accounts"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Een foto maken"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alle foto\'s"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Foto kiezen"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Van <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> verwijderen"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> verwijderen"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> verwijderen"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> niet aangevinkt"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> aangevinkt"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto uit onbekend account niet aangevinkt"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto uit onbekend account aangevinkt"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Lijst met contacten wordt bijgewerkt om de gewijzigde taal te weerspiegelen.\n\nEen ogenblik geduld..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Suggesties"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nieuw"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Zijmenu openen"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zijmenu sluiten"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Label <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Labels"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Accounts"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Je gezamenlijke geschiedenis bekijken"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Afspraken en berichten"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Afspraken"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Berichten"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Suggesties"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Organiseer je contacten op een overzichtelijke en nuttige manier"</string>
+ <string name="undo" msgid="1425165101664071422">"Ongedaan maken"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> bellen"</string>
+ <string name="call_home" msgid="1990519474420545392">"Bellen naar huis"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Bellen naar mobiel"</string>
+ <string name="call_work" msgid="5328785911463744028">"Bellen naar werk"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Bellen naar fax werk"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Bellen naar huisfax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Bellen naar pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Bellen"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Bellen naar terugbelnummer"</string>
+ <string name="call_car" msgid="3280537320306436445">"Bellen naar autotelefoon"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Bellen naar hoofdkantoor"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Bellen naar ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Bellen naar algemeen nummer"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Fax bellen"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Bellen naar radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Telex bellen"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Tekststelefoon bellen"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Bellen naar mobiel werk"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Bellen naar pager werk"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> bellen"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Bellen via MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (bellen)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> sms\'en"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Sms\'en naar huis"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Sms\'en naar mobiel"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Sms\'en naar werk"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Sms\'en naar fax werk"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Sms\'en naar huisfax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Sms\'en naar pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Sms\'en"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Sms\'en naar terugbelnummer"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Sms\'en naar autotelefoon"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Sms\'en naar hoofdkantoor"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Sms\'en naar ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Sms\'en naar algemeen nummer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Fax sms\'en"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Sms\'en naar radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Sms\'en naar telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Sms\'en naar teksttelefoon"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Sms\'en naar mobiel werk"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Sms\'en naar werkpager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Sms\'en naar <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Sms\'en via MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (sms\'en)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Videogesprek starten"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Lijst met regelmatige contacten wissen?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Je wist de lijst met contacten waarmee je regelmatig contact opneemt in de apps Contacten en Telefoon, en e-mailapps moeten je voorkeursadressen weer opnieuw leren."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Regelmatige contacten wissen..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Beschikbaar"</string>
+ <string name="status_away" msgid="1838861100379804730">"Afwezig"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Bezet"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Overig"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Zakelijke contactenlijst"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alle contacten"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Snelcontact voor <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Geen naam)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Regelmatig contact"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alle contacten met telefoonnummers"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacten uit werkprofiel"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Updates bekijken"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Apparaat"</string>
+ <string name="account_sim" msgid="6519016427905087952">"Simkaart"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Bijnaam"</string>
+ <string name="name_given" msgid="4280790853455320619">"Voornaam"</string>
+ <string name="name_family" msgid="7466985689626017037">"Achternaam"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Voorvoegsel"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Tweede voornaam"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Achtervoegsel van naam"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetische naam"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetische voornaam"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetische tweede voornaam"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetische achternaam"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefoon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mailadres"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adres"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisatie"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relatie"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Speciale datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Sms"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adres"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Bedrijf"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Opmerkingen"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Aangepast"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Labels"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mailen naar huis"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mailen naar mobiel"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mailen naar werk"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> e-mailen"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Straat"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Plaats"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Staat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Thuisadres weergeven"</string>
+ <string name="map_work" msgid="1360474076921878088">"Werkadres weergeven"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adres weergeven"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Adres voor <xliff:g id="CUSTOM_LABEL">%s</xliff:g> bekijken"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatten via AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatten via Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatten via Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatten via Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatten via QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatten via Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatten via ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatten via Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"verwijderen"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Meer naamvelden weergeven"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Naamvelden samenvouwen"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Meer fonetische naamvelden weergeven"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetische naamvelden samenvouwen"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Uitvouwen"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Samenvouwen"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Uitgevouwen"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Samengevouwen"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alle contacten"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Met ster"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Aanpassen"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacten"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alle andere contacten"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alle contacten"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Synchronisatiegroep verwijderen"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Synchronisatiegroep toevoegen"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Meer groepen…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Als je \'<xliff:g id="GROUP">%s</xliff:g>\' verwijdert uit de synchronisatie, worden ook contacten die niet bij een groep horen uit de synchronisatie verwijderd."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Weergaveopties opslaan..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Aangepaste weergave"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Geïmporteerde contacten opslaan in:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Simkaart"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Simkaart <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d contacten</item>
+ <item quantity="one">1 contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contacten • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-bestand"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Niets te importeren"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Contacten importeren van vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Import van <xliff:g id="FILENAME">%s</xliff:g> annuleren?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export van <xliff:g id="FILENAME">%s</xliff:g> annuleren?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kan vCard-import/export niet annuleren"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Onbekende fout."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan \'<xliff:g id="FILE_NAME">%1$s</xliff:g>\' niet openen: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kan het exportprogramma niet starten: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Er is geen contact dat kan worden geëxporteerd."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Je hebt een vereist recht uitgeschakeld."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Er is een fout opgetreden tijdens het exporteren: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fout"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Onvoldoende geheugen. Het bestand is mogelijk te groot."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"De indeling wordt niet ondersteund."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exporteren van <xliff:g id="FILENAME">%s</xliff:g> voltooid."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Contacten geëxporteerd."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"De contacten zijn geëxporteerd. Klik op de melding om contacten te delen."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tik om contacten te delen."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exporteren van <xliff:g id="FILENAME">%s</xliff:g> geannuleerd."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Contactgegevens exporteren"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contactgegevens worden geëxporteerd."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kan databasegegevens niet ophalen."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Er zijn geen contacten die kunnen worden geëxporteerd."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"De vCard-editor is niet correct gestart."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kan niet exporteren"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"De contactgegevens zijn niet geëxporteerd.\nReden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> importeren"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kan vCard-gegevens niet lezen"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importeren van vCard <xliff:g id="FILENAME">%s</xliff:g> voltooid"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importeren van <xliff:g id="FILENAME">%s</xliff:g> geannuleerd"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> wordt binnenkort geïmporteerd."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Het bestand wordt binnenkort geïmporteerd."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Verzoek voor vCard-import is geweigerd. Probeer het later opnieuw."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacten worden binnenkort geëxporteerd."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Verzoek voor vCard-export is geweigerd. Probeer het later opnieuw."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Bezig met opslaan van vCard(s) in de lokale tijdelijke opslag. Het daadwerkelijke importeren begint binnenkort."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Kan vCard niet importeren."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"In cachegeheugen opslaan"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importeren <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exporteren naar VCF"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sorteren op"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetische naam"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Altijd weergeven"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Verbergen indien leeg"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Voornaam"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Achternaam"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Naamindeling"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Voornaam eerst"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Achternaam eerst"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Accounts"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Standaardaccount voor nieuwe contacten"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mijn info"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Je profiel instellen"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Over Contacten"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Favoriete contacten delen"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Alle contacten delen"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kan contacten niet delen."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Contacten exporteren"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Contacten importeren vanuit"</string>
+ <string name="share_error" msgid="948429331673358107">"Dit contact kan niet worden gedeeld."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Er zijn geen contacten om te delen."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Zichtbare contacten"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Zichtbare contacten"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Weergave aanpassen"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Opslaan"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Contacten zoeken"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriet"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importeren"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exporteren"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nummers"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"stoppen met zoeken"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Zoekopdracht wissen"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Altijd gebruiken voor oproepen"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Oproep met een notitie"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Typ een notitie om te verzenden met de oproep…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"VERZENDEN EN BELLEN"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Buildversie"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-sourcelicenties"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licentiedetails voor open-sourcesoftware"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Privacybeleid"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Servicevoorwaarden"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Open-sourcelicenties"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Kan de URL niet openen."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> geselecteerd"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> niet geselecteerd"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Videogesprek starten"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Verwijderen"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Weglatingsteken"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> u <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Deze snelkoppeling is uitgeschakeld"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact is verwijderd"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importeren"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Contacten selecteren"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Geen contacten op je simkaart"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Contact staat al in je lijst"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacten op simkaart geïmporteerd</item>
+ <item quantity="one">1 contact op simkaart geïmporteerd</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kan contacten op simkaart niet importeren"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importeren van simkaart"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Annuleren"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatisch synchroniseren is uitgeschakeld. Tik om in te schakelen."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Sluiten"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Accountsynchronisatie is uitgeschakeld. Tik om in te schakelen."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Automatisch synchroniseren inschakelen?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Wijzigingen die je aanbrengt in alle apps en accounts, niet alleen in Google Contacten, worden gesynchroniseerd tussen internet en je apparaten."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Inschakelen"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Geen verbinding"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"Simkaart"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Meer weergeven"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importeren van simkaart voltooid"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importeren mislukt"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kan geen contacten importeren van de simkaart"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Sim importeren"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Meldingen"</string>
</resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
deleted file mode 100644
index 42f341e73..000000000
--- a/res/values-pa-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"ਸੰਪਰਕ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"ਸੰਪਰਕ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"ਸੰਪਰਕ ਦੇਖੋ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string name="contactsList" msgid="8661624236494819731">"ਸੰਪਰਕ"</string>
- <string name="shortcutContact" msgid="749243779392912958">"ਸੰਪਰਕ"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ਸਿੱਧਾ ਡਾਇਲ ਕਰੋ"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ਸਿੱਧਾ ਸੁਨੇਹਾ"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"ਇੱਕ ਸੰਪਰਕ ਸ਼ਾਰਟਕੱਟ ਚੁਣੋ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ਕਾਲ ਕਰਨ ਲਈ ਇੱਕ ਨੰਬਰ ਚੁਣੋ"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"ਸੁਨੇਹੇ ਲਈ ਇੱਕ ਨੰਬਰ ਚੁਣੋ"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ਸੰਪਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ਇੱਕ ਸੰਪਰਕ ਚੁਣੋ"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string name="starredList" msgid="4817256136413959463">"ਸਟਾਰ ਵਾਲੇ"</string>
- <string name="frequentList" msgid="7154768136473953056">"ਅਕਸਰ"</string>
- <string name="strequentList" msgid="5640192862059373511">"ਮਨਪਸੰਦ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"ਸੰਪਰਕ ਵੇਰਵੇ"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"ਸਮੂਹ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"ਸਮੂਹ ਬਣਾਓ"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"ਇਸਦੇ ਬਾਰੇ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"ਅਪਡੇਟਸ"</string>
- <string name="searchHint" msgid="8482945356247760701">"ਸੰਪਰਕ ਖੋਜੋ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"ਸੰਪਰਕ ਦੇਖੋ"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਇਆ ਗਿਆ"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"ਮਿਟਾਓ"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ਫ਼ੋਟੋ ਬਦਲੋ"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ਹੋਮ ਸਕ੍ਰੀਨ ’ਤੇ ਰੱਖੋ"</string>
- <string name="menu_call" msgid="3992595586042260618">"ਸੰਪਰਕ ਨੂੰ ਕਾਲ ਕਰੋ"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ਟੈਕਸਟ ਸੰਪਰਕ"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"ਅਣਲਿੰਕ ਕਰੋ"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ਮਿਟਾਓ"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"ਸਮੂਹ ਜੋੜੋ"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਹੈ?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ਅਣਲਿੰਕ ਕਰੋ"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ਕੀ ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਹਿਲਾਂ ਤੋਂ ਕੀਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨਾ ਅਤੇ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਚਾਹੋਗੇ?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ਰੱਖਿਅਤ ਅਤੇ ਅਣਲਿੰਕ ਕਰੋ"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"ਕੀ ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਹਿਲਾਂ ਤੋਂ ਕੀਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਸਹੇਜਣਾ ਅਤੇ ਚੁੁਣੇ ਗਏ ਸੰਪਰਕ ਨਾਲ ਲਿੰਕ ਕਰਨਾ ਚਾਹੋਗੇ?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ਸਹੇਜੋੋ ਅਤੇ ਲਿੰਕ ਕਰੋ"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"ਲਿੰਕ"</string>
- <string name="menu_save" msgid="1727844363591825909">"ਰੱਖਿਅਤ ਕਰੋ"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ਨਾਲ ਲਿੰਕ ਕਰਨ ਲਈ ਸੰਪਰਕ ਚੁਣੋ:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"ਸਾਰੇ ਸੰਪਰਕ ਦਿਖਾਓ"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ਸੁਝਾਏ ਗਏ ਸੰਪਰਕ"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ਸਾਰੇ ਸੰਪਰਕ"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"ਸੰਪਰਕ ਲਿੰਕ ਕੀਤੇ ਗਏ"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one"> ਸੰਪਰਕ ਹਟਾਏ</item>
- <item quantity="other"> ਸੰਪਰਕ ਹਟਾਏ</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ਰਿੰਗਟੋਨ ਸੈੱਟ ਕਰੋ"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"ਸਾਰੀਆਂ ਕਾਲਾਂ ਵੌਇਸਮੇਲ ਵਿੱਚ ਭੇਜੋ"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ਤੁਹਾਡੇ ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਤੋਂ ਸੰਪਰਕ ਹਟਾਏ ਨਹੀਂ ਜਾ ਸਕਦੇ ਹਨ, ਪਰ ਇਹਨਾਂ ਨੂੰ ਲੁਕਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ਲੁਕਾਓ"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"ਇਸ ਹਟਾਏ ਜਾਣ ਵਾਲੇ ਸੰਪਰਕ ਕੋਲ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਹਨ। ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਮਿਟਾਏ ਨਹੀਂ, ਲੁਕਾਏ ਜਾਣਗੇ।"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ਤੁਹਾਨੂੰ ਇੱਕ ਲਿੰਕ ਪਰਫੌਰਮ ਕਰਨ ਲਈ ਘੱਟੋ-ਘੱਟ ਦੋ ਸੰਪਰਕ ਚੁਣਨ ਦੀ ਲੋੜ ਹੈ।"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕਾਂ ਨੂੰ ਲਿੰਕ ਕਰਨਾ ਹੈ?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"ਲਿੰਕ ਕਰੋ"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"ਕੀ ਚੁਣੇ ਸੰਪਰਕ ਹਟਾਉਣੇ ਹਨ?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ਤੁਹਾਡੇ ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਤੋਂ ਸੰਪਰਕ ਹਟਾਏ ਨਹੀਂ ਜਾ ਸਕਦੇ ਹਨ, ਪਰ ਇਹਨਾਂ ਨੂੰ ਲੁਕਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ਇਹਨਾਂ ਹਟਾਏ ਜਾਣ ਵਾਲੇ ਸੰਪਰਕਾਂ ਕੋਲ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਹਨ। ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਮਿਟਾਏ ਨਹੀਂ, ਲੁਕਾਏ ਜਾ ਸਕਦੇ ਹਨ।"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਹਟਾਉਣਾ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਤੋਂ ਵੇਰਵੇ ਮਿਟਾ ਦੇਵੇਗਾ।"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ਹਟਾਓ"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ਬਦਲਾਵਾਂ ਖਾਰਜ ਕਰੋ"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"ਸੰਪਰਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ਸੰਪਰਕ ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"ਕੰਪਨੀ"</item>
- <item msgid="7196592230748086755">"ਸੂਚਨਾ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ਟੈਬਲੇਟ ਤੇ ਕੋਈ ਤਸਵੀਰਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ਫੋਨ ਤੇ ਕੋਈ ਤਸਵੀਰਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"ਵਿਸ਼ੇਸ਼=ਵਿਉਂਤਬੱਧ ਲੇਬਲ ਨਾਮ"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ਸਿੱਧੇ ਵੌਇਸਮੇਲ ਵਿੱਚ ਕਾਲਾਂ ਭੇਜੋ"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ਫ਼ੋਟੋ ਹਟਾਓ"</string>
- <string name="noContacts" msgid="4955659076981974652">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
- <string name="noGroups" msgid="8614664663561385253">"ਕੋਈ ਸਮੂਹ ਨਹੀਂ।"</string>
- <string name="noAccounts" msgid="7768267764545265909">"ਸਮੂਹ ਬਣਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਇੱਕ ਖਾਤਾ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੈ।"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ਇਸ ਸਮੂਹ ਵਿੱਚ ਕੋਈ ਲੋਕ ਨਹੀਂ।"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"ਕੁਝ ਸ਼ਾਮਲ ਕਰਨ ਲਈ, ਸਮੂਹ ਸੰਪਾਦਿਤ ਕਰੋ।"</string>
- <string name="savingContact" msgid="4075751076741924939">"ਸੰਪਰਕ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"ਸੰਪਰਕ ਸਹੇਜਿਆ"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਕੀਤੇ"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ਸੰਪਰਕ ਬਦਲਾਵਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"ਸੰਪਰਕ ਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"ਸੰਪਰਕ ਸਹੇਜਣ ਦੌਰਾਨ ਗਲਤੀ।"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ਸੰਪਰਕ ਫ਼ੋਟੋ ਦੇ ਪਰਿਵਰਤਨਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"ਸਮੂਹ ਸੁਰੱਖਿਅਤ ਕੀਤਾ।"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ਸਮੂਹ ਬਦਲਾਵਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਫ਼ੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸੰਪਰਕ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਫ਼ੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸੰਪਰਕ</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ਫੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਮਿਲਿਆ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ਸਾਰੇ"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ਮਨਪਸੰਦ"</string>
- <string name="callBack" msgid="5498224409038809224">"ਕਾਲ ਬੈਕ ਕਰੋ"</string>
- <string name="callAgain" msgid="3197312117049874778">"ਦੁਬਾਰਾ ਕਾਲ ਕਰੋ"</string>
- <string name="returnCall" msgid="8171961914203617813">"ਕਾਲ ਤੇ ਵਾਪਸ ਜਾਓ"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ਕੀ \"<xliff:g id="EMAIL">%s</xliff:g>\" ਨੂੰ ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ਪਲਸ"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ਸੰਪਰਕਾਂ ਵਿੱਚੋਂ <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੇ ਨਾਮ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ਇਸ ਕਿਰਿਆ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੋਈ ਐਪ ਨਹੀਂ ਮਿਲਿਆ।"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ਪਿਛਲੀ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ਫ਼ੋਨ ਨੰਬਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ਈਮੇਲ ਜੋੜੋ"</string>
- <string name="missing_app" msgid="1466111003546611387">"ਇਸ ਕਿਰਿਆ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੋਈ ਐਪ ਨਹੀਂ ਮਿਲਿਆ।"</string>
- <string name="menu_share" msgid="943789700636542260">"ਸਾਂਝਾ ਕਰੋ"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="share_via" msgid="563121028023030093">"ਇਸ ਰਾਹੀਂ ਸੰਪਰਕ ਸਾਂਝਾ ਕਰੋ"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ਖਾਤੇ ਦੇ ਅਧੀਨ ਸਮੂਹ ਬਣਾਓ"</string>
- <string name="audio_chat" msgid="2535716629358298691">"ਵੌਇਸ ਚੈਟ"</string>
- <string name="video_chat" msgid="1872255818640336072">"ਵੀਡੀਓ ਚੈਟ"</string>
- <string name="connections" msgid="8098440723172028350">"ਕਨੈਕਸ਼ਨ"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"ਕਨੈਕਸ਼ਨ ਜੋੜੋ"</string>
- <string name="recent" msgid="2659189233141493004">"ਹਾਲੀਆ"</string>
- <string name="recent_updates" msgid="4267258535615860710">"ਹਾਲੀਆ ਅਪਡੇਟਾਂ"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ਸੰਪਰਕ"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ਖਾਤਾ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ਇਸ ਐਪ ਤੋਂ ਸੰਪਾਦਨਯੋਗ ਨਹੀਂ।"</string>
- <string name="group_read_only" msgid="1061762906115697637">"ਇਸ ਡੀਵਾਈਸ ਤੇ ਸੰਪਾਦਨਯੋਗ ਨਹੀਂ।"</string>
- <string name="take_photo" msgid="7496128293167402354">"ਫ਼ੋਟੋ ਲਓ"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"ਨਵੀਂ ਫ਼ੋਟੋ ਲਓ"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"ਨਵੀਂ ਫ਼ੋਟੋ ਚੁਣੋ"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"ਸੰਪਰਕ ਸੂਚੀ ਅਪਡੇਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"ਖੋਜ ਰਿਹਾ ਹੈ..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"ਚੁਣਿਆ ਗਿਆ ਦਿਖਾਓ"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"ਸਾਰੇ ਦਿਖਾਓ"</string>
- <string name="menu_select_all" msgid="621719255150713545">"ਸਾਰੇ ਚੁਣੋ"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ਸਾਰਿਆਂ ਨੂੰ ਅਚੋਣਵਾਂ ਕਰੋ"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"ਨਵਾਂ ਜੋੜੋ"</string>
- <string name="add_organization" msgid="7311893231158291197">"ਕੰਪਨੀ ਜੋੜੋ"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ਮਿਤੀ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ਸਮੂਹ ਨਾਮ"</string>
- <string name="change_photo" msgid="8530597935483526383">"ਬਦਲੋ"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ਪ੍ਰਾਈਮਰੀ ਫ਼ੋਟੋ"</string>
- <string name="description_star" msgid="2605854427360036550">"ਮਨਪਸੰਦ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨਾਲ ਮੌਜੂਦਾ ਸੰਪਰਕ ਲਿੰਕ ਕਰਨਾ ਹੈ?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਲਈ ਸਵਿਚ ਕਰਨਾ ਹੈ? ਹੁਣ ਤੱਕ ਤੁਸੀਂ ਜੋ ਜਾਣਕਾਰੀ ਦਰਜ ਕੀਤੀ, ੁਹ ਕਾਪੀ ਕੀਤੀ ਜਾਏਗੀ।"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"ਮੇਰੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਕਾਪੀ ਕਰੋ"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"ਮੇਰੇ ਸੰਪਰਕਾਂ ਵਿੱਚ ਜੋੜੋ"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ਡਾਇਰੈਕਟਰੀ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ਸੈਟਿੰਗਾਂ"</string>
- <string name="menu_settings" msgid="377929915873428211">"ਸੈਟਿੰਗਾਂ"</string>
- <string name="menu_help" msgid="1680178646764069976">"ਸਹਾਇਤਾ ਅਤੇ ਪ੍ਰਤੀਕਰਮ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ਡਿਸਪਲੇ ਚੋਣਾਂ"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ਫ਼ੋਨ ਨੰਬਰ"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"ਸੰਪਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"ਬੰਦ ਕਰੋ"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"ਸਾਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"ਸੰਪਰਕ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ਇੱਕ ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"ਸੰਪਰਕ ਆਯਾਤ ਕਰੋ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"ਨਵਾਂ ਸਮੂਹ ਬਣਾਓ"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"ਨਵਾਂ ਸਮੂਹ ਬਣਾਓ"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> ਸਮੂਹ</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ਸਮੂਹ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"ਕੀ ਸਮੂਹ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ਮਿਟਾਉਣਾ ਹੈ? (ਸੰਪਰਕ ਆਪਣੇ ਆਪ ਨਹੀਂ ਮਿਟਾਏ ਜਾਣਗੇ।)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ਤੋਂ <xliff:g id="COUNT_2">%1$d</xliff:g> ਲੋਕ</item>
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> ਤੋਂ <xliff:g id="COUNT_2">%1$d</xliff:g> ਲੋਕ</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਲੋਕ</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਲੋਕ</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ਹੋਰ ਨਾਲ ਲਿੰਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸੰਪਰਕ ਨਾਮ ਟਾਈਪ ਕਰੋ।"</string>
- <string name="copy_text" msgid="3257145021583508761">"ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕਰੋ"</string>
- <string name="set_default" msgid="4417505153468300351">"ਡਿਫੌਲਟ ਸੈੱਟ ਕਰੋ"</string>
- <string name="clear_default" msgid="7193185801596678067">"ਡਿਫੌਲਟ ਹਟਾਓ"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"ਟੈਕਸਟ ਕਾਪੀ ਕੀਤਾ"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ਕੀ ਆਪਣੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਛੱਡਣਾ ਅਤੇ ਸੰਪਾਦਨ ਨੂੰ ਰੱਦ ਕਰਨਾ ਹੈ?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ਛੱਡੋ"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"ਸੋਧ ਕਰਦੇ ਰਹੋ"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"ਮੇਰਾ ਪ੍ਰੋਫਾਈਲ ਸਥਾਪਤ ਕਰੋ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"ਵਿਅਕਤੀ ਦਾ ਨਾਮ ਟਾਈਪ ਕਰੋ"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ਸਮੂਹ ਦਾ ਨਾਮ"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"ਮੇਰੀ ਸਥਾਨਕ ਪ੍ਰੋਫਾਈਲ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"ਮੇਰੀ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ਪ੍ਰੋਫਾਈਲ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ਸਾਰੇ ਸੰਪਰਕ ਡਿਸਪਲੇ ਕਰ ਰਿਹਾ ਹੈ"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"ਆਪਣੇ ਫੋਨ ਦੇ ਸੰਪਰਕਾਂ ਨੂੰ ਤਦ ਵੀ ਸੁਰੱਖਿਅਤ ਰੱਖੋ ਭਾਵੇਂ ਤੁਹਾਡਾ ਫੋਨ ਗੁਆਚ ਜਾਏ: ਇੱਕ ਔਨਲਾਈਨ ਸੇਵਾ ਨਾਲ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰੋ।"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ਇੱਕ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"ਤੁਹਾਡਾ ਨਵਾਂ ਸੰਪਰਕ ਬੈਕਅੱਪ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ। ਕੀ ਇੱਕ ਅਜਿਹਾ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ ਜੋ ਸੰਪਰਕਾਂ ਨੂੰ ਔਨਲਾਈਨ ਬੈਕਅੱਪ ਕਰਦਾ ਹੈ?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ਨਵੇਂ ਸੰਪਰਕ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ਨਵੇਂ ਸੰਪਰਕਾਂ ਲਈ ਇੱਕ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖਾਤਾ ਚੁਣੋ:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"ਨਵਾਂ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
- <string name="keep_local" msgid="1258761699192993322">"ਸਥਾਨਕ ਰੱਖੋ"</string>
- <string name="add_account" msgid="8201790677994503186">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="add_new_account" msgid="5748627740680940264">"ਨਵਾਂ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ਡਾਟਾਬੇਸ ਫਾਈਲਾਂ ਨਿਰਯਾਤ ਕਰੋ"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ਨਵਾਂ ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ਹੋਰ ਦੇਖੋ"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ਘੱਟ ਦੇਖੋ"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ਸਭ ਦੇਖੋ"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ਹਾਲੀਆ"</string>
- <string name="about_card_title" msgid="2920942314212825637">"ਇਸਦੇ ਬਾਰੇ"</string>
- <string name="send_message" msgid="8938418965550543196">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ਇੱਕ ਨਿੱਜੀ ਕਾਪੀ ਬਣਾ ਰਿਹਾ ਹੈ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ਕੱਲ੍ਹ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"ਕੱਲ੍ਹ ਨੂੰ"</string>
- <string name="today" msgid="8041090779381781781">"ਅੱਜ"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ਅੱਜ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ਵਜੇ"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ਕੱਲ੍ਹ ਨੂੰ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ਵਜੇ"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(ਨਾਮ ਰਹਿਤ ਇਵੈਂਟ)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"ਸੈੱਟ ਕਰੋ"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"ਕੰਪਨੀ"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"ਉਪਨਾਮ"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"ਸੂਚਨਾ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ਵੈੱਬਸਾਈਟ"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ਵਰਤਾਰਾ"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"ਰਿਸ਼ਤਾ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ਖਾਤਾ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"ਨਾਮ"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ਈਮੇਲ"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ਫੋਨ"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ਫ਼ੋਟੋ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"ਸੰਪਰਕ ਸੰਪਾਦਕ ਦਾ ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"ਸੰਪਰਕ ਸੰਪਾਦਕ ਨਸ਼ਟ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਲਈ ਨਿਰਦੇਸ਼"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"ਹਾਲੀਆ sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>। <xliff:g id="PHONE_NUMBER">%s</xliff:g>। <xliff:g id="DATE">%s</xliff:g>। ਜਵਾਬ ਦੇਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ਇਨਕਮਿੰਗ"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ਆਊਟਗੋਇੰਗ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ਮਿਸਡ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ਹਾਲੀਆ ਕਾਲ। <xliff:g id="CALL_TYPE">%s</xliff:g>। <xliff:g id="PHONE_NUMBER">%s</xliff:g>। <xliff:g id="DATE">%s</xliff:g>। ਕਾਲ ਬੈਕ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"ਤੁਸੀਂ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ਜਦੋਂ ਤੁਸੀਂ ਈਮੇਲ ਖੇਤਰ ਜਾਂ ਫੋਨ ਖੇਤਰ ਵਿੱਚ ਵਿਅਕਤੀ ਦਾ ਹੈਂਗਆਊਟਸ ਆਈਡੈਂਟੀਫਾਇਰ ਦਰਜ ਕਰਦੇ ਹੋ ਤਾਂ ਹੈਂਗਆਊਟਸ ਬਿਹਤਰ ਕੰਮ ਕਰਦਾ ਹੈ।"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ਹੋਰ ਖੇਤਰ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ਫ਼ੋਟੋ ਬਦਲੋ"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ਸੰਪਾਦਕ ਨੂੰ ਖੋਲ੍ਹਣ ਵਿੱਚ ਅਸਫਲ।"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"ਏਥੇ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ਮੌਜੂਦਾ ਤੌਰ \'ਤੇ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ। ਇੱਕ ਵੱਖਰਾ ਖਾਤਾ ਚੁਣਨ ਲਈ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ।"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one"> ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ ( <xliff:g id="COUNT">%d</xliff:g> )</item>
- <item quantity="other"> ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ ( <xliff:g id="COUNT">%d</xliff:g> )</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ਰੱਦ ਕਰੋ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਸੰਭਵ ਡੁਪਲੀਕੇਟ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਸੰਭਵ ਡੁਪਲੀਕੇਟ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ਇਹ ਸੰਪਰਕ"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ਸੰਭਵ ਡੁਪਲੀਕੇਟ"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ਇਹ ਸੰਪਰਕ ਇਕੋ ਵਿਅਕਤੀ ਦੇ ਹੋ ਸਕਦੇ ਹਨ। ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਇੱਕ ਇੱਕਲੇ ਸੰਪਰਕ ਵੱਜੋਂ ਲਿੰਕ ਕਰ ਸਕਦੇ ਹੋ।"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ਤੁਹਾਡੇ ਖਾਤਿਆਂ ਤੋਂ"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ਇੱਕ ਫ਼ੋਟੋ ਲਓ"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"ਸਾਰੀਆਂ ਫ਼ੋਟੋਆਂ"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> ਵੱਲੋਂ"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ਹਟਾਓ"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ਹਟਾਓ"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ਵੱਲੋਂ ਫ਼ੋਟੋ ਨਹੀਂ ਜਾਂਚੀ ਗਈ"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ਵਲੋਂ ਫ਼ੋਟੋ ਜਾਂਚੀ ਗਈ"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ਅਗਿਆਤ ਖਾਤੇ ਦੀ ਫ਼ੋਟੋ ਨਹੀਂ ਜਾਂਚੀ ਗਈ"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ਅਗਿਆਤ ਖਾਤੇ ਦੀ ਫ਼ੋਟੋ ਜਾਂਚੀ ਗਈ"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"ਭਾਸ਼ਾ ਵਿੱਚ ਕੀਤੀ ਤਬਦੀਲੀ ਨੂੰ ਦਰਸਾਉਣ ਲਈ ਸੰਪਰਕ ਸੂਚੀ ਅੱਪਡੇਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ।\n\nਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"ਬਲੌਕ ਕੀਤੇ ਨੰਬਰ"</string>
-</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
new file mode 100644
index 000000000..7fc42e722
--- /dev/null
+++ b/res/values-pa/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"ਸੰਪਰਕ"</string>
+ <string name="contactsList" msgid="8661624236494819731">"ਸੰਪਰਕ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"ਸੰਪਰਕ"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ਸਿੱਧਾ ਡਾਇਲ ਕਰੋ"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ਸਿੱਧਾ ਸੁਨੇਹਾ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"ਸੰਪਰਕ ਚੁਣੋ"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ਸੰਪਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ਇੱਕ ਸੰਪਰਕ ਚੁਣੋ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ਚੁਣੋ"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+ <string name="searchHint" msgid="8482945356247760701">"ਸੰਪਰਕ ਖੋਜੋ"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜੋ"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ਮਨਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਇਆ ਗਿਆ"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"ਮਨਪਸੰਦ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"ਮਿਟਾਓ"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ਫ਼ੋਟੋ ਬਦਲੋ"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"ਅਣਲਿੰਕ ਕਰੋ"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"ਸੰਪਰਕ ਹਟਾਓ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ਲੇਬਲ ਦਾ ਨਾਮ ਬਦਲੋ"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ਲੇਬਲ ਮਿਟਾਓ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"ਸੰਪਰਕ ਚੁਣੋ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ਲੇਬਲ ਤੋਂ ਹਟਾਓ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ਲੇਬਲ ਬਣਾਓ"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਹੈ?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ਅਣਲਿੰਕ ਕਰੋ"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ਕੀ ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਹਿਲਾਂ ਤੋਂ ਕੀਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨਾ ਅਤੇ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਚਾਹੋਗੇ?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"ਰੱਖਿਅਤ ਅਤੇ ਅਣਲਿੰਕ ਕਰੋ"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"ਕੀ ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਹਿਲਾਂ ਤੋਂ ਕੀਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਸਹੇਜਣਾ ਅਤੇ ਚੁੁਣੇ ਗਏ ਸੰਪਰਕ ਨਾਲ ਲਿੰਕ ਕਰਨਾ ਚਾਹੋਗੇ?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"ਸਹੇਜੋੋ ਅਤੇ ਲਿੰਕ ਕਰੋ"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"ਲਿੰਕ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"ਅਣਲਿੰਕ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"ਲਿੰਕ"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕਾਂ ਨੂੰ ਵੇਖੋ"</string>
+ <string name="menu_save" msgid="1727844363591825909">"ਰੱਖਿਅਤ ਕਰੋ"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ਨਾਲ ਲਿੰਕ ਕਰਨ ਲਈ ਸੰਪਰਕ ਚੁਣੋ:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"ਸੁਝਾਏ ਗਏ ਸੰਪਰਕ"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ਲਿੰਕ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"ਸੰਪਰਕ ਲਿੰਕ ਕੀਤੇ ਗਏ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ਅਤੇ <xliff:g id="NAME_1">%2$s</xliff:g> ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… ਨੂੰ ਮਿਟਾਇਆ ਗਿਆ"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one"> ਸੰਪਰਕ ਹਟਾਏ</item>
+ <item quantity="other"> ਸੰਪਰਕ ਹਟਾਏ</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਸੰਪਰਕ</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਸੰਪਰਕ</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google ਤੋਂ"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> ਤੋਂ"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ਰਿੰਗਟੋਨ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"ਵੌਇਸਮੇਲ ਵੱਲ ਰੂਟ ਕਰੋ"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ਵੌਇਸਮੇਲ ਵੱਲ ਰੂਟ ਕਰਨਾ ਹਟਾਓ"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ਇਹ ਸੰਪਰਕ ਸਿਰਫ਼-ਪੜ੍ਹਨਯੋਗ ਹੈ। ਇਸ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਪਰ ਤੁਸੀਂ ਇਸ ਨੂੰ ਲੁਕਾ ਸਕਦੇ ਹੋ।"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"ਸੰਪਰਕ ਲੁਕਾਓ"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ਇਸ ਸੰਪਰਕ ਵਿਚਲੇ ਸਿਰਫ਼-ਪੜ੍ਹਨਯੋਗ ਖਾਤੇ ਲੁਕਾਏ ਜਾਣਗੇ, ਪਰ ਮਿਟਾਏ ਨਹੀਂ ਜਾਣਗੇ।"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"ਕੀ ਚੁਣੇ ਸੰਪਰਕ ਹਟਾਉਣੇ ਹਨ?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ਤੁਹਾਡੇ ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਤੋਂ ਸੰਪਰਕ ਹਟਾਏ ਨਹੀਂ ਜਾ ਸਕਦੇ ਹਨ, ਪਰ ਇਹਨਾਂ ਨੂੰ ਲੁਕਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"ਇਹਨਾਂ ਹਟਾਏ ਜਾਣ ਵਾਲੇ ਸੰਪਰਕਾਂ ਕੋਲ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਹਨ। ਰੀਡ-ਓਨਲੀ ਖਾਤਿਆਂ ਦੇ ਵੇਰਵੇ ਮਿਟਾਏ ਨਹੀਂ, ਲੁਕਾਏ ਜਾ ਸਕਦੇ ਹਨ।"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਹਟਾਉਣਾ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਤੋਂ ਵੇਰਵੇ ਮਿਟਾ ਦੇਵੇਗਾ।"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ਹਟਾਓ"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"ਸੰਪਰਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ਸੰਪਰਕ ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ਡੀਵਾਈਸ \'ਤੇ ਕੋਈ ਤਸਵੀਰਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"ਵਿਸ਼ੇਸ਼=ਵਿਉਂਤਬੱਧ ਲੇਬਲ ਨਾਮ"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ਫ਼ੋਟੋ ਹਟਾਓ"</string>
+ <string name="noContacts" msgid="2228592924476426108">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ਇਸ ਲੇਬਲ ਨਾਲ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ਇਸ ਖਾਤੇ ਵਿੱਚ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"ਸੰਪਰਕ ਸਹੇਜਿਆ"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਕੀਤੇ"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"ਸੰਪਰਕ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ਸੰਪਰਕ ਅਣਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"ਸੰਪਰਕ ਨੂੰ ਲਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"ਸੰਪਰਕ ਰੱਖਿਅਤ ਕਰਨ ਦੌਰਾਨ ਗੜਬੜ"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ਸੰਪਰਕ ਦੀ ਫ਼ੋਟੋ ਦੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ਲੇਬਲ ਲੋਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ਲੇਬਲ ਮਿਟਾਇਆ ਗਿਆ"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ਲੇਬਲ ਬਣਾਇਆ ਗਿਆ"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ਲੇਬਲ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ਲੇਬਲ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ਲੇਬਲ ਤੋਂ ਹਟਾਏ ਗਏ"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ਲੇਬਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ਲੇਬਲ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ਇਹ ਲੇਬਲ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"ਕੁਝ ਸੰਪਰਕਾਂ ਨਾਲ ਈਮੇਲਾਂ ਨਹੀਂ ਹਨ।"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"ਕੁਝ ਸੰਪਰਕਾਂ ਨਾਲ ਫ਼ੋਨ ਨੰਬਰ ਨਹੀਂ ਹਨ।"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ਈਮੇਲ ਭੇਜੋ"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ਸੰਪਰਕਾਂ ਨੂੰ ਚੁਣੋ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ਭੇਜੋ"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"ਕੀ \"<xliff:g id="EMAIL">%s</xliff:g>\" ਨੂੰ ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੇ ਨਾਮ"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"ਪਿਛਲੀ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ਫ਼ੋਨ ਨੰਬਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ਈਮੇਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ਇਸ ਕਿਰਿਆ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੋਈ ਐਪ ਨਹੀਂ ਮਿਲਿਆ।"</string>
+ <string name="menu_share" msgid="943789700636542260">"ਸਾਂਝਾ ਕਰੋ"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">ਇਸ ਰਾਹੀਂ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ</item>
+ <item quantity="other">ਇਸ ਰਾਹੀਂ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ਖਾਤਾ ਚੁਣੋ"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ਲੇਬਲ ਬਣਾਓ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ਲੇਬਲ ਦਾ ਨਾਮ ਬਦਲੋ"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ਲੇਬਲ ਨਾਮ"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ਲੇਬਲ ਨਾਮ"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"ਵੌਇਸ ਚੈਟ"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ਵੀਡੀਓ ਚੈਟ"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> ਸੰਪਰਕ"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ਖਾਤਾ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ਫ਼ੋਟੋ ਲਓ"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"ਨਵੀਂ ਫ਼ੋਟੋ ਲਓ"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"ਨਵੀਂ ਫ਼ੋਟੋ ਚੁਣੋ"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"ਖੋਜ ਰਿਹਾ ਹੈ..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"ਮਿਤੀ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ਲੇਬਲ ਲਗਾਓ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ਰੱਦ ਕਰੋ"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ਪਿੱਛੇ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ਬੰਦ ਕਰੋ"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਲਈ ਸਵਿਚ ਕਰਨਾ ਹੈ? ਹੁਣ ਤੱਕ ਤੁਸੀਂ ਜੋ ਜਾਣਕਾਰੀ ਦਰਜ ਕੀਤੀ, ੁਹ ਕਾਪੀ ਕੀਤੀ ਜਾਏਗੀ।"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ਡਾਇਰੈਕਟਰੀ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ਸੈਟਿੰਗਾਂ"</string>
+ <string name="menu_help" msgid="1680178646764069976">"ਸਹਾਇਤਾ ਅਤੇ ਪ੍ਰਤੀਕਰਮ"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ਫ਼ੋਨ ਨੰਬਰ"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"ਸੰਪਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"ਬੰਦ ਕਰੋ"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"ਸਾਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ਆਯਾਤ ਕਰੋ"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"ਨਵਾਂ ਬਣਾਓ…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"ਕੀ ਲੇਬਲ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ਮਿਟਾਉਣਾ ਹੈ? (\'ਸੰਪਰਕ ਆਪਣੇ ਆਪ ਨਹੀਂ ਮਿਟਾਏ ਜਾਣਗੇ।)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"ਹੋਰ ਨਾਲ ਲਿੰਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸੰਪਰਕ ਨਾਮ ਟਾਈਪ ਕਰੋ।"</string>
+ <string name="copy_text" msgid="3257145021583508761">"ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕਰੋ"</string>
+ <string name="set_default" msgid="4417505153468300351">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਹਟਾਓ"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"ਟੈਕਸਟ ਕਾਪੀ ਕੀਤਾ"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ਕੀ ਤਬਦੀਲੀਆਂ ਖਾਰਜ ਕਰਨੀਆਂ ਹਨ?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ਛੱਡੋ"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ਰੱਦ ਕਰੋ"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ਕੀ ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧਾਂ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"ਸੰਪਰਕ ਖੋਜੋ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"ਸੰਪਰਕ ਹਟਾਓ"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"ਮੇਰੀ ਸਥਾਨਕ ਪ੍ਰੋਫਾਈਲ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"ਮੇਰੀ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ਪ੍ਰੋਫਾਈਲ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ਕਿਸੇ ਉਸ ਖਾਤੇ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਵਿੱਚ ਕੁਝ ਸਮਾਂ ਲਗਾਓ ਜੋ Google \'ਤੇ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦਾ ਬੈਕਅੱਪ ਲਵੇਗਾ।"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ਨਵੇਂ ਸੰਪਰਕ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ਨਵੇਂ ਸੰਪਰਕਾਂ ਲਈ ਇੱਕ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖਾਤਾ ਚੁਣੋ:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ਸਿਰਫ਼ ਦੇਖਣ ਲਈ"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ਸੰਪਾਦਿਤ ਕਰਨ ਲਈ ਸੰਪਰਕ ਚੁਣੋ"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ਅਣਲਿੰਕ ਕਰੋ"</string>
+ <string name="add_account" msgid="8201790677994503186">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"ਨਵਾਂ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ਡਾਟਾਬੇਸ ਫਾਈਲਾਂ ਨਿਰਯਾਤ ਕਰੋ"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ਹੋਰ ਦੇਖੋ"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ਘੱਟ ਦੇਖੋ"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ਹਾਲੀਆ"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"ਇਸਦੇ ਬਾਰੇ"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ਇੱਕ ਨਿੱਜੀ ਕਾਪੀ ਬਣਾ ਰਿਹਾ ਹੈ..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"ਕੱਲ੍ਹ ਨੂੰ"</string>
+ <string name="today" msgid="8041090779381781781">"ਅੱਜ"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ਅੱਜ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ਵਜੇ"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"ਕੱਲ੍ਹ ਨੂੰ <xliff:g id="TIME_INTERVAL">%s</xliff:g> ਵਜੇ"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(ਨਾਮ ਰਹਿਤ ਇਵੈਂਟ)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"ਸੈੱਟ ਕਰੋ"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"ਕੰਪਨੀ"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"ਉਪਨਾਮ"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"ਸੂਚਨਾ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ਵੈੱਬਸਾਈਟ"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ਵਰਤਾਰਾ"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"ਰਿਸ਼ਤਾ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"ਨਾਮ"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ਈਮੇਲ"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ਫੋਨ"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਲਈ ਨਿਰਦੇਸ਼"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"ਹਾਲੀਆ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>। <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>। <xliff:g id="DATE">%3$s</xliff:g>। ਜਵਾਬ ਦੇਣ ਲਈ ਕਲਿਕ ਕਰੋ"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ਇਨਕਮਿੰਗ"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"ਆਊਟਗੋਇੰਗ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ਖੁੰਝ ਗਈਆਂ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ਹਾਲੀਆ ਕਾਲ। <xliff:g id="CALL_TYPE">%1$s</xliff:g>। <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>। <xliff:g id="DATE">%3$s</xliff:g>। ਕਾਲ ਬੈਕ ਕਰਨ ਲਈ ਕਲਿਕ ਕਰੋ।"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"ਤੁਸੀਂ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ਹੋਰ ਖੇਤਰ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"ਸੰਪਰਕ ਫ਼ੋਟੋ ਬਦਲੋ"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ਸੰਪਰਕ ਫ਼ੋਟੋ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ਸੰਪਾਦਕ ਖੋਲ੍ਹਣਾ ਅਸਫਲ ਰਿਹਾ।"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"ਇਸ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ਤੋਂ ਪ੍ਰਾਪਤ ਸੰਪਰਕ ਜਾਣਕਾਰੀ ਸੰਪਾਦਿਤ ਕਰਨਯੋਗ ਨਹੀਂ ਹੈ"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ਰੱਦ ਕਰੋ"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ਇਹ ਸੰਪਰਕ"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ਸੰਭਵ ਡੁਪਲੀਕੇਟ"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ਇਹ ਸੰਪਰਕ ਇਕੋ ਵਿਅਕਤੀ ਦੇ ਹੋ ਸਕਦੇ ਹਨ। ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਇੱਕ ਇੱਕਲੇ ਸੰਪਰਕ ਵੱਜੋਂ ਲਿੰਕ ਕਰ ਸਕਦੇ ਹੋ।"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ਹਟਾਓ"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ਹਟਾਓ"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"ਸੁਝਾਅ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ਨਵਾਂ"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"ਆਵਾਗੌਣ ਦਰਾਜ਼ ਖੋਲ੍ਹੋ"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ਆਵਾਗੌਣ ਦਰਾਜ਼ ਬੰਦ ਕਰੋ"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ਲੇਬਲ"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ਲੇਬਲ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ਖਾਤੇ"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ਆਪਣਾ ਇਤਿਹਾਸ ਇਕੱਠੇ ਤੌਰ \'ਤੇ ਵੇਖੋ"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ਵਰਤਾਰੇ ਅਤੇ ਸੁਨੇਹੇ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ਵਰਤਾਰੇ"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"ਸੁਨੇਹੇ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"ਸੁਝਾਅ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"ਆਪਣੇ ਸੰਪਰਕਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਅਤੇ ਲਾਭਕਾਰੀ ਰੱਖੋ"</string>
+ <string name="undo" msgid="1425165101664071422">"ਅਣਕੀਤਾ ਕਰੋ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਨੂੰ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_home" msgid="1990519474420545392">"ਘਰ ਦੇ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ਮੋਬਾਈਲ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_work" msgid="5328785911463744028">"ਕਾਰਜ-ਸਥਾਨ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"ਦਫ਼ਤਰ ਦੇ ਫੈਕਸ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ਘਰ ਦੇ ਫੈਕਸ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_pager" msgid="9003902812293983281">"ਪੇਜ਼ਰ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_other" msgid="8563753966926932052">"ਕਾਲ ਕਰੋ"</string>
+ <string name="call_callback" msgid="1910165691349426858">"ਕਾਲਬੈਕ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_car" msgid="3280537320306436445">"ਕਾਰ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ਕੰਪਨੀ ਦੇ ਮੁੱਖ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_main" msgid="6082900571803441339">"ਮੁੱਖ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ਫੈਕਸ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ਰੇਡੀਓ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ਟੈਲੈਕਸ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"ਕਾਰਜ-ਸਥਾਨ ਮੋਬਾਈਲ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"ਕਾਰਜ-ਸਥਾਨ ਪੇਜ਼ਰ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਨੂੰ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ਕਾਲ ਕਰੋ)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ਘਰ ਦੇ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ਮੋਬਾਈਲ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ਕਾਰਜ-ਸਥਾਨ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ਕਾਰਜ-ਸਥਾਨ ਦੇ ਫੈਕਸ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ਘਰ ਦੇ ਫੈਕਸ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ਪੇਜ਼ਰ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_other" msgid="806127844607642331">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ਕਾਲਬੈਕ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ਕਾਰ ਫ਼ੋਨ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ਕੰਪਨੀ ਦੇ ਮੁੱਖ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ਮੁੱਖ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ਫੈਕਸ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ਰੇਡੀਓ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ਟੈਲੈਕਸ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ਕਾਰਜ-ਸਥਾਨ ਮੋਬਾਈਲ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ਕਾਰਜ-ਸਥਾਨ ਪੇਜ਼ਰ ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS ਨੰਬਰ \'ਤੇ ਸੁਨੇਹਾ ਭੇਜੋ"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ਸੁਨੇਹਾ ਭੇਜੋ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ਵੀਡੀਓ ਕਾਲ ਕਰੋ"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"ਅਕਸਰ ਸੰਪਰਕ ਕੀਤੇ ਹਟਾਉਣੇ ਹਨ?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"ਤੁਸੀਂ ਸੰਪਰਕਾਂ ਅਤੇ ਫ਼ੋਨ ਐਪਾਂ ਵਿੱਚ ਅਕਸਰ ਸੰਪਰਕ ਕੀਤੀ ਸੂਚੀ ਸਾਫ਼ ਕਰੋਂਗੇ ਅਤੇ ਸਕ੍ਰੈਚ ਦੇ ਨਾਲ ਤੁਹਾਡੀਆਂ ਪਤਾ ਤਰਜੀਹਾਂ ਨੂੰ ਜਾਣਨ ਲਈ ਈਮੇਲ ਐਪਾਂ \'ਤੇ ਜ਼ੋਰ ਪਾਓਗੇ।"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"ਅਕਸਰ ਸੰਪਰਕ ਕੀਤੇ ਹਟਾਏ ਜਾ ਰਹੇ ਹਨ..."</string>
+ <string name="status_available" msgid="5586870015822828392">"ਉਪਲਬਧ"</string>
+ <string name="status_away" msgid="1838861100379804730">"ਦੂਰ"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ਰੁਝੇਵੇਂ ਵਿੱਚ"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ਹੋਰ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ਡਾਇਰੈਕਟਰੀ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ਕਾਰਜ-ਸਥਾਨ ਡਾਇਰੈਕਟਰੀ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> ਲਈ ਤਤਕਾਲ ਸੰਪਰਕ"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ਕੋਈ ਨਾਮ ਨਹੀਂ)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ਅਕਸਰ ਸੰਪਰਕ ਕੀਤੇ ਗਏ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ਫ਼ੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"ਕਾਰਜ-ਸਥਾਨ ਪ੍ਰੋਫਾਈਲ ਸੰਪਰਕ"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"ਅੱਪਡੇਟ ਵੇਖੋ"</string>
+ <string name="account_phone" msgid="7128032778471187553">"ਡੀਵਾਈਸ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"ਸਿਮ"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ਨਾਮ"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ਉਪਨਾਮ"</string>
+ <string name="name_given" msgid="4280790853455320619">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
+ <string name="name_family" msgid="7466985689626017037">"ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ"</string>
+ <string name="name_prefix" msgid="59756378548779822">"ਨਾਮ ਅਗੇਤਰ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ਨਾਮ ਦਾ ਵਿਚਕਾਰਲਾ ਭਾਗ"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"ਨਾਮ ਪਿਛੇਤਰ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ਫੋਨੈਟਿਕ ਨਾਮ"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ਫੋਨੈਟਿਕ ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ਫੋਨੈਟਿਕ ਨਾਮ ਦਾ ਵਿਚਾਰਕਲਾ ਭਾਗ"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ਫੋਨੈਟਿਕ ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ਫ਼ੋਨ ਨੰਬਰ"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ਈਮੇਲ ਕਰੋ"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ਪਤਾ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"ਸੰਗਠਨ"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ਰਿਸ਼ਤਾ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"ਵਿਸ਼ੇਸ਼ ਮਿਤੀ"</string>
+ <string name="sms" msgid="1756857139634224222">"ਲਿਖਤ ਸੁਨੇਹਾ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ਪਤਾ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"ਕੰਪਨੀ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ਸਿਰਲੇਖ"</string>
+ <string name="label_notes" msgid="8337354953278341042">"ਨੋਟ-ਕਥਨ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ਵੈੱਬਸਾਈਟ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ਲੇਬਲ"</string>
+ <string name="email_home" msgid="8573740658148184279">"ਘਰ ਈਮੇਲ ਕਰੋ"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ਮੋਬਾਈਲ \'ਤੇ ਈਮੇਲ ਕਰੋ"</string>
+ <string name="email_work" msgid="2807430017302722689">"ਕਾਰਜ-ਸਥਾਨ \'ਤੇ ਈਮੇਲ ਕਰੋ"</string>
+ <string name="email_other" msgid="3454004077967657109">"ਈਮੇਲ ਕਰੋ"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਨੂੰ ਈਮੇਲ ਕਰੋ"</string>
+ <string name="email" msgid="5668400997660065897">"ਈਮੇਲ ਕਰੋ"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ਗਲੀ"</string>
+ <string name="postal_city" msgid="6597491300084895548">"ਸ਼ਹਿਰ"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ਰਾਜ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ਜ਼ਿਪ ਕੋਡ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ਦੇਸ਼"</string>
+ <string name="map_home" msgid="1243547733423343982">"ਘਰ ਦਾ ਪਤਾ ਵੇਖੋ"</string>
+ <string name="map_work" msgid="1360474076921878088">"ਕਾਰਜ-ਸਥਾਨ ਦਾ ਪਤਾ ਵੇਖੋ"</string>
+ <string name="map_other" msgid="3817820803587012641">"ਪਤਾ ਵੇਖੋ"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਪਤਾ ਵੇਖੋ"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber ਵਰਤਦੇ ਹੋਏ ਚੈਟ ਕਰੋ"</string>
+ <string name="chat" msgid="9025361898797412245">"ਚੈਟ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ਮਿਟਾਓ"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"ਹੋਰ ਨਾਮ ਖੇਤਰ ਵਿਖਾਓ"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"ਨਾਮ ਖੇਤਰਾਂ ਨੂੰ ਸੁੰਗੇੜੋ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"ਹੋਰ ਧੁਨੀਆਤਮਿਕ ਨਾਮ ਖੇਤਰ ਵਿਖਾਓ"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ਫ਼ੋਨੈਟਿਕ ਨਾਮ ਖੇਤਰਾਂ ਨੂੰ ਸੁੰਗੇੜੋ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ਵਿਸਤਾਰ ਕਰੋ"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ਸੁੰਗੇੜੋ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ਵਿਸਤਾਰ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ਸੁੰਗੇੜਿਆ ਗਿਆ"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ਸਿਤਾਰਾਯੁਕਤ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"ਸੰਪਰਕ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"ਹੋਰ ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"ਸਾਰੇ ਸੰਪਰਕ"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"ਸਮਕਾਲੀਕਰਨ ਸਮੂਹ ਹਟਾਓ"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"ਸਮਕਾਲੀਕਰਨ ਸਮੂਹ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"ਹੋਰ ਸਮੂਹ…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ਸਮਕਾਲੀਕਰਨ ਵਿੱਚੋਂ \"<xliff:g id="GROUP">%s</xliff:g>\" ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਸਮਕਾਲੀਕਰਨ ਤੋਂ ਕੋਈ ਵੀ ਅਣ-ਸਮੂਹਬੱਧ ਕੀਤੇ ਸੰਪਰਕ ਵੀ ਹਟ ਜਾਣਗੇ।"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ਡਿਸਪਲੇ ਵਿਕਲਪਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕੀਤਾ ਦ੍ਰਿਸ਼"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ਆਯਾਤ ਕੀਤੇ ਸੰਪਰਕਾਂ ਨੂੰ ਇਸ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM ਕਾਰਡ"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d ਸੰਪਰਕ</item>
+ <item quantity="other">%1$d ਸੰਪਰਕ</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> ਸੰਪਰਕ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> ਸੰਪਰਕ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ਫ਼ਾਈਲ"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ਆਯਾਤ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"ਕੀ vCard ਤੋਂ ਸੰਪਰਕ ਆਯਾਤ ਕਰਨੇ ਹਨ?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"ਕੀ <xliff:g id="FILENAME">%s</xliff:g> ਦਾ ਆਯਾਤ ਰੱਦ ਕਰਨਾ ਹੈ?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ਕੀ <xliff:g id="FILENAME">%s</xliff:g> ਦਾ ਨਿਰਯਾਤ ਰੱਦ ਕਰਨਾ ਹੈ?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ਆਯਾਤ/ਨਿਰਯਾਤ ਰੱਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"ਅਗਿਆਤ ਗੜਬੜ।"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: <xliff:g id="EXACT_REASON">%2$s</xliff:g>।"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ਨਿਰਯਾਤਕ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"।"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ਕੋਈ ਵੀ ਨਿਰਯਾਤ ਕਰਨ ਯੋਗ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"ਤੁਸੀਂ ਇੱਕ ਲੋੜੀਂਦੀ ਇਜਾਜ਼ਤ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਹੈ।"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ਨਿਰਯਾਤ ਕਰਨ ਦੌਰਾਨ ਇੱਕ ਗੜਬੜ ਹੋਈ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"।"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ਗੜਬੜ"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ਲੋੜੀਂਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ। ਸ਼ਾਇਦ ਫ਼ਾਈਲ ਬਹੁਤ ਹੀ ਵੱਡੀ ਹੋ ਸਕਦੀ ਹੈ।"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ਵੰਨਗੀ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ।"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਪੂਰਾ ਹੋਇਆ।"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ਸੰਪਰਕਾਂ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ।"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ਸੰਪਰਕਾਂ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ, ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਸੂਚਨਾ \'ਤੇ ਕਲਿੱਕ ਕਰੋ।"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਰੱਦ ਕੀਤਾ ਗਿਆ।"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"ਸੰਪਰਕ ਡੈਟਾ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"ਸੰਪਰਕ ਡੈਟੇ ਨੂੰ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ਡੈਟਾਬੇਸ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ਨਿਰਯਾਤ ਕਰਨ ਯੋਗ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard ਕੰਪੋਜ਼ਰ ਸਹੀ ਢੰਗ ਨਾਲ ਚਾਲੂ ਨਹੀਂ ਹੋਇਆ।"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ਨਿਰਯਾਤ ਨਹੀਂ ਹੋ ਸਕਿਆ"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ਸੰਪਰਕ ਡੈਟਾ ਨਿਰਯਾਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਸੀ।\nਕਾਰਨ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ਆਯਾਤ ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ਡੈਟਾ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਰੱਦ ਕੀਤਾ ਗਿਆ।"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਆਯਾਤ ਕੀਤਾ ਜਾਵੇਗਾ।"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ਫ਼ਾਈਲ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਆਯਾਤ ਕੀਤੀ ਜਾਵੇਗੀ।"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ਆਯਾਤ ਬੇਨਤੀ ਅਸਵੀਕਾਰ ਕੀਤੀ ਗਈ ਸੀ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ਸੰਪਰਕਾਂ ਨੂੰ ਜਲਦ ਹੀ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾਵੇਗਾ।"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ਨਿਰਯਾਤ ਬੇਨਤੀ ਅਸਵੀਕਾਰ ਕੀਤੀ ਗਈ ਸੀ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"ਸੰਪਰਕ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"ਸਥਾਨਕ ਅਸਥਾਈ ਸਟੋਰੇਜ ਲਈ vCard(s) ਨੂੰ ਕੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਅਸਲ ਆਯਾਤ ਜਲਦ ਹੀ ਚਾਲੂ ਹੋਵੇਗਾ।"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ਆਯਾਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ਸੰਪਰਕ NFC \'ਤੇ ਪ੍ਰਾਪਤ ਹੋਇਆ"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ਕੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ਆਯਾਤ ਹੋ ਰਿਹਾ ਹੈ: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ਫ਼ਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ਇਸ ਮੁਤਾਬਕ ਛਾਂਟੋ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ਧੁਨੀਆਤਮਿਕ ਨਾਮ"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ਹਮੇਸ਼ਾ ਵਿਖਾਓ"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ਲੁਕਾਓ ਜੇਕਰ ਖਾਲੀ ਹੈ"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"ਨਾਮ ਦੀ ਵੰਨਗੀ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ ਪਹਿਲਾਂ"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ ਪਹਿਲਾਂ"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ਖਾਤੇ"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"ਨਵੇਂ ਸੰਪਰਕਾਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖਾਤਾ"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ਮੇਰੀ ਜਾਣਕਾਰੀ"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"ਆਪਣਾ ਪ੍ਰੋਫਾਈਲ ਸਥਾਪਤ ਕਰੋ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"ਸੰਪਰਕਾਂ ਬਾਰੇ"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ਮਨਪਸੰਦ ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"ਸਾਰੇ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"ਸੰਪਰਕ ਸਾਂਝੇ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ।"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"ਸੰਪਰਕ ਨਿਰਯਾਤ ਕਰੋ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"ਇਸ ਤੋਂ ਸੰਪਰਕ ਆਯਾਤ ਕਰੋ"</string>
+ <string name="share_error" msgid="948429331673358107">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ਸਾਂਝਾ ਕਰਨ ਲਈ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਲਈ ਸੰਪਰਕ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਲਈ ਸੰਪਰਕ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ਦ੍ਰਿਸ਼ ਨੂੰ ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"ਰੱਖਿਅਤ ਕਰੋ"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"ਸੰਪਰਕ ਖੋਜੋ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ਮਨਪਸੰਦ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ਆਯਾਤ ਕਰੋ"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ਨਿਰਯਾਤ ਕਰੋ"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"ਬਲੌਕ ਕੀਤੇ ਨੰਬਰ"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ਦੇ ਰਾਹੀਂ"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ਦੇ ਰਾਹੀਂ <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ਖੋਜ ਕਰਨਾ ਬੰਦ ਕਰੋ"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ਖੋਜ ਹਟਾਓ"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ਖਾਤਾ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ਕਾਲਾਂ ਲਈ ਹਮੇਸ਼ਾ ਇਹ ਵਰਤੋ"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ਕਿਸੇ ਨੋਟ-ਕਥਨ ਦੇ ਨਾਲ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ਕਾਲ ਦੇ ਨਾਲ ਭੇਜਣ ਲਈ ਕੋਈ ਨੋਟ-ਕਥਨ ਟਾਈਪ ਕਰੋ..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ਭੇਜੋ ਅਤੇ ਕਾਲ ਕਰੋ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"ਬਿਲਡ ਰੂਪ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ਖੁੱਲ੍ਹਾ ਸਰੋਤ ਲਾਇਸੰਸ"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ਓਪਨ ਸੋਰਸ ਸਾਫਟਵੇਅਰ ਲਈ ਲਾਇਸੰਸ ਵੇਰਵੇ"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"ਪਰਦੇਦਾਰੀ ਨੀਤੀ"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"ਸੇਵਾ ਦੀਆਂ ਮਦਾਂ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ਖੁੱਲ੍ਹਾ ਸਰੋਤ ਲਾਇਸੰਸ"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url ਖੋਲ੍ਹਣਾ ਅਸਫਲ ਰਿਹਾ।"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ਨੂੰ ਨਿਸ਼ਾਨਬੱਧ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ਨੂੰ ਨਿਸ਼ਾਨਬੱਧ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ਵੀਡੀਓ ਕਾਲ ਕਰੋ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ਮਿਟਾਓ"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ਪਦ-ਲੋਪ ਚਿੰਨ੍ਹ"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%2$s</xliff:g> ਸਕਿੰਟ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ਘੰਟੇ <xliff:g id="MINUTES_1">%2$s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%3$s</xliff:g> ਸਕਿੰਟ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ਇਹ ਸ਼ਾਰਟਕੱਟ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ਸੰਪਰਕ ਹਟਾਇਆ ਗਿਆ ਸੀ"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ਆਯਾਤ ਕਰੋ"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"ਸੰਪਰਕ ਚੁਣੋ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ਤੁਹਾਡੇ SIM ਕਾਰਡ \'ਤੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"ਸੰਪਰਕ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੀ ਸੂਚੀ ਵਿੱਚ ਮੌਜੂਦ ਹੈ"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> SIM ਸੰਪਰਕ ਆਯਾਤ ਕੀਤੇ ਗਏ</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM ਸੰਪਰਕ ਆਯਾਤ ਕੀਤੇ ਗਏ</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM ਸੰਪਰਕਾਂ ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM ਤੋਂ ਆਯਾਤ ਕਰੋ"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ਰੱਦ ਕਰੋ"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ਸਵੈ-ਸਮਕਾਲੀਕਰਨ ਬੰਦ ਹੈ। ਚਾਲੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ਖਾਰਜ ਕਰੋ"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ਖਾਤਾ ਸਮਕਾਲੀਕਰਨ ਬੰਦ ਹੈ। ਚਾਲੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"ਕੀ ਸਵੈ-ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"ਨਾ ਸਿਰਫ਼ Google ਸੰਪਰਕਾਂ ਲਈ, ਬਲਕਿ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਖਾਤਿਆਂ ਲਈ ਕੀਤੀਆਂ ਗਈਆਂ ਤੁਹਾਡੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਵੈੱਬ ਅਤੇ ਤੁਹਾਡੀਆਂ ਡੀਵਾਈਸਾਂ ਵਿਚਕਾਰ ਅੱਪ ਟੂ ਡੇਟ ਰੱਖਿਆ ਜਾਵੇਗਾ।"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ਚਾਲੂ ਕਰੋ"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ਕੋਈ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"ਹੋਰ ਦਿਖਾਓ"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"ਸਿਮ ਕਾਰਡ ਆਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"ਆਯਾਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM ਕਾਰਡ ਤੋਂ ਸੰਪਰਕ ਆਯਾਤ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕੇ"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ਸਿਮ ਆਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"ਸੂਚਨਾਵਾਂ"</string>
+</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 6146a8eee..c97992a3f 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakty"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Wyświetl kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Edytuj kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Telefon do osoby"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"SMS do osoby"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Wybierz skrót kontaktu"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Wybierz numer"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Wybierz numer"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Wybierz kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodaj do kontaktu"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Wybierz kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Wybierz"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Utwórz nowy kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Oznaczony gwiazdką"</string>
- <string name="frequentList" msgid="7154768136473953056">"Częste"</string>
- <string name="strequentList" msgid="5640192862059373511">"Ulubione"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Informacje kontaktowe"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Edytuj kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Utwórz kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Edytuj grupę"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Utwórz grupę"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Informacje"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizacje"</string>
<string name="searchHint" msgid="8482945356247760701">"Przeszukuj kontakty"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Wyświetl kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj do ulubionych"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Usuń z ulubionych"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Usunięto z ulubionych"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Edytuj"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Usuń"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Zmień zdjęcie"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umieść na ekranie głównym"</string>
- <string name="menu_call" msgid="3992595586042260618">"Zadzwoń do kontaktu"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Wyślij tekst do kontaktu"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Utwórz skrót"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Rozłącz"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Edytuj"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Usuń"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodaj kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodaj grupę"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Usuń kontakty"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Zmień nazwę etykiety"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Usuń etykietę"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Wybierz kontakty"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodaj kontakty"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Usuń z etykiety"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Utwórz etykietę"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Rozłączyć ten kontakt na wiele kontaktów?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Rozłącz"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Czy chcesz zapisać dotychczasowe zmiany i rozłączyć ten kontakt na wiele kontaktów?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Zapisz i rozłącz"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Czy chcesz zapisać dotychczasowe zmiany i połączyć z wybranym kontaktem?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Zapisz i połącz"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Łączę"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Rozłączam"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Połącz"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Wyświetl połączone kontakty"</string>
<string name="menu_save" msgid="1727844363591825909">"Zapisz"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Połącz kontakty"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Wybierz kontakt, który chcesz połączyć z: <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Pokaż wszystkie kontakty"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Sugerowane kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Wszystkie kontakty"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> – połączono"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty zostały połączone"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> usunięty"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g> i <xliff:g id="NAME_1">%2$s</xliff:g> usunięte"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… usunięte"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="few">Kontakty zostały usunięte</item>
<item quantity="many">Kontakty zostały usunięte</item>
<item quantity="other">Kontakty zostały usunięte</item>
<item quantity="one">Kontakt został usunięty</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktów</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktów · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Od Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Od: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ustaw dzwonek"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Łącz na pocztę głosową"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontaktów z kont tylko do odczytu nie można usunąć, ale można je ukryć."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ukryj"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt wybrany do usunięcia zawiera informacje pochodzące z wielu kont. Informacje z kont tylko do odczytu nie zostaną skasowane, ale ukryte."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Do połączenia potrzebne są co najmniej dwa kontakty."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Połączyć wybrane kontakty?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Połącz"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Kieruj do poczty głosowej"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nie kieruj do poczty głosowej"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ten kontakt jest tylko do odczytu. Nie możesz go usunąć, ale możesz go ukryć."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ukryj kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Dane o tym kontakcie pochodzące z kont tylko do odczytu zostaną ukryte, a nie usunięte."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Usunąć ten kontakt?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Usunąć wybrane kontakty?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontaktów z kont tylko do odczytu nie można usunąć, ale można je ukryć."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Usunięcie tego kontaktu spowoduje usunięcie informacji z wielu kont."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Usunąć ten kontakt?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Usuń"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Odrzuć zmiany"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt nie istnieje."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt został dodany do ekranu głównego."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> został dodany do ekranu głównego."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Utwórz nowy kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Utwórz nowy kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacja"</item>
- <item msgid="7196592230748086755">"Notatka"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Brak zdjęć dostępnych w tablecie."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"W telefonie brak dostępnych zdjęć."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Brak zdjęć na urządzeniu."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Zdjęcie kontaktu"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nazwa etykiety niestandardowej"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Przekieruj połączenia bezpośrednio na pocztę głosową"</string>
<string name="removePhoto" msgid="4898105274130284565">"Usuń zdjęcie"</string>
- <string name="noContacts" msgid="4955659076981974652">"Brak kontaktów"</string>
- <string name="noGroups" msgid="8614664663561385253">"Brak grup."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Do tworzenia grup niezbędne jest konto."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Brak osób w grupie"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Aby dodać członków, zmodyfikuj grupę."</string>
- <string name="savingContact" msgid="4075751076741924939">"Trwa zapisywanie kontaktu..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Twoja lista kontaktów jest pusta"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Brak kontaktów z tą etykietą"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Na tym koncie nie ma żadnych kontaktów"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Twoja lista kontaktów jest pusta"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontakt <xliff:g id="DISPLAY_NAME">%s</xliff:g> został zapisany"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt został zapisany"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakty zostały rozłączone"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nie można zapisać zmian kontaktu."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nie udało się odłączyć kontaktu."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Nie udało się połączyć kontaktu."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Błąd podczas zapisywania kontaktu."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nie udało się zapisać zmian wprowadzonych w zdjęciu kontaktu."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupa została zapisana."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nie można zapisać zmian grupy."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty z numerami telefonu</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktów z numerami telefonu</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktu z numerami telefonu</item>
- <item quantity="one">1 kontakt z numerem telefonu</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Brak kontaktów z numerami telefonów"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> znalezione</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> znalezionych</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> znalezionego</item>
- <item quantity="one">1 znaleziony</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nie udało się zapisać zmian kontaktu"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nie udało się odłączyć kontaktu"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Nie udało się połączyć kontaktu"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Podczas zapisywania kontaktu wystąpił błąd"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nie udało się zapisać zmian zdjęcia kontaktu"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nie udało się załadować etykiety"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etykieta usunięta"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etykieta została utworzona"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nie można utworzyć etykiety"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etykieta została zaktualizowana"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Usunięty z etykiety"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano do etykiety"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nie udało się zapisać zmian etykiety"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta etykieta już istnieje"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Niektóre kontakty nie mają adresów e-mail."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Niektóre kontakty nie mają numerów telefonów."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Wyślij e-maila"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Wyślij wiadomość"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Wybierz kontakty"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Wyślij"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Brak kontaktów"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> znalezione</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> znalezionych</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> znalezionego</item>
- <item quantity="one">1 znaleziony</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Wszystkie"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Ulubione"</string>
- <string name="callBack" msgid="5498224409038809224">"Oddzwoń"</string>
- <string name="callAgain" msgid="3197312117049874778">"Zadzwoń ponownie"</string>
- <string name="returnCall" msgid="8171961914203617813">"Połączenie zwrotne"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Czy dodać adres „<xliff:g id="EMAIL">%s</xliff:g>” do kontaktów?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"zdjęcie kontaktu"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"Kontakt <xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imiona i nazwiska oraz nazwy w Twoich kontaktach"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nie znaleziono aplikacji do obsługi tego działania."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknij, by wrócić do poprzedniego ekranu"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodaj numer telefonu"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Dodaj adres e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Nie znaleziono aplikacji do obsługi tego działania."</string>
<string name="menu_share" msgid="943789700636542260">"Udostępnij"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Dodaj do kontaktów"</string>
- <string name="share_via" msgid="563121028023030093">"Udostępnij kontakt przez:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Utwórz grupę na koncie"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Dodaj"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="few">Udostępnij kontakty przez:</item>
+ <item quantity="many">Udostępnij kontakty przez:</item>
+ <item quantity="other">Udostępnij kontakty przez:</item>
+ <item quantity="one">Udostępnij kontakt przez:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Wybierz konto"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Utwórz etykietę"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Zmiana nazwy etykiety"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nazwa etykiety"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nazwa etykiety"</string>
<string name="audio_chat" msgid="2535716629358298691">"Czat głosowy"</string>
<string name="video_chat" msgid="1872255818640336072">"Czat wideo"</string>
- <string name="connections" msgid="8098440723172028350">"Połączenia"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Dodaj połączenie"</string>
- <string name="recent" msgid="2659189233141493004">"Najnowsze"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Ostatnie aktualizacje"</string>
<string name="account_type_format" msgid="718948015590343010">"Kontakt <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Konto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nie można edytować w tej aplikacji."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nie można edytować na tym urządzeniu."</string>
<string name="take_photo" msgid="7496128293167402354">"Zrób zdjęcie"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Zrób nowe zdjęcie"</string>
<string name="pick_photo" msgid="2129509985223564942">"Wybierz zdjęcie"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Wybierz nowe zdjęcie"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Lista kontaktów jest aktualizowana."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Wyszukiwanie…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Pokaż wybrane"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Pokaż wszystkie"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Wybierz wszystko"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Anuluj wybór wszystkich"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj nowy"</string>
- <string name="add_organization" msgid="7311893231158291197">"Dodaj organizację"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nazwa grupy"</string>
- <string name="change_photo" msgid="8530597935483526383">"Zmień"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Główne zdjęcie"</string>
- <string name="description_star" msgid="2605854427360036550">"ulubione"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Edytuj kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Połączyć bieżący kontakt z wybranym?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj etykietę"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Anuluj"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Wstecz"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zamknij"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Czy chcesz edytować wybrany kontakt? Wprowadzone dotąd informacje zostaną skopiowane."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiuj do moich kontaktów"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj do moich kontaktów"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Niestandardowy"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Ustawienia"</string>
<string name="menu_settings" msgid="377929915873428211">"Ustawienia"</string>
<string name="menu_help" msgid="1680178646764069976">"Pomoc i opinie"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opcje wyświetlania"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Numer telefonu"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj do kontaktów"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodaj do kontaktu"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zamknij"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Dodaj rok"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Wczytuję…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Utwórz nowy kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importuj kontakty"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Utwórz nową grupę"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Utwórz nową grupę"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupy</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupy</item>
- <item quantity="one">1 grupa</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Usunąć grupę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Same kontakty nie zostaną usunięte)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osoby z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> osób z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> osoby z: <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> osoba z: <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osoby</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> osób</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> osoby</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> osoba</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importuj"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Utwórz nową…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Usunąć etykietę „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? Kontakty nie zostaną usunięte."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Zanim połączysz ten kontakt z innym, wpisz imię i nazwisko."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiuj do schowka"</string>
<string name="set_default" msgid="4417505153468300351">"Ustaw jako wartość domyślną"</string>
<string name="clear_default" msgid="7193185801596678067">"Wyczyść wartość domyślną"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Tekst skopiowany"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Odrzucić zmiany i zakończyć edycję?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Odrzucić zmiany?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odrzuć"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Edytuj dalej"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Skonfiguruj profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Wpisz imię osoby"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nazwa grupy"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anuluj"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Odrzucić zmiany?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Szukaj kontaktów"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Usuń kontakty"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Mój profil lokalny"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Mój profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Wyświetlanie wszystkich kontaktów"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Zapewnij bezpieczeństwo swoich kontaktów nawet w przypadku utraty telefonu: włącz synchronizację z usługą online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodaj konto"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Kopia zapasowa nowego kontaktu nie zostanie utworzona. Dodać konto, na którym kopie zapasowe kontaktów będą tworzone online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Poświęć chwilę, aby dodać konto, dzięki któremu kopie zapasowe kontaktów zostaną zapisane w Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nowe kontakty zostaną zapisane na koncie <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Wybierz domyślne konto dla nowych kontaktów:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj nowy kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Utwórz nowy kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Edytuj kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Przechowuj lokalnie"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Tylko wyświetlanie"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Wybierz kontakt, który chcesz edytować"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Połączone kontakty"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Dodaj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Rozłącz"</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj nowe konto"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Eksportuj pliki bazy danych"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodaj nowy kontakt"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Utwórz nowy kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pokaż więcej"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaż mniej"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Pokaż wszystkie"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Ostatnie"</string>
<string name="about_card_title" msgid="2920942314212825637">"Informacje"</string>
- <string name="send_message" msgid="8938418965550543196">"Wyślij wiadomość"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Kopiuję do osobistych..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Wczoraj"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Tworzenie kopii osobistej…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Jutro"</string>
<string name="today" msgid="8041090779381781781">"Dzisiaj"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Dzisiaj: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Jutro: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Wydarzenie bez nazwy)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Ustaw"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Komunikator"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Strona internetowa"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Wydarzenie"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relacja"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Imię i nazwisko"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Zdjęcie"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknij, by rozwinąć edytor kontaktów."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknij, by zwinąć edytor kontaktów."</string>
<string name="content_description_directions" msgid="2686791825798189335">"trasa do lokalizacji"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"ostatni SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknij, by odpowiedzieć"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"ostatni SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknij, by odpowiedzieć"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"przychodzące"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"wychodzące"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"nieodebrane"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ostatnie połączenie. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknij, by oddzwonić"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ostatnie połączenie. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknij, by oddzwonić"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ty: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"W przypadku Hangouts lepiej wpisać identyfikator danej osoby w polu adresu e-mail lub telefonu."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Więcej pól"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Zmień zdjęcie"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nie udało się otworzyć edytora."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Zapisz na koncie"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Obecnie zapisujesz na koncie <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Kliknij dwukrotnie, by wybrać inne."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="few">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Kontakt połączony</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Połączone kontakty: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Więcej pól"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Zmień zdjęcie kontaktu"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodaj zdjęcie kontaktu"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Zdjęcie kontaktu"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Nie udało się otworzyć edytora."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Zapisz na koncie"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktów z konta <xliff:g id="ACCOUNT">%s</xliff:g> nie można edytować"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POŁĄCZ KONTAKTY"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULUJ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> możliwe duplikaty</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> możliwych duplikatów</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> możliwego duplikatu</item>
- <item quantity="one">1 możliwy duplikat</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> połączone kontakty</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> połączonych kontaktów</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> połączonego kontaktu</item>
- <item quantity="one">1 połączony kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ten kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Możliwe duplikaty"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Te kontakty mogą dotyczyć tej samej osoby. Możesz je połączyć w jeden kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Połączone kontakty"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Z Twoich kont"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Zrób zdjęcie"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Wszystkie zdjęcia"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Wybierz zdjęcie"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Z konta <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Usuń <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Usuń <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Usuń <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Zdjęcie z konta <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> – niezaznaczone"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Zdjęcie z konta <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> – zaznaczone"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nie wybrano zdjęcia z nieznanego konta"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Wybrano zdjęcie z nieznanego konta"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Lista kontaktów jest aktualizowana, aby odzwierciedlić zmianę języka.\n\nCzekaj..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugestie"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nowe"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otwórz panel nawigacji"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zamknij panel nawigacji"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etykieta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etykiety"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Konta"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Zobacz Waszą historię"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Wydarzenia i wiadomości"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Wydarzenia"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Wiadomości"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugestie"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Dbaj o uporządkowanie i użyteczność kontaktów"</string>
+ <string name="undo" msgid="1425165101664071422">"Cofnij"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Zadzwoń do: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Połącz – domowy"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Połącz – komórka"</string>
+ <string name="call_work" msgid="5328785911463744028">"Połącz – służbowy"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Połącz – faks służbowy"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Połącz – faks domowy"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Połącz – pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Zadzwoń"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Zadzwoń – połączenie zwrotne"</string>
+ <string name="call_car" msgid="3280537320306436445">"Połącz – samochód"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Połącz – firmowy główny"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Zadzwoń – ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Zadzwoń pod nr główny"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Zadzwoń – faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Połącz – radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Połącz – teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Zadzwoń – TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Połącz – służbowa komórka"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Połącz – pager służbowy"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Zadzwoń do: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Połącz – MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (zadzwoń)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Wyślij SMS-a do: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Tekst – domowy"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS – komórka"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Tekst – służbowy"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Tekst – faks służbowy"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Tekst – faks domowy"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Tekst – pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS – numer zwrotny"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Tekst – samochód"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Tekst – firmowy główny"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS – ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS – nr główny"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS – faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Tekst – radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS – teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS – TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS – służbowa komórka"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS – pager służbowy"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS – <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Tekst – wiadomość MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (wyślij wiadomość)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Rozpocznij rozmowę wideo"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Wyczyścić częste kontakty?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Wyczyścisz listę częstych kontaktów w aplikacjach Kontakty i Telefon. Aplikacje pocztowe będą musiały od nowa poznać Twoje preferencje adresowe."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Czyszczę częste kontakty…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Dostępny"</string>
+ <string name="status_away" msgid="1838861100379804730">"Nieobecny"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zajęty"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Inne"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Katalog służbowy"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Wszystkie kontakty"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Szybki kontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Bez nazwy)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Częste kontakty"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Wszystkie kontakty z numerami telefonów"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty w profilu do pracy"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Pokaż aktualizacje"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Urządzenie"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nazwa"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonim"</string>
+ <string name="name_given" msgid="4280790853455320619">"Imię"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nazwisko"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Przedrostek nazwiska"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Drugie imię"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Przyrostek nazwiska"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nazwa (fonetycznie)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Imię (fonetycznie)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Drugie imię (fonetycznie)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nazwisko (fonetycznie)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adres"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Komunikatory"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacja"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relacja"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Szczególna data"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adres"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Firma"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Stanowisko"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notatki"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Niestandardowe"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"Adres SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Adres witryny"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etykiety"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail – domowy"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mail – komórka"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail – służbowy"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Wyślij e-maila do: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Miasto"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Województwo"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Kod pocztowy"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Kraj"</string>
+ <string name="map_home" msgid="1243547733423343982">"Wyświetl adres domowy"</string>
+ <string name="map_work" msgid="1360474076921878088">"Wyświetl adres służbowy"</string>
+ <string name="map_other" msgid="3817820803587012641">"Wyświetl adres"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Wyświetl adres: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Czat w AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Czat w Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Czat w Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Czat w Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Czat w QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Czat w Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Czat w ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Czat w Jabberze"</string>
+ <string name="chat" msgid="9025361898797412245">"Czat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"usuń"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Pokaż więcej pól nazw"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Zwiń pola imion i nazwisk"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Pokaż więcej pól nazw zapisanych fonetycznie"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Zwiń pola imion i nazw zapisanych fonetycznie"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Rozwiń"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Zwiń"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozwinięto"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Zwinięto"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Wszystkie kontakty"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Oznaczone gwiazdką"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Dostosuj"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Wszystkie inne kontakty"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Wszystkie kontakty"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Usuń grupę synchronizacji"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj grupę synchronizacji"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Więcej grup..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Usunięcie grupy „<xliff:g id="GROUP">%s</xliff:g>” z ustawień synchronizacji spowoduje również usunięcie wszelkich rozgrupowanych kontaktów z tych ustawień."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Trwa zapisywanie opcji wyświetlania..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Widok niestandardowy"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Zapisz zaimportowane kontakty na koncie:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Karta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="few">%1$d kontakty</item>
+ <item quantity="many">%1$d kontaktów</item>
+ <item quantity="other">%1$d kontaktu</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakty • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> kontaktów • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktu • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Plik .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nic do zaimportowania"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Zaimportować kontakty z pliku vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Anulować import: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulować eksport: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nie można anulować importu/eksportu vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Nieznany błąd."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nie można otworzyć pliku „<xliff:g id="FILE_NAME">%1$s</xliff:g>”: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nie można uruchomić programu eksportującego: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Brak kontaktów, które można wyeksportować."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Wymagane uprawnienia zostały wyłączone"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Wystąpił błąd podczas eksportowania: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Błąd wejścia/wyjścia"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Za mało pamięci. Plik może być zbyt duży."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nie jest obsługiwany."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Zakończono eksportowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportowanie kontaktów zostało zakończone."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakty zostały wyeksportowane. Aby je udostępnić, kliknij powiadomienie."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Kliknij, by udostępnić kontakty."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Anulowano eksportowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksportowanie danych kontaktowych"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Eksportuję dane kontaktów."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nie można pobrać informacji z bazy danych."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Brak kontaktów do wyeksportowania."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Obiekt tworzenia danych vCard nie został uruchomiony poprawnie."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport nieudany"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Dane kontaktów nie zostały wyeksportowane.\nPrzyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importowanie <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nie można odczytać danych vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Zakończono importowanie pliku vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Anulowano importowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Plik <xliff:g id="FILENAME">%s</xliff:g> zostanie za chwilę zaimportowany."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Plik zostanie za chwilę zaimportowany."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Żądanie importu danych vCard zostało odrzucone. Spróbuj ponownie później."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty zostaną wyeksportowane wkrótce."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Żądanie eksportu danych vCard zostało odrzucone. Spróbuj ponownie później."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Trwa buforowanie plików vCard w lokalnym obszarze tymczasowym. Właściwy import rozpocznie się za chwilę."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nie można zaimportować pliku vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Odebrane przez NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Buforowanie"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importowanie <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksportuj do pliku .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortuj według"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nazwa (fonetycznie)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Zawsze pokazuj"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ukryj, jeśli puste"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Imię"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nazwisko"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format imienia i nazwiska"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Najpierw imię"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Najpierw nazwisko"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Konta"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Domyślne konto dla nowych kontaktów"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"O mnie"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Wypełnij swój profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Informacje o Kontaktach"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Udostępnij ulubione kontakty"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Udostępnij wszystkie kontakty"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Nie udało się udostępnić kontaktów."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksportuj kontakty"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importuję kontakty z"</string>
+ <string name="share_error" msgid="948429331673358107">"Tego kontaktu nie można udostępniać."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Brak kontaktów do udostępnienia."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty do wyświetlenia"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty do wyświetlenia"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Dostosuj widok"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Zapisz"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Wyszukaj kontakty"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ulubione"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importuj"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksportuj"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Zablokowane numery"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"przez: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, przez: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zatrzymaj wyszukiwanie"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Wyczyść wyszukiwanie"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Zawsze używaj do połączeń"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Połącz i wyślij notatkę"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Wpisz notatkę, którą chcesz wysłać razem z połączeniem…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"WYŚLIJ I POŁĄCZ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Wersja kompilacji"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencje open source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Szczegóły licencji na oprogramowanie open source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Polityka prywatności"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Warunki korzystania z usługi"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licencje open source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Nie udało się otworzyć URL-a."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> zaznaczone"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> niezaznaczone"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Rozpocznij rozmowę wideo"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Usuń"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Wielokropek"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> godz. <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ten skrót został wyłączony"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt został usunięty"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importuj"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Wybierz kontakty"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Brak kontaktów na karcie SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt znajduje się już na Twojej liście"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="few">Zaimportowano <xliff:g id="COUNT">%d</xliff:g> kontakty z karty SIM</item>
+ <item quantity="many">Zaimportowano <xliff:g id="COUNT">%d</xliff:g> kontaktów z karty SIM</item>
+ <item quantity="other">Zaimportowano <xliff:g id="COUNT">%d</xliff:g> kontaktu z karty SIM</item>
+ <item quantity="one">Zaimportowano 1 kontakt z karty SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nie udało się zaimportować kontaktów z karty SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importuj z karty SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Anuluj"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatyczna synchronizacja jest wyłączona. Kliknij, by ją włączyć."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Odrzuć"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Synchronizacja konta jest wyłączona. Kliknij, by ją włączyć."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Włączyć autosynchronizację?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Zmiany, które wprowadzisz we wszystkich aplikacjach i na wszystkich kontach (nie tylko w Kontaktach Google), będą synchronizowane między wersją w internecie a Twoimi urządzeniami."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Włącz"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Brak połączenia"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Pokaż więcej"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Zaimportowano kontakty z karty SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Nie udało się zaimportować"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nie udało się zaimportować kontaktów z karty SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuję kontakty z karty SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Powiadomienia"</string>
</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 5ef6b0e9b..d0148d8d6 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contatos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contatos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contato"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contato"</string>
<string name="contactsList" msgid="8661624236494819731">"Contatos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contato"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contato"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Discagem direta"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Escolher contato p/ atalho"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Escolher número p/ atalho"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Escolha um número para enviar uma mensagem"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contato"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar a contato"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolha um contato"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contato"</string>
- <string name="starredList" msgid="4817256136413959463">"Com estrela"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequente"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes do contato"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contato"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Criar contato"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Criar grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Sobre"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualização"</string>
<string name="searchHint" msgid="8482945356247760701">"Pesquisar contatos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ver contato"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Excluir"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Alterar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar na tela inicial"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ligar para contato"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para o contato"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Criar atalho"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Excluir"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Adicionar contato"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adicionar grupo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remover contatos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Renomear marcador"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Excluir marcador"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Adicionar contato"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contatos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contatos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover do marcador"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar marcador"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Desvincular este contato em vários contatos?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de salvar as alterações já feitas e desvincular este contato em vários contatos?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salvar e desvincular"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Gostaria de salvar as alterações já efetuadas e vincular com o contato selecionado?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salvar e vincular"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Vinculando"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Desvinculando"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Vincular"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contatos vinculados"</string>
<string name="menu_save" msgid="1727844363591825909">"Salvar"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contatos"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecione o contato que você deseja vincular com <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contatos"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Nome vinculado: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatos vinculados"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> excluído"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g> excluídos"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... excluídos"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Contatos excluídos</item>
<item quantity="other">Contatos excluídos</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contato</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Do Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Não é possível excluir contatos de contas somente leitura, mas eles podem ser ocultados."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"O contato a ser excluído tem detalhes de várias contas. Os detalhes de contas somente leitura serão ocultados, não excluídos."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Selecione pelo menos dois contatos para realizar uma vinculação."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vincular contatos selecionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Vincular"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Rotear para correio de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Cancelar roteam. correio voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contato é somente leitura. Não é possível excluí-lo, mas você pode ocultá-lo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contato"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"As contas somente leitura neste contato não serão excluídas, ficarão ocultas."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Excluir este contato?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Excluir contatos selecionados?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Não é possível excluir contatos de contas somente leitura, mas eles podem ser ocultados."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A exclusão deste contato excluirá detalhes de várias contas."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Excluir este contato?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Excluir"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descartar alterações"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"O contato não existe."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contato adicionado à tela inicial."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Contato <xliff:g id="NAME">%s</xliff:g> adicionado à tela inicial."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contato"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contato"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organização"</item>
- <item msgid="7196592230748086755">"Observação"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nenhuma imagem disponível no tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nenhuma imagem disponível no telefone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Não há imagens disponíveis no dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto do contato"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Personalizar nome do marcador"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas diretamente para o correio de voz"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remover foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nenhum contato"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nenhum grupo."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Você precisa de uma conta para criar grupos."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nenhuma pessoa neste grupo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para adicionar pessoas, edite o grupo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Salvando contato…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Sua lista de contatos está vazia"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nenhum contato com este marcador"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nenhum contato nesta conta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Contato salvo: <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"O contato foi salvo"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatos desvinculados"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível salvar as alterações do contato."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desvincular contato."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível vincular o contato."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erro ao salvar contato."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível salvar as alterações da foto de contato."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo salvo."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Não foi possível salvar as alterações de grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nenhum contato com números de telefone"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível salvar as alterações do contato"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desvincular contato"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível vincular o contato"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Marcador criado"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar um marcador"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Marcador atualizado"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido do marcador"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado ao marcador"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível salvar as alterações do marcador"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Este marcador já existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Alguns contatos não têm e-mails."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Alguns contatos não têm números de telefone."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escolher contatos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nenhum contato"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
- <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
- <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nenhum app foi encontrado para executar esta ação."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para retornar à tela anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Nenhum app foi encontrado para executar esta ação."</string>
<string name="menu_share" msgid="943789700636542260">"Compartilhar"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Adicionar aos contatos"</string>
- <string name="share_via" msgid="563121028023030093">"Compartilhar contato via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Criar grupo na conta"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Adicionar"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Compartilhar contato via</item>
+ <item quantity="other">Compartilhar contatos via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Escolher conta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Criar marcador"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Renomear marcador"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nome do marcador"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome - marcador"</string>
<string name="audio_chat" msgid="2535716629358298691">"Bate-papo por voz"</string>
<string name="video_chat" msgid="1872255818640336072">"Bate-papo por vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Conexões"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Adicionar conexão"</string>
- <string name="recent" msgid="2659189233141493004">"Recentes"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
<string name="account_type_format" msgid="718948015590343010">"Contato de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Conta do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Não pode ser editado neste app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Não é possível editar neste dispositivo."</string>
<string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Tirar outra foto"</string>
<string name="pick_photo" msgid="2129509985223564942">"Escolher foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"A lista de contatos está sendo atualizada."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Pesquisando..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar selecionados"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Selecionar todos"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Adicionar organização"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nome do grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favorito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vincular o contato atual com o contato selecionado?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Voltar"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para a edição do contato selecionado? As informações inseridas até agora serão copiadas."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Meus contatos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar a Meus contatos"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Diretório <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Configurações"</string>
<string name="menu_settings" msgid="377929915873428211">"Configurações"</string>
<string name="menu_help" msgid="1680178646764069976">"Ajuda e feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de exibição"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Número de telefone"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contatos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar a contato"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Fechar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Incluir ano"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contato"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Carregando…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar um novo contato"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contatos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Criar um novo grupo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Criar novo grupo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Excluir o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Os contatos não serão apagados."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Criar novo..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Excluir o marcador \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Os contatos não serão excluídos."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Digite o nome de contato antes de vinculá-lo a outro."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiar para área de transferência"</string>
<string name="set_default" msgid="4417505153468300351">"Definir padrão"</string>
<string name="clear_default" msgid="7193185801596678067">"Limpar padrão"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Descartar as alterações e sair da edição?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Descartar alterações?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continuar edição"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar meu perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Digite o nome da pessoa"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nome do grupo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Descartar personalizações?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contatos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remover contatos"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Meu perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Meu perfil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Exibindo todos os contatos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha seus contatos seguros, mesmo se você perder seu telefone: sincronize com um serviço on-line."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Não será possível fazer backup de seu novo contato. Deseja adicionar uma conta que faça backup de contatos on-line?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adicione a conta na qual será feito o backup dos seus contatos no Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novos contatos serão salvos em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta padrão para novos contatos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Adic. novo contato"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Criar novo contato"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contato"</string>
- <string name="keep_local" msgid="1258761699192993322">"Manter localmente"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Somente visualização"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Escolher um contato para editar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contatos vinculados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Adicionar"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desvincular"</string>
<string name="add_account" msgid="8201790677994503186">"Adicionar conta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adicionar nova conta"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportar arquivos do banco de dados"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"adicionar novo contato"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Criar novo contato"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver mais"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver tudo"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
<string name="about_card_title" msgid="2920942314212825637">"Sobre"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Criando uma cópia pessoal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ontem"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Criando uma cópia pessoal..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
<string name="today" msgid="8041090779381781781">"Hoje"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento sem título)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Mensagem instantânea"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
<string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrada"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saída"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para retornar a chamada"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para retornar a chamada"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Você: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"O Hangouts funciona melhor quando você insere o identificador do Hangouts da pessoa no campo de e-mail ou de telefone."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Mais campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvar em"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatos vinculados"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contato"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contato"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto do contato"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Falha ao abrir o editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvar em"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"As informações do contato em <xliff:g id="ACCOUNT">%s</xliff:g> não são editáveis"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTATOS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contato"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis cópias"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Talvez esses contatos sejam a mesma pessoa. É possível vinculá-los como um único contato."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contatos vinculados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tirar uma foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas as fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Excluir <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>não marcada"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>marcada"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida não verificada"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida verificada"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contatos está sendo atualizada para refletir a alteração do idioma.\n\nAguarde..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Fechar gaveta de navegação"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Marcador <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Marcadores"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Contas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Veja seu histórico reunido"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos e mensagens"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensagens"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugestões"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantenha seus contatos organizados e úteis"</string>
+ <string name="undo" msgid="1425165101664071422">"Desfazer"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Ligar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Chamar residência"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Chamar celular"</string>
+ <string name="call_work" msgid="5328785911463744028">"Chamar o trabalho"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Chamar fax comercial"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Chamar fax residencial"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Chamar pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Chamar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Retornar chamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Chamar carro"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Chamar empresa (principal)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Chamar ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Chamar o principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Chamar fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Chamar rádio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Chamar telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Chamar TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Chamar celular comercial"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Chamar pager comercial"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Ligar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Chamar MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (chamada)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar mensagem de texto para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar SMS para resid."</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar SMS para celular"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar SMS para tel. comercial"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar SMS para fax com."</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar SMS para fax resid."</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar SMS para o pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar SMS para retorno de chamada"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar SMS para o carro"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar SMS para empresa (principal)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Mandar mensagem de texto para ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Enviar SMS para núm. principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar SMS para fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar SMS para o rádio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar SMS para telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar SMS para TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar SMS para cel. comercial"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar SMS para pager com."</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar SMS para <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar texto MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (mensagem)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Fazer videochamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Apagar contatos frequentes?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Você apagará a lista de contatos frequentes nos apps Contatos e Telefone, fazendo com que os apps de e-mail tenham que redefinir suas preferências de endereçamento."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Apagando contatos frequentes…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponível"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Outros"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Diretório"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos os contatos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contato rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"Sem nome"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Chamados frequentemente"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos os contatos com números de telefone"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatos do perfil de trabalho"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apelido"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nome"</string>
+ <string name="name_family" msgid="7466985689626017037">"Sobrenome"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefixo do nome"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Nome do meio"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufixo do nome"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nome fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nome fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Nome do meio fonético"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Sobrenome fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Endereço"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Mensagem instantânea"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organização"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relacionamento"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensagem de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Endereço"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Observações"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Site"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Marcadores"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail (residencial)"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Enviar e-mail para celular"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail (comercial)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar e-mail para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"CEP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver endereço residencial"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver endereço comercial"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualizar endereço"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver endereço de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Bater papo usando o AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Bater papo usando o Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Bater papo usando o Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Bater papo usando o Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Bater papo usando o QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Bater papo usando o Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Bater papo usando o ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Bater papo usando o Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Bate-papo"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"excluir"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar mais campos de nome"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Recolher campos de nome"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar mais campos de nome fonético"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Recolher campos de nome fonético"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Recolher"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Recolhido"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contatos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Com estrela"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contato"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos os outros contatos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos os contatos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remover sincronização do grupo"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Adicionar grupo sincronizado"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"A remoção de \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização também removerá os contatos não agrupados da sincronização."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvando opções de exibição…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Visualização personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvar contatos importados em:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contato</item>
+ <item quantity="other">%1$d contatos</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contato • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contatos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Arquivo .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nada para importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importar contatos do vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancelar importação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Não foi poss. canc. imp./export. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não há contato exportáveis."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Você desativou uma permissão obrigatória."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Não há memória suficiente. O arquivo pode ser muito grande."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportação concluída de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A exportação dos contatos foi concluída."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contatos foi concluída. Clique na notificação para compartilhar contatos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toque para compartilhar contatos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exportação de <xliff:g id="FILENAME">%s</xliff:g> cancelada."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando dados do contato"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados dos contatos estão sendo exportados."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter as informações do banco de dados."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não há contatos exportáveis."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"O criador do vCard não iniciou corretamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Não foi possível exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados de contato não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler os dados do vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importação de vCard concluída <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importação de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O arquivo será importado em breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contatos serão exportados em breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Pedido de exportação vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contato"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Armazenando VCard(s) em cache no armazenamento temporário local. A importação real começará em breve."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contato via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Armazenando em cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar p/ arquivo .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Classificar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nome fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar se vazio"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Sobrenome"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato de nome"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Primeiro o nome"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Primeiro o sobrenome"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Contas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Conta padrão para novos contatos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Minhas informações"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurar seu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Sobre Contatos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contatos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contatos de"</string>
+ <string name="share_error" msgid="948429331673358107">"Este contato não pode ser compartilhado."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatos para exibição"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatos a exibir"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar visualização"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contatos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"por meio de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"parar de pesquisar"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Sempre usar esta opção para chamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Chamada com nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Digite uma nota para enviar com a chamada..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versão"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença do software de código aberto"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privacidade"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Termos de Serviço"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenças de código aberto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Falha ao abrir o URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> verificado"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> não verificado"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Realizar videochamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Excluir"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contato foi removido"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Selecionar contatos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Não há contatos no seu cartão SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"O contato já existe na sua lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contato importado do SIM</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos importados do SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Falha ao importar contatos do SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar do SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Dispensar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"A sincronização da conta está desativada. Toque para ativar."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Ativar a sincronização automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"As alterações que você fizer em todos os aplicativos e contas, não apenas nas Contas do Google, permanecerão atualizadas entre a Web e seus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ativar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sem conexão"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"A importação do cartão SIM foi concluída"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha na importação"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar os contatos do cartão SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando do cartão SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificações"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 09d4496d6..f60f24160 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contactos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contacto"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contacto"</string>
<string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contacto"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Marcação direta"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Selec. um atalho de contacto"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Selec. número a marcar"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Selec. n.º a enviar mensagem"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contacto"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar ao contacto"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolher um contacto"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contacto"</string>
- <string name="starredList" msgid="4817256136413959463">"Marcado com estrela"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequentes"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes de contacto"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contacto"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Criar contacto"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Criar grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualiz."</string>
<string name="searchHint" msgid="8482945356247760701">"Pesquisar contactos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Visualizar contacto"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Eliminar"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Alterar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar no ecrã principal"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ligar para contacto"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para contacto"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Criar atalho"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desassociar"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Eliminar"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Adicionar Contacto"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adicionar Grupo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remover contactos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Mudar o nome da etiqueta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Eliminar etiqueta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Adicionar contacto"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contactos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contactos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover da etiqueta"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar etiqueta"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Pretende desassociar este contacto em vários contactos?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desassociar"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de guardar as alterações já efetuadas e desassociar este contacto em vários contactos?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Guardar e desassociar"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Gostaria de guardar as alterações já efetuadas e associá-las ao contacto selecionado?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Guardar e associar"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"A associar..."</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"A desassociar..."</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Associar"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contactos associados"</string>
<string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associar contactos"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Escolha o contacto que pretende associar a <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contactos"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contactos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contactos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Contacto associado: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contacts linked"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Contacto <xliff:g id="NAME">%1$s</xliff:g> eliminado"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Contactos <xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g> eliminados"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… foram eliminados"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Contacto eliminado</item>
<item quantity="other">Contactos eliminados</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Da Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Não é possível eliminar os contactos das suas contas só de leitura, mas é possível ocultá-los."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"O contacto a ser eliminado tem detalhes de várias contas. Os detalhes das contas só de leitura ficam ocultos, mas não são eliminados."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Necessita de, pelo menos, dois contactos selecionados para efetuar uma ligação."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Pretende associar os contactos selecionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Associar"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Encaminhar para correio de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Anular encam. correio de voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contacto é só de leitura. Não pode ser eliminado, mas pode ocultá-lo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contacto"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"As contas só de leitura neste contacto serão ocultadas e não eliminadas."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Pretende eliminar este contacto?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Pretende eliminar os contactos selecionados?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Não é possível eliminar os contactos das suas contas só de leitura, mas é possível ocultá-los."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A eliminação deste contacto elimina detalhes de várias contas."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Pretende eliminar este contacto?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Rejeitar alterações"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"O contacto não existe."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contacto adicionado ao ecrã principal."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> adicionado ao ecrã principal."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contacto"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contacto"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organização"</item>
- <item msgid="7196592230748086755">"Nota"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Não existem imagens disponíveis no tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Não existem imagens disponíveis no telefone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Não existem imagens disponíveis no dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografia do contacto"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome da etiqueta personalizada"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar as chamadas diretamente para o correio de voz"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remover fotografia"</string>
- <string name="noContacts" msgid="4955659076981974652">"Sem contactos"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nenhum grupo."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Para criar grupos precisa de uma conta"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Sem pessoas neste grupo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para adicionar algumas, edite o grupo."</string>
- <string name="savingContact" msgid="4075751076741924939">"A guardar contacto..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"A sua lista de contactos está vazia"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Sem contactos com esta etiqueta"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Não existem contactos nesta conta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"A sua lista de contactos está vazia"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> guardado"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Contacto guardado"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contactos desassociados"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível guardar as alterações do contacto."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desassociar o contacto."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível ligar o contacto."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Ocorreu um erro ao guardar o contacto."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível guardar as alterações à foto do contacto."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo guardado."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Não foi possível guardar as alterações do grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">1 contacto com número de telefone</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Sem contactos com números de telefone"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">1 encontrado</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível guardar as alterações do contacto"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desassociar o contacto"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível associar o contacto"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ocorreu um erro ao guardar o contacto"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível guardar as alterações da foto do contacto"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar a etiqueta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiqueta criada"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar a etiqueta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiqueta atualizada"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido da etiqueta"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado(s) à etiqueta"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível guardar as alterações da etiqueta"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Essa etiqueta já existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Alguns contactos não têm endereços de email."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Alguns contactos não têm números de telefone."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Selecionar contactos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Sem contactos"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">1 encontrado</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Chamada de retorno"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
- <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografia do contacto"</string>
- <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos contactos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Não foram encontradas aplicações para executar esta ação"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para regressar ao ecrã anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar email"</string>
<string name="missing_app" msgid="1466111003546611387">"Não foram encontradas aplicações para executar esta ação."</string>
<string name="menu_share" msgid="943789700636542260">"Partilhar"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Adicionar aos contactos"</string>
- <string name="share_via" msgid="563121028023030093">"Partilhar contacto através de"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Criar grupo na conta"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Adicionar"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Partilhar contacto através de</item>
+ <item quantity="other">Partilhar contactos através de</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Selecionar conta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Criar etiqueta"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Mudar o nome da etiqueta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nome da etiqueta"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etiqueta"</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Ligações"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Adicionar ligação"</string>
- <string name="recent" msgid="2659189233141493004">"Recentes"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
<string name="account_type_format" msgid="718948015590343010">"Contacto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Conta <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Não editável a partir desta aplicação."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Não editável neste aparelho"</string>
<string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Tirar nova fotografia"</string>
<string name="pick_photo" msgid="2129509985223564942">"Escolher foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova fotografia"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"A lista de contactos está a ser atualizada."</string>
<string name="search_results_searching" msgid="3984833028938569930">"A pesquisar..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar seleccionados"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar tudo"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Selecionar tudo"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar tudo"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Adicionar entidade"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nome do grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Fot. principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favorito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Pretende ligar o contacto atual ao contacto selecionado?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Anterior"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para edição do contacto selecionado? A informação introduzida até agora vai ser copiada."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Os Meus Contactos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar aos Meus Contactos"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Directório <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Definições"</string>
<string name="menu_settings" msgid="377929915873428211">"Definições"</string>
<string name="menu_help" msgid="1680178646764069976">"Ajuda e comentários"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de visualização"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Número de telefone"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contactos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar ao contacto"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Fechar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Incluir ano"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"A carregar…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar novo contacto"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contactos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Criar novo grupo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Criar novo grupo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one">1 grupo</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Eliminar o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos não serão eliminados)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pessoa de <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> pessoa</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Criar nova…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Pretende eliminar a etiqueta \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Os contactos não serão eliminados.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Introduza o nome do contacto antes de ligar a outro contacto."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiar para área de transf."</string>
<string name="set_default" msgid="4417505153468300351">"Definir a predefinição"</string>
<string name="clear_default" msgid="7193185801596678067">"Limpar predefinição"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Pretende rejeitar as alterações e sair do editor?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Rejeitar alterações?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Rejeitar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continuar a editar"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar o meu perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Introduza o nome da pessoa"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nome do Grupo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Pretende rejeitar as personalizações?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contactos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remover contactos"</string>
<string name="local_profile_title" msgid="2021416826991393684">"O meu perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"O meu perfil do <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"A apresentar todos os contactos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha os seus contactos em segurança, mesmo em caso de perda do telemóvel: sincronize com um serviço on-line."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Não será efetuada cópia de segurança do novo contacto. Pretende adicionar uma conta que efetue a cópia de segurança dos contactos online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedique um minuto para adicionar uma conta que irá efetuar uma cópia de segurança dos seus contactos no Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Os novos contactos serão guardados em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta predefinida para os novos contactos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Criar novo contacto"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Criar novo contacto"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contacto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Manter localmente"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Apenas visualização"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Selecionar um contacto para editar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contactos associados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Adicionar"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desassociar"</string>
<string name="add_account" msgid="8201790677994503186">"Adicionar conta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adicionar nova conta"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportar ficheiros da base de dados"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"criar novo contacto"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Criar novo contacto"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver mais"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver tudo"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recentes"</string>
<string name="about_card_title" msgid="2920942314212825637">"Acerca de"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"A criar uma cópia pessoal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ontem"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"A criar uma cópia pessoal"</string>
<string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
<string name="today" msgid="8041090779381781781">"Hoje"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento sem nome)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
<string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telemóvel"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografia"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contactos."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para reduzir o editor de contactos."</string>
<string name="content_description_directions" msgid="2686791825798189335">"direções para a localização"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"recebida"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"efetuada"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"não atendida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para ligar de volta"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para ligar de volta"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"O utilizador: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"O Hangouts funciona melhor quando introduz o identificador do Hangouts da pessoa no campo do email ou no campo do telefone."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Mais campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"A guardar em"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"A guardar atualmente em <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toque duas vezes para escolher uma conta diferente."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Contacto ligado</item>
- <item quantity="other">Contactos ligados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos ligados"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contacto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contacto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto do contacto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Ocorreu uma falha ao abrir o editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"A guardar em"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A informação de contacto de <xliff:g id="ACCOUNT">%s</xliff:g> não é editável"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIAR CONTACTOS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one">1 possível duplicado</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis duplicados</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one">1 contacto ligado</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos ligados</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one"></item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis duplicados"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Estes contactos podem ser da mesma pessoa. Pode associá-los num único contacto."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contactos ligados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tirar uma foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas as fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> não marcada"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> marcada"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida desmarcada"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida marcada"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contactos está a ser atualizada para reflectir a alteração do idioma.\n\nAguarde..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Fechar gaveta de navegação"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiqueta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiquetas"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Contas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Ver também o histórico"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos e mensagens"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensagens"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugestões"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantenha os seus contactos organizados e úteis"</string>
+ <string name="undo" msgid="1425165101664071422">"Anular"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Telefonar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Ligar para residência"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Ligar para telemóvel"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ligar para emprego"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Ligar para fax do emprego"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Ligar para o fax da residência"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Ligar para pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Telefonar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Ligar para rechamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Ligar para automóvel"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Ligar para telefone principal da empresa"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Ligar para RDIS"</string>
+ <string name="call_main" msgid="6082900571803441339">"Ligar para telefone principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Ligar para número de fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Ligar para rádio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Ligar para telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Ligar para telefone TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ligar para telemóvel do emprego"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ligar para pager do emprego"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Telefonar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Ligar MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Chamada)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar SMS para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar SMS para residência"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar SMS para telemóvel"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar SMS para emprego"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar SMS para fax do emprego"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar SMS para fax da residência"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar SMS para pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar SMS para"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar SMS de resposta"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar SMS para automóvel"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar SMS para telefone principal da empresa"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS para RDIS"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Enviar SMS para telefone principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar SMS para número de fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar SMS para rádio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar SMS para telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar SMS para telefone TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar SMS para telemóvel do emprego"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar SMS para pager do emprego"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar SMS para <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Mensagem)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Fazer videochamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Limpar contactos frequentes?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Limpa a lista de contactos frequentes nas aplicações Contactos e Telefone e força as aplicações de email a aprenderem as suas preferências de endereço de raiz."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"A limpar contactos frequentes..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Available"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Outro"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Directório"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos os contactos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Sem nome)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frequentes"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos os contactos com números de telefone"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos do perfil de trabalho"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudónimo"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nome próprio"</string>
+ <string name="name_family" msgid="7466985689626017037">"Apelido"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Título académico ou profissional"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Primeiro apelido"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Título honorífico ou eclesiástico"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nome fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nome próprio fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonética do primeiro apelido"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Apelido fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Endereço"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"MI"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organização"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relacionamento"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensagem de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Endereço"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notas"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web site"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiquetas"</string>
+ <string name="email_home" msgid="8573740658148184279">"Enviar e-mail para residência"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Enviar e-mail para telemóvel"</string>
+ <string name="email_work" msgid="2807430017302722689">"Enviar e-mail para emprego"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar email para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Região"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver endereço da residência"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver endereço do emprego"</string>
+ <string name="map_other" msgid="3817820803587012641">"Ver endereço"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver endereço de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chat utilizando AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chat utilizando Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chat utilizando Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chat utilizando Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chat utilizando QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chat através do Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chat utilizando ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chat utilizando Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"eliminar"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar mais campos de nomes"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Reduzir os campos de nomes"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar mais campos de nomes fonéticos"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Reduzir os campos de nomes fonéticos"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Reduzir"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Reduzido"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contactos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Marcado com estrela"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contacto"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos os outros contactos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos os contactos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remover grupo de sincronização"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Adicionar grupo de sincronização"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ao remover \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização, removerá também quaisquer contactos não agrupados."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"A guardar opções de visualização..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar contactos importados em:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">1 contacto</item>
+ <item quantity="other">%1$d contactos</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> contacto • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contactos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Ficheiro .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nada para importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Pretende importar contactos do vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancelar a importação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar a exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Imposs. cancel. import./export. do vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não existe um contacto exportável."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Desativou uma autorização obrigatória."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro de E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memória insuficiente. O ficheiro pode ser demasiado grande."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"A exportação de <xliff:g id="FILENAME">%s</xliff:g> terminou."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Exportação de contactos concluída."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contactos foi concluída. Clique na notificação para partilhar contactos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toque para partilhar contactos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"A exportação de <xliff:g id="FILENAME">%s</xliff:g> foi cancelada."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportar dados do contacto"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados de contactos estão a ser exportados."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter informações da base de dados"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não existem contactos exportáveis."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"O compositor vCard não iniciou corretamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Impossível exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados do contacto não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"A importar <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler dados do vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"A importação do vCard terminou <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"A importação de <xliff:g id="FILENAME">%s</xliff:g> foi cancelada"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O ficheiro será importado em breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação do vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contactos serão exportados em breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"O pedido de exportação do vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"A colocar vCard(s) em cache no armazenamento temporário local. A importação efetiva começará brevemente."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recebido através de NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"A colocar em cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"A importar <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar p/ ficheiro .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nome fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar caso esteja vazio"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome próprio"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Apelido"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato do nome"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Nome próprio em primeiro lugar"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Apelido em primeiro lugar"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Contas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Conta predefinida para novos contactos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"As minhas informações"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurar o seu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Acerca dos contactos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Partilhar contactos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Partilhar todos os contactos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao partilhar os contactos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contactos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contactos de"</string>
+ <string name="share_error" msgid="948429331673358107">"Não é possível partilhar este contacto."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Não existem contactos para partilhar."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos a apresentar"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos a apresentar"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contactos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"através do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> através do <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"interromper a pesquisa"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Utilizar sempre este para chamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Ligar com uma nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Escrever uma nota para enviar com a chamada…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versão da compilação"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença para software de código aberto"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privacidade"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Termos de Utilização"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenças de código aberto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Falha ao abrir o URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> selecionado"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> não selecionado"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Efetuar videochamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> seg"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> seg"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contacto foi removido"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Selecionar contactos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Sem contactos no cartão SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"O contacto já existe na sua lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">1 contacto do cartão SIM importado</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos do cartão SIM importados</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Ocorreu uma falha ao importar os contactos do cartão SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar do cartão SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ignorar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"A sincronização da conta está desativada. Toque para ativar."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Pretende ativar a sincronização automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"As alterações que efetuar a todas as aplicações e contas, e não apenas aos Contactos do Google, serão atualizadas entre a Web e os seus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ativar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sem ligação"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importação do cartão SIM concluída"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha ao importar"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar contactos do cartão SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"A importar SIM…"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificações"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 5ef6b0e9b..d0148d8d6 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Contatos"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Contatos"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ver contato"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editar contato"</string>
<string name="contactsList" msgid="8661624236494819731">"Contatos"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contato"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contato"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Discagem direta"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Escolher contato p/ atalho"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Escolher número p/ atalho"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Escolha um número para enviar uma mensagem"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contato"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar a contato"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolha um contato"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contato"</string>
- <string name="starredList" msgid="4817256136413959463">"Com estrela"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frequente"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoritos"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes do contato"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Editar contato"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Criar contato"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editar grupo"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Criar grupo"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Sobre"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualização"</string>
<string name="searchHint" msgid="8482945356247760701">"Pesquisar contatos"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ver contato"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editar"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Excluir"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Alterar foto"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Colocar na tela inicial"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ligar para contato"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para o contato"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Criar atalho"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editar"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Excluir"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Adicionar contato"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adicionar grupo"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Remover contatos"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Renomear marcador"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Excluir marcador"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Adicionar contato"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contatos"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contatos"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover do marcador"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar marcador"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Desvincular este contato em vários contatos?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de salvar as alterações já feitas e desvincular este contato em vários contatos?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salvar e desvincular"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Gostaria de salvar as alterações já efetuadas e vincular com o contato selecionado?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salvar e vincular"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Vinculando"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Desvinculando"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Vincular"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ver contatos vinculados"</string>
<string name="menu_save" msgid="1727844363591825909">"Salvar"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contatos"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecione o contato que você deseja vincular com <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Mostrar todos os contatos"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Contatos sugeridos"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Todos os contatos"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Nome vinculado: <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Contatos vinculados"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> excluído"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> e <xliff:g id="NAME_1">%2$s</xliff:g> excluídos"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>... excluídos"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Contatos excluídos</item>
<item quantity="other">Contatos excluídos</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contato</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Do Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Definir toque"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Todas as cham. p/ correio voz"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Não é possível excluir contatos de contas somente leitura, mas eles podem ser ocultados."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ocultar"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"O contato a ser excluído tem detalhes de várias contas. Os detalhes de contas somente leitura serão ocultados, não excluídos."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Selecione pelo menos dois contatos para realizar uma vinculação."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vincular contatos selecionados?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Vincular"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Rotear para correio de voz"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Cancelar roteam. correio voz"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Este contato é somente leitura. Não é possível excluí-lo, mas você pode ocultá-lo."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ocultar contato"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"As contas somente leitura neste contato não serão excluídas, ficarão ocultas."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Excluir este contato?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Excluir contatos selecionados?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Não é possível excluir contatos de contas somente leitura, mas eles podem ser ocultados."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A exclusão deste contato excluirá detalhes de várias contas."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Excluir este contato?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Excluir"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Descartar alterações"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"O contato não existe."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contato adicionado à tela inicial."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Contato <xliff:g id="NAME">%s</xliff:g> adicionado à tela inicial."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contato"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contato"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organização"</item>
- <item msgid="7196592230748086755">"Observação"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nenhuma imagem disponível no tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nenhuma imagem disponível no telefone."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Não há imagens disponíveis no dispositivo."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto do contato"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Personalizar nome do marcador"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas diretamente para o correio de voz"</string>
<string name="removePhoto" msgid="4898105274130284565">"Remover foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nenhum contato"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nenhum grupo."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Você precisa de uma conta para criar grupos."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nenhuma pessoa neste grupo."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Para adicionar pessoas, edite o grupo."</string>
- <string name="savingContact" msgid="4075751076741924939">"Salvando contato…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Sua lista de contatos está vazia"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nenhum contato com este marcador"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nenhum contato nesta conta"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Contato salvo: <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"O contato foi salvo"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Contatos desvinculados"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Não foi possível salvar as alterações do contato."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Não foi possível desvincular contato."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Não foi possível vincular o contato."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Erro ao salvar contato."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Não foi possível salvar as alterações da foto de contato."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupo salvo."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Não foi possível salvar as alterações de grupo."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nenhum contato com números de telefone"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Não foi possível salvar as alterações do contato"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Não foi possível desvincular contato"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Não foi possível vincular o contato"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Marcador criado"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar um marcador"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Marcador atualizado"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Removido do marcador"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adicionado ao marcador"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Não foi possível salvar as alterações do marcador"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Este marcador já existe"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Alguns contatos não têm e-mails."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Alguns contatos não têm números de telefone."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Enviar e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escolher contatos"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nenhum contato"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> encontrados</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Todos"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoritos"</string>
- <string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
- <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"foto do contato"</string>
- <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nenhum app foi encontrado para executar esta ação."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para retornar à tela anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Nenhum app foi encontrado para executar esta ação."</string>
<string name="menu_share" msgid="943789700636542260">"Compartilhar"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Adicionar aos contatos"</string>
- <string name="share_via" msgid="563121028023030093">"Compartilhar contato via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Criar grupo na conta"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Adicionar"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Compartilhar contato via</item>
+ <item quantity="other">Compartilhar contatos via</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Escolher conta"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Criar marcador"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Renomear marcador"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Nome do marcador"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome - marcador"</string>
<string name="audio_chat" msgid="2535716629358298691">"Bate-papo por voz"</string>
<string name="video_chat" msgid="1872255818640336072">"Bate-papo por vídeo"</string>
- <string name="connections" msgid="8098440723172028350">"Conexões"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Adicionar conexão"</string>
- <string name="recent" msgid="2659189233141493004">"Recentes"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
<string name="account_type_format" msgid="718948015590343010">"Contato de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Conta do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Não pode ser editado neste app."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Não é possível editar neste dispositivo."</string>
<string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Tirar outra foto"</string>
<string name="pick_photo" msgid="2129509985223564942">"Escolher foto"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"A lista de contatos está sendo atualizada."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Pesquisando..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Mostrar selecionados"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Mostrar todos"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Selecionar todos"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Adicionar organização"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nome do grupo"</string>
- <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto principal"</string>
- <string name="description_star" msgid="2605854427360036550">"favorito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vincular o contato atual com o contato selecionado?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Voltar"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Alternar para a edição do contato selecionado? As informações inseridas até agora serão copiadas."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiar para Meus contatos"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar a Meus contatos"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Diretório <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizado"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Configurações"</string>
<string name="menu_settings" msgid="377929915873428211">"Configurações"</string>
<string name="menu_help" msgid="1680178646764069976">"Ajuda e feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opções de exibição"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Número de telefone"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contatos"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar a contato"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Fechar"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Incluir ano"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contato"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Carregando…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar um novo contato"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importar contatos"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Criar um novo grupo"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Criar novo grupo"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupos</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Excluir o grupo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Os contatos não serão apagados."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> pessoas de <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> pessoas</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Criar novo..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Excluir o marcador \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Os contatos não serão excluídos."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Digite o nome de contato antes de vinculá-lo a outro."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiar para área de transferência"</string>
<string name="set_default" msgid="4417505153468300351">"Definir padrão"</string>
<string name="clear_default" msgid="7193185801596678067">"Limpar padrão"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texto copiado"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Descartar as alterações e sair da edição?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Descartar alterações?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Continuar edição"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurar meu perfil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Digite o nome da pessoa"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Nome do grupo"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Descartar personalizações?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contatos"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Remover contatos"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Meu perfil local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Meu perfil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Exibindo todos os contatos"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha seus contatos seguros, mesmo se você perder seu telefone: sincronize com um serviço on-line."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Não será possível fazer backup de seu novo contato. Deseja adicionar uma conta que faça backup de contatos on-line?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adicione a conta na qual será feito o backup dos seus contatos no Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novos contatos serão salvos em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta padrão para novos contatos:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Adic. novo contato"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Criar novo contato"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editar contato"</string>
- <string name="keep_local" msgid="1258761699192993322">"Manter localmente"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Somente visualização"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Escolher um contato para editar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Contatos vinculados"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Adicionar"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Desvincular"</string>
<string name="add_account" msgid="8201790677994503186">"Adicionar conta"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adicionar nova conta"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportar arquivos do banco de dados"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"adicionar novo contato"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Criar novo contato"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ver mais"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Ver tudo"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
<string name="about_card_title" msgid="2920942314212825637">"Sobre"</string>
- <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Criando uma cópia pessoal..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ontem"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Criando uma cópia pessoal..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
<string name="today" msgid="8041090779381781781">"Hoje"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Evento sem título)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Mensagem instantânea"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Foto"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
<string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrada"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saída"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para retornar a chamada"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para retornar a chamada"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Você: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"O Hangouts funciona melhor quando você insere o identificador do Hangouts da pessoa no campo de e-mail ou de telefone."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Mais campos"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Alterar foto"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Falha ao abrir o editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Salvar em"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatos vinculados"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contato"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contato"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Foto do contato"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Falha ao abrir o editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvar em"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"As informações do contato em <xliff:g id="ACCOUNT">%s</xliff:g> não são editáveis"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTATOS"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contato"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis cópias"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Talvez esses contatos sejam a mesma pessoa. É possível vinculá-los como um único contato."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Contatos vinculados"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Tirar uma foto"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Todas as fotos"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Excluir <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>não marcada"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>marcada"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida não verificada"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida verificada"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"A lista de contatos está sendo atualizada para refletir a alteração do idioma.\n\nAguarde..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Fechar gaveta de navegação"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Marcador <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Marcadores"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Contas"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Veja seu histórico reunido"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Eventos e mensagens"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Eventos"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mensagens"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugestões"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mantenha seus contatos organizados e úteis"</string>
+ <string name="undo" msgid="1425165101664071422">"Desfazer"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Ligar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Chamar residência"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Chamar celular"</string>
+ <string name="call_work" msgid="5328785911463744028">"Chamar o trabalho"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Chamar fax comercial"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Chamar fax residencial"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Chamar pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Chamar"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Retornar chamada"</string>
+ <string name="call_car" msgid="3280537320306436445">"Chamar carro"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Chamar empresa (principal)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Chamar ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Chamar o principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Chamar fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Chamar rádio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Chamar telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Chamar TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Chamar celular comercial"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Chamar pager comercial"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Ligar para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Chamar MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (chamada)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Enviar mensagem de texto para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Enviar SMS para resid."</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Enviar SMS para celular"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Enviar SMS para tel. comercial"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Enviar SMS para fax com."</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Enviar SMS para fax resid."</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Enviar SMS para o pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Enviar SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Enviar SMS para retorno de chamada"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Enviar SMS para o carro"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Enviar SMS para empresa (principal)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Mandar mensagem de texto para ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Enviar SMS para núm. principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Enviar SMS para fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Enviar SMS para o rádio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Enviar SMS para telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Enviar SMS para TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Enviar SMS para cel. comercial"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Enviar SMS para pager com."</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Enviar SMS para <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Enviar texto MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (mensagem)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Fazer videochamada"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Apagar contatos frequentes?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Você apagará a lista de contatos frequentes nos apps Contatos e Telefone, fazendo com que os apps de e-mail tenham que redefinir suas preferências de endereçamento."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Apagando contatos frequentes…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponível"</string>
+ <string name="status_away" msgid="1838861100379804730">"Ausente"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupado"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Outros"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Diretório"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Todos os contatos"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contato rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"Sem nome"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Chamados frequentemente"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Todos os contatos com números de telefone"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatos do perfil de trabalho"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Dispositivo"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apelido"</string>
+ <string name="name_given" msgid="4280790853455320619">"Nome"</string>
+ <string name="name_family" msgid="7466985689626017037">"Sobrenome"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefixo do nome"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Nome do meio"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufixo do nome"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nome fonético"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Nome fonético"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Nome do meio fonético"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Sobrenome fonético"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefone"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Endereço"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Mensagem instantânea"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organização"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relacionamento"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data especial"</string>
+ <string name="sms" msgid="1756857139634224222">"Mensagem de texto"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Endereço"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Empresa"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Título"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Observações"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizado"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Site"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Marcadores"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail (residencial)"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Enviar e-mail para celular"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail (comercial)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Enviar e-mail para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"CEP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"País"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ver endereço residencial"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ver endereço comercial"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visualizar endereço"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Ver endereço de <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Bater papo usando o AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Bater papo usando o Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Bater papo usando o Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Bater papo usando o Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Bater papo usando o QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Bater papo usando o Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Bater papo usando o ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Bater papo usando o Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Bate-papo"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"excluir"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Mostrar mais campos de nome"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Recolher campos de nome"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Mostrar mais campos de nome fonético"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Recolher campos de nome fonético"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expandir"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Recolher"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Expandido"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Recolhido"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Todos os contatos"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Com estrela"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizar"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contato"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Todos os outros contatos"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Todos os contatos"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Remover sincronização do grupo"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Adicionar grupo sincronizado"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"A remoção de \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização também removerá os contatos não agrupados da sincronização."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvando opções de exibição…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Visualização personalizada"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvar contatos importados em:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contato</item>
+ <item quantity="other">%1$d contatos</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contato • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> contatos • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Arquivo .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nada para importar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importar contatos do vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Cancelar importação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Não foi poss. canc. imp./export. vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não há contato exportáveis."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Você desativou uma permissão obrigatória."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro E/S"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Não há memória suficiente. O arquivo pode ser muito grande."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportação concluída de <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A exportação dos contatos foi concluída."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contatos foi concluída. Clique na notificação para compartilhar contatos."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Toque para compartilhar contatos."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exportação de <xliff:g id="FILENAME">%s</xliff:g> cancelada."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando dados do contato"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados dos contatos estão sendo exportados."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter as informações do banco de dados."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não há contatos exportáveis."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"O criador do vCard não iniciou corretamente."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Não foi possível exportar"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados de contato não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler os dados do vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importação de vCard concluída <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importação de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O arquivo será importado em breve."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contatos serão exportados em breve."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Pedido de exportação vCard foi rejeitado. Tente novamente mais tarde."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contato"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Armazenando VCard(s) em cache no armazenamento temporário local. A importação real começará em breve."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contato via NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Armazenando em cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportar p/ arquivo .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Classificar por"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nome fonético"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Mostrar sempre"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ocultar se vazio"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Sobrenome"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formato de nome"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Primeiro o nome"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Primeiro o sobrenome"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Contas"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Conta padrão para novos contatos"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Minhas informações"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurar seu perfil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Sobre Contatos"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportar contatos"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importar contatos de"</string>
+ <string name="share_error" msgid="948429331673358107">"Este contato não pode ser compartilhado."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatos para exibição"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatos a exibir"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar visualização"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvar"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contatos"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"por meio de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"parar de pesquisar"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Sempre usar esta opção para chamadas"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Chamada com nota"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Digite uma nota para enviar com a chamada..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versão"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença do software de código aberto"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Política de privacidade"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Termos de Serviço"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenças de código aberto"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Falha ao abrir o URL."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> verificado"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> não verificado"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Realizar videochamada"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Excluir"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contato foi removido"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Selecionar contatos"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Não há contatos no seu cartão SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"O contato já existe na sua lista"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contato importado do SIM</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos importados do SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Falha ao importar contatos do SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importar do SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Cancelar"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"A sincronização automática está desativada. Toque para ativar."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Dispensar"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"A sincronização da conta está desativada. Toque para ativar."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Ativar a sincronização automática?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"As alterações que você fizer em todos os aplicativos e contas, não apenas nas Contas do Google, permanecerão atualizadas entre a Web e seus dispositivos."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Ativar"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Sem conexão"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"A importação do cartão SIM foi concluída"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha na importação"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar os contatos do cartão SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando do cartão SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificações"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 4c3886610..de982b37b 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Agendă"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Agendă"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Afișați persoana de contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Editați persoana de contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Agendă"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Adăugați"</string>
<string name="shortcutContact" msgid="749243779392912958">"Persoană din Agendă"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Apel direct"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Mesaj direct"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Alegeți o pers. din agendă"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Alegeți un nr. pentru apel"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Alegeți un nr. pentru mesaj"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Alegeți persoana de contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adăugați pentru persoană"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Alegeți o persoană de contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selectați"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Creați o intrare nouă"</string>
- <string name="starredList" msgid="4817256136413959463">"Cu stea"</string>
- <string name="frequentList" msgid="7154768136473953056">"Frecvent"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favorite"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detalii ale persoanei din agendă"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Modificați informațiile despre persoana din agendă"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Creați persoana din agendă"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Editați grupul"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Creați grupul"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Despre"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizări"</string>
<string name="searchHint" msgid="8482945356247760701">"Căutați în Agendă"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Vizualizați persoana din agendă"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Adăugați la lista de favorite"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Eliminați din lista de favorite"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"S-a eliminat din preferințe"</string>
@@ -49,41 +35,59 @@
<string name="menu_editContact" msgid="9042415603857662633">"Editați"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Ștergeți"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Schimbați fotografia"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Plasați pe ecranul de pornire"</string>
- <string name="menu_call" msgid="3992595586042260618">"Apelați persoana din agendă"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Trimiteți mesaj text către o persoană din agendă"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Creați o comandă rapidă"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Disociați"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Editați"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Ștergeți"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Adăugați o persoană de contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Adăugați un grup"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Eliminați intrările din Agendă"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Redenumiți eticheta"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Ștergeți eticheta"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Adăugați o persoană"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Selectați persoane"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adăugați persoane"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminați din etichetă"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Creați o etichetă"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Separați această persoană de contact în mai multe persoane de contact?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Disociați"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Doriți să salvați modificările pe care le-ați făcut deja și să separați această persoană de contact în mai multe persoane de contact?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Salvați și separați"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Doriți să salvați modificările pe care le-ați făcut deja și să asociați această persoană cu persoana de contact selectată?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Salvați și asociați"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Se asociază"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Asocierea e anulată"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Asociați"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Afișați persoanele asociate"</string>
<string name="menu_save" msgid="1727844363591825909">"Salvați"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Asociați persoane de contact"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Alegeți persoana de contact pe care doriți să o asociați cu <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Afișați toate persoanele din agendă"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Persoane din agendă sugerate"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Toată agenda"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"S-a asociat cu <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Persoanele de contact au fost asociate"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"S-a șters <xliff:g id="NAME">%1$s</xliff:g>."</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"S-au șters <xliff:g id="NAME_0">%1$s</xliff:g> și <xliff:g id="NAME_1">%2$s</xliff:g>."</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… au fost șterse"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="few">Persoane de contact șterse</item>
<item quantity="other">Persoane de contact șterse</item>
<item quantity="one">Persoană de contact ștearsă</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> persoane de contact</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de persoane de contact</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> persoană de contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> persoane de contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> de persoane de contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană de contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Din Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Din <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Setați ton apel"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Numai mesagerie vocală"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Persoanele de contact din conturile numai în citire nu pot fi șterse, dar pot fi ascunse."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ascundeți"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Persoana de contact care va fi ștearsă are detalii din mai multe conturi. Detaliile din conturile numai în citire vor fi ascunse, nu șterse."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Pentru o asociere aveți nevoie de cel puțin două persoane de contact selectate."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Asociați persoanele de contact selectate?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Asociați"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Trimiteți la mesageria vocală"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nu mai trimiteți la mesagerie"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Această intrare în Agendă este numai în citire. Nu poate fi ștearsă, dar o puteți ascunde."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ascundeți persoana de contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Conturile numai în citire din această intrare în Agendă vor fi ascunse, nu șterse."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Ștergeți această persoană de contact?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Ștergeți persoanele de contact selectate?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Persoanele de contact din conturile numai în citire nu pot fi șterse, dar pot fi ascunse."</string>
@@ -91,183 +95,125 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Dacă ștergeți această persoană de contact, vor fi șterse detalii din mai multe conturi."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Ștergeți această persoană de contact?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ștergeți"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Renunțați la modificări"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Persoana nu există în agendă."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Persoana de contact a fost adăugată pe ecranul de pornire."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Persoana de contact <xliff:g id="NAME">%s</xliff:g> a fost adăugată pe ecranul de pornire."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Creați o intrare nouă în agendă"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Creați o intrare nouă"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizație"</item>
- <item msgid="7196592230748086755">"Notă"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nu există imagini disponibile pe tabletă."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nicio fotografie disponibilă în telefon."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Nu există imagini disponibile pe dispozitiv."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografie persoană din agendă"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Numele etichetei personalizate"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Trimiteți apelurile direct către mesageria vocală"</string>
<string name="removePhoto" msgid="4898105274130284565">"Eliminați fotografia"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nu există persoane în agendă"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nu există grupuri."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Pentru a crea grupuri aveți nevoie de un cont."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nu există persoane în acest grup."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Pentru a adăuga persoane, editați grupul."</string>
- <string name="savingContact" msgid="4075751076741924939">"Se salvează persoana din agendă..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Lista cu persoane de contact este goală"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nicio persoană de contact cu această etichetă"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nicio persoană de contact în acest cont"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Lista cu persoane de contact este goală"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"S-a salvat <xliff:g id="DISPLAY_NAME">%s</xliff:g>."</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Persoana din agendă a fost salvată"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Persoanele de contact au fost separate"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nu s-au putut salva modificările aduse persoanei de contact."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Persoana de contact nu a putut fi separată."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Persoana de contact nu a putut fi asociată."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Eroare la salvarea persoanei de contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Modificările privind fotografia persoanei de contact nu au putut fi salvate."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupul a fost salvat."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nu s-au putut salva modificările aduse grupului."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact cu numere de telefon</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact cu numere de telefon</item>
- <item quantity="one">O persoană de contact cu număr de telefon</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nicio persoană din agendă cu numere de telefon"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact găsite</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact găsite</item>
- <item quantity="one">O persoană de contact găsită</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nu s-au putut salva modificările persoanei de contact"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Persoana de contact nu a putut fi deconectată"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Persoana de contact nu a putut fi asociată"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Eroare la salvarea persoanei în Agendă"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nu s-au putut salva modificările fotografiei persoanei de contact"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nu s-a putut încărca eticheta"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Eticheta a fost ștearsă"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etichetă creată"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nu se poate crea eticheta"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etichetă actualizată"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Eliminate din etichetă"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Adăugat(e) în etichetă"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Modificările etichetei nu s-au salvat"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Eticheta există deja"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Unele persoane de contact nu au adresă de e-mail."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Unele persoane de contact nu au numere de telefon."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Trimiteți un e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Trimiteți un mesaj"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Alegeți persoane de contact"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Trimiteți"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Nu există persoane în agendă"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact găsite</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact găsite</item>
- <item quantity="one">O persoană de contact găsită</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Toate"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Preferate"</string>
- <string name="callBack" msgid="5498224409038809224">"Apelați din nou"</string>
- <string name="callAgain" msgid="3197312117049874778">"Apelați din nou"</string>
- <string name="returnCall" msgid="8171961914203617813">"Apelați înapoi"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adăugați „<xliff:g id="EMAIL">%s</xliff:g>” în agendă?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografia persoanei din agendă"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> din <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (de) persoane din agendă"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Numele persoanelor din agenda dvs."</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nu s-a găsit o aplicație care să gestioneze această acțiune."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Dați clic pentru a reveni la ecranul anterior"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adăugați un număr de telefon"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Adăugați o adresă de e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Nu s-a găsit o aplicație care să îndeplinească această acțiune."</string>
<string name="menu_share" msgid="943789700636542260">"Distribuiți"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Adăugați în agendă"</string>
- <string name="share_via" msgid="563121028023030093">"Distribuiți persoana din agendă prin"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Creați un grup în contul"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Adăugați"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="few">Trimiteți intrările din Agendă prin</item>
+ <item quantity="other">Trimiteți intrările din Agendă prin</item>
+ <item quantity="one">Trimiteți intrarea din Agendă prin</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Alegeți un cont"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Creați o etichetă"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Redenumiți eticheta"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Numele etichetei"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nume etichetă"</string>
<string name="audio_chat" msgid="2535716629358298691">"Chat vocal"</string>
<string name="video_chat" msgid="1872255818640336072">"Chat video"</string>
- <string name="connections" msgid="8098440723172028350">"Conexiuni"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Adăugați o conexiune"</string>
- <string name="recent" msgid="2659189233141493004">"Recente"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Actualizări recente"</string>
<string name="account_type_format" msgid="718948015590343010">"Intrare: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Contul <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nu se poate edita din această aplicație"</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nu poate fi editat pe acest dispozitiv."</string>
<string name="take_photo" msgid="7496128293167402354">"Fotografiați"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Creați o fotografie nouă"</string>
<string name="pick_photo" msgid="2129509985223564942">"Alegeți o fotografie"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Selectați o fotografie nouă"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Se actualizează lista de persoane din agendă."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Se caută..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Afișați elementele selectate"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Afișați-i pe toți"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Selectați-le pe toate"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Deselectați-le pe toate"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adăugați intrare nouă"</string>
- <string name="add_organization" msgid="7311893231158291197">"Adăugați o organizație"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dată"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Nume grup"</string>
- <string name="change_photo" msgid="8530597935483526383">"Schimbați"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Foto. de bază"</string>
- <string name="description_star" msgid="2605854427360036550">"preferate"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Editați informațiile despre persoana din agendă"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Asociați persoana de contact actuală cu persoana de contact selectată?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetă"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Anulați"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Înapoi"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"închideți"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Comutați la funcția de editare a persoanei din agendă selectate? Informațiile introduse până acum vor fi copiate."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Copiați în Agendă"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Adăugați în Agendă"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Director <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Personalizată"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Setări"</string>
<string name="menu_settings" msgid="377929915873428211">"Setări"</string>
<string name="menu_help" msgid="1680178646764069976">"Ajutor și feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opțiuni de afișare"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Număr de telefon"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adăugați în agendă"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adăug. la pers. din ag."</string>
<string name="non_phone_close" msgid="7608506439725515667">"Închideți"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Includeți anul"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Persoană din agendă"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Se încarcă..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Creați o intrare nouă în Agendă"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adăugați un cont"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importați Agenda"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Creați un grup nou"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Creați un grup nou"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> grupuri</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> de grupuri</item>
- <item quantity="one">Un grup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Ștergeți grupul „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Agenda nu va fi ștearsă.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> persoane din <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> de persoane din <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană din <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> persoane</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> de persoane</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importați"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Creați o etichetă nouă…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Ștergeți eticheta „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”? (Persoanele din agendă nu vor fi șterse.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Introduceți numele persoanei de contact înainte de a o asocia cu altă persoană."</string>
<string name="copy_text" msgid="3257145021583508761">"Copiați în clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Setați ca prestabilit"</string>
<string name="clear_default" msgid="7193185801596678067">"Ștergeți datele prestabilite"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text copiat"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Renunțați la modificări și părăsiți editarea?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Renunțați la modificări?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Renunțați"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Editați în continuare"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Configurați profilul"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Introduceți numele persoanei"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Numele grupului"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anulați"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Renunțați la personalizări?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Căutați în Agendă"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Eliminați intrările din Agendă"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Profilul meu local"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Profilul meu <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Se afișează toată agenda"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Păstrați agenda dvs. în condiții de siguranță, chiar dacă pierdeți telefonul, prin sincronizarea acesteia cu un serviciu online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adăugați un cont"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Pentru noua persoană de contact nu se va face backup. Adăugați un cont care face backup online pentru persoane de contact?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adăugați un cont în care se va face backup pentru agenda dvs. în Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Persoanele noi de contact vor fi salvate în <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Alegeți un cont prestabilit pentru persoanele de contact noi:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Adăugați o persoană"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Creați intrare nouă"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Editați intrarea"</string>
- <string name="keep_local" msgid="1258761699192993322">"Numai local"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Numai vizualizare"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Alegeți persoana de contact pentru a o edita"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Persoane de contact asociate"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Adăugați"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Disociați"</string>
<string name="add_account" msgid="8201790677994503186">"Adăugați un cont"</string>
<string name="add_new_account" msgid="5748627740680940264">"Adăugați un cont nou"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportați fișierele bazei de date"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"adăugați o persoană de contact nouă"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Creați o intrare nouă"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Mai multe detalii"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mai puține detalii"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Vedeți tot"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
<string name="about_card_title" msgid="2920942314212825637">"Despre"</string>
- <string name="send_message" msgid="8938418965550543196">"Trimiteți mesajul"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Se creează o copie personală..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Ieri"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Se creează o copie personală..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Mâine"</string>
<string name="today" msgid="8041090779381781781">"Astăzi"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Astăzi, la <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mâine, la <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Eveniment fără titlu)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Setați"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -277,66 +223,317 @@
<string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Eveniment"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relație"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Cont"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Nume"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografie"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Dați clic pentru a extinde editorul persoanei de contact."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Dați clic pentru a restrânge editorul persoanei de contact."</string>
<string name="content_description_directions" msgid="2686791825798189335">"indicații de orientare către locație"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recent. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. dați clic pentru a răspunde"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recent. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. dați clic pentru a răspunde"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"primit"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"efectuat"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"pierdut"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"apel recent. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. dați clic pentru a apela"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"apel recent. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. dați clic pentru a apela"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Dvs.: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts funcționează mai bine când introduceți identificatorul Hangouts al persoanei în câmpul pentru adresa de e-mail sau în câmpul pentru numărul de telefon."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Mai multe câmpuri"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Schimbați fotografia"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editorul nu a putut fi deschis."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Se salvează în"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"În prezent se salvează în <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Atingeți de două ori ca să alegeți alt cont."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="few">Persoane de contact asociate (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Persoane de contact asociate (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Persoană de contact asociată</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> (de) persoane de contact asociate"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Mai multe câmpuri"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Schimbați fotografia persoanei de contact"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adăugați o fotografie pentru persoana de contact"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotografia persoanei de contact"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Editorul nu a putut fi deschis."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Se salvează în"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Informațiile de contact de la <xliff:g id="ACCOUNT">%s</xliff:g> nu pot fi editate"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASOCIAȚI PERSOANELE DE CONTACT"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULAȚI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> dubluri posibile</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de dubluri posibile</item>
- <item quantity="one">O dublură posibilă</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact asociate</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact asociate</item>
- <item quantity="one">O persoană de contact asociată</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Această persoană de contact"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Dubluri posibile"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Este posibil ca aceste persoane de contact să fie una și aceeași persoană. Le puteți asocia ca o singură persoană de contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Persoane de contact asociate"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Din conturile dvs."</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fotografiați"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Toate fotografiile"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Alegeți o fotografie"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Din contul <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Ștergeți <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Ștergeți <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ștergeți <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotografia din <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nu e selectată"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografia din <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> e selectată"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografie neselectată dintr-un cont necunoscut"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografie selectată dintr-un cont necunoscut"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Se actualizează lista de persoane din agendă pentru a reflecta modificarea limbii.\n\n Așteptați..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugestii"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nou"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Deschideți panoul de navigare"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Închideți panoul de navigare"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Eticheta <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etichete"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Conturi"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Afișați istoricul dvs. comun"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Evenimente și mesaje"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Evenimente"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mesaje"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugestii"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mențineți agenda organizată și utilă"</string>
+ <string name="undo" msgid="1425165101664071422">"Anulați"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Apelați <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Apelați numărul de domiciliu"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Apelați numărul de mobil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Apelați numărul de serviciu"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Apelați un număr de fax de serviciu"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Apelați un număr de fax de la domiciliu"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Apelați un număr de pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Apelați"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Apelați un număr cu apelare inversă"</string>
+ <string name="call_car" msgid="3280537320306436445">"Apelați numărul de mașină"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Apelați numărul principal al companiei"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Apelați ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Apelați numărul principal"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Apelați numărul de fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Apelați un număr radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Apelați un număr de telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Apelați TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Apelați numărul de mobil de la serviciu"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Apelați pagerul de serviciu"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Apelați <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Apelați MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (apelați)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Trimiteți mesaj text către <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Trimiteți mesaj text către telefonul de domiciliu"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Trimiteți mesaj text către telefonul mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Trimiteți mesaj text către numărul de serviciu"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Trimiteți mesaj text către un fax de serviciu"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Trimiteți mesaj text către un număr de fax de domiciliu"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Trimiteți mesaj text către un număr de pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Mesaj"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Trimiteți un mesaj text către un număr cu apelare inversă"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Trimiteți mesaj text către un număr de telefon de mașină"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Trimiteți mesaj text către numărul principal al companiei"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Mesaj text către un număr ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Trimiteți mesaj text către numărul principal"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Trimiteți mesaj text către un număr de fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Trimiteți mesaj text către un număr radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Trimiteți mesaj text către un număr de telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Trimiteți mesaj text către TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Trimiteți mesaj text către numărul de mobil de serviciu"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Trimiteți mesaj text către un număr de pager de la serviciu"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Trimiteți mesaj text către <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Trimiteți mesaj text către un număr MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (trimiteți mesaj)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Inițiați un apel video"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Ștergeți persoane frecvent contactate?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Veți șterge lista persoanelor contactate frecvent din aplicațiile Agendă și Telefon și veți forța aplicațiile de e-mail să vă învețe preferințele pentru adrese de la zero."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Ștergeți persoane frecv. contactate…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Disponibil(ă)"</string>
+ <string name="status_away" msgid="1838861100379804730">"Plecat(ă)"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ocupat(ă)"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Altul"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Director"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directorul de serviciu"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Toată Agenda"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Contact rapid pentru <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Fără nume)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frecvent contactate"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Toate persoanele din agendă cu numere de telefon"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Persoane de contact din profilul de serviciu"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Afișați actualizări"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Gadget"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Nume"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonim"</string>
+ <string name="name_given" msgid="4280790853455320619">"Prenume"</string>
+ <string name="name_family" msgid="7466985689626017037">"Nume de familie"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefixul numelui"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Al doilea prenume"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Sufixul numelui"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Nume fonetic"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Prenume fonetic"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Numele mijlociu fonetic"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Nume fonetic"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresă"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizație"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relație"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Dată specială"</string>
+ <string name="sms" msgid="1756857139634224222">"Mesaj text"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresă"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Companie"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titlu"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Note"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Personalizat"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Site web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etichete"</string>
+ <string name="email_home" msgid="8573740658148184279">"Trimiteți un e-mai la o adresă de e-mail de domiciliu"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Trimiteți un e-mail către un telefon mobil"</string>
+ <string name="email_work" msgid="2807430017302722689">"Trimiteți e-mail către adresa de serviciu"</string>
+ <string name="email_other" msgid="3454004077967657109">"Trimiteți un e-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Trimiteți e-mail către <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Trimiteți un e-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Stradă"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Oraș"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Stat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Codul ZIP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Țara"</string>
+ <string name="map_home" msgid="1243547733423343982">"Vizualizați adresa de domiciliu"</string>
+ <string name="map_work" msgid="1360474076921878088">"Vizualizați adresa de serviciu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Vizualizați adresa poștală"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Afișați adresa <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Conversați prin AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Conversați prin Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Conversați prin Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Conversați prin Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Conversați prin QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Conversați prin Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Conversați prin ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Conversați prin Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Conversați prin chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ștergeți"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Afișați mai multe câmpuri pentru nume."</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Restrângeți câmpurile de nume"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Afișați mai multe câmpuri pentru nume fonetice."</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Restrângeți câmpurile de nume fonetice"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Extindeți"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Restrângeți"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Extinse"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Restrânse"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Toată agenda"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Cu stea"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizați"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Persoană din agendă"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Toate celelalte contacte"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Toată Agenda"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Eliminați grup de sincronizare"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Adăugați grup de sincronizare"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Mai multe grupuri..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Eliminarea grupului „<xliff:g id="GROUP">%s</xliff:g>” din sincronizare va elimina, de asemenea, orice persoană din agendă care nu face parte dintr-un grup."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Se salvează opțiunile de afișare..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Afișare personalizată"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvați persoanele de contact importate în:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Card SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Cardul SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="few">%1$d persoane de contact</item>
+ <item quantity="other">%1$d persoane de contact</item>
+ <item quantity="one">O persoană de contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> persoane de contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> de persoane de contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> persoană de contact • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Fișier .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nimic de importat"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importați persoane de contact din vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Anulați importul fișierului <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulați exportul fișierului <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Anulare import/export vCard nereușită"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Eroare necunoscută."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nu s-a putut deschide fișierul „<xliff:g id="FILE_NAME">%1$s</xliff:g>”: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nu s-a putut iniţializa instrumentul de export: „<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nicio persoană de contact exportabilă."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Ați dezactivat o permisiune necesară."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"A apărut o eroare în timpul exportului: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Eroare I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria este insuficientă (probabil fișierul este prea mare)."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatul nu este acceptat."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"S-a finalizat exportul fișierului <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Persoanele de contact au fost exportate."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"S-a încheiat exportul persoanelor de contact. Dați clic pe notificare pentru a distribui persoanele de contact."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Atingeți pentru a trimite persoanele de contact."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exportul fișierului <xliff:g id="FILENAME">%s</xliff:g> a fost anulat."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Se exportă datele persoanelor din agendă"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se exportă datele privind persoanele de contact."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nu s-au putut obține informații din baza de date."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nicio persoană de contact exportabilă."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Compozitorul vCard nu a pornit în mod corespunzător."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nu s-a putut exporta"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Datele de contact nu au fost exportate.\nMotivul: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Se importă <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nu s-au putut citi datele de pe vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"S-a finalizat importul vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importul fișierului <xliff:g id="FILENAME">%s</xliff:g> a fost anulat"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> va fi importat în curând."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fișierul va fi importat în scurt timp."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Solicitarea de importare a fișierului vCard a fost respinsă. Încercați din nou mai târziu."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Persoanele de contact vor fi exportate în curând."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Solicitarea de exportare a fișierului vCard a fost respinsă. Încercați din nou mai târziu."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Fișierele vCard se stochează în memoria cache într-un spațiu de stocare local temporar. Importul propriu-zis va începe în curând."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Nu s-a putut importa fișierul vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Cont.prim.pr.NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Se stochează în cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Se importă <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportați ca fișier .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortați după"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Nume fonetic"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Afișați întotdeauna"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ascundeți când nu are"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prenume"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Nume de familie"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format pentru nume"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Întâi prenumele"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Întâi numele de familie"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Conturi"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Contul prestabilit pentru persoanele de contact noi"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Informațiile mele"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Configurați profilul"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Despre Agendă"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Trimiteți persoanele preferate"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Trimiteți toată agenda"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Persoanele de contact nu s-au trimis."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportați Agenda"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importați persoane de contact din"</string>
+ <string name="share_error" msgid="948429331673358107">"Această persoană de contact nu poate fi distribuită."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nu există persoane de contact de trimis."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Persoane de contact de afişat"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Persoane de afișat"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizați afișarea"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvați"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Căutați persoane de contact"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorite"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importați"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportați"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Numere blocate"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"de pe <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"La ora <xliff:g id="DATE">%1$s</xliff:g> de pe <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"nu mai căutați"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Ștergeți căutarea"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Cont"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Utilizați mereu pentru apeluri"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Apelați împreună cu o notă"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Introduceți o notă pe care să o trimiteți împreună cu apelul…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"TRIMITEȚI ȘI APELAȚI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versiunea"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licențe open source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalii privind licența pentru software-ul open source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Confidențialitate"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Termeni și condiții"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licențe open source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Adresa URL nu a putut fi deschisă."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Contul <xliff:g id="ACCOUNT_INFO">%s</xliff:g> este selectat"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Contul <xliff:g id="ACCOUNT_INFO">%s</xliff:g> nu este selectat"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Efectuați un apel video"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Ștergeți"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Puncte de suspensie"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sec."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sec."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Această comandă rapidă a fost dezactivată."</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Persoana de contact a fost ștearsă."</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importați"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Selectați persoane de contact"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Nicio persoană de contact pe cardul SIM."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Persoana de contact există deja în listă."</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="few">Au fost importate <xliff:g id="COUNT">%d</xliff:g> persoane de contact de pe SIM.</item>
+ <item quantity="other">Au fost importate <xliff:g id="COUNT">%d</xliff:g> de persoane de contact de pe SIM.</item>
+ <item quantity="one">A fost importată o persoană de contact de pe SIM.</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Nu s-au importat persoanele de contact de pe SIM."</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importați de pe SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Anulează"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Sincronizarea automată este dezactivată. Atingeți pentru a o activa."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Închideți"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sincronizarea contului este dezactivată. Atingeți pentru a o activa."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Activați sincronizarea automată?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Modificările pe care le faceți în toate aplicațiile și conturile, nu doar în Agenda Google, vor fi actualizate permanent între web și dispozitivele dvs."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Activați"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nicio conexiune"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Afișați mai mult"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importarea cardului SIM s-a terminat."</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Nu s-a importat."</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nu s-a putut importa agenda de pe cardul SIM."</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Se importă cardul SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Notificări"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 07f2e07a3..97e8d9b89 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Контакты"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контакты"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Просмотреть контакт"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Изменить контакт"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакты"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Добавить контакт"</string>
<string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Быстрый звонок"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Быстрое SMS"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Выбрать контакт"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Выберите номер"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Выбрать номер для SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Выбрать контакт"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Добавление данных"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выбор контакта"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выберите контакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Выбрать"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Создать контакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Помеченные"</string>
- <string name="frequentList" msgid="7154768136473953056">"Часто вызываемые"</string>
- <string name="strequentList" msgid="5640192862059373511">"Избранное"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Сведения о контакте"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Изменить контакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Создать контакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Изменение группы"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Создание группы"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Контактные данные"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Лента активности"</string>
<string name="searchHint" msgid="8482945356247760701">"Поиск в контактах"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Просмотреть контакт"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Добавить в избранное"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Удалить из избранных"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Удалено из избранного"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Изменить"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Удалить"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Сменить фото"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Поместить на главный экран"</string>
- <string name="menu_call" msgid="3992595586042260618">"Позвонить"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Отправить SMS/MMS"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Создать ярлык"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Отменить связь"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Изменить"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Удалить"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Добавить контакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Добавить группу"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Удалить контакты"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Переименовать ярлык"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Удалить ярлык"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Добавить контакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Выбрать контакты"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Добавить контакты"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Снять ярлык"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Создать ярлык"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Разделить этот контакт?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Разделить"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Сохранить изменения и разделить этот контакт?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Да"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Сохранить изменения и связать с выбранным контактом?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Да"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Связывание контактов…"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Разделение контактов…"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Связать"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Посмотреть связанные контакты"</string>
<string name="menu_save" msgid="1727844363591825909">"Сохранить"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Связать контакты"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Выберите, какой контакт связать с \"<xliff:g id="NAME">%s</xliff:g>\":"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показать все контакты"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предлагаемые контакты"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Все контакты"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакт <xliff:g id="NAME">%s</xliff:g> связан"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакты связаны"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Контакт <xliff:g id="NAME">%1$s</xliff:g> удален"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Контакты <xliff:g id="NAME_0">%1$s</xliff:g> и <xliff:g id="NAME_1">%2$s</xliff:g> удалены"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Контакты <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… удалены"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Контакты удалены</item>
<item quantity="few">Контакты удалены</item>
<item quantity="many">Контакты удалены</item>
<item quantity="other">Контакты удалены</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> контактов</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> контактов · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Из Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Из аккаунта <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Задать рингтон"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Только голос. почта"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Контакты из аккаунтов, доступных только для чтения, будут скрыты, но не удалены."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Скрыть"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Этот контакт содержит информацию из различных аккаунтов. Информация из аккаунтов, доступных только для чтения, будет скрыта, но не удалена."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Для связывания нужно хотя бы два контакта"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Связать выбранные контакты?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Связать"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Переключать на голосовую почту"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Исключить голосовую почту"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Этот контакт доступен только для чтения. Его нельзя удалить, но можно скрыть."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Скрыть контакт"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Данные этого контакта из аккаунтов, доступных только для чтения, будут скрыты, а не удалены."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Удалить контакт?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Удалить выбранные контакты?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Контакты из аккаунтов, доступных только для чтения, будут скрыты, но не удалены."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Будут удалены данные из нескольких аккаунтов."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Удалить контакт?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Удалить"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Удалить изменения"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Нет такого контакта."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт добавлен на главный экран"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт \"<xliff:g id="NAME">%s</xliff:g>\" добавлен на главный экран"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Создать контакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Создать контакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Организация"</item>
- <item msgid="7196592230748086755">"Примечание"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"На планшетном ПК нет изображений."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"В телефоне нет картинок."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"На устройстве нет изображений."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фотография контакта"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Название"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Направлять вызовы в голосовую почту"</string>
<string name="removePhoto" msgid="4898105274130284565">"Удалить фото"</string>
- <string name="noContacts" msgid="4955659076981974652">"Нет контактов"</string>
- <string name="noGroups" msgid="8614664663561385253">"Нет групп."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Для создания групп нужен аккаунт."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Здесь пока никого нет."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Чтобы добавить участников, откройте меню и нажмите \"Изменить\"."</string>
- <string name="savingContact" msgid="4075751076741924939">"Контакт сохраняется..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Контактов нет"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Нет контактов с таким ярлыком"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"В этом аккаунте нет контактов"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Контактов нет"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>: контакт сохранен"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Контакт сохранен"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакты разделены"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не удалось сохранить изменения."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не удалось разделить контакты"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не удалось связать контакты"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Не удалось сохранить контакт"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не удалось сохранить изменения"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Группа сохранена."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не удалось сохранить изменения."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт с номером телефона</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакта с номером телефона</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> контактов с номером телефона</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контактов с номером телефона</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нет контактов с номерами телефонов"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">Найден <xliff:g id="COUNT">%d</xliff:g> контакт</item>
- <item quantity="few">Найдено <xliff:g id="COUNT">%d</xliff:g> контакта</item>
- <item quantity="many">Найдено <xliff:g id="COUNT">%d</xliff:g> контактов</item>
- <item quantity="other">Найдено <xliff:g id="COUNT">%d</xliff:g> контактов</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не удалось сохранить изменения"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не удалось разделить контакты"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не удалось связать контакты"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Не удалось сохранить контакт"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не удалось сохранить изменения"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не удалось загрузить ярлык"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Ярлык удален"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Ярлык создан"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Не удалось создать группу"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Ярлык обновлен"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Ярлык снят"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Добавлено"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не удалось сохранить изменения"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Такой ярлык уже существует"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"У некоторых контактов не указаны адреса эл. почты"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"У некоторых контактов не указаны номера телефонов"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Отправить письмо"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Отправить SMS"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Выбор контактов"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Отправить"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Нет контактов"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">Найден <xliff:g id="COUNT">%d</xliff:g> контакт</item>
- <item quantity="few">Найдено <xliff:g id="COUNT">%d</xliff:g> контакта</item>
- <item quantity="many">Найдено <xliff:g id="COUNT">%d</xliff:g> контактов</item>
- <item quantity="other">Найдено <xliff:g id="COUNT">%d</xliff:g> контактов</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Все"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Избранные"</string>
- <string name="callBack" msgid="5498224409038809224">"Перезвонить"</string>
- <string name="callAgain" msgid="3197312117049874778">"Позвонить снова"</string>
- <string name="returnCall" msgid="8171961914203617813">"Перезвонить"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Добавить в контакты <xliff:g id="EMAIL">%s</xliff:g>?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"фотография контакта"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"Контакт <xliff:g id="CURRENT_NUMBER">%s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена контактов"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Действие не поддерживается ни в одном приложении."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Нажмите, чтобы вернуться на предыдущую страницу"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Добавить номер телефона"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Добавить адрес электронной почты"</string>
<string name="missing_app" msgid="1466111003546611387">"Действие не поддерживается ни в одном приложении."</string>
<string name="menu_share" msgid="943789700636542260">"Отправить"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Добавить в контакты"</string>
- <string name="share_via" msgid="563121028023030093">"Способ отправки"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Создание группы в аккаунте"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Добавить"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Выберите способ отправки</item>
+ <item quantity="few">Выберите способ отправки</item>
+ <item quantity="many">Выберите способ отправки</item>
+ <item quantity="other">Выберите способ отправки</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Выберите аккаунт"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Создание ярлыка"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Изменение названия ярлыка"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Название ярлыка"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Название ярлыка"</string>
<string name="audio_chat" msgid="2535716629358298691">"Голосовой чат"</string>
<string name="video_chat" msgid="1872255818640336072">"Видеочат"</string>
- <string name="connections" msgid="8098440723172028350">"Соцсети"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Добавить соцсеть"</string>
- <string name="recent" msgid="2659189233141493004">"Недавние"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Недавние обновления"</string>
<string name="account_type_format" msgid="718948015590343010">"Контакт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Аккаунт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Здесь доступно только для чтения."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Здесь доступно только для чтения."</string>
<string name="take_photo" msgid="7496128293167402354">"Сфотографировать"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Сфотографировать"</string>
<string name="pick_photo" msgid="2129509985223564942">"Выбрать фото"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Выбрать другое фото"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Список контактов обновляется..."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Поиск…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Показать выбранные"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Показать все"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Выбрать все"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Снять все выделения"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Добавить"</string>
- <string name="add_organization" msgid="7311893231158291197">"Добавить организацию"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Название группы"</string>
- <string name="change_photo" msgid="8530597935483526383">"Изменить"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Основное фото"</string>
- <string name="description_star" msgid="2605854427360036550">"избранное"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Изменить контакт"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Связать текущий контакт с выбранным?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ярлык"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Отмена"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрыть"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Переключиться на редактирование выбранного контакта? Введенная информация будет скопирована."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Копировать в \"Мои контакты\""</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Добавить в группу \"Мои контакты\""</string>
<string name="contact_directory_description" msgid="683398073603909119">"Каталог <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Пользовательские"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Настройки"</string>
<string name="menu_settings" msgid="377929915873428211">"Настройки"</string>
<string name="menu_help" msgid="1680178646764069976">"Справка/отзыв"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Варианты отображения"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Номер телефона"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Добавить в контакты"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Добавление данных"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Закрыть"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Указать год"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Загрузка..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Создать контакт"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Добавить аккаунт"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Импортировать контакты"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Создание новой группы"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Создать группу"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> группа</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> группы</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> групп</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групп</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Действительно удалить группу \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Контакты не будут удалены.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> человека из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> человек из <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
- <item quantity="few">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человека</item>
- <item quantity="many">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
- <item quantity="other">В группе <xliff:g id="COUNT_1">%1$d</xliff:g> человек</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортировать"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Создать…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Удалить ярлык \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? Сами контакты не будут удалены."</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Укажите имя"</string>
<string name="copy_text" msgid="3257145021583508761">"Копировать в буфер обмена"</string>
<string name="set_default" msgid="4417505153468300351">"Установить по умолчанию"</string>
<string name="clear_default" msgid="7193185801596678067">"Удалить настройки по умолчанию"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст скопирован"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Отменить изменения и завершить редактирование?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отменить"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Продолжить редактирование"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> (<xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>)"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Настроить профиль"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Имя контакта"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Название группы"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Не сохранять изменения?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Не сохранять"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Отмена"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Не сохранять изменения?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Поиск контактов"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Удалить контакты"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Мой профиль"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Мой профиль <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Отображаются все контакты"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Можно потерять телефон, но не контакты... если хранить их в Интернете!"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Добавить аккаунт"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Резервная копия нового контакта не будет сохранена. Добавить аккаунт для сохранения контактов в Интернете?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Добавьте аккаунт, чтобы сохранить свои контакты в Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новые контакты будут сохранены в аккаунте <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выберите аккаунт по умолчанию для новых контактов:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Добавить контакт"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Создать контакт"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Изменить контакт"</string>
- <string name="keep_local" msgid="1258761699192993322">"Сохранить локально"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Только просмотр"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Выбор контакта"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Связанные контакты"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Добавить"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Разделить"</string>
<string name="add_account" msgid="8201790677994503186">"Добавить аккаунт"</string>
<string name="add_new_account" msgid="5748627740680940264">"Добавить аккаунт"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Экспорт файлов базы данных"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"Добавить контакт"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Создать контакт"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Ещё"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Свернуть"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Показать все"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Недавние"</string>
<string name="about_card_title" msgid="2920942314212825637">"О контакте"</string>
- <string name="send_message" msgid="8938418965550543196">"Отправить сообщение"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Копирование…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Вчера"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Копирование..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Завтра"</string>
<string name="today" msgid="8041090779381781781">"Сегодня"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Сегодня, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Завтра, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(событие без названия)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Установить"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Чат"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Веб-сайт"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Событие"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Отношение"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Аккаунт"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Имя"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Адрес эл. почты"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Фото"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Нажмите, чтобы развернуть редактор контактов."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Нажмите, чтобы свернуть редактор контактов."</string>
<string name="content_description_directions" msgid="2686791825798189335">"Маршруты"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Недавнее SMS-сообщение. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Нажмите, чтобы ответить."</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Недавнее SMS-сообщение. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Нажмите, чтобы ответить."</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"входящий"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"исходящий"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропущенный"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Недавний вызов. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Нажмите, чтобы перезвонить."</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Недавний вызов. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Нажмите, чтобы перезвонить."</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Вы: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Чтобы обеспечить надежную работу Hangouts, указывайте вместо адреса электронной почты или номера телефона идентификатор пользователя в Hangouts."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Показать другие поля"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Сменить фото"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не удалось открыть редактор"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Выберите аккаунт"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Данные сохраняются в аккаунте <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Чтобы выбрать другой аккаунт, дважды нажмите здесь."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Связанные контакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Связанные контакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Связанные контакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Связанные контакты (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Связанных контактов: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Показать другие поля"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Сменить фото контакта"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Добавить фото контакта"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Фотография контакта"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Не удалось открыть редактор"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Сохранение в аккаунте"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Данные контактов из аккаунта <xliff:g id="ACCOUNT">%s</xliff:g> нельзя изменять"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"СВЯЗАТЬ КОНТАКТЫ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТМЕНА"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> повторяющийся контакт</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> повторяющихся контакта</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> повторяющихся контактов</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> повторяющегося контакта</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> связанный контакт</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> связанных контакта</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> связанных контактов</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> связанного контакта</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Этот контакт"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Повторяющиеся контакты"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Возможно, эти контакты относятся к одному человеку. Объедините их."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Связанные контакты"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Из ваших аккаунтов"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Сделать фото"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Все фото"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Выбор фото"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Из <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Удалить данные. <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Удалить данные. <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>."</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Удалить <xliff:g id="DATA_KIND">%s</xliff:g>."</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фото из аккаунта <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> не выбрано"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Фото из аккаунта <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> выбрано"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Выбор фото из неизвестного аккаунта отменен"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Выбрано фото из неизвестного аккаунта"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Выполняется обновление списка контактов, чтобы изменение языка вступило в силу.\n\nПодождите..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Предложения"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Добавить"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Открыть панель навигации"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Закрыть панель навигации"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Ярлык <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Ярлыки"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Аккаунты"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Показывать объединенную историю"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Мероприятия и сообщения"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Мероприятия"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Сообщения"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Предложения"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Чтобы с контактами было удобно работать, приведите их в порядок"</string>
+ <string name="undo" msgid="1425165101664071422">"Отменить"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Позвонить (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="call_home" msgid="1990519474420545392">"Домашний тел."</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Мобильный тел."</string>
+ <string name="call_work" msgid="5328785911463744028">"Рабочий тел."</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Рабочий факс"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Домашний факс"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Пейджер"</string>
+ <string name="call_other" msgid="8563753966926932052">"Позвонить"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Обратный вызов"</string>
+ <string name="call_car" msgid="3280537320306436445">"Тел. в машине"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Офис"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Номер ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Основной телефон"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Позвонить на номер факса"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Радиотелефон"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Телекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Телетайп"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Рабочий мобильный"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Рабочий пейджер"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Позвонить (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS-центр"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (вызов)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Отправить SMS (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS:домашний тел."</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS: мобильный"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS:рабочий тел."</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS:рабочий факс"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS: дом. факс"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS: пейджер"</string>
+ <string name="sms_other" msgid="806127844607642331">"Отправить SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS: номер обратного вызова"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS:тел. в машине"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS: тел. офиса"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS: номер ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS:основ. тел."</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Отправить SMS на номер факса"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS:радиотелефон"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS: телекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS: телетайп"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS:рабочий моб."</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS:рабоч. пейдж."</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Отправить текстовое сообщение на номер <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Начать видеовстречу"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Очистить список популярных контактов?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Список часто используемых контактов в приложениях \"Контакты\" и \"Телефон\" будет очищен, и почтовые приложения начнут заносить в него данные заново."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Подождите…"</string>
+ <string name="status_available" msgid="5586870015822828392">"На месте"</string>
+ <string name="status_away" msgid="1838861100379804730">"Отсутствует"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Не беспокоить"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Другое"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Каталог контактов из рабочего профиля"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Все контакты"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Быстрый вызов, контакт: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"Имя не указано"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часто набираемые"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Все контакты с номерами телефонов"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакты из рабочего профиля"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Обновления"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Устройство"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Имя"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдоним"</string>
+ <string name="name_given" msgid="4280790853455320619">"Имя"</string>
+ <string name="name_family" msgid="7466985689626017037">"Фамилия"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Форма обращения"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Отчество"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Звание/титул"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Транскрипция имени"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Транскрипция имени"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Транскрипция отчества"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Транскрипция фамилии"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Адрес электронной почты"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адрес"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Чат"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Организация"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Отношения"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Определенная дата"</string>
+ <string name="sms" msgid="1756857139634224222">"Текстовое сообщение"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адрес"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компания"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Должность"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Примечания"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Другое"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Веб-сайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Группы"</string>
+ <string name="email_home" msgid="8573740658148184279">"Личная эл. почта"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Моб. эл. почта"</string>
+ <string name="email_work" msgid="2807430017302722689">"Рабочая эл.почта"</string>
+ <string name="email_other" msgid="3454004077967657109">"Написать письмо"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Написать письмо (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="email" msgid="5668400997660065897">"Эл. почта"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Город"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Регион"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Почтовый индекс"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Страна"</string>
+ <string name="map_home" msgid="1243547733423343982">"Просмотреть домашний адрес"</string>
+ <string name="map_work" msgid="1360474076921878088">"Просмотреть рабочий адрес"</string>
+ <string name="map_other" msgid="3817820803587012641">"Просмотр адреса"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Посмотреть адрес (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Чат через AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Чат через Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Чат через Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Чат через Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Чат через QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Чат через Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Чат через ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Чат через Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"удалить"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Показать дополнительные поля"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Скрыть дополнительные поля"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Показать дополнительные поля с транскрипцией имени"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Скрыть поля с транскрипцией имени"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Показать"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Скрыть"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Поля показаны"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Поля скрыты"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Все контакты"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Помеченные"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Настроить"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Все контакты"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Все контакты"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Удалить группу синхронизации"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Добавить группу синхронизации"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Другие группы..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Вместе с группой \"<xliff:g id="GROUP">%s</xliff:g>\" перестанут синхронизироваться контакты, не добавленные в группы."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Сохранение настроек..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Пользовательский режим просмотра"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Сохранить контакты:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-карта <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d контакт</item>
+ <item quantity="few">%1$d контакта</item>
+ <item quantity="many">%1$d контактов</item>
+ <item quantity="other">%1$d контакта</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> контакта • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> контактов • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контакта • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF-файл"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Нет контактов для импорта"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Импортировать контакты из vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Отменить импорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\"?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Отменить экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\"?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не удалось отменить импорт/экспорт vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Неизвестная ошибка"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не удалось открыть файл \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\". Причина: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не удалось запустить функцию экспорта. Причина: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нет контактов для экспорта."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Отсутствует необходимое разрешение."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ошибка при экспорте. Причина: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Ошибка ввода-вывода"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недостаточно памяти. Возможно, файл слишком большой."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат не поддерживается."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\" завершен."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Экспорт контактов завершен"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Экспорт контактов завершен. Чтобы открыть к ним доступ, нажмите на уведомление."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Нажмите, чтобы открыть доступ к контактам."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\" отменен."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Экспорт данных контакта"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Экспорт контактов…"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"База данных недоступна."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нет контактов для экспорта."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Сбой при запуске редактора vCard."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Сбой экспорта"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Не удалось экспортировать данные.\nПричина: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Импорт: <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ошибка чтения vCard-файла"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Импорт файла vCard <xliff:g id="FILENAME">%s</xliff:g> завершен"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Импорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\" отменен"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Импорт <xliff:g id="FILENAME">%s</xliff:g> начнется в ближайшее время."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл будет импортирован в ближайшее время."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запрос на импорт данных vCard отклонен. Повторите попытку позже."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакты скоро будут экспортированы."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запрос на экспорт данных vCard отклонен. Повторите попытку позже."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Выполняется кеширование файлов vCard в локальное временное хранилище. Импорт скоро начнется."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Не удалось импортировать данные vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Получено по NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширование"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Экспортировать в VCF-файл"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортировка"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Транскрипция имени"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Всегда показывать"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Скрывать пустое поле"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Имя"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Фамилия"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Формат имени и фамилии"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Сначала имя"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Сначала фамилия"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Аккаунты"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Аккаунт по умолчанию для новых контактов"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Мои данные"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Настройте профиль"</string>
+ <string name="setting_about" msgid="7014388749752042863">"О Контактах"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Поделиться избранными контактами"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Поделиться всеми контактами"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Не удалось поделиться контактами"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Экспорт контактов"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Импорт контактов"</string>
+ <string name="share_error" msgid="948429331673358107">"Не удалось передать данные."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Видимых контактов нет"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Фильтр контактов"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Фильтр контактов"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Настроить просмотр"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сохранить"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Поиск в контактах"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранное"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Импортировать"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Экспортировать"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблокированные номера"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"с помощью <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> с помощью <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"прекратить поиск"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Очистить условия поиска"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Аккаунт"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Всегда использовать для звонков"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Позвонить и отправить сообщение"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Введите текст…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ОТПРАВИТЬ СООБЩЕНИЕ И ПОЗВОНИТЬ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> из <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Версия сборки"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Лицензии открытого ПО"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Сведения о лицензиях на ПО с открытым исходным кодом"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Политика конфиденциальности"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Условия использования"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Лицензии открытого ПО"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Не удалось открыть URL"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Аккаунт <xliff:g id="ACCOUNT_INFO">%s</xliff:g>, выбран"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Аккаунт <xliff:g id="ACCOUNT_INFO">%s</xliff:g>, не выбран"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Видеовызов"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Удалить"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Многоточие"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин. <xliff:g id="SECONDS">%2$s</xliff:g> сек."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ч. <xliff:g id="MINUTES_1">%2$s</xliff:g> мин. <xliff:g id="SECONDS">%3$s</xliff:g> сек."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Этот ярлык неактивен"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт удален"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Импортировать"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Выбор контактов"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"На SIM-карте нет контактов"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Контакт уже внесен в список"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Импортирован <xliff:g id="COUNT">%d</xliff:g> контакт с SIM-карты</item>
+ <item quantity="few">Импортировано <xliff:g id="COUNT">%d</xliff:g> контакта с SIM-карты</item>
+ <item quantity="many">Импортировано <xliff:g id="COUNT">%d</xliff:g> контактов с SIM-карты</item>
+ <item quantity="other">Импортировано <xliff:g id="COUNT">%d</xliff:g> контакта с SIM-карты</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не удалось импортировать контакты с SIM-карты"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Импорт с SIM-карты"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Отмена"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автосинхронизация отключена. Нажмите, чтобы ее включить."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Закрыть"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Синхронизация аккаунта отключена. Нажмите, чтобы ее включить."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Включить автосинхронизацию?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Изменения всех приложений и аккаунтов (не только Google Контактов) будут синхронизироваться между веб-интерфейсом и вашими устройствами."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Включить"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Нет соединения"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Показать ещё"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Импорт контактов с SIM-карты завершен"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Ошибка импорта"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не удалось импортировать контакты с SIM-карты"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Импорт контактов с SIM-карты…"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Уведомления"</string>
</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
deleted file mode 100644
index b24b933a8..000000000
--- a/res/values-si-rLK/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"සම්බන්ධතා"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"සම්බන්ධතා"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"සම්බන්ධතාව බැලීම"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"සම්බන්ධතාව සංස්කරණය කිරීම"</string>
- <string name="contactsList" msgid="8661624236494819731">"සම්බන්ධතා"</string>
- <string name="shortcutContact" msgid="749243779392912958">"සම්බන්ධතාවය"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ඍජු ඇමතීම"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ඍජු පණිවිඩය"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"සම්බන්ධතා කෙටිමඟක් තෝරාගන්න"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"ඇමතීමට අංකයක් තෝරාගන්න"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"පණිවිඩයක් යැවීමට අංකයක් තෝරාගන්න"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"සම්බන්ධතාවය වෙත එක් කරන්න"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"සම්බන්ධතාවයක් තෝරන්න"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
- <string name="starredList" msgid="4817256136413959463">"තරුව සලකුණු කළ"</string>
- <string name="frequentList" msgid="7154768136473953056">"නිතර"</string>
- <string name="strequentList" msgid="5640192862059373511">"ප්‍රියතම"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"සම්බන්ධතා විස්තර"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"සම්බන්ධතාවයක් සාදන්න"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"කණ්ඩායම සංස්කරණය කරන්න"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"කණ්ඩායමක් සාදන්න"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"පිළිබඳ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"යාවත්කාලීන කිරීම්"</string>
- <string name="searchHint" msgid="8482945356247760701">"සම්බන්ධතා සෙවීම"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"සම්බන්ධතාව පෙන්වන්න"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"ප්‍රියතම වලට එක් කරන්න"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"ප්‍රියතම වලින් ඉවත් කරන්න"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ප්‍රියතමයන්ගෙන් ඉවත් කරන්න"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"ප්‍රියතමයන් වෙත එකතු කරන්න"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"සංස්කරණය කරන්න"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"මකන්න"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ඡායාරූපය වෙනස් කරන්න"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"මුල් තිරයෙහි තබන්න"</string>
- <string name="menu_call" msgid="3992595586042260618">"සම්බන්ධතාව අමතන්න"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"සම්බන්ධතාවයට කෙටි පණිවිඩයක් යවන්න"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"සබැඳි ඉවත් කරන්න"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"සංස්කරණය කරන්න"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"මකන්න"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"සම්බන්ධතාවය එක් කරන්න"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"කණ්ඩායමක් එක් කරන්න"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කරන්නද?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"සබැඳි ඉවත් කරන්න"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ඔබ දැනටමත් සිදු කර ඇති වෙනස් කිරීම් සුරැකීමට සහ මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කිරීමට කැමතිද?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"සුරකින්න සහ සබැඳි ඉවත් කරන්න"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"ඔබ දැනටමත් සිදු කර ඇති වෙනස් කිරීම් සුරැකීමට සහ තෝරන ලද සම්බන්ධතාව සමග සබැඳි කිරීමට කැමතිද?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"සුරකින්න සහ සබැඳි කරන්න"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"සබැඳි කරන්න"</string>
- <string name="menu_save" msgid="1727844363591825909">"සුරකින්න"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"සම්බන්ධතා සබැඳි කරන්න"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ඔබට <xliff:g id="NAME">%s</xliff:g> සමඟ සබැඳි කිරීමට අවශ්‍ය සම්බන්ධතාව තෝරන්න:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"සියලු සම්බන්ධතා පෙන්වන්න"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"යෝජිත සම්බන්ධතා"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"සියලුම සම්බන්ධතා"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"සම්බන්ධතා සබැඳි කරන ලදී"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="one">සම්බන්ධතා මකන ලදී</item>
- <item quantity="other">සම්බන්ධතා මකන ලදී</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"රිංග්ටෝනය සකසන්න"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"හඬ තැපෑල වෙත සියලු ඇමතුම්"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ඔබේ කියවීමට-පමණි වන ගිණුම් වෙතින් වන සම්බන්ධතා මැකිය නොහැකිය, නමුත් ඒවා සැඟවිය හැකිය."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"සඟවන්න"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"මැකීමට ඇති සම්බන්ධතාවයෙහි බහුවිධ ගිණුම්වලින් විස්තර ඇත. කියවීමට-පමණි වන ගිණුම් වෙතින් වන විස්තර නොමකනු ඇත, ඒවා සඟවනු ලැබේ."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"සබැඳි කිරීමට ඔබ විසින් අවම වශයෙන් සම්බන්ධතා දෙකක් තෝරා ගත යුතුය."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"තෝරන ලද සම්බන්ධතා සබැඳි කරන්නද?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"සබැඳි කරන්න"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"මෙම සම්බන්ධතාව මකන්නද?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"තෝරන ලද සම්බන්ධතා මකන්නද?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ඔබේ කියවීමට-පමණි වන ගිණුම් වෙතින් වන සම්බන්ධතා මැකිය නොහැකිය, නමුත් ඒවා සැඟවිය හැකිය."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"මකන සම්බන්ධතාවල බහුවිධ ගිණුම්වලින් තොරතුරු ඇතුළත්ය. කියවීමට-පමණි වන ගිණුම් වෙතින් වන විස්තර නොමකනු ඇත, ඒවා සඟවනු ලැබේ."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"මෙම සම්බන්ධතාව මැකීම බහුවිධ ගිණුම්වලින් තොරතුරු මකනු ඇත."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"මෙම සම්බන්ධතාව මකන්නද?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"මකන්න"</string>
- <string name="menu_discard" msgid="6854657936970228164">"වෙනස්කම් ඉවතලන්න"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"සම්බන්ධතාවය නොපවතී."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"සම්බන්ධතාව මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"සංවිධානය"</item>
- <item msgid="7196592230748086755">"සටහන"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ටැබ්ලටයේ පින්තූර කිසිවක් ලද නොහැක."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"දුරකථනයේ පින්තූර කිසිවක් ලද නොහැක."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"සම්බන්ධතා ඡායාරූපය"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"අභිරුචි ලේබල නම"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"හඬ තැපෑලට ඍජුවම ඇමතුම් යවන්න"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ඡායාරූපය මකන්න"</string>
- <string name="noContacts" msgid="4955659076981974652">"සම්බන්ධතා නැත"</string>
- <string name="noGroups" msgid="8614664663561385253">"කණ්ඩායම් නොමැත."</string>
- <string name="noAccounts" msgid="7768267764545265909">"කණ්ඩායම් නිර්මාණය කිරීමට ඔබට ගිණුමක් අවශ්‍ය වේ."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"මෙම කණ්ඩායම තුළ පුද්ගලයින් නොමැත."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"කිහිපයක් එක් කිරීමට, කණ්ඩායම සංස්කරණය කරන්න."</string>
- <string name="savingContact" msgid="4075751076741924939">"සම්බන්ධතාවය සුරකමින්…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"සම්බන්ධතාවය සුරකින ලදි"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"සම්බන්ධතා සබැඳි ඉවත් කරන ලදී"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"සම්බන්ධතා වෙනස්කම් සුරැකීමට නොහැක."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"සම්බන්ධතාව සබැඳි ඉවත් කිරීමට නොහැකි විය."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"සම්බන්ධතාව සබැඳි කළ නොහැකි විය."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"සම්බන්ධතාව සුරැකීමේ දෝෂය."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"සම්බන්ධතා ඡායාරූපය වෙනස් කිරීම් සුරැකිය නොහැකි විය."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"කණ්ඩායම සුරකින ලදි."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"කණ්ඩායම් වෙනස්කම් සුරැකීමට නොහැක."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one">දුරකථන අංක සමඟ සම්බන්ධතාවන් <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">දුරකථන අංක සමඟ සම්බන්ධතාවන් <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"දුරකථන අංක සහිත සම්බන්ධතා නැත"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ක් හුමු වුණි</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ක් හුමු වුණි</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"සම්බන්ධතා නැත"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">සොයා ගැනීම් <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">සොයා ගැනීම් <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"සියලු"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ප්‍රියතම"</string>
- <string name="callBack" msgid="5498224409038809224">"නැවත අමතන්න"</string>
- <string name="callAgain" msgid="3197312117049874778">"නැවත අමතන්න"</string>
- <string name="returnCall" msgid="8171961914203617813">"ඇමතුම නැවත ලබා දෙන්න"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"සම්බන්ධතා වලට \"<xliff:g id="EMAIL">%s</xliff:g>\" එක් කරන්නද?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"සම්බන්ධතා ඡායාරූපය"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ධන"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"සම්බන්ධතා <xliff:g id="TOTAL_NUMBER">%s</xliff:g> කින් <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ක්"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"ඔබගේ සම්බන්ධතා වල නම්"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"මෙම ක්‍රියාව හැසිරවීමට යෙදුමක් සොයාගත්තේ නැත"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"පෙර තිරයට යෑම ආපසු යෑම ක්ලික් කරන්න"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"දුරකථන අංකයක් එක් කරන්න"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ඊ-තැපෑලක් එක් කරන්න"</string>
- <string name="missing_app" msgid="1466111003546611387">"මෙම ක්‍රියාව හැසිරවීමට යෙදුමක් සොයාගත්තේ නැත"</string>
- <string name="menu_share" msgid="943789700636542260">"බෙදාගන්න"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"සම්බන්ධතා වලට එක් කරන්න"</string>
- <string name="share_via" msgid="563121028023030093">"ඔස්සේ සම්බන්ධතාවය බෙදාගන්න"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ගිණුම යටතේ කණ්ඩායමක් නිර්මාණය කරන්න"</string>
- <string name="audio_chat" msgid="2535716629358298691">"හඬ කතාබහ"</string>
- <string name="video_chat" msgid="1872255818640336072">"වීඩියෝ කතාබස්"</string>
- <string name="connections" msgid="8098440723172028350">"සම්බන්ධතා"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"සම්බන්ධතාවයක් එක් කරන්න"</string>
- <string name="recent" msgid="2659189233141493004">"මෑත"</string>
- <string name="recent_updates" msgid="4267258535615860710">"මෑත යාවත්කාලීන"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> සම්බන්ධතාව"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ගිණුම"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"මෙම යෙදුමෙන් සංස්කරණය කළ නොහැක."</string>
- <string name="group_read_only" msgid="1061762906115697637">"මෙම උපාංගයෙහි සංස්කරණය කළ නොහැක"</string>
- <string name="take_photo" msgid="7496128293167402354">"ඡායාරූපය ගන්න"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"නව ඡායාරූපයක් ගන්න"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ඡායාරූපය තෝරන්න"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"අලුත් ඡායාරූපය තෝරන්න"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"සම්බන්ධතා ලැයිස්තුව යාවත්කාලීන වෙමින් පවතී."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"සොයමින්..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"තෝරාගත් ඒවා පෙන්වන්න"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"සියල්ල පෙන්වන්න"</string>
- <string name="menu_select_all" msgid="621719255150713545">"සියල්ල තෝරන්න"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"සියල්ල තේරීම ඉවත් කරන්න"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"නව දෙයක් එක් කරන්න"</string>
- <string name="add_organization" msgid="7311893231158291197">"සංවිධානය එක් කරන්න"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"දිනය"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"කණ්ඩායම් නම"</string>
- <string name="change_photo" msgid="8530597935483526383">"වෙනස් කරන්න"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ප්‍රාථමික රූප"</string>
- <string name="description_star" msgid="2605854427360036550">"ප්‍රියතම"</string>
- <string name="edit_contact" msgid="7529281274005689512">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"වත්මන් සම්බන්ධතාව තෝරන ලද සම්බන්ධතාව සමඟ සබැඳි කරන්නද?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"තෝරාගෙන ඇති සම්බන්ධතාවය සංස්කරණය කිරීමට මාරු වෙන්නද? ඔබ දැනට ඇතුළු කළ තොරතුරු පිටපත් වනු ඇත."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"මගේ සම්බන්ධතා වෙතට පිටපත් කරන්න"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"මගේ සම්බන්ධතා වලට එක් කරන්න"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> නාමාවලිය"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"අභිරුචි"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"සැකසීම්"</string>
- <string name="menu_settings" msgid="377929915873428211">"සැකසීම්"</string>
- <string name="menu_help" msgid="1680178646764069976">"උදවු සහ ප්‍රතිපෝෂණ"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"පෙන්වීම් විකල්ප"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"දුරකථන අංකය"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"සම්බන්ධතා වලට එක් කරන්න"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"සම්බන්ධතාවය වෙත එක් කරන්න"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"වසන්න"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"වර්ෂය අතුළත් කරන්න"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"සම්බන්ධතාවය"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"පූරණය වෙමින්..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ගිණුම එක් කරන්න"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"සම්බන්ධතා ආයාත කරන්න"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"නව කණ්ඩායමක් නිර්මාණය කරන්න"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"නව කණ්ඩායමක් නිර්මාණය කිරීම"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one">කණ්ඩායම් <xliff:g id="COUNT">%0$d</xliff:g></item>
- <item quantity="other">කණ්ඩායම් <xliff:g id="COUNT">%0$d</xliff:g></item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" කණ්ඩායම මකා දමන්නද? (සම්බන්ධතා මකා දමන්නේ නැත.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> වෙතින් පුද්ගලයන් <xliff:g id="COUNT_2">%1$d</xliff:g> යි</item>
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> වෙතින් පුද්ගලයන් <xliff:g id="COUNT_2">%1$d</xliff:g> යි</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one">පුද්ගලයින් <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">පුද්ගලයින් <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"වෙනත් එකක් සමඟ එක් කිරීමට පෙර සම්බන්ධතා නම ටයිප් කරන්න."</string>
- <string name="copy_text" msgid="3257145021583508761">"පසුරු පුවරුවට පිටපත් කරන්න"</string>
- <string name="set_default" msgid="4417505153468300351">"සුපුරුදු ලෙස සකසන්න"</string>
- <string name="clear_default" msgid="7193185801596678067">"සුපුරුදු හිස් කරන්න"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"පෙළ පිටපත් කරන ලදී"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ඔබේ වෙනස් කිරීම් ඉවත දමා සංස්කරණය කිරීමෙන් ඉවත් වන්නද?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ඉවතලන්න"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"සංස්කරණය කරගෙන යන්න"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"මගේ පැතිකඩ සකසන්න"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"පුද්ගලයාගේ නම ටයිප් කරන්න"</string>
- <string name="group_name_hint" msgid="238359485263401293">"කණ්ඩායමේ නම"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"මගේ දේශීය පැතිකඩ"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"මගේ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> පැතිකඩ"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"සියලු සම්බන්ධතා පෙන්වමින්"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"ඔබගේ දුරකථනය නොමැති වුවත් සම්බන්ධතා සුරක්ෂිතව තබන්න: සබැඳි සේවාවක් සමඟ සමමුහුර්ත කරන්න."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ගිණුමක් එක් කරන්න"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"ඔබගේ නව සම්බන්ධතාවය උපස්ථ නොවනු ඇත. ඔබගේ සම්බන්ධතා සබැඳිව උපස්ථ කරන ගිණුමක් එක් කරන්නද?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"නව සම්බන්ධතා <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> වෙත සුරකිනු ඇත."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"නව සම්බන්ධතා සඳහා පෙරනිමි ගිණුමක් තෝරන්න:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"නව සම්බන්ධතාව එක් කරන්න"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
- <string name="keep_local" msgid="1258761699192993322">"පෙදෙසිව තබාගන්න"</string>
- <string name="add_account" msgid="8201790677994503186">"ගිණුමක් එකතු කරන්න"</string>
- <string name="add_new_account" msgid="5748627740680940264">"නව ගිණුමක් එක් කරන්න"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"දත්ත සමුදා ගොනු නිර්යාත කරන්න"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"නව සම්බන්ධතාව එක් කරන්න"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"තව බලන්න"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"අඩුවෙන් බලන්න"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"සියල්ල බලන්න"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"මෑත"</string>
- <string name="about_card_title" msgid="2920942314212825637">"පිළිබඳ"</string>
- <string name="send_message" msgid="8938418965550543196">"පණිවිඩය යවන්න"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"පුද්ගලික පිටපතක් නිර්මාණය කරමින්..."</string>
- <string name="yesterday" msgid="6840858548955018569">"ඊයේ"</string>
- <string name="tomorrow" msgid="6241969467795308581">"හෙට"</string>
- <string name="today" msgid="8041090779381781781">"අද"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"අද <xliff:g id="TIME_INTERVAL">%s</xliff:g> ට"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"හෙට <xliff:g id="TIME_INTERVAL">%s</xliff:g> ට"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(නම් නොකළ සිදුවීම)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"සකසන්න"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"සංවිධානය"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"අපනාමය"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"සටහන"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"වෙබ් අඩවිය"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"සිදුවීම"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"සම්බන්ධතාව"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ගිණුම"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"නම‍"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ඊ-තැපෑල"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"දුරකථනය"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ඡායාරූපය"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"සම්බන්ධ සංස්කාරකය දිගහරින්න ක්ලික් කරන්න."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"සම්බන්ධ සංස්කාරකය හකුලන්න ක්ලික් කරන්න."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"ස්ථානයට දිශාවන්"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"මෑත SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. පිළිතුරු සැපයීමට ක්ලික් කරන්න"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ඇතුළට එන"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"පිටතට යන"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"හමු නොවී යන ලදි"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"මෑත අමන්තුම්. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ආපසු ඇමතිමට ක්ලික් කරන්න"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"ඔබ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"ඔබ පුද්ගලයාගේ Hangouts හඳුන්වනය ඊ-තැපැල් හෝ දුරකථන ක්ෂේත්‍රයට ඇතුළත් කළ විටHangouts වඩා හොඳින් ක්‍රියා කරයි."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"තව ක්ෂේත්‍ර"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ඡායාරූපය වෙනස් කරන්න"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"සංස්කාරකය විවෘත කිරීමට නොහැකි විය."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"සුරැකීම"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"දැනට <xliff:g id="ACCOUNT_NAME">%s</xliff:g> වෙත සුරැකේ. වෙනත් ගිණුමක් තේරීමට දෙවරක් තට්ටු කරන්න."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">සබැඳි කළ සම්බන්ධතා (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">සබැඳි කළ සම්බන්ධතා (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"සම්බන්ධතා සබැඳි කරන්න"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"අවලංගු කරන්න"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one">විය හැකි අනුපිටපත් <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">විය හැකි අනුපිටපත් <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one">සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"මෙම සම්බන්ධතාව"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"විය හැකි අනුපිටපත්"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"මෙම සම්බන්ධතා එකම පුද්ගලයා විය හැකිය. ඔබට ඒවා තනි සම්බන්ධතාවක් ලෙස සබැඳි කළ හැකිය."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"සබැඳි කළ සම්බන්ධතා"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"ඔබගේ ගිණුම් වෙතින්"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ඡායාරූපයක් ගන්න"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"සියලු ඡායාරූප"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ඡායාරූපය තෝරන්න"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> වෙතින්"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> මැකීම"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> මැකීම"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>වෙතින් ඡායාරූපය පරීක්ෂා කරන ලදී"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> වෙතින් ඡායාරූපය පරීක්ෂා කරන ලදී"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"නොදන්නා ගිණුම වෙතින් වන ඡායාරූපය ලකුණු නොකරන ලදී"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"නොදන්නා ගිණුම වෙතින් වන ඡායාරූපය ලකුණු කරන ලදී"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"භාෂා වෙනස්වීම පෙන්වීමට සම්බන්ධතා ලැයිස්තුව යාවත්කාලීන වෙමින් පවතී.\n\nකරුණාකර රැඳී සිටින්න..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"අවහිර කළ අංක"</string>
-</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
new file mode 100644
index 000000000..9b7e7a743
--- /dev/null
+++ b/res/values-si/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"සම්බන්ධතා"</string>
+ <string name="contactsList" msgid="8661624236494819731">"සම්බන්ධතා"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"සම්බන්ධතාව එක් කරන්න"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"සම්බන්ධතාවය"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ඍජු ඇමතීම"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ඍජු පණිවිඩය"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"සම්බන්ධතාව තෝරන්න"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"සම්බන්ධතාවය වෙත එක් කරන්න"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"සම්බන්ධතාවයක් තෝරන්න"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"තෝරන්න"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
+ <string name="searchHint" msgid="8482945356247760701">"සම්බන්ධතා සෙවීම"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"ප්‍රියතම වලට එක් කරන්න"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"ප්‍රියතම වලින් ඉවත් කරන්න"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ප්‍රියතමයන්ගෙන් ඉවත් කරන්න"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"ප්‍රියතමයන් වෙත එකතු කරන්න"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"සංස්කරණය කරන්න"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"මකන්න"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ඡායාරූපය වෙනස් කරන්න"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"කෙටි මග තනන්න"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"සබැඳි ඉවත් කරන්න"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"සම්බන්ධතා ඉවත් කරන්න"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"ලේබලය නැවත නම් කරන්න"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ලේබලය මකන්න"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"සම්බන්ධතාව එක් කරන්න"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"සම්බන්ධතා තෝරන්න"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"සම්බන්ධතා එක් කරන්න"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"ලේබලයෙන් ඉවත් කරන්න"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ලේබලය තනන්න"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කරන්නද?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"සබැඳි ඉවත් කරන්න"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ඔබ දැනටමත් සිදු කර ඇති වෙනස් කිරීම් සුරැකීමට සහ මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කිරීමට කැමතිද?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"සුරකින්න සහ සබැඳි ඉවත් කරන්න"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"ඔබ දැනටමත් සිදු කර ඇති වෙනස් කිරීම් සුරැකීමට සහ තෝරන ලද සම්බන්ධතාව සමග සබැඳි කිරීමට කැමතිද?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"සුරකින්න සහ සබැඳි කරන්න"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"සබැඳි කරමින්"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"සබැඳිය ඉවත් කරමින්"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"සබැඳි කරන්න"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"සබැඳි සම්බන්ධතා බලන්න"</string>
+ <string name="menu_save" msgid="1727844363591825909">"සුරකින්න"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"සම්බන්ධතා සබැඳි කරන්න"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ඔබට <xliff:g id="NAME">%s</xliff:g> සමඟ සබැඳි කිරීමට අවශ්‍ය සම්බන්ධතාව තෝරන්න:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"යෝජිත සම්බන්ධතා"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"සියලුම සම්බන්ධතා"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> සම්බන්ධ කරන ලදී"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"සම්බන්ධතා සබැඳි කරන ලදී"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> මකන ලදී"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> සහ <xliff:g id="NAME_1">%2$s</xliff:g> මකන ලදී"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… මකන ලදී"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="one">සම්බන්ධතා මකන ලදී</item>
+ <item quantity="other">සම්බන්ධතා මකන ලදී</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one">සම්බන්ධතා <xliff:g id="COUNT_1">%d</xliff:g></item>
+ <item quantity="other">සම්බන්ධතා <xliff:g id="COUNT_1">%d</xliff:g></item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google වෙතින්"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> වෙතින්"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"රිංග්ටෝනය සකසන්න"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"හඬ තැපෑල වෙත යොමු කරන්න"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"හඬ තැපෑල වෙත යොමු නොකරන්න"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"මෙම සම්බන්ධතාව කියවීමට-පමණී. එය මැකීමට නොහැකිය, නමුත් ඔබට එය සැඟවීමට හැකිය."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"සම්බන්ධතාව සඟවන්න"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"මෙම සම්බන්ධතාවෙහි කියවීමට-පමණී ගිණුම් සැඟවෙනු ඇත, නමුත් නොමැකෙනු ඇත."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"මෙම සම්බන්ධතාව මකන්නද?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"තෝරන ලද සම්බන්ධතා මකන්නද?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ඔබේ කියවීමට-පමණි වන ගිණුම් වෙතින් වන සම්බන්ධතා මැකිය නොහැකිය, නමුත් ඒවා සැඟවිය හැකිය."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"මකන සම්බන්ධතාවල බහුවිධ ගිණුම්වලින් තොරතුරු ඇතුළත්ය. කියවීමට-පමණි වන ගිණුම් වෙතින් වන විස්තර නොමකනු ඇත, ඒවා සඟවනු ලැබේ."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"මෙම සම්බන්ධතාව මැකීම බහුවිධ ගිණුම්වලින් තොරතුරු මකනු ඇත."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"මෙම සම්බන්ධතාව මකන්නද?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"මකන්න"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"සම්බන්ධතාවය නොපවතී."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"සම්බන්ධතාව මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"උපාංගය මත පින්තූර කිසිවක් ලබා ගත නොහැකිය."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"සම්බන්ධතා ඡායාරූපය"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"අභිරුචි ලේබල නම"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ඡායාරූපය මකන්න"</string>
+ <string name="noContacts" msgid="2228592924476426108">"ඔබගේ සම්බන්ධතා ලැයිස්තුව හිස්ය"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"මෙම ලේබලය සහිත සම්බන්ධතා නැත."</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"මෙම ගිණුමෙහි සම්බන්ධතා නොමැත"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"ඔබගේ සම්බන්ධතා ලැයිස්තුව හිස්ය"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> සුරැකිණි"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"සම්බන්ධතාවය සුරකින ලදි"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"සම්බන්ධතා සබැඳි ඉවත් කරන ලදී"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"සම්බන්ධතාවේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"සම්බන්ධතාව සබැඳියෙන් ඉවත් කිරීමට නොහැකි විය"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"සම්බන්ධතාව සබැඳිමට නොහැකි විය"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"සම්බන්ධතාව සුරැකීමේ දෝෂය"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"සම්බන්ධතා ඡායාරූපයේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"ලේබලය පූරණය කිරීමට අසමත් විය"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ලේබලය මකන ලදී"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"ලේබලය තනන ලදී"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ලේබලය තැනීමට නොහැකිය"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"ලේබලය යාවත්කාලීන කරන ලදී"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"ලේබලයෙන් ඉවත් කෙරිණි"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"ලේබලයට එක් කෙරිණි"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ලේබලයේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"එම ලේබලය දැනටමත් පවතී"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"සමහර සම්බන්ධතාවලට ඊ-තැපැල් නැත."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"සමහර සම්බන්ධතාවලට දුරකථන අංක නැත."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ඊ-තැපෑල යවන්න"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"පණිවිඩය යවන්න"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"සම්බන්ධතා තෝරන්න"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"යවන්න"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"සම්බන්ධතා නැත"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"සම්බන්ධතා වලට \"<xliff:g id="EMAIL">%s</xliff:g>\" එක් කරන්නද?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"ඔබගේ සම්බන්ධතා වල නම්"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"පෙර තිරයට යෑම ආපසු යෑම ක්ලික් කරන්න"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"දුරකථන අංකයක් එක් කරන්න"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ඊ-තැපෑලක් එක් කරන්න"</string>
+ <string name="missing_app" msgid="1466111003546611387">"මෙම ක්‍රියාව හැසිරවීමට යෙදුමක් සොයාගත්තේ නැත"</string>
+ <string name="menu_share" msgid="943789700636542260">"බෙදාගන්න"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"සම්බන්ධතා වලට එක් කරන්න"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"එක් කරන්න"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">මේ හරහා සම්බන්ධතා බෙදා ගන්න</item>
+ <item quantity="other">මේ හරහා සම්බන්ධතා බෙදා ගන්න</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ගිණුම තෝරන්න"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"ලේබලය තනන්න"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"ලේබලය නැවත නම් කරන්න"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ලේබල නම"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ලේබල නම"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"හඬ කතාබහ"</string>
+ <string name="video_chat" msgid="1872255818640336072">"වීඩියෝ කතාබස්"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> සම්බන්ධතාව"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ගිණුම"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ඡායාරූපය ගන්න"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"නව ඡායාරූපයක් ගන්න"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ඡායාරූපය තෝරන්න"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"අලුත් ඡායාරූපය තෝරන්න"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"සොයමින්..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"දිනය"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ලේබලය"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"අවලංගු කරන්න"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"ආපසු"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"වසන්න"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"තෝරාගෙන ඇති සම්බන්ධතාවය සංස්කරණය කිරීමට මාරු වෙන්නද? ඔබ දැනට ඇතුළු කළ තොරතුරු පිටපත් වනු ඇත."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> නාමාවලිය"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"සැකසීම්"</string>
+ <string name="menu_settings" msgid="377929915873428211">"සැකසීම්"</string>
+ <string name="menu_help" msgid="1680178646764069976">"උදවු සහ ප්‍රතිපෝෂණ"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"දුරකථන අංකය"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"සම්බන්ධතා වලට එක් කරන්න"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"වසන්න"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"වර්ෂය අතුළත් කරන්න"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ගිණුම එක් කරන්න"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ආයාත කරන්න"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"අලුත් එකක් තනන්න..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ලේබලය මකන්නද? (සම්බන්ධතා ඒවාම නොමැකෙනු ඇත.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"වෙනත් එකක් සමඟ එක් කිරීමට පෙර සම්බන්ධතා නම ටයිප් කරන්න."</string>
+ <string name="copy_text" msgid="3257145021583508761">"පසුරු පුවරුවට පිටපත් කරන්න"</string>
+ <string name="set_default" msgid="4417505153468300351">"සුපුරුදු ලෙස සකසන්න"</string>
+ <string name="clear_default" msgid="7193185801596678067">"සුපුරුදු හිස් කරන්න"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"පෙළ පිටපත් කරන ලදී"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"වෙනස්කම් ඉවතලන්න ද?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ඉවතලන්න"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"අවලංගු කරන්න"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"අභිරුචිකරණ ඉවත ලන්නද?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"සම්බන්ධතා සොයන්න"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"සම්බන්ධතා ඉවත් කරන්න"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"මගේ දේශීය පැතිකඩ"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"මගේ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> පැතිකඩ"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google වෙත ඔබගේ සම්බන්ධතා උපස්ථ කරනු ඇති ගිණුමක් එක් කිරීමට මිනිත්තුවක් ගන්න."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"නව සම්බන්ධතා <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> වෙත සුරකිනු ඇත."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"නව සම්බන්ධතා සඳහා පෙරනිමි ගිණුමක් තෝරන්න:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"නව සම්බන්ධතාව තනන්න"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"නැරඹීමට පමණයි"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"සංස්කරණය කිරීමට සම්බන්ධතාව තෝරන්න"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"සබැඳි සම්බන්ධතා"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"එක් කරන්න"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"සබැඳි ඉවත් කර."</string>
+ <string name="add_account" msgid="8201790677994503186">"ගිණුමක් එකතු කරන්න"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"නව ගිණුමක් එක් කරන්න"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"දත්ත සමුදා ගොනු නිර්යාත කරන්න"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"නව සම්බන්ධතාව තනන්න"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"තව බලන්න"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"අඩුවෙන් බලන්න"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"මෑත"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"පිළිබඳ"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"පුද්ගලික පිටපතක් නිර්මාණය කරමින්…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"හෙට"</string>
+ <string name="today" msgid="8041090779381781781">"අද"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"අද <xliff:g id="TIME_INTERVAL">%s</xliff:g> ට"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"හෙට <xliff:g id="TIME_INTERVAL">%s</xliff:g> ට"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(නම් නොකළ සිදුවීම)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"සකසන්න"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"සංවිධානය"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"අපනාමය"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"සටහන"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"වෙබ් අඩවිය"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"සිදුවීම"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"සම්බන්ධතාව"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"නම‍"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ඊ-තැපෑල"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"දුරකථනය"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"ස්ථානයට දිශාවන්"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"මෑත SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. පිළිතුරු සැපයීමට ක්ලික් කරන්න"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ඇතුළට එන"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"පිටතට යන"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"හමු නොවී යන ලදි"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"මෑත අමන්තුම්. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ආපසු ඇමතිමට ක්ලික් කරන්න"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"ඔබ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"තව ක්ෂේත්‍ර"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"සම්බන්ධතා ඡායාරූපය වෙනස් කරන්න"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"සම්බන්ධතා ඡායාරූපය එක් කරන්න"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"සම්බන්ධතා ඡායාරූපය"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"සංස්කාරකය විවෘත කිරීමට අසමත් විය."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"වෙත සුරකිමින්"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> වෙතින් සම්බන්ධතා තොරතුරු සංස්කරණය කළ නොහැකිය"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"සම්බන්ධතා සබැඳි කරන්න"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"අවලංගු කරන්න"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"මෙම සම්බන්ධතාව"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"විය හැකි අනුපිටපත්"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"මෙම සම්බන්ධතා එකම පුද්ගලයා විය හැකිය. ඔබට ඒවා තනි සම්බන්ධතාවක් ලෙස සබැඳි කළ හැකිය."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> මැකීම"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> මැකීම"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"යෝජනා"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"නව"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"සංචාලන ලාච්චුව විවෘත කරන්න"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"සංචාලන ලාච්චුව වසන්න"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ලේබලය"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ලේබල"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ගිණුම්"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"එකට ඔබේ ඉතිහාසය බලන්න"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"සිදුවීම් සහ පණිවිඩ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"සිදුවීම්"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"පණිවිඩ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"යෝජනා"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"ඔබේ සම්බන්ධතා සංවිධානය කර ප්‍රයෝජනවත්ව තබා ගන්න"</string>
+ <string name="undo" msgid="1425165101664071422">"පසුගමනය කරන්න"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> අමතන්න"</string>
+ <string name="call_home" msgid="1990519474420545392">"ගෙදර අමතන්න"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"ජංගම දුරකථනය අමතන්න"</string>
+ <string name="call_work" msgid="5328785911463744028">"කාර්යාලය අමතන්න"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"කාර්යාල ෆැක්ස් අමතන්න"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"නිවෙස් ෆැක්ස් අමතන්න"</string>
+ <string name="call_pager" msgid="9003902812293983281">"පේජර් අමතන්න"</string>
+ <string name="call_other" msgid="8563753966926932052">"ඇමතුම"</string>
+ <string name="call_callback" msgid="1910165691349426858">"පසු ඇමතුම අමතන්න"</string>
+ <string name="call_car" msgid="3280537320306436445">"කාරය අමතන්න"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"ආයතන මූලිකය අමතන්න"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN අමතන්න"</string>
+ <string name="call_main" msgid="6082900571803441339">"මූලිකය අමතන්න"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ෆැක්ස් අමතන්න"</string>
+ <string name="call_radio" msgid="8296755876398357063">"රේඩියෝව අමතන්න"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ටෙලෙක්ස් අමතන්න"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD අමතන්න"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"කාර්යාල ජංගම දුරකථනය අමතන්න"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"කාර්යාල පේජරය අමතන්න"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> අමතන්න"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS අමතන්න"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ඇමතුම)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> වෙත කෙටි පණිවිඩ යවන්න"</string>
+ <string name="sms_home" msgid="7524332261493162995">"නිවසට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ජංගම දුරකථනයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_work" msgid="2269624156655267740">"කාර්යාලයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"කාර්යාල ෆැක්ස් වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"නිවෙස් ෆැක්ස් වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"පේජරයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_other" msgid="806127844607642331">"පෙළ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"නැවත ඇමතුමට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_car" msgid="7444227058437359641">"කාරයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ආයතනයේ අංකයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_main" msgid="8621625784504541679">"මූලිකයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ෆැක්ස් වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"රේඩියෝවට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ටෙලෙක්ස් වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"කාර්යාල ජංගම දුරකථනයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"කාර්යාල පේජරයට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> ට කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (පණිවිඩය)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"වීඩියෝ ඇමතුමක් ලබා ගන්න"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"නිතරම සම්බන්ධ වන අය හිස් කරන්නද?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"ඔබ නිතරම සම්බන්ධතා සහ දුරකථන යෙදුම් තුළ සම්බන්ධ වුණු අයගේ ලැයිස්තුව හිස් කර, මුල සිටම ඔබේ ලිපින මනාප ඉගෙනීමට ඊ-තැපැල් යෙදුම්වලට බල කරනු ඇත."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"නිතරම සම්බන්ධ වන අය හිස් කරමින්…"</string>
+ <string name="status_available" msgid="5586870015822828392">"සිටියි"</string>
+ <string name="status_away" msgid="1838861100379804730">"ළඟ නැත"</string>
+ <string name="status_busy" msgid="9147992455450257136">"කාර්යබහුල"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"වෙනත්"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"නාමාවලිය"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"කාර්යාල සම්බන්ධතා නාමාවලිය"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"සියලුම සම්බන්ධතා"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> සඳහා ඉක්මන් සම්බන්ධතා"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(නමක් නොමැත)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"නිතරම සම්බන්ධ වන"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"දුරකථන අංක සහිත සියලු සම්බන්ධතා"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"කාර්යාල පැතිකඩ සම්බන්ධතා"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"යාවත්කාලීන වීම් පෙන්වන්න"</string>
+ <string name="account_phone" msgid="7128032778471187553">"උපාංගය"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"නම‍"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"අපනාමය"</string>
+ <string name="name_given" msgid="4280790853455320619">"පළමු නම"</string>
+ <string name="name_family" msgid="7466985689626017037">"අග නම"</string>
+ <string name="name_prefix" msgid="59756378548779822">"නම් උපසර්ගය"</string>
+ <string name="name_middle" msgid="8467433655992690326">"මැද නම"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"නම් ප්‍රත්‍යය"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ස්වර නම"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ශබ්දිම මුල් නම"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ස්වර මැද නම"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ශබ්දිම අවසාන නම"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"දුරකථනය"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ඊ-තැපෑල"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ලිපිනය"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"සංවිධානය"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ඥාතිත්වය"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"විශේෂ දිනය"</string>
+ <string name="sms" msgid="1756857139634224222">"කෙටි පණිවුඩ"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ලිපිනය"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"සමාගම"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"මාතෘකාව"</string>
+ <string name="label_notes" msgid="8337354953278341042">"සටහන්"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"අභිරුචි"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"වෙබ් අඩවිය"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ලේබල"</string>
+ <string name="email_home" msgid="8573740658148184279">"නිවසට ඊ-තැපැල් කරන්න"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ජංගමයට ඊ-තැපැල් කරන්න"</string>
+ <string name="email_work" msgid="2807430017302722689">"කාර්යාලයට ඊ-තැපැල් කරන්න"</string>
+ <string name="email_other" msgid="3454004077967657109">"ඊ-තැපෑල"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> වෙත ඊ-තැපෑලක් යවන්න"</string>
+ <string name="email" msgid="5668400997660065897">"ඊ-තැපෑල"</string>
+ <string name="postal_street" msgid="8133143961580058972">"වීථිය"</string>
+ <string name="postal_city" msgid="6597491300084895548">"නගරය"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ජනපදය"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ZIP කේතය"</string>
+ <string name="postal_country" msgid="7638264508416368690">"රට"</string>
+ <string name="map_home" msgid="1243547733423343982">"නිවෙස් ලිපිනය පෙන්වන්න"</string>
+ <string name="map_work" msgid="1360474076921878088">"කාර්යාල ලිපිනය පෙන්වන්න"</string>
+ <string name="map_other" msgid="3817820803587012641">"ලිපිනය පෙන්වන්න"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ලිපිනය බලන්න"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber භාවිතයෙන් කතාබස් කරන්න"</string>
+ <string name="chat" msgid="9025361898797412245">"කතාබස්"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"මකන්න"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"තව නම් ක්ෂේත්‍ර පෙන්වන්න"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"නම් ක්ෂේත්‍ර හකුළන්න"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"තව ශබ්දිම නම් ක්ෂේත්‍ර පෙන්වන්න"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ශබ්දිම නම් ක්ෂේත්‍ර හකුළන්න"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"දිග හරින්න"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"හකුළන්න"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"දිග හරින ලදී"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"හකුළන ලදී"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"සියලුම සම්බන්ධතා"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"තරුව සලකුණු කළ"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"අභිරුචිකරණය"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"සම්බන්ධතාවය"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"සියලු වෙනත් සම්බන්ධතා"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"සියලුම සම්බන්ධතා"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"සමමුහුර්ත කණ්ඩායම ඉවත් කරන්න"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"සමමුහුර්ත කණ්ඩායම එක් කරන්න"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"තවත් කණ්ඩායම්…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" සමමුහුර්ත කිරීමෙන් ඉවත් කිරීමෙන් ඕනෑම කණ්ඩායම් නොකළ සම්බන්ධතා සමමුහුර්තයෙන් ඉවත් කරනු ඇත."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"පෙන්වීම් විකල්ප සුරකමින්…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"අභිරුචිකරණය කළ දසුන"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"ආයාත කළ සම්බන්ධතා මෙහි සුරකින්න:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM කාඩ් පත"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">සම්බන්ධතා %1$d</item>
+ <item quantity="other">සම්බන්ධතා %1$d</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one">සම්බන්ධතා <xliff:g id="COUNT_2">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other">සම්බන්ධතා <xliff:g id="COUNT_2">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ගොනුව"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ආයාත කිරීමට කිසිවක් නැත"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard වෙතින් සම්බන්ධතා ආයාත කරන්න"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> ආයාත කිරීම අවලංගු කරන්නද?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> නිර්යාත කිරීම අවලංගු කරන්නද?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ආයාත/නිර්යාත කිරීම අවලංගු කළ නොහැක"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"නොදන්නා දෝෂය."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" විවෘත කිරීමට නොහැක: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"නිර්යාතකරු පටන් ගැනීමට නොහැක: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"නිර්යාත කළ හැකි සම්බන්ධතාවයක් නොමැත."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"ඔබ අවශ්‍ය අවසරයක් අබල කර ඇත."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"නිර්යාතය අතරතුර දෝෂයක් සිදු විය: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O දෝෂය"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"මතකය මදිය. ගොනුව විශාල වැඩි විය හැක."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"මෙම ආකෘතිය වෙත සහාය නොදක්වයි."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> නිර්යාත කිරීම අවසන් කෙරුණි."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"සම්බන්ධතා නිර්යාත කිරීම සම්පූර්ණ කරන ලදී."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"සම්බන්ධතා නිර්යාත කිරීම අවසන්ය, සම්බන්ධතා බෙදා ගැනීමට දැනුම්දීම ක්ලික් කරන්න."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"සම්බන්ධතා බෙදා ගැනීමට තට්ටු කරන්න."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> නිර්යාත කිරීම අවලංගු කෙරුණි."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"සම්බන්ධතා දත්ත නිර්යාත කිරීම"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"සම්බන්ධතා දත්ත නිර්යාත කරමින් තිබේ."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"දත්ත සමුදායේ තොරතුරු ලබාගත නොහැක."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"නිර්යාත කළ හැකි සම්බන්ධතා නොමැත."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard සකසනය නිවැරදිව පටන් ගත්තේ නැත."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"නිර්යාත කළ නොහැකිය"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"සම්බන්ධතා දත්ත නිර්යාත නොකරන ලදි.\nහේතුව: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ආයාත කරමින්"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard දත්ත කියවිය නොහැක"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ආයාත කිරීම අවසන් විය"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ආයාත කිරීම අවලංගු කෙරුණි"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> කෙටි වේලාවකින් ආයාත වනු ඇත."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ගොනුව කෙටි වේලාවකින් ආයාත කරනු ඇත."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ආයාත අයැදුම ප්‍රතික්ෂේප කරන ලදි. පසුව නැවත උත්සාහ කරන්න."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ටික වේලාවකින් සම්බන්ධතා නිර්යාත කරනු ඇත."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard නිර්යාත ඉල්ලීම ප්‍රතික්ෂේප කරන ලදි. පසුව නැවත උත්සාහ කරන්න."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"සම්බන්ධතාවය"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"පෙදෙසි තාවකාලික ආචයනයට vCard(s) හැඹිලිගත කරමින් පවතී. සැබෑ ආයාත කිරීම ඉක්මනින් පටන් ගනු ඇත."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ආයාත කිරීමට නොහැක."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC හරහා සම්බන්ධතාව ලැබුණි"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"හැඹිලි ගත කරමින්"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> ආයාත කරමින්"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ගොනුවට නිර්යාත කරන්න"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"මේ අනුව අනුපිළිවෙලට සකසන්න"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ස්වර නම"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"සැමවිටම පෙන්වන්න"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"හිස් නම් සඟවන්න"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"පළමු නම"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"අග නම"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"නමේ ආකෘතිය"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"මුල් නම මුලින්ම"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"අවසාන නම මුලින්ම"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ගිණුම්"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"නව සම්බන්ධතා සඳහා පෙරනිමි ගිණුම"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"මගේ තොරතුරු"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"ඔබේ පැතිකඩ පිහිටුවන්න"</string>
+ <string name="setting_about" msgid="7014388749752042863">"සම්බන්ධතා පිළිබඳ"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ප්‍රියතම සම්බන්ධතා බෙදා ගන්න"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"සියලු සම්බන්ධතා බෙදා ගන්න"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"සම්බන්ධතා බෙදා ගැනීමට අසමත් විය."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"සම්බන්ධතා නිර්යාත කරන්න"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"සම්බන්ධතා ආයාත කරන්න"</string>
+ <string name="share_error" msgid="948429331673358107">"මෙම සම්බන්ධතාව බෙදා ගත නොහැක."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"බෙදා ගැනීමට සම්බන්ධතා නොමැත."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"පෙන්වීමට සම්බන්ධතා"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"පෙන්වීමට සම්බන්ධතා"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"දසුන අභිරුචිකරණය කරන්න"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"සුරකින්න"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"සම්බන්ධතා සොයන්න"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ප්‍රියතම"</string>
+ <string name="menu_import" msgid="6107961135813836467">"ආයාත කරන්න"</string>
+ <string name="menu_export" msgid="2658783911863503902">"නිර්යාත කරන්න"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"අවහිර කළ අංක"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> හරහා"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ඔස්සේ <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"සෙවීම අවසන් කරන්න"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"සෙවීම හිස් කරන්න"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ගිණුම"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ඇමතුම් සඳහා මෙය සැමවිට භාවිත කරන්න"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"සටහනක් සමගින් අමතන්න"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"ඇමතුම සමග යැවීමට සටහනක් ටයිප් කරන්න…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"යවන්න සහ අමතන්න"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"නිමැවුම් අනුවාදය"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"විවෘත මූලාශ්‍ර බලපත්‍ර"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"විවෘත මූලාශ්‍ර මෘදුකාංග සඳහා බලපත්‍ර විස්තර"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"රහස්‍යතා ප්‍රතිපත්තිය"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"සේවා නියම"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"විවෘත මූලාශ්‍ර බලපත්‍ර"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"url විවෘත කිරීමට අසමත් විය."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ලකුණු කරන ලදී"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ලකුණු කර නැත"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"වීඩියෝ ඇමතුමක් කරන්න"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"මකන්න"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ලෝපය"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"මිනි <xliff:g id="MINUTES">%1$s</xliff:g> තත් <xliff:g id="SECONDS">%2$s</xliff:g>"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"පැය <xliff:g id="MINUTES_0">%1$s</xliff:g> මිනි <xliff:g id="MINUTES_1">%2$s</xliff:g> තත් <xliff:g id="SECONDS">%3$s</xliff:g>"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"මෙම කෙටිමග අබල කර ඇත"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"සම්බන්ධතාව ඉවත් කරන ලදී"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"ආයාත කරන්න"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"සම්බන්ධතා තෝරන්න"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ඔබේ SIM කාඩ්පතේ සම්බන්ධතා නොමැත"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"සම්බන්ධතාව දැනටමත් ඔබේ ලැයිස්තුවෙහි පවතී"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">SIM සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>ක් ආයාත කරන ලදී</item>
+ <item quantity="other">SIM සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>ක් ආයාත කරන ලදී</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM සම්බන්ධතා ආයාත කිරීමට අසමත් විය"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM වෙතින් ආයාත කරන්න"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"අවලංගු කරන්න"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ස්වයංක්‍රිය සමමුහුර්ත කිරීම ක්‍රියාවිරහිතයි. ක්‍රියාත්මක කිරීමට තට්ටු කරන්න."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ඉවතලන්න"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ගිණුම් සමමුහුර්ත කිරීම ක්‍රියාවිරහිතයි. ක්‍රියාත්මක කිරීමට තට්ටු කරන්න."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"ස්වයං-සමමුහුර්ත කිරීම ක්‍රියාත්මක කරන්නද?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"හුදෙක් Google සම්බන්ධතා පමණක් නොව, ඔබ සියලු යෙදුම් සහ ගිණුම් වෙත කරන වෙනස් කිරීම් වෙබ සහ ඔබේ උපාංග අතර යාවත්කාලිනව තබා ගනු ඇත."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ක්‍රියාත්මක කරන්න"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"සම්බන්ධතාව නැත"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"තව පෙන්වන්න"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM කාඩ්පත ආයාත කිරීම අවසන්ය"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"අයාත කිරීම අසාර්ථක විය"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"සම්බන්ධතා SIM කාඩ්පතෙන් ආයාත කිරීමට නොහැකි විය"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM ආයාත කරමින්"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"දැනුම් දීම්"</string>
+</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 15c666196..9f8d415cb 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakty"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Zobraziť kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Upraviť kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Pridať kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Priame vytáčanie"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Priama správa"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Výber odkazu na kontakt"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Výber čísla pre hovor"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Výber čísla pre správu"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vybrať kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pridať ku kontaktu"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vyberte kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vybrať"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Vytvoriť nový kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Označené hviezdičkou"</string>
- <string name="frequentList" msgid="7154768136473953056">"Časté"</string>
- <string name="strequentList" msgid="5640192862059373511">"Obľúbené"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Podrobnosti kontaktu"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Upraviť kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Vytvoriť kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Upraviť skupinu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Vytvoriť skupinu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Informácie"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizácie"</string>
<string name="searchHint" msgid="8482945356247760701">"Hľadať v kontaktoch"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Zobraziť kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Pridať medzi obľúbené položky"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Odstrániť z obľúbených"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstránené z obľúbených"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Upraviť"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Odstrániť"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Zmeniť fotku"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Umiestniť na plochu"</string>
- <string name="menu_call" msgid="3992595586042260618">"Zavolať kontaktu"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Odoslať správu kontaktu"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Vytvoriť odkaz"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Odpojiť"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Upraviť"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Odstrániť"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Pridať kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Pridať skupinu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Odstrániť kontakty"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Premenovať štítok"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Odstrániť štítok"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Pridať kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Vybrať kontakty"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pridať kontakty"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odstrániť zo štítka"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Vytvoriť štítok"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Chcete tento kontakt rozpojiť na viacero samostatných kontaktov?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Odpojiť"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Chcete vykonané zmeny uložiť a rozpojiť tento kontakt na viacero samostatných kontaktov?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Uložiť a odpojiť"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Chcete vykonané zmeny uložiť a prepojiť s vybratým kontaktom?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Uložiť a prepojiť"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Prepája sa"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Odpája sa"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Prepojiť"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Zobraziť prepojené kontakty"</string>
<string name="menu_save" msgid="1727844363591825909">"Uložiť"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Prepojenie kontaktov"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vyberte kontakt, ktorý chcete prepojiť s kontaktom <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Zobraziť všetky kontakty"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Navrhnuté kontakty"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Všetky kontakty"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakt <xliff:g id="NAME">%s</xliff:g> bol prepojený"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakty boli prepojené"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> bol odstránený"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g> a <xliff:g id="NAME_1">%2$s</xliff:g> boli odstránené"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Kontakty <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… boli odstránené"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="few">Kontakty boli odstránené</item>
<item quantity="many">Kontakty boli odstránené</item>
<item quantity="other">Kontakty boli odstránené</item>
<item quantity="one">Kontakt bol odstránený</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktov</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktov · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Z Googlu"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Z účtu <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastaviť tón zvonenia"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Hovory do hlas. schránky"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakty z účtov iba na čítanie nie je možné odstrániť, ale dajú sa skryť."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Skryť"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakt, ktorý sa má odstrániť, obsahuje podrobnosti z viacerých účtov. Podrobnosti z účtov iba na čítanie budú skryté, nie odstránené."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Ak chcete vykonať prepojenie, musíte vybrať aspoň dva kontakty."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Prepojiť vybraté kontakty?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Prepojiť"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Smerovať do hlasovej schránky"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Nesmerovať do hlas. schránky"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Tento kontakt je určený iba na čítanie. Nedá sa odstrániť, ale môžete ho skryť."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Skryť kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Účty tohto kontaktu určené iba na čítanie sa neodstránia, ale skryjú."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Odstrániť tento kontakt?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Odstrániť vybraté kontakty?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakty z účtov iba na čítanie nie je možné odstrániť, ale dajú sa skryť."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Odstránením tohto kontaktu odstránite údaje z viacerých účtov."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Odstrániť tento kontakt?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Odstrániť"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Zahodiť zmeny"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt neexistuje."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt bol pridaný na plochu"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> bol pridaný na plochu"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Vytvoriť nový kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Vytvoriť nový kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizácia"</item>
- <item msgid="7196592230748086755">"Poznámka"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V tablete nie sú k dispozícii žiadne fotografie."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefónne nie sú žiadne fotografie."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"V zariadení nie sú k dispozícii žiadne fotky."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotka kontaktu"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Názov štítku"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Presmerovať hovory priamo do hlasovej schránky"</string>
<string name="removePhoto" msgid="4898105274130284565">"Odstrániť fotku"</string>
- <string name="noContacts" msgid="4955659076981974652">"Žiadne kontakty"</string>
- <string name="noGroups" msgid="8614664663561385253">"Žiadne skupiny."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Na vytvorenie skupín je potrebný účet."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"V tejto skupine nie sú žiadni ľudia."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Ak chcete pridať členov, upravte skupinu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Prebieha ukladanie kontaktu..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Zoznam vašich kontaktov je prázdny"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Žiadne kontakty s týmto štítkom"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"V tomto účte nie sú žiadne kontakty"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Zoznam vašich kontaktov je prázdny"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Kontakt <xliff:g id="DISPLAY_NAME">%s</xliff:g> bol uložený"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt bol uložený"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontakty boli odpojené"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Nepodarilo sa uložiť zmeny kontaktu."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Odpojenie kontaktu zlyhalo"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakt sa nepodarilo prepojiť."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pri ukladaní kontaktu sa vyskytla chyba."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Nepodarilo sa uložiť zmeny fotky kontaktu"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Skupina bola uložená."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Nepodarilo sa uložiť zmeny skupiny."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> kontakty s telefónnym číslom</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> kontaktu s telefónnym číslom</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontaktov s telefónnym číslom</item>
- <item quantity="one">1 kontakt s telefónnym číslom</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ku kontaktom nie sú priradené žiadne telefónne čísla"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> nájdené položky</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> nájdenej položky</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nájdených položiek</item>
- <item quantity="one">1 nájdená položka</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Nepodarilo sa uložiť zmeny kontaktu"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Odpojenie kontaktu zlyhalo"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakt sa nepodarilo prepojiť"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri ukladaní kontaktu sa vyskytla chyba"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepodarilo sa uložiť zmeny fotky kontaktu"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Načítanie štítka zlyhalo"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Štítok bol odstránený"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Štítok bol vytvorený"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nie je možné vytvoriť štítok"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Štítok bol aktualizovaný"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odstránené zo štítka"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Pridané do štítka"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nepodarilo sa uložiť zmeny štítka"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Tento štítok už existuje"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Niektoré kontakty nemajú e-mailovú adresu."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Niektoré kontakty nemajú telefónne číslo."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Odoslať e-mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Odoslať správu"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Výber kontaktov"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Odoslať"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Žiadne kontakty"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> nájdené položky</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> nájdenej položky</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nájdených položiek</item>
- <item quantity="one">1 nájdená položka</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Všetky"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Obľúbené"</string>
- <string name="callBack" msgid="5498224409038809224">"Zavolať"</string>
- <string name="callAgain" msgid="3197312117049874778">"Zavolať znova"</string>
- <string name="returnCall" msgid="8171961914203617813">"Zavolať späť"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete pridať „<xliff:g id="EMAIL">%s</xliff:g>“ medzi kontakty?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografia kontaktu"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktov"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Mená vašich kontaktov"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikácia potrebná na spracovanie tejto akcie sa nenašla."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknutím na tlačidlo sa vrátite na predchádzajúcu obrazovku."</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pridať telefónne číslo"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Pridať e-mail"</string>
<string name="missing_app" msgid="1466111003546611387">"Aplikácia potrebná na spracovanie tejto akcie sa nenašla."</string>
<string name="menu_share" msgid="943789700636542260">"Zdieľať"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Pridať do kontaktov"</string>
- <string name="share_via" msgid="563121028023030093">"Zdieľať kontakt"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Vytvoriť skupinu v účte"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Pridať"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="few">Zdieľať kontakty pomocou</item>
+ <item quantity="many">Zdieľať kontakty pomocou</item>
+ <item quantity="other">Zdieľať kontakty pomocou</item>
+ <item quantity="one">Zdieľať kontakt pomocou</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Výber účtu"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Vytvorenie štítka"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Premenovanie štítka"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Názov štítka"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Názov štítka"</string>
<string name="audio_chat" msgid="2535716629358298691">"Hlasový čet"</string>
<string name="video_chat" msgid="1872255818640336072">"Videohovor"</string>
- <string name="connections" msgid="8098440723172028350">"Spojenia"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Pridať spojenie"</string>
- <string name="recent" msgid="2659189233141493004">"Nedávne"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nedávne aktualizácie"</string>
<string name="account_type_format" msgid="718948015590343010">"Kontakt zo zdroja <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Účet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nemožno upraviť pomocou tejto aplikácie."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nie je možné upraviť v tomto zariadení."</string>
<string name="take_photo" msgid="7496128293167402354">"Odfotiť"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Znovu odfotiť"</string>
<string name="pick_photo" msgid="2129509985223564942">"Vybrať fotku"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Vybrať novú fotku"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Prebieha aktualizácia zoznamu kontaktov."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Hľadá sa…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Zobraziť vybraté"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Zobraziť všetky"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Vybrať všetko"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Zrušiť výber všetkých"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pridať nové"</string>
- <string name="add_organization" msgid="7311893231158291197">"Pridať organizáciu"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Názov skupiny"</string>
- <string name="change_photo" msgid="8530597935483526383">"Zmeniť"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Hlavná fotka"</string>
- <string name="description_star" msgid="2605854427360036550">"zaradiť medzi obľúbené"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Upraviť kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Prepojiť aktuálny kontakt s vybraným kontaktom?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítok"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Zrušiť"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Späť"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavrieť"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Prepnúť do režimu úpravy vybraného kontaktu? Doposiaľ zadané informácie budú skopírované."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Skopírovať do priečinka Moje kontakty"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Pridať medzi moje kontakty"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Adresár <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Vlastné"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Nastavenia"</string>
<string name="menu_settings" msgid="377929915873428211">"Nastavenia"</string>
<string name="menu_help" msgid="1680178646764069976">"Pomocník a spätná väzba"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti zobrazenia"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefónne číslo"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Pridať medzi kontakty"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pridať ku kontaktu"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zavrieť"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"uviesť rok"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Načítava sa…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvoriť nový kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pridať účet"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importovať kontakty"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Vytvoriť novú skupinu"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Vytvoriť novú skupinu"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> skupiny</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupín</item>
- <item quantity="one">1 skupina</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Chcete odstrániť skupinu „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Samotné kontakty nebudú odstránené.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="few">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
- <item quantity="many">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
- <item quantity="other">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>: <xliff:g id="COUNT_2">%1$d</xliff:g></item>
- <item quantity="one">Počet ľudí zo skupiny <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>: <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="few">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="many">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="other">Počet ľudí: <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Počet ľudí: <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importovať"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Nový štítok…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Odstrániť štítok <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Samotné kontakty nebudú odstránené.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Pred prepojením s iným kontaktom zadajte meno kontaktu."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopírovať do schránky"</string>
<string name="set_default" msgid="4417505153468300351">"Nastaviť ako predvolené"</string>
<string name="clear_default" msgid="7193185801596678067">"Vymazať predvolené nastavenia"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Text bol skopírovaný"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Zahodiť zmeny a ukončiť upravovanie?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Zahodiť zmeny?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zahodiť"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Pokračovať v úprave"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Nastaviť môj profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Zadajte meno osoby"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Názov skupiny"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Zrušiť"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Chcete zahodiť prispôsobenia?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Hľadať v kontaktoch"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Odstránenie kontaktov"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Môj miestny profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Môj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Zobrazenie všetkých kontaktov"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Uchovávajte svoje kontakty v bezpečí aj v prípade straty svojho telefónu: používajte synchronizáciu so službou online."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Pridať účet"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Nový kontakt nebude zálohovaný. Chcete pridať účet na online zálohovanie kontaktov?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Pridajte svoj účet a nechajte si kontakty zálohovať na Googli."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nové kontakty sa budú ukladať do účtu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Vyberte predvolený účet pre nové kontakty:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Pridať nový kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Nový kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Upraviť kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Len miestne"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Iba zobrazenie"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Vyberte kontakt, ktorý chcete upraviť"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Prepojené kontakty"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Pridať"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Odpojiť"</string>
<string name="add_account" msgid="8201790677994503186">"Pridať účet"</string>
<string name="add_new_account" msgid="5748627740680940264">"Pridať nový účet"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportovať súbory databázy"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"pridať nový kontakt"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Vytvoriť nový kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Zobraziť viac"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Zobraziť menej"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Zobraziť všetko"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nedávne"</string>
<string name="about_card_title" msgid="2920942314212825637">"O karte"</string>
- <string name="send_message" msgid="8938418965550543196">"Odoslať správu"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Vytvára sa osobná kópia..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Včera"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Prebieha vytváranie osobnej kópie..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Zajtra"</string>
<string name="today" msgid="8041090779381781781">"Dnes"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Dnes o <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Zajtra o <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Udalosť bez názvu)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Nastaviť"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Čet"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Udalosť"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Vzťah"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Účet"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Meno"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-mailová adresa"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefón"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotka"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktov."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím zbalíte editor kontaktov."</string>
<string name="content_description_directions" msgid="2686791825798189335">"trasa do miesta"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávna správa sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím na ňu odpoviete"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávna správa sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím na ňu odpoviete"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"prichádzajúci"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odchádzajúci"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"zmeškaný"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nedávny hovor. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím zavoláte späť"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nedávny hovor. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím zavoláte späť"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vy: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Služba Hangouts funguje lepšie, keď do poľa pre e-mailovú adresu alebo telefón zadáte identifikátor osoby v službe Hangouts."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Ďalšie polia"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Zmena fotky"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Nepodarilo sa otvoriť editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Uložiť ako"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kontakty sa momentálne ukladajú do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Iný účet vyberiete dvojitým klepnutím."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="few">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Prepojený kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Prepojené kontakty: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Ďalšie polia"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Zmeniť fotku kontaktu"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pridať fotku kontaktu"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotka kontaktu"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Nepodarilo sa otvoriť editor"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Miesto uloženia"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktné informácie z účtu <xliff:g id="ACCOUNT">%s</xliff:g> sa nedajú upravovať"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PREPOJIŤ KONTAKTY"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ZRUŠIŤ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> možné duplikáty</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> možného duplikátu</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> možných duplikátov</item>
- <item quantity="one">1 možný duplikát</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> prepojené kontakty</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> prepojeného kontaktu</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> prepojených kontaktov</item>
- <item quantity="one">1 prepojený kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tento kontakt"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Možné duplikáty"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Tieto kontakty môžu patriť jednej osobe. Môžete ich prepojiť do jedného kontaktu."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Prepojené kontakty"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Z vašich účtov"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Odfotiť"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Všetky fotky"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Výber fotky"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Z účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Odstrániť položku <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Odstrániť položku <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Odstrániť položku <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotka účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nie je začiarknutá"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> je začiarknutá"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotka z neznámeho účtu nebola začiarknutá"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotka z neznámeho účtu bola začiarknutá"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"V súvislosti so zmenou jazyka prebieha aktualizácia zoznamu kontaktov.\n\nČakajte..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Návrhy"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nové"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvoriť navigačný vysúvací panel"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zavrieť navigačný vysúvací panel"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Štítok <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Štítky"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Účty"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Majte históriu pohromade"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Udalosti a správy"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Udalosti"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Správy"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Návrhy"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Usporiadajte svoje kontakty, aby boli užitočnejšie"</string>
+ <string name="undo" msgid="1425165101664071422">"Späť"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Volať na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Zavolať domov"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Zavolať na mobil"</string>
+ <string name="call_work" msgid="5328785911463744028">"Volať do práce"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Volať na pracovný fax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Zavolať na domáci fax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Zavolať na pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Zavolať"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Zavolať na číslo spätného volania"</string>
+ <string name="call_car" msgid="3280537320306436445">"Zavolať do auta"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Volať firme (hlavné)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Volať na číslo ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Volať na hlavné číslo"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Zavolať na fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Zavolať rádiostanicu"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Zavolať na číslo Telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Zavolať na číslo TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Volať na pracovný mobil"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Volať na pracovný pager"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Volať na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Zavolať na číslo MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (hovor)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Poslať SMS na číslo <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS domov"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS na mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS do práce"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS na pracovný fax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS na domáci fax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS na pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Text"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Poslať správu na číslo spätného volania"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS do auta"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Poslať správu firme (hlavné)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Poslať správu na číslo ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Poslať správu na hlavné číslo"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS na fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS na rádiotelefón"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Poslať správu na číslo Telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Odoslať správu na číslo TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Odoslať správu na pracovný mobil"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Odoslať správu na pracovný pager"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Poslať správu kontaktu <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS na číslo MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (správa)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Uskutočniť videohovor"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Vymazať často kontaktované osoby?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Vymažete zoznam často kontaktovaných osôb v aplikáciách Kontakty a Telefón a e-mailové aplikácie budú musieť odznova vytvoriť predvoľby adresátov."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Mazanie často kontaktovaných osôb."</string>
+ <string name="status_available" msgid="5586870015822828392">"K dispozícii"</string>
+ <string name="status_away" msgid="1838861100379804730">"Preč"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zaneprázdnený"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Iné"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Adresár"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Pracovný adresár"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Všetky kontakty"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Rýchly kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Bez mena)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Najčastejšie používané kontakty"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Všetky kontakty s telefónnymi číslami"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty v pracovnom profile"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Zobraziť aktualizácie"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Zariadenie"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM karta"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Meno"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Prezývka"</string>
+ <string name="name_given" msgid="4280790853455320619">"Krstné meno"</string>
+ <string name="name_family" msgid="7466985689626017037">"Priezvisko"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Titul pred menom"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Druhé meno"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Titul za menom"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Meno (foneticky)"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Krstné meno (foneticky)"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Druhé meno (foneticky)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Priezvisko (foneticky)"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefón"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-mail"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Čet"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizácia"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Vzťah"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Špeciálny dátum"</string>
+ <string name="sms" msgid="1756857139634224222">"Textová správa"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Spoločnosť"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titul"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Poznámky"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Vlastný"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Štítky"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-mail domov"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-mail na mobil"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-mail do práce"</string>
+ <string name="email_other" msgid="3454004077967657109">"Poslať e-mail"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Odoslať správu na adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Poslať e-mail"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Mesto"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Štát"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"PSČ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Krajina"</string>
+ <string name="map_home" msgid="1243547733423343982">"Zobraziť adresu domov"</string>
+ <string name="map_work" msgid="1360474076921878088">"Zobraziť pracovnú adresu"</string>
+ <string name="map_other" msgid="3817820803587012641">"Zobraziť adresu"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Zobraziť adresu: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Zhovárať sa pomocou služby AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Zhovárať sa pomocou služby Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Zhovárať sa pomocou služby Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Zhovárať sa pomocou služby Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Zhovárať sa pomocou služby QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Zhovárať sa pomocou aplikácie Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Zhovárať sa pomocou služby ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Zhovárať sa pomocou služby Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Rozhovor"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"odstrániť"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Zobraziť ďalšie polia mien"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Zbaliť polia mien"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Zobraziť ďalšie polia foneticky zadaných mien"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Zbaliť polia foneticky zadaných mien"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Rozbaliť"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Zbaliť"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Rozbalené"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Zbalené"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Všetky kontakty"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Označené hviezdičkou"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Prispôsobiť"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Všetky ostatné kontakty"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Všetky kontakty"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Odstrániť synchronizovanú skupinu"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Pridať synchronizovanú skupinu"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Ďalšie skupiny..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ak zo synchronizácie odstránite skupinu „<xliff:g id="GROUP">%s</xliff:g>“, odstránite zo synchronizácie aj všetky kontakty, ktoré nie sú zaradené do žiadnej skupiny."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Prebieha ukladanie možností zobrazenia..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Vlastné zobrazenie"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Účet na ukladanie importovaných kontaktov"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"zo SIM karty"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM karty <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="few">%1$d kontakty</item>
+ <item quantity="many">%1$d kontaktu</item>
+ <item quantity="other">%1$d kontaktov</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> kontakty • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> kontaktu • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontaktov • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"z .vcf súboru"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nič nie je k dispozícii na import"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importovať kontakty z vizitky vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Zrušiť importovanie súboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušiť export vizitky <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import či export vizitky sa nepodarilo zrušiť"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznáma chyba."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Súbor „<xliff:g id="FILE_NAME">%1$s</xliff:g>“ sa nepodarilo otvoriť: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nástroj na export sa nepodarilo spustiť: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nedá sa exportovať žiadny kontakt."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Zakázali ste požadované povolenie."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Počas exportovania sa vyskytla chyba: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nedostatok pamäte. Súbor je možno príliš veľký."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formát nie je podporovaný."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export vizitky <xliff:g id="FILENAME">%s</xliff:g> bol dokončený."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Export kontaktov bol dokončený"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Export kontaktov bol dokončený. Kliknutím na upozornenie ich môžete zdieľať."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Klepnutím zdieľajte kontakty."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Export vizitky <xliff:g id="FILENAME">%s</xliff:g> bol zrušený"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Export údajov kontaktov"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktné údaje sa exportujú."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepodarilo sa získať informácie z databázy."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nie je možné exportovať žiadne kontakty."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Nástroj na tvorbu vizitiek vCard sa nespustil správne."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export sa nepodaril"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Údaje kontaktov neboli exportované.\nDôvod: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importuje sa <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepodarilo sa prečítať údaje vizitky vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import vizitky <xliff:g id="FILENAME">%s</xliff:g> bol dokončený"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importovanie súboru <xliff:g id="FILENAME">%s</xliff:g> bolo zrušené"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Vizitka <xliff:g id="FILENAME">%s</xliff:g> bude čoskoro importovaná."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Súbor bude čoskoro importovaný."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Žiadosť o import vizitky vCard bola odmietnutá. Skúste to znova neskôr."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty budú čoskoro exportované"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Žiadosť o export vizitky bola odmietnutá. Skúste to znova neskôr."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Prebieha načítavanie vizitiek vCard do vyrovnávacej pamäte miestneho dočasného úložiska. Samotné importovanie začne o chvíľu."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Vizitku vCard sa nepodarilo importovať."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt cez NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Ukladanie do vyrovnávacej pamäte..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Import: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportovať do súboru .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Zoradiť podľa"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Meno (foneticky)"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vždy zobrazovať"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Skryť, ak je prázdne"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Krstné meno"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Priezvisko"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formát mena"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Najprv krstné meno"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Najprv priezvisko"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Účty"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Predvolený účet pre nové kontakty"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Informácie o mne"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Nastavenie profilu"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O aplikácii Kontakty"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Zdieľať obľúbené kontakty"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Zdieľať všetky kontakty"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Nepodarilo sa zdieľať kontakty."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Export kontaktov"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importovať kontakty"</string>
+ <string name="share_error" msgid="948429331673358107">"Tento kontakt nie je možné zdieľať."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nemáte žiadne kontakty na zdieľanie"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty na zobrazenie"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty na zobrazenie"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Prispôsobiť zobrazenie"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Uložiť"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Hľadať v kontaktoch"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Obľúbené"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importovať"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportovať"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokované čísla"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">", zdroj: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, zdroj: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"zastaviť vyhľadávanie"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Vymazať vyhľadávanie"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Účet"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Vždy používať pre hovory"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Hovor s poznámkou"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Napísať poznámku, ktorá sa odošle s hovorom…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ODOSLAŤ A VOLAŤ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Verzia zostavy"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencie open source"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licencii pre softvér open source"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Pravidlá ochrany súkromia"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Zmluvné podmienky"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licencie open source"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Webovú adresu nebolo možné otvoriť"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – skontrolované"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – neskontrolované"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Uskutočniť videohovor"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Odstrániť"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Tri bodky"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Tento odkaz bol deaktivovaný"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt bol odstránený"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importovať"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Výber kontaktov"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Na SIM karte nie sú žiadne kontakty"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakt sa už vo vašom zozname nachádza"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="few">Boli importované <xliff:g id="COUNT">%d</xliff:g> kontakty zo SIM karty</item>
+ <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> SIM contacts imported</item>
+ <item quantity="other">Bolo importovaných <xliff:g id="COUNT">%d</xliff:g> kontaktov zo SIM karty</item>
+ <item quantity="one">Bol importovaný 1 kontakt zo SIM karty</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Import kontaktov na SIM karte zlyhal"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Import zo SIM karty"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Zrušiť"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatická synchronizácia je vypnutá. Zapnete ju klepnutím."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Zatvoriť"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Synchronizácia účtov je vypnutá. Zapnete ju klepnutím."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Chcete zapnúť automatickú synchronizáciu?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Medzi webom a vašimi zariadeniami sa budú aktualizovať zmeny, ktoré vykonáte vo všetkých aplikáciách a účtoch, nielen v Kontaktoch Google."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Zapnúť"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Žiadne pripojenie"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Zobraziť viac"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import SIM karty bol dokončený"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import zlyhal"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nepodarilo sa importovať kontakty zo SIM karty"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuje sa SIM karta"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Upozornenia"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index b96872f2e..eea248621 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Stiki"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Stiki"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Ogled stika"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Urejanje stika"</string>
<string name="contactsList" msgid="8661624236494819731">"Stiki"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj stik"</string>
<string name="shortcutContact" msgid="749243779392912958">"Vizitka"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Bližnjice za klicanje"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Neposredno sporočilo"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Izberite bližnjico stika"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Izberite klicno številko"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Izberi številko za pošiljanje sporočila"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Izbira stika"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodajanje v stik"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izbira stika"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Izberi"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ustvarite nov stik"</string>
- <string name="starredList" msgid="4817256136413959463">"Z zvezdico"</string>
- <string name="frequentList" msgid="7154768136473953056">"Pogosto"</string>
- <string name="strequentList" msgid="5640192862059373511">"Priljubljene"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Podrobnosti o stiku"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Urejanje stika"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Ustvari stik"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Uredi skupino"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Ustvari skupino"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Vizitka"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Posodobitve"</string>
<string name="searchHint" msgid="8482945356247760701">"Iskanje stikov"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Ogled stika"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Dodaj k priljubljenim"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Odstrani iz priljubljenih"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstranjeno iz priljubljenih"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Uredi"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Izbriši"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Sprememba fotografije"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Postavi na začetni zaslon"</string>
- <string name="menu_call" msgid="3992595586042260618">"Pokliči stik"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Pošlji SMS stiku"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Ustvari bližnjico"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Odstrani povezavo"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Uredi"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Izbriši"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Dodajanje stika"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Dodajanje skupine"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Odstrani stike"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznako"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Izbriši oznako"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Dodaj stik"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Izbiranje stikov"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodajanje stikov"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odstrani iz oznake"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Ustvari oznako"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Ali želite ta stik razdružiti na več stikov?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdruži"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ali želite shraniti že narejene spremembe in ta stik razdružiti na več stikov?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Shrani in razdruži"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Ali želite shraniti že narejene spremembe in združiti z izbranim stikom?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Shrani in združi"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Povezovanje"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Prekinjanje povezave"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Poveži"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Ogled povezanih stikov"</string>
<string name="menu_save" msgid="1727844363591825909">"Shrani"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Povezava stikov"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izberite stik, ki ga želite povezati s stikom <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Prikaži vse stike"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Predlagani stiki"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Vsi stiki"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Stik <xliff:g id="NAME">%s</xliff:g> je povezan"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Stika povezana"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Stik <xliff:g id="NAME">%1$s</xliff:g> je izbrisan"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Stika <xliff:g id="NAME_0">%1$s</xliff:g> in <xliff:g id="NAME_1">%2$s</xliff:g> sta izbrisana"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Izbrisani stiki: <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> …"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Stik je izbrisan</item>
<item quantity="two">Stiki so izbrisani</item>
<item quantity="few">Stiki so izbrisani</item>
<item quantity="other">Stiki so izbrisani</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> stik</item>
+ <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> stika</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> stiki</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> stikov</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> stik · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> stika · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> stiki · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> stikov · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Iz Google računa"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Iz računa za <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Nastavi zvonj."</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Vsi klici v odzivnik"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Stikov iz računov, ki so samo za branje, ni mogoče izbrisati, mogoče pa jih je skriti."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Skrij"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Stik, ki ga želite izbrisati, ima podrobnosti iz več računov. Podatki iz računov, ki so samo za branje, ne bodo izbrisani, temveč skriti."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Za povezavo morate izbrati vsaj dva stika."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Želite združiti izbrane stike?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Združi"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Preusmeri v sporočila v odziv."</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Prekliči preusmeritev v odziv."</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ta stik je samo za branje. Stika ni mogoče izbrisati, mogoče pa ga je skriti."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Skrij stik"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Računi tega stika, ki so samo za branje, ne bodo izbrisani, temveč skriti."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Želite izbrisati ta stik?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Želite izbrisati izbrane stike?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Stikov iz računov, ki so samo za branje, ni mogoče izbrisati, mogoče pa jih je skriti."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Če boste izbrisali ta stik, boste izbrisali podatke iz več računov."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Želite izbrisati ta stik?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Zavrzi spremembe"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Stik ne obstaja."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Stik je dodan na začetni zaslon."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Stik <xliff:g id="NAME">%s</xliff:g> je dodan na začetni zaslon."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Ustvari nov stik"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Ustvari nov stik"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizacija"</item>
- <item msgid="7196592230748086755">"Opomba"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V telefonu ni dostopnih slik."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefonu ni na voljo slik."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"V napravi ni na voljo nobene slike."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografija za stik"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Ime oznake po meri"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Klice takoj preusmeri v glasovno pošto"</string>
<string name="removePhoto" msgid="4898105274130284565">"Odstrani fotografijo"</string>
- <string name="noContacts" msgid="4955659076981974652">"Ni stikov"</string>
- <string name="noGroups" msgid="8614664663561385253">"Ni skupin."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Če želite ustvariti skupine, potrebujete račun."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"V tej skupini ni ljudi."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Če jih želite dodati, uredite skupino."</string>
- <string name="savingContact" msgid="4075751076741924939">"Shranjevanje stika..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Seznam stikov je prazen"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Ni stikov s to oznako"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"V tem računu ni stikov"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Seznam stikov je prazen"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Stik <xliff:g id="DISPLAY_NAME">%s</xliff:g> je shranjen"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Stik je shranjen"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Povezava stikov odstranjena"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Sprememb v stikih ni bilo mogoče shraniti."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Stiku ni bilo mogoče odstraniti povezave."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Stika ni bilo mogoče povezati."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Pri shranjevanju stika je prišlo do napake."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Sprememb fotografije stika ni bilo mogoče shraniti."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Skupina je shranjena."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Sprememb v skupini ni mogoče shraniti."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> stik s telefonsko številko</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> stika s telefonsko številko</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> stiki s telefonsko številko</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> stikov s telefonsko številko</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Ni stikov s telefonskimi številkami"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> najden</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> najdena</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> najdeni</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> najdenih</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Sprememb stika ni bilo mogoče shraniti"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Stiku ni bilo mogoče odstraniti povezave"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Stiku ni bilo mogoče dodati povezave"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri shranjevanju stika je prišlo do napake"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Sprememb fotografije stika ni bilo mogoče shraniti"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nalaganje oznake ni uspelo"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je ustvarjena"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Oznake ni mogoče ustvariti"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Oznaka je posodobljena"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Odstranjeno iz oznake"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Dodano v oznako"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Sprememb oznake ni bilo mogoče shraniti"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ta oznake že obstaja"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Nekateri stiki nimajo e-poštnih naslovov."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Nekateri stiki nimajo telefonskih številk."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Pošlji e-pošto"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Pošlji sporočilo"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Izbiranje stikov"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Pošlji"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Ni stikov"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> najden</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> najdena</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> najdeni</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> najdenih</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Vsi"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Priljubljeni"</string>
- <string name="callBack" msgid="5498224409038809224">"Povratni klic"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ponovi klic"</string>
- <string name="returnCall" msgid="8171961914203617813">"Povratni klic"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite »<xliff:g id="EMAIL">%s</xliff:g>« dodati stikom?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografija stika"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> stikov"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Imena stikov"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikacije za obravnavo tega dejanja ni mogoče najti."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za vrnitev na prejšnji zaslon"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodaj telefonsko številko"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Dodaj e-poštni naslov"</string>
<string name="missing_app" msgid="1466111003546611387">"Za to dejanje ni mogoče najti nobene aplikacije."</string>
<string name="menu_share" msgid="943789700636542260">"Skupna raba"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Dodaj med stike"</string>
- <string name="share_via" msgid="563121028023030093">"Deli stik z drugimi prek"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Ustvari skupino v računu"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Dodaj"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Skupna raba stikov prek aplikacije</item>
+ <item quantity="two">Skupna raba stikov prek aplikacije</item>
+ <item quantity="few">Skupna raba stikov prek aplikacije</item>
+ <item quantity="other">Skupna raba stikov prek aplikacije</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Izbira računa"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Ustvarjanje oznake"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Preimenovanje oznake"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Ime oznake"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Ime oznake"</string>
<string name="audio_chat" msgid="2535716629358298691">"Glasovni klepet"</string>
<string name="video_chat" msgid="1872255818640336072">"Videoklepet"</string>
- <string name="connections" msgid="8098440723172028350">"Povezave"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Dodaj povezavo"</string>
- <string name="recent" msgid="2659189233141493004">"Nedavni"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nedavne posodobitve"</string>
<string name="account_type_format" msgid="718948015590343010">"Stik <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> Račun"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"S to aplikacijo urejanje ni mogoče."</string>
- <string name="group_read_only" msgid="1061762906115697637">"V tej napravi ni mogoče urejati skupine."</string>
<string name="take_photo" msgid="7496128293167402354">"Posnemi fotografijo"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Posnemi novo fotografijo"</string>
<string name="pick_photo" msgid="2129509985223564942">"Izberi fotografijo"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Izberi novo fotografijo"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Seznam stikov se posodablja."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Iskanje ..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Pokaži izbrane"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Pokaži vse"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Izberi vse"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Prekliči izbor vseh"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novo"</string>
- <string name="add_organization" msgid="7311893231158291197">"Dodaj organizacijo"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Ime skupine"</string>
- <string name="change_photo" msgid="8530597935483526383">"Spremeni"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Glavna fotogr."</string>
- <string name="description_star" msgid="2605854427360036550">"priljubljeno"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Uredi stik"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Želite povezati stik z izbranim stikom?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj oznako"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Prekliči"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Nazaj"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zapri"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Želite urejati izbrani stik? Podatki, ki ste jih doslej vnesli, bodo kopirani."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiraj v moje stike"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj v skupino »Moji stiki«"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Imenik <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Po meri"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Nastavitve"</string>
<string name="menu_settings" msgid="377929915873428211">"Nastavitve"</string>
<string name="menu_help" msgid="1680178646764069976">"Pomoč in povr. informacije"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Možnosti prikaza"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonska številka"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj v stike"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodaj v stik"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Zapri"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Vključi letnico"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Stik"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Nalaganje …"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Ustvarjanje novega stika"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Uvozi stike"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Ustvarjanje nove skupine"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Ustvari novo skupino"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> skupina</item>
- <item quantity="two"><xliff:g id="COUNT">%0$d</xliff:g> skupini</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> skupine</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> skupin</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Želite izbrisati skupino »<xliff:g id="GROUP_LABEL">%1$s</xliff:g>«? (Stiki ne bodo izbrisani.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> oseba iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> osebi iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> osebe iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> oseb iz skupine <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> oseba</item>
- <item quantity="two"><xliff:g id="COUNT_1">%1$d</xliff:g> osebi</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> osebe</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> oseb</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvozi"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Ustvari novo ..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Želite izbrisati oznako »<xliff:g id="GROUP_LABEL">%1$s</xliff:g>«? (Stiki ne bodo izbrisani.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Vnesite ime stika pred povezovanjem z drugim."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiraj v odložišče"</string>
<string name="set_default" msgid="4417505153468300351">"Nastavi za privzeto"</string>
<string name="clear_default" msgid="7193185801596678067">"Počisti privzeto"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Besedilo kopirano"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Želite zavreči spremembe in prenehati urejati?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Želite zavreči spremembe?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zavrzi"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Nadaljevanje urejanja"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Nastavi moj profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Vnesite ime osebe"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Ime skupine"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Prekliči"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite zavreči prilagoditve?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Iščite med stiki"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Odstranitev stikov"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Moj profil za <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikaz vseh stikov"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Naj bodo vaš stiki na varnem, tudi če izgubite telefon: sinhronizirajte s spletno storitvijo."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajanje računa"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Nov stik ne bo varnostno kopiran. Želite dodati račun za varnostno kopiranje stikov v internetu?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Vzemite si trenutek in dodajte račun, s katerim boste varnostno kopirali svoje stike v Googlu."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi stiki bodo shranjeni v račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izberite privzeti račun za nove stike:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Dodaj nov stik"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Ustvari nov stik"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Urejanje stika"</string>
- <string name="keep_local" msgid="1258761699192993322">"Ohrani lokalno"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Samo za ogled"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Izbira stika za urejanje"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Povezani stiki"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Dodaj"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Odstrani povez."</string>
<string name="add_account" msgid="8201790677994503186">"Dodaj račun"</string>
<string name="add_new_account" msgid="5748627740680940264">"Dodaj nov račun"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Izvoz datotek zbirke"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"dodaj novi stik"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Ustvari nov stik"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Pokaži več"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaži manj"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Pokaži vse"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
<string name="about_card_title" msgid="2920942314212825637">"Vizitka"</string>
- <string name="send_message" msgid="8938418965550543196">"Pošlji sporočilo"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Ustvarjanje osebne kopije ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Včeraj"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Ustvarjanje osebne kopije ..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Jutri"</string>
<string name="today" msgid="8041090779381781781">"Danes"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Danes ob <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Jutri ob <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Neimenovani dogodek)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Nastavi"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Takojšnje sporočanje"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Spletno mesto"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Dogodek"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Razmerje"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Račun"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografija"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite, če želite razširiti urejevalnik stikov."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite, če želite strniti urejevalnik stikov."</string>
<string name="content_description_directions" msgid="2686791825798189335">"navodila do mesta"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite, če želite odgovoriti"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite, če želite odgovoriti"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"Dohodni"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"Odhodni"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"Zgrešeni"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni klic. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite, če želite poklicati nazaj"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"nedavni klic. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite, če želite poklicati nazaj"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Vi: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Pogovori Hangouts delujejo bolje, če v polje za e-pošto ali polje za telefon vnesete identifikator osebe za pogovore Hangouts."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Več polj"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Sprememba fotografije"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Odpiranje urejevalnika ni uspelo."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Shranjevanje v:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Trenutno se shranjuje v račun <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Če želite izbrati drug račun, se dvakrat dotaknite."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Več polj"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Spremeni fotografijo za stik"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodaj fotografijo za stik"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotografija za stik"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Odpiranje urejevalnika ni uspelo."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Shranjevanje v"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Podatkov o stiku iz računa <xliff:g id="ACCOUNT">%s</xliff:g> ni mogoče urejati"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI STIKE"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"PREKLIČI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> morebiten dvojnik</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> morebitna dvojnika</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> morebitni dvojniki</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> morebitnih dvojnikov</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> povezan stik</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> povezana stika</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> povezani stiki</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> povezanih stikov</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="two">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ta stik"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Morebitni dvojniki"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Ti stiki so morda ena in ista oseba. Lahko jih združite v en stik."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Povezani stiki"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Iz vaših računov"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fotografiranje"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Vse fotografije"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Izbira fotografije"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Od: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotografija iz <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ni označena"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografija iz <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> je označena"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografija iz neznanega računa ni izbrana"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografija iz neznanega računa je izbrana"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Seznam stikov se posodablja po spremembi jezika.\n\nPočakajte ..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Predlogi"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Odpri predal za krmarjenje"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Zapri predal za krmarjenje"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Oznaka <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Oznake"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Računi"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Zgodovino si oglejte na enem mestu"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Dogodki in sporočila"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Dogodki"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Sporočila"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Predlogi"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Naj bodo stiki vedno pregledni in priročni"</string>
+ <string name="undo" msgid="1425165101664071422">"Razveljavi"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Pokliči: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Pokliči domov"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Pokliči mobilni telefon"</string>
+ <string name="call_work" msgid="5328785911463744028">"Pokliči v službo"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Pokliči službeni faks"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Pokliči domači faks"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Pokliči pozivnik"</string>
+ <string name="call_other" msgid="8563753966926932052">"Pokliči"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Pokliči številko za povratni klic"</string>
+ <string name="call_car" msgid="3280537320306436445">"Pokliči telefon v avtu"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Pokliči glavno telefonsko številko podjetja"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Pokliči številko ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Pokliči glavno telefonsko številko"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Pokliči faks"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Pokliči radijski telefon"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Pokliči telefaks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Pokliči številko TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Pokliči službeni mobilni telefon"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Pokliči službeni pozivnik"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Pokliči: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Pokliči telefon MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Pokliči)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Pošlji SMS za: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Pošlji SMS domov"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Pošlji SMS na mobilni telefon"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Pošlji SMS na službeni telefon"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Pošlji SMS na službeni faks"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Pošlji SMS na domači faks"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Pošlji SMS na pozivnik"</string>
+ <string name="sms_other" msgid="806127844607642331">"Pošlji SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Pošlji SMS na številko za povratni klic"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Pošlji SMS na telefon v avtu"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Pošlji SMS na glavno telefonsko številko podjetja"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Pošlji SMS na številko ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Pošlji SMS na glavno telefonsko številko"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Pošlji SMS na faks"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Pošlji SMS na radijski telefon"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Pošlji SMS na telefaks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Pošlji SMS na telefonsko številko TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Pošlji SMS na službeni mobilni telefon"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Pošlji SMS na službeni pozivnik"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Pošlji SMS <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Pošlji SMS na telefon MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Pošlji sporočilo)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Opravi videoklic"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Želite izbrisati seznam pog. stikov?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Izbrisali boste seznam pogostih stikov v aplikacijah Stiki in Telefon, zato bodo e-poštne aplikacije začele shranjevati pogoste naslovnike od začetka."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Brisanje seznama pogostih stikov …"</string>
+ <string name="status_available" msgid="5586870015822828392">"Dosegljiv"</string>
+ <string name="status_away" msgid="1838861100379804730">"Odsoten"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Zaseden"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Drugo"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Imenik"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Delovni imenik"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Vsi stiki"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Hitri stik za <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Ni imena)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Pogosti stiki"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Vsi stiki s telefonskimi številkami"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Stiki za delovni profil"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaz posodobitev"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Naprava"</string>
+ <string name="account_sim" msgid="6519016427905087952">"Kartica SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Vzdevek"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ime"</string>
+ <string name="name_family" msgid="7466985689626017037">"Priimek"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Naziv"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Drugo ime"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Naziv (za imenom)"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Ime – fonetično"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Ime – fonetično"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Drugo ime – fonetično"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Priimek – fonetično"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pošta"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Naslov"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Neposredno sporočanje"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizacija"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Odnos"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Posebni datum"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Naslov"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Podjetje"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Naslov"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Opombe"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Po meri"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Spletno mesto"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Oznake"</string>
+ <string name="email_home" msgid="8573740658148184279">"Pošlji e-pošto domov"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Pošlji e-pošto na mobilni telefon"</string>
+ <string name="email_work" msgid="2807430017302722689">"Pošlji e-pošto na službeni naslov"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-pošta"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Pošlji sporočilo za: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-pošta"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Mesto"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Država/regija"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Poštna številka"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Država"</string>
+ <string name="map_home" msgid="1243547733423343982">"Prikaži domači naslov"</string>
+ <string name="map_work" msgid="1360474076921878088">"Prikaži službeni naslov"</string>
+ <string name="map_other" msgid="3817820803587012641">"Prikaži naslov"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Prikaži naslov za: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Klepet s storitvijo AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Klepet s storitvijo Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Klepet s storitvijo Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Klepet s storitvijo Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Klepet s storitvijo QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Klepet s storitvijo Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Klepet s storitvijo ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Klepet s storitvijo Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Klepet"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"brisanje"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Pokaži več imenskih polj"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Strni imenska polja"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Pokaži več fonetičnih imenskih polj"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Strni fonetična imenska polja"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Razširi"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Strni"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Razširjeno"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Strnjeno"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Vsi stiki"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Z zvezdico"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Prilagodi"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Stik"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Vsi drugi stiki"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Vsi stiki"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Odstrani skupino za sinhroniziranje"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Dodaj skupino za sinhroniziranje"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Več skupin ..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Če skupino »<xliff:g id="GROUP">%s</xliff:g>« odstranite iz sinhronizacije, boste iz sinhronizacije odstranili tudi vse nerazvrščene stike."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Shranjevanje možnosti prikaza..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Prilagojen pogled"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Shranjevanje uvoženih stikov v račun:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Kartica SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Kartica SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d stik</item>
+ <item quantity="two">%1$d stika</item>
+ <item quantity="few">%1$d stiki</item>
+ <item quantity="other">%1$d stikov</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> stik • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="two"><xliff:g id="COUNT_2">^1</xliff:g> stika • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> stiki • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> stikov • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Datoteka .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Ničesar ni za uvoz"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Želite uvoziti stike iz datoteke vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Želite preklicati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Želite preklicati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoza/izvoza vCard ni mogoče preklicati"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznana napaka."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteke »<xliff:g id="FILE_NAME">%1$s</xliff:g>« ni bilo mogoče odpreti: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Funkcije za izvoz ni bilo mogoče zagnati: »<xliff:g id="EXACT_REASON">%s</xliff:g>«"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ni stikov za izvoz."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Onemogočili ste zahtevano dovoljenje."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Pri izvozu je prišlo do napake: »<xliff:g id="EXACT_REASON">%s</xliff:g>«"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Napaka I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ni dovolj pomnilnika. Datoteka je morda prevelika."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ta oblika ni podprta."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je končan."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz stikov je končan."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz stikov je končan. Kliknite obvestilo, če želite dati stike v skupno rabo."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Dotaknite se, če želite dati stike v skupno rabo."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je preklican."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvažanje podatkov o stiku"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podatki o stikih se izvažajo."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Informacij o zbirki podatkov ni bilo mogoče dobiti."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ni stikov za izvoz."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Urejevalnik za vCard se ni pravilno zagnal."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz ni mogoč"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podatki stika niso bili izvoženi.\nRazlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Uvažanje <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Podatkov vCard ni bilo mogoče prebrati"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Končan uvoz dat. vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je preklican"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Dat. <xliff:g id="FILENAME">%s</xliff:g> bo kmalu uvožena."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka bo kmalu uvožena."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahteva za uvoz datoteke vCard je bila zavrnjena. Poskusite znova pozneje."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Stiki bodo kmalu izvoženi."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahteva za izvoz datoteke vCard je bila zavrnjena. Poskusite znova pozneje."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"stik"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Predpomnjenje datotek(e) vCARD v lokalno začasno shrambo. Dejanski uvoz se bo začel kmalu."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Datoteke vCard ni bilo mogoče uvoziti."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Stik prejet prek NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Predpomnjenje"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Uvažanje <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>(<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>:<xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Izvozi v datoteko .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Razvrsti glede na"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Ime – fonetično"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Vedno pokaži"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Skrij, če je prazno"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Priimek"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Oblika imena"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Najprej ime"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Najprej priimek"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Računi"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Privzeti račun za nove stike"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Moji podatki"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Nastavite svoj profil"</string>
+ <string name="setting_about" msgid="7014388749752042863">"O Stikih"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Skupna raba priljubljenih stikov"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Skupna raba vseh stikov"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Dajanje stikov v skupno rabo ni uspelo."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Izvoz stikov"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Uvoz stikov iz:"</string>
+ <string name="share_error" msgid="948429331673358107">"Tega stika ni mogoče dati v skupno rabo."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Ni stikov za skupno rabo."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Stiki, ki naj bodo prikazani"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Stiki za prikaz"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Prilagajanje pogleda"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Shrani"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Iščite med stiki"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Priljubljeno"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Uvozi"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Izvozi"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirane številke"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"prek <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prek <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ustavi iskanje"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Počisti iskalno polje"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Vedno uporabi to možnost za klice"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Klic z zapiskom"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Vnesite zapisek, ki ga želite poslati s klicem …"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"POŠLJI IN KLIČI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Delovna različica"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Odprtokodne licence"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licenci za odprtokodno programsko opremo"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Pravilnik o zasebnosti"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Pogoji storitve"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Odprtokodne licence"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Naslova URL ni bilo mogoče odpreti."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – označeno"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> – ni označeno"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Začni videoklic"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Tri pike"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ta bližnjica je onemogočena"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Stik je bil odstranjen"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Uvozi"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Izbiranje stikov"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Na kartici SIM ni nobenega stika"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Stik že obstaja na seznamu"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">S kartice SIM je uvožen <xliff:g id="COUNT">%d</xliff:g> stik</item>
+ <item quantity="two">S kartice SIM sta uvožena <xliff:g id="COUNT">%d</xliff:g> stika</item>
+ <item quantity="few">S kartice SIM so uvoženi <xliff:g id="COUNT">%d</xliff:g> stiki</item>
+ <item quantity="other">S kartice SIM je uvoženih <xliff:g id="COUNT">%d</xliff:g> stikov</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Stikov s kartice SIM ni bilo mogoče uvoziti"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Uvoz s kartice SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Prekliči"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Samodejna sinhronizacija je izklopljena. Dotaknite se, da jo vklopite."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Opusti"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinhronizacija računa je izklopljena. Dotaknite se, da jo vklopite."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Želite vklopiti samodejno sinhronizacijo?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Spremembe, ki jih izvedete v Google Stikih ter tudi vseh aplikacijah in računih, bodo sinhronizirane med spletom in vašimi napravami."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Vklopi"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ni povezave"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"Kart. SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Pokaži več"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Uvoz kartice SIM je končan"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz ni uspel"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Stikov s kartic SIM ni bilo mogoče uvoziti"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvažanje kartice SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Obvestila"</string>
</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
deleted file mode 100644
index 9beac2bd9..000000000
--- a/res/values-sq-rAL/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontaktet"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktet"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Shiko kontaktin"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Modifiko kontaktin"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontaktet"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontakti"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Telefonatë e drejtpërdrejtë"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesazh i drejtpërdrejtë"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Zgjidh një shkurtore të kontaktit"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Zgjidh një numër për ta telefonuar"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Zgjidh një numër për t\'i dërguar mesazh"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Shto te kontakti"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Zgjidh një kontakt"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Krijo një kontakt të ri"</string>
- <string name="starredList" msgid="4817256136413959463">"Me yll"</string>
- <string name="frequentList" msgid="7154768136473953056">"Të shpeshtat"</string>
- <string name="strequentList" msgid="5640192862059373511">"Të preferuarat"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Detajet e kontaktit"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Redakto kontaktin"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Krijo një kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Redakto grupin"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Krijo një grup"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Informacion rreth"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Përditësimet"</string>
- <string name="searchHint" msgid="8482945356247760701">"Kërko për kontakte"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Shiko kontaktin"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Shto te të preferuarat"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Hiq nga të preferuarat"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"U hoq nga të preferuarat"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"U shtua te të preferuarat"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Redakto"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"Fshi"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Ndrysho fotografinë"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Vendose në ekranin bazë"</string>
- <string name="menu_call" msgid="3992595586042260618">"Telefono kontaktin"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Dërgo mesazh me tekst te kontakti"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Anulo lidhjen"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Redakto"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Fshi"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Shto një kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Shto një grup"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Të shkëputet ky kontakt në shumë kontakte të ndara?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Shkëput"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Dëshiron t\'i ruash ndryshimet që ke bërë tashmë dhe ta shkëputësh këtë kontakt në shumë kontakte të ndara?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Ruaj dhe shkëput"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"Dëshiron t\'i ruash ndryshimet që ke bërë tashmë dhe t\'i lidhësh me kontaktin e zgjedhur?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Ruaj dhe lidh"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Lidh"</string>
- <string name="menu_save" msgid="1727844363591825909">"Ruaj"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lidh kontaktet"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Zgjidh kontaktin që dëshiron të lidhësh me <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Shfaq të gjitha kontaktet"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontaktet e sugjeruara"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Të gjitha kontaktet"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktet u lidhën"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Kontaktet u fshinë</item>
- <item quantity="one">Kontakti u fshi</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Vendos zilen e preferuar"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Gjithë telefonatat te posta zanore"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontaktet nga llogaritë e tua vetëm për lexim nuk mund të fshihen, por mund të mos shfaqen."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Fshih"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakti që do të fshihet ka detaje nga shumë llogari. Detajet nga llogaritë vetëm për lexim nuk do të shfaqen, por nuk do të fshihen."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Të duhen të paktën dy kontakte të zgjedhura për të kryer një lidhje."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Të lidhen kontaktet e zgjedhura?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Lidh"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Të fshihet ky kontakt?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Të fshihen kontaktet e zgjedhura?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontaktet nga llogaritë e tua vetëm për lexim nuk mund të fshihen, por mund të mos shfaqen."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kontaktet që do të fshihen kanë detaje nga shumë llogari. Detajet nga llogaritë vetëm për lexim nuk do të shfaqen, por nuk do të fshihen."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Fshirja e këtij kontakti do të fshijë detajet nga shumë llogari."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Të fshihet ky kontakt?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Fshi"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Hiq dorë nga ndryshimet"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti nuk ekziston."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakti u shtua tek Ekrani bazë."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> u shtua tek Ekrani bazë."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Krijo një kontakt të ri"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Krijo një kontakt të ri"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organizata"</item>
- <item msgid="7196592230748086755">"Shënim."</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nuk ka fotografi të përdorshme në tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nuk ka fotografi të përdorshme në telefon."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografia e kontaktit"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Emri i personalizuar i etiketës"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Dërgoji telefonatat drejtpërdrejt te posta zanore"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Hiqe fotografinë"</string>
- <string name="noContacts" msgid="4955659076981974652">"Nuk ka asnjë kontakt"</string>
- <string name="noGroups" msgid="8614664663561385253">"Nuk ka asnjë grup."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Për të krijuar grupe të duhet një llogari."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Nuk ka persona në këtë grup."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Për të shtuar disa anëtarë, redakto grupin."</string>
- <string name="savingContact" msgid="4075751076741924939">"Po ruan kontaktin…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kontakti u ruajt"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktet u shkëputën"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Ndryshimet e kontaktit nuk mund të ruheshin."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Nuk mund të shkëpusë lidhjen me kontaktin."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontakti nuk mund të lidhej."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Gabim gjatë ruajtjes së kontaktit."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ndryshimet e fotografisë së kontaktit nuk mund të ruheshin."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grupi u ruajt."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Ndryshimet e grupit nuk mund të ruheshin."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte me numra telefoni</item>
- <item quantity="one">1 kontakt me numër telefoni</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Nuk ka kontakte me numra telefoni"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">U gjetën <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">U gjet 1</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nuk ka asnjë kontakt"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">U gjetën <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="one">U gjet 1</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Të gjitha"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Të preferuarat"</string>
- <string name="callBack" msgid="5498224409038809224">"Telefono"</string>
- <string name="callAgain" msgid="3197312117049874778">"Telefono përsëri"</string>
- <string name="returnCall" msgid="8171961914203617813">"Ktheji telefonatën"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Të shtohet \"<xliff:g id="EMAIL">%s</xliff:g>\" te kontaktet?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"fotografia e kontaktit"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> nga gjithsej <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakte"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Emrat e kontakteve të tua"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Nuk u gjet asnjë aplikacion për të menaxhuar këtë veprim"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliko për t\'u kthyer tek ekrani i mëparshëm"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Shto një numër telefoni"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"Shto një mail"</string>
- <string name="missing_app" msgid="1466111003546611387">"Nuk u gjet asnjë aplikacion për të menaxhuar këtë veprim"</string>
- <string name="menu_share" msgid="943789700636542260">"Shpërnda"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Shto te kontaktet"</string>
- <string name="share_via" msgid="563121028023030093">"Shpërnda kontaktin nëpërmjet"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Krijo një grup nën llogari"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Biseda me zë"</string>
- <string name="video_chat" msgid="1872255818640336072">"Biseda me video"</string>
- <string name="connections" msgid="8098440723172028350">"Lidhjet"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Shto një lidhje"</string>
- <string name="recent" msgid="2659189233141493004">"Të fundit"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Përditësimet së fundi"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"Llogari <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Nuk mund të redaktohet nga ky aplikacion."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Nuk mund të redaktohet në këtë pajisje."</string>
- <string name="take_photo" msgid="7496128293167402354">"Bëj një fotografi"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Bëj një fotografi të re"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Zgjidh një fotografi"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Zgjidh një fotografi të re"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Lista e kontakteve po përditësohet."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Po kërkon..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Shfaq të zgjedhurat"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Shfaqi të gjithë"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Zgjidhi të gjitha"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Hiq zgjedhjen nga të gjitha"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Shto të re"</string>
- <string name="add_organization" msgid="7311893231158291197">"Shto një organizatë"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Emri i grupit"</string>
- <string name="change_photo" msgid="8530597935483526383">"Ndërro"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Fotografia parësore"</string>
- <string name="description_star" msgid="2605854427360036550">"i preferuar"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Redakto kontaktin"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Lidhe kontaktin aktual me kontaktin e zgjedhur?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Të kalohet te redaktimi i kontaktit të zgjedhur? Informacionet që fute deri tani do të kopjohen."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopjo te \"Kontaktet e mia\""</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Shto te \"Kontaktet e mia\""</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Direktoria <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"I personalizuar"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Cilësimet"</string>
- <string name="menu_settings" msgid="377929915873428211">"Cilësimet"</string>
- <string name="menu_help" msgid="1680178646764069976">"Ndihmë dhe komente"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Opsionet e paraqitjes"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Numri i telefonit"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Shto te kontaktet"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Shto te kontakti"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Mbyll"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"Përfshi vitin"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakti"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Po ngarkon..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Krijo një kontakt të ri"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Shto llogari"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importo kontaktet"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Krijo një grup të ri"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Krijo një grup të ri"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupe</item>
- <item quantity="one">1 grup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Të fshihet grupi \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontaktet nuk do të fshihen.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> persona nga <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person nga <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> persona</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Shkruaj emrin e kontaktit para se ta lidhësh me një tjetër."</string>
- <string name="copy_text" msgid="3257145021583508761">"Kopjo në kujtesën e fragmenteve"</string>
- <string name="set_default" msgid="4417505153468300351">"Vendos të parazgjedhurën"</string>
- <string name="clear_default" msgid="7193185801596678067">"Pastro të paracaktuarin"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Teksti u kopjua"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Hiqi ndryshimet dhe mbylle redaktimin?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hiq"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Vazhdo redaktimin"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Konfiguro profilin tim"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Shkruaj emrin e personit"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Emri i grupit"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Profili im lokal"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Profili im i <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Po shfaq të gjitha kontaktet"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mbaji kontaktet e tua të sigurta edhe nëse të humbet telefoni. Sinkronizoji me një shërbim në linjë."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Shto një llogari"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Kontakti yt i ri nuk do të rezervohet. Të shtohet një llogari që i rezervon kontaktet në linjë?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kontaktet e reja do të ruhen në <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Zgjidh një llogari të parazgjedhur për kontaktet e reja:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Shto një kontakt të ri"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Redakto"</string>
- <string name="keep_local" msgid="1258761699192993322">"Mbaje në nivel lokal"</string>
- <string name="add_account" msgid="8201790677994503186">"Shto një llogari"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Shto një llogari të re"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Eksporto skedarët e bazës së të dhënave"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"shto një kontakt të ri"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Shiko më shumë"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Shiko më pak"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Shikoji të gjitha"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Të fundit"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Informacion rreth"</string>
- <string name="send_message" msgid="8938418965550543196">"Dërgo mesazh"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Po krijon një kopje personale..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Dje"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Nesër"</string>
- <string name="today" msgid="8041090779381781781">"Sot"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Sot në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Nesër në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Ngjarje e patitulluar)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Cakto"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Organizata"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Pseudonimi"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Shënim"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Uebsajti"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Ngjarje"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Lidhja"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Llogaria"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Emri"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"Mail-i"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefoni"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotografia"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliko për ta zgjeruar redaktorin e kontaktit."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliko për ta palosur redaktorin e kontaktit."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"drejtime për te vendndodhja"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms-ja e fundit. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliko për t\'u përgjigjur"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"hyrëse"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"dalëse"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"të humbura"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"telefonata e fundit. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliko për të ri-telefonuar"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Shërbimi \"Hangouts\" funksionon më mirë kur fut identifikuesin e personit në fushën e mail-it ose në fushën e telefonit."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Fusha të tjera"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Ndrysho fotografinë"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Dështoi në hapjen e redaktorit"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Po ruhet në"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Po ruhet aktualisht në <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Trokit dy herë për të zgjedhur një llogari tjetër."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Kontakte të lidhura (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Kontakt i lidhur</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontakte të lidhura"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIDH KONTAKTET"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULO"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> dublikata të mundshme</item>
- <item quantity="one">1 dublikatë e mundshme</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte të lidhura</item>
- <item quantity="one">1 kontakt i lidhur</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ky kontakt"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Dublikatat e mundshme"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Këto kontakte mund të jenë i njëjti person. Mund t\'i lidhësh së bashku si një kontakt të vetëm."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Kontaktet e lidhura"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Nga llogaritë e tua"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Bëj një fotografi"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Të gjitha fotografitë"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Zgjidh fotografinë"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Nga <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Fshi <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Fshi <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Nuk është shënuar fotografia nga <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Është shënuar fotografia nga <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nuk është zgjedhur fotografi nga llogari e panjohur"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Është zgjedhur fotografi nga llogari e panjohur"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Lista e kontakteve po përditësohet për të pasqyruar ndryshimin e gjuhës.\n\nQëndro në pritje..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numrat e bllokuar"</string>
-</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
new file mode 100644
index 000000000..51f6988a1
--- /dev/null
+++ b/res/values-sq/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontaktet"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontaktet"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Shto një kontakt"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontakti"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Telefonatë e drejtpërdrejtë"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesazh i drejtpërdrejtë"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Zgjidh një kontakt"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Shto te kontakti"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Zgjidh një kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Zgjidh"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Krijo një kontakt të ri"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Kërko për kontakte"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Shto te të preferuarat"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Hiq nga të preferuarat"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"U hoq nga të preferuarat"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"U shtua te të preferuarat"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Redakto"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"Fshi"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Ndrysho fotografinë"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Krijo një shkurtore"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Anulo lidhjen"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Hiq kontaktet"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Riemërto etiketën"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Fshi etiketën"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Shto kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Zgjidh kontaktet"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Shto kontakte"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Hiq nga etiketa"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Krijo një etiketë"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Të shkëputet ky kontakt në shumë kontakte të ndara?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Shkëput"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Dëshiron t\'i ruash ndryshimet që ke bërë tashmë dhe ta shkëputësh këtë kontakt në shumë kontakte të ndara?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Ruaj dhe shkëput"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"Dëshiron t\'i ruash ndryshimet që ke bërë tashmë dhe t\'i lidhësh me kontaktin e zgjedhur?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Ruaj dhe lidh"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Po lidhet"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Po shkëputet"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Lidh"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Shiko kontaktet e lidhura"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Ruaj"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lidh kontaktet"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Zgjidh kontaktin që dëshiron të lidhësh me <xliff:g id="NAME">%s</xliff:g>:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Kontaktet e sugjeruara"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Të gjitha kontaktet"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> u lidh"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktet u lidhën"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> u fshi"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> dhe <xliff:g id="NAME_1">%2$s</xliff:g> u fshinë"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… u fshinë"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Kontaktet u fshinë</item>
+ <item quantity="one">Kontakti u fshi</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakte</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Nga Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Nga <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Vendos zilen e preferuar"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Drejto te posta zanore"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Anulo drejtimin te posta zanore"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Ky kontakt është vetëm për lexim. Ai nuk mund të fshihet, por mund ta fshehësh."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Fshih kontaktin"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Llogaritë vetëm për lexim në këtë kontakt do të jenë të fshehura, por nuk do të fshihen."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Të fshihet ky kontakt?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Të fshihen kontaktet e zgjedhura?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontaktet nga llogaritë e tua vetëm për lexim nuk mund të fshihen, por mund të mos shfaqen."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"Kontaktet që do të fshihen kanë detaje nga shumë llogari. Detajet nga llogaritë vetëm për lexim nuk do të shfaqen, por nuk do të fshihen."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Fshirja e këtij kontakti do të fshijë detajet nga shumë llogari."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Të fshihet ky kontakt?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Fshi"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti nuk ekziston."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakti u shtua tek Ekrani bazë."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> u shtua tek Ekrani bazë."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Nuk ka fotografi në dispozicion në pajisje."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografia e kontaktit"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Emri i personalizuar i etiketës"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Hiqe fotografinë"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Lista e kontakteve të tua është bosh"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Nuk ka kontakte me këtë etiketë"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Nuk ka kontakte në këtë llogari"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Lista e kontakteve të tua është bosh"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> u ruajt"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kontakti u ruajt"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktet u shkëputën"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ndryshimet e kontaktit nuk mund të ruheshin"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Nuk mund të shkëpusë lidhjen me kontaktin"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontakti nuk mund të lidhej"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Gabim gjatë ruajtjes së kontaktit"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ndryshimet e fotografisë së kontaktit nuk mund të ruheshin"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Dështoi në ngarkimin e etiketës"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiketa u fshi"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketa u krijua"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiketa nuk krijohet"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketa u përditësua"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Hequr nga etiketa"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"U shtua në emërtim"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Nuk mund të ruhen ndryshimet e etiketës"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ky emërtim ekziston tashmë"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Disa kontakte nuk kanë mail-e."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Disa kontakte nuk kanë numra telefoni."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Dërgo mail"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Dërgo mesazh"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Zgjidh kontaktet"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Dërgo"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Nuk ka asnjë kontakt"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Të shtohet \"<xliff:g id="EMAIL">%s</xliff:g>\" te kontaktet?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Emrat e kontakteve të tua"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliko për t\'u kthyer tek ekrani i mëparshëm"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Shto një numër telefoni"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"Shto një email"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Nuk u gjet asnjë aplikacion për të menaxhuar këtë veprim"</string>
+ <string name="menu_share" msgid="943789700636542260">"Shpërnda"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Shto te kontaktet"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Shto"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Shpërnda kontaktet nëpërmjet</item>
+ <item quantity="one">Shpërnda kontaktin nëpërmjet</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Zgjidh llogarinë"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Krijo etiketë"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Riemërto etiketën"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiketo emrin"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Emri i etiketës"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Biseda me zë"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Biseda me video"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"Llogari <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Bëj një fotografi"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Bëj një fotografi të re"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Zgjidh një fotografi"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Zgjidh një fotografi të re"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Po kërkon..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketa"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Anulo"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Prapa"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"mbyll"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Të kalohet te redaktimi i kontaktit të zgjedhur? Informacionet që fute deri tani do të kopjohen."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Direktoria <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Cilësimet"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Cilësimet"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Ndihmë dhe komente"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Numri i telefonit"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Shto te kontaktet"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Mbyll"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"Përfshi vitin"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Shto llogari"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importo"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Krijo të re..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Të fshihet grupi \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Kontaktet nuk do të fshihen.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Shkruaj emrin e kontaktit para se ta lidhësh me një tjetër."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Kopjo në kujtesën e fragmenteve"</string>
+ <string name="set_default" msgid="4417505153468300351">"Vendos të parazgjedhurën"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Pastro të paracaktuarin"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Teksti u kopjua"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Të injorohen ndryshimet?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hiq"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anulo"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Të injorohen personalizimet?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Kërko kontaktet"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Hiq kontaktet"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Profili im lokal"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Profili im i <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Nevojitet një minutë për të shtuar një llogari që mban kopje rezervë të kontakteve në Google."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kontaktet e reja do të ruhen në <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Zgjidh një llogari të parazgjedhur për kontaktet e reja:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Krijo një kontakt të ri"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Redakto"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Vetëm shiko"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Zgjidh një kontakt për ta redaktuar"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Kontaktet e lidhura"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Shto"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Shkëput"</string>
+ <string name="add_account" msgid="8201790677994503186">"Shto një llogari"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Shto një llogari të re"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Eksporto skedarët e bazës së të dhënave"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Krijo një kontakt të ri"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Shiko më shumë"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Shiko më pak"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Të fundit"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Informacion rreth"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Po krijon një kopje personale..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Nesër"</string>
+ <string name="today" msgid="8041090779381781781">"Sot"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Sot në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Nesër në <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Ngjarje e patitulluar)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Cakto"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Organizata"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Pseudonimi"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Shënim"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Uebsajti"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Ngjarje"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Lidhja"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Emri"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"Mail-i"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefoni"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"drejtime për te vendndodhja"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms-ja e fundit. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliko për t\'u përgjigjur"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"hyrëse"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"dalëse"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"të humbura"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"telefonata e fundit. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliko për të ri-telefonuar"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Ti: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Fusha të tjera"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ndrysho fotografinë e kontaktit"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Shto një fotografi të kontaktit"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Fotografia e kontaktit"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Dështoi në hapjen e redaktorit."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Po ruhet te"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Informacionet e kontaktit nga <xliff:g id="ACCOUNT">%s</xliff:g> nuk mund të redaktohen"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIDH KONTAKTET"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULO"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ky kontakt"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Dublikatat e mundshme"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Këto kontakte mund të jenë i njëjti person. Mund t\'i lidhësh së bashku si një kontakt të vetëm."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Fshi <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Fshi <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Sugjerime"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"E re"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Hap sirtarin e navigimit"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Mbyll sirtarin e navigimit"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiketa <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Emërtimet"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Llogaritë"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Shiko historinë tuaj së bashku"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Ngjarjet dhe mesazhet"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Ngjarjet"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mesazhet"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Sugjerime"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Mbaji kontaktet të organizuara dhe të dobishme"</string>
+ <string name="undo" msgid="1425165101664071422">"Zhbëj"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Telefono <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Telefono numrin e shtëpisë"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Telefono numrin celular"</string>
+ <string name="call_work" msgid="5328785911463744028">"Telefono numrin e punës"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Telefono faksin e punës"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Telefono faksin e shtëpisë"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Telefoni numrin e biperit"</string>
+ <string name="call_other" msgid="8563753966926932052">"Telefono"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Telefono numrin e kthimit të telefonatave"</string>
+ <string name="call_car" msgid="3280537320306436445">"Telefono numrin e makinës"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Telefono numrin kryesor të kompanisë"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Telefono numrin ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Telefono numrin kryesor"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Telefono numrin e faksit"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Telefono numrin e radios"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Telefono numrin e telefaksit"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Telefono numrin e TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Telefono numrin celular të punës"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Telefono numrin e biperit të punës"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Telefono <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Telefono numrin MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Telefono)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Dërgo mesazh me tekst te <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Dërgo mesazh te numri i shtëpisë"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Dërgo mesazh te numri celular"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Dërgo mesazh te numri i punës"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Dërgo mesazh te faksi i punës"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Dërgo mesazh te faksi i shtëpisë"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Dërgo mesazh te biperi"</string>
+ <string name="sms_other" msgid="806127844607642331">"Tekst"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Dërgo mesazh te numri i kthimit të telefonatave"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Dërgo mesazh te numri i makinës"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Dërgo mesazh te numri kryesor i kompanisë"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Dërgo mesazh te numri ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Dërgo mesazh te numri kryesor"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Dërgo mesazh te faksi"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Dërgo mesazh te numri i radios"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Dërgo mesazh te numri i telefaksit"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Dërgo mesazh te numri TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Dërgo mesazh te numri i celularit"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Dërgo mesazh te numri i biperit"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Dërgo mesazh te <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Dërgo mesazh te numri i MMS-së"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Mesazh)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Bëj një telefonatë me video"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Të pastrohen kontaktet e shpeshta?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Do ta pastrosh listën e kontakteve të shpeshta në aplikacionet \"Kontaktet\" dhe \"Telefoni\" dhe do t\'i detyrosh aplikacionet e mail-it të mësojnë preferencat e tua të adresimit nga e para."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Po pastron kontaktet e shpeshta…"</string>
+ <string name="status_available" msgid="5586870015822828392">"I gatshëm"</string>
+ <string name="status_away" msgid="1838861100379804730">"I larguar"</string>
+ <string name="status_busy" msgid="9147992455450257136">"I zënë"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Tjetër"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktoria"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Direktoria e punës"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Të gjitha kontaktet"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Kontakti i shpejtë për <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Pa emër)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Të kontaktuara shpesh"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Të gjitha kontaktet me numra telefoni"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktet e profilit të punës"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Shiko përditësimet"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Pajisja"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Emri"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonimi"</string>
+ <string name="name_given" msgid="4280790853455320619">"Emri"</string>
+ <string name="name_family" msgid="7466985689626017037">"Mbiemri"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Parashtesa e emrit"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Emri i dytë"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Prapashtesa e emrit"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Emri fonetik"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Emri fonetik"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Emri i dytë fonetik"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Mbiemri fonetik"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Mail-i"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adresa"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Mesazh i çastit"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organizata"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Marrëdhënia"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Data e veçantë"</string>
+ <string name="sms" msgid="1756857139634224222">"Mesazhi me tekst"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adresa"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Kompania"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titulli"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Shënimet"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"E personalizuar"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Faqja e internetit"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Emërtimet"</string>
+ <string name="email_home" msgid="8573740658148184279">"Dërgoji mail shtëpisë"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Dërgoji mail celularit"</string>
+ <string name="email_work" msgid="2807430017302722689">"Dërgoji mail punës"</string>
+ <string name="email_other" msgid="3454004077967657109">"Mail-i"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Mail <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Mail-i"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Rruga"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Qyteti"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Shteti"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Kodi ZIP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Shteti"</string>
+ <string name="map_home" msgid="1243547733423343982">"Shiko adresën e shtëpisë"</string>
+ <string name="map_work" msgid="1360474076921878088">"Shiko adresën e punës"</string>
+ <string name="map_other" msgid="3817820803587012641">"Shiko adresën"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Shiko adresën <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Bisedo me AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Bisedo me Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Bisedo me Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Bisedo me Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Bisedo me QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Bisedo me \"Bisedo me Google\""</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Bisedo me ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Bisedo me Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Bisedë"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"fshi"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Shfaq më shumë fusha të emrit"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Palos fushat e emrit"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Shfaq më shumë fusha të emrit fonetik"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Palos fushat fonetike të emrit"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Zgjero"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Palos"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"U zgjerua"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"U palos"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Të gjitha kontaktet"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Me yll"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Personalizo"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakti"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Gjithë kontaktet e tjera"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Të gjitha kontaktet"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Hiq grupin e sinkronizimit"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Shto një grup sinkronizimi"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Më shumë grupe…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Heqja e \"<xliff:g id="GROUP">%s</xliff:g>\" nga sinkronizimi gjithashtu heq kontaktet e pagrupuara nga sinkronizimi."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Po ruan opsionet e paraqitjes…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Pamje e personalizuar"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Ruaji kontaktet e importuara në:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Karta SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakte</item>
+ <item quantity="one">1 kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakte • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"skedari .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Nuk ka asgjë për të importuar"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Të importohen kontaktet nga vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Të anulohet importimi i <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Të anulohet eksportimi i <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Importi/eksporti i vCard nuk u anulua"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Gabim i panjohur."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nuk mund të hapej \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportuesi nuk mund të nisej: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nuk ka asnjë kontakt që mund të eksportohet."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Ke çaktivizuar një leje e cila është të detyrueshme."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ndodhi një gabim gjatë eksportimit: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Gabim I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nuk ka memorie të mjaftueshme. Skedari mund të jetë shumë i madh."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formati nuk mbështetet."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Eksportimi i <xliff:g id="FILENAME">%s</xliff:g> përfundoi."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportimi i kontakteve përfundoi."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Eksportimi i kontakteve përfundoi, kliko njoftimin për të ndarë kontaktet."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Trokit për të ndarë kontaktet."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Eksportimi i <xliff:g id="FILENAME">%s</xliff:g> u anulua."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Po eksporton të dhënat e kontaktit"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Të dhënat e kontaktit po eksportohen."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Informacionet e bazës së të dhënave nuk mund të merreshin."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nuk ka kontakte që mund të eksportohen."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Kompozitori i vCard nuk u nis si duhet."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nuk u eksportuan"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Të dhënat e kontaktit nuk u eksportuan.\nArsyeja: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Po importon <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Të dhënat e vCard nuk mund të lexoheshin"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importimi i <xliff:g id="FILENAME">%s</xliff:g> të vCard përfundoi"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importimi i <xliff:g id="FILENAME">%s</xliff:g> u anulua"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> do të importohet së shpejti."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Skedari do të importohet së shpejti."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Kërkesa e importit të vCard u refuzua. Provo përsëri më vonë."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktet do të eksportohen së shpejti."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Kërkesa e eksportimit të vCard u refuzua. Provo përsëri më vonë."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakti"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Po ruan vCard në hapësirën ruajtëse lokale të përkohshme. Importimi aktual do të nisë së shpejti."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard nuk mund të eksportohej."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt nëpërmjet NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Po ruan memorien e përkohshme"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Po importon <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Eksporto në skedar .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rendit sipas"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Emri fonetik"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Shfaq gjithnjë"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Fshihe nëse është bosh"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Emri"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Mbiemri"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Formati i emrit"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Emri në fillim"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Mbiemri në fillim"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Llogaritë"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Llogaria e parazgjedhur për kontaktet e reja"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Informacioni im"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Konfiguro profilin"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Rreth kontakteve"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Ndaj kontaktet e preferuara"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Ndaj të gjitha kontaktet"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Ndarja e kontakteve dështoi."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Eksporto kontaktet"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importo kontaktet nga"</string>
+ <string name="share_error" msgid="948429331673358107">"Ky kontakt nuk mund të shpërndahet"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Nuk ka kontakte për të shpërndarë"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte për t\'u shfaqur"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte për t\'u shfaqur"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Personalizo pamjen"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Ruaj"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Kërko kontakte"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Të preferuarat"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importo"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksporto"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numrat e bllokuar"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"nëpërmjet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nëpërmjet <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ndalo kërkimin"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Pastro kërkimin"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Llogaria"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Përdore gjithmonë për telefonatat"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Telefono me shënim"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Shkruaj një shënim për ta dërguar me telefonatën…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"DËRGO DHE TELEFONO"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versioni i ndërtimit"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenca me burim informacioni të hapur"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detajet e licencës për softuer me burim të hapur"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Politika e privatësisë"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Kushtet e shërbimit"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenca me burim informacioni të hapur"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Dështoi në hapjen e url-së."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> u shënua"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> nuk u shënua"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Kryej një telefonatë me video"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Fshi"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Elipsë"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> minuta <xliff:g id="SECONDS">%2$s</xliff:g> sekonda"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> orë <xliff:g id="MINUTES_1">%2$s</xliff:g> minuta <xliff:g id="SECONDS">%3$s</xliff:g> sekonda"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Kjo shkurtore u çaktivizua"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakti u hoq"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importo"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Zgjidh kontaktet"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"S\'ka kontakte në kartën SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakti ekziston tashmë në listën tënde"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte të kartës SIM u importuan</item>
+ <item quantity="one">1 kontakt i kartës SIM u importua</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Importimi i kontakteve të kartës SIM dështoi"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importo nga karta SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Anulo"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Sinkronizimi automatik është joaktiv. Trokit për ta aktivizuar."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Hiqe"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Sinkronizimi i llogarisë është joaktiv. Trokit për ta aktivizuar."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Të aktivizohet sinkronizimi automatik?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Ndryshimet që bën në të gjitha aplikacionet dhe llogaritë, jo vetëm \"Kontaktet e Google\", do të përditësohen mes uebit dhe pajisjeve të tua."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktivizo"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Nuk ka lidhje"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Shfaq më shumë"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importimi i kartës SIM përfundoi"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Importimi dështoi"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktet nga karta SIM nuk mund të importoheshin"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Karta SIM po importohet"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Njoftime"</string>
+</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index db7a7fc9e..3f3f083a5 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контакти"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Прикажи контакт"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Измени контакт"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Додај контакт"</string>
<string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Директно бирање"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Директна порука"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Одаберите пречицу за контакт"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Одаберите број за позив"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Одаберите број за SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Изаберите контакт"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додајте контакту"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Изаберите контакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Изаберите"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Направи нови контакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Са звездицом"</string>
- <string name="frequentList" msgid="7154768136473953056">"Чести"</string>
- <string name="strequentList" msgid="5640192862059373511">"Омиљено"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Детаљи о контакту"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Измени контакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Направи контакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Измени групу"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Направи групу"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Основни подаци"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Ажурирања"</string>
<string name="searchHint" msgid="8482945356247760701">"Претражи контакте"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Прикажи контакт"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Додај у омиљене контакте"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Уклони из омиљених контаката"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Уклоњено је из Омиљеног"</string>
@@ -49,41 +35,59 @@
<string name="menu_editContact" msgid="9042415603857662633">"Измени"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Промени слику"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Постави на Почетни екран"</string>
- <string name="menu_call" msgid="3992595586042260618">"Позови контакт"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Пошаљи SMS контакту"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Направи пречицу"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Раздвоји"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Измени"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Избриши"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Додај контакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додај групу"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Уклони контакте"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Преименуј ознаку"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Избриши ознаку"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Додај контакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Изабери контакте"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додај контакте"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Уклони из ознаке"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Направи ознаку"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Желите ли да раздвојите овај контакт у више контаката?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раздвоји"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Желите ли да сачувате промене које сте већ обавили и раздвојите овај контакт у више контаката?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Сачувај и раздвоји"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Желите ли да сачувате промене које сте већ обавили и обједините овај контакт са изабраним контактом?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Сачувај и обједини"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Повезује се"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Опозива се веза"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Обједини"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Прикажи обједињене контакте"</string>
<string name="menu_save" msgid="1727844363591825909">"Сачувај"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Обједините контакте"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изаберите контакт који желите да обједините са контактом <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Прикажи све контакте"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Предложени контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Сви контакти"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакти су повезани са <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакти су обједињени"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> је избрисан/а"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> и <xliff:g id="NAME_1">%2$s</xliff:g> су избрисани"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… су избрисани"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Контакти су избрисани</item>
<item quantity="few">Контакти су избрисани</item>
<item quantity="other">Контакти су избрисани</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контаката</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контаката · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Са Google-а"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Са <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Подеси мелодију звона"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Сви позиви у говорну пошту"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Контакти са налога који су само за читање не могу да се избришу, али могу да се сакрију."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Сакриј"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Контакт који сте изабрали за брисање садржи детаље са више налога. Детаљи са налога који су само за читање ће бити скривени, али не и избрисани."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Треба да изаберете најмање два контакта да бисте их објединили."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Желите ли да обједините изабране контакте?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Обједини"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Усмери на говорну пошту"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Не усмеравај на говорну пошту"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Овај контакт је само за читање. Не можете да га избришете, али можете да га сакријете."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Сакриј контакт"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Налози који су само за читање у оквиру овог контакта ће бити скривени, а не избрисани."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Желите ли да избришете овај контакт?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Желите ли да избришете изабране контакте?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Контакти са налога који су само за читање не могу да се избришу, али могу да се сакрију."</string>
@@ -91,252 +95,445 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ако избришете овај контакт, биће избрисани детаљи са више налога."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Желите ли да избришете овај контакт?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Избриши"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Одбаци промене"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Контакт не постоји."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт је додат на почетни екран."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт <xliff:g id="NAME">%s</xliff:g> је додат на почетни екран."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Направите нови контакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Направи нови контакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Организација"</item>
- <item msgid="7196592230748086755">"Напомена"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Слике нису доступне на таблету."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"На телефону нема доступних слика."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"На уређају није пронађена ниједна слика."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Слика контакта"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Назив прилагођене ознаке"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Шаљи позиве директно у гласовну пошту"</string>
<string name="removePhoto" msgid="4898105274130284565">"Уклони слику"</string>
- <string name="noContacts" msgid="4955659076981974652">"Нема контаката"</string>
- <string name="noGroups" msgid="8614664663561385253">"Нема група."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Морате да имате налог да бисте могли да правите групе."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Нема људи у овој групи."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Да бисте додали неке, измените групу."</string>
- <string name="savingContact" msgid="4075751076741924939">"Чување контакта је у току..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Листа контаката је празна"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Нема контаката са овом ознаком"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Нема контаката на овом налогу"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Листа контаката је празна"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Контакт <xliff:g id="DISPLAY_NAME">%s</xliff:g> је сачуван"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Контакт је сачуван"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакти су раздвојени"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Није могуће сачувати измене контаката."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Раздвајање контакта на више њих није успело."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Обједињавање контаката није успело."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Дошло је до грешке при чувању контакта."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Чување измена слике контакта није успело."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Група је сачувана."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Није могуће сачувати измене група."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт са бројем телефона</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакта са бројевима телефона</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контаката са бројевима телефона</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Нема контаката са бројевима телефона"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">пронађен је <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">пронађена су <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">пронађено је <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Чување промена контакта није успело"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Раздвајање контакта није успело"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Обједињавање контаката није успело"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при чувању контакта"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Чување промена слике контакта није успело"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Учитавање ознаке није успело"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Ознака је избрисана"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Ознака је направљена"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Прављење ознаке није успело"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Ознака је ажурирана"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Уклонили смо из ознаке"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додато је у ознаку"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Чување промена ознаке није успело"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Та ознака већ постоји"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Неки контакти немају имејл адресу."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Неки контакти немају број телефона."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Пошаљи имејл"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Пошаљи поруку"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Изаберите контакте"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Пошаљи"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Нема контаката"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">пронађен је <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">пронађена су <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">пронађено је <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Све"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Омиљено"</string>
- <string name="callBack" msgid="5498224409038809224">"Узврати позив"</string>
- <string name="callAgain" msgid="3197312117049874778">"Позови поново"</string>
- <string name="returnCall" msgid="8171961914203617813">"Узврати позив"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Желите ли да додате имејл адресу „<xliff:g id="EMAIL">%s</xliff:g>“ у контакте?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"слика контакта"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плус"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контак(а)та"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Имена контаката"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Није пронађена ниједна апликација која би могла да изврши ову радњу."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Кликните да бисте се вратили на претходни екран"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Додајте број телефона"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Додајте имејл"</string>
<string name="missing_app" msgid="1466111003546611387">"Није пронађена ниједна апликација која би могла да обави ову радњу."</string>
<string name="menu_share" msgid="943789700636542260">"Дели"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Додај у контакте"</string>
- <string name="share_via" msgid="563121028023030093">"Дели контакт преко"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Прављење групе на налогу"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Додај"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Делите контакте преко</item>
+ <item quantity="few">Делите контакте преко</item>
+ <item quantity="other">Делите контакте преко</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Изаберите налог"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Направите ознаку"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Преименујте ознаку"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Име ознаке"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име ознаке"</string>
<string name="audio_chat" msgid="2535716629358298691">"Аудио ћаскање"</string>
<string name="video_chat" msgid="1872255818640336072">"Видео ћаскање"</string>
- <string name="connections" msgid="8098440723172028350">"Везе"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Додај везу"</string>
- <string name="recent" msgid="2659189233141493004">"Недавно"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Недавна ажурирања"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> налог"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Не може да се измени из ове апликације."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Не може да се мења на овом уређају."</string>
<string name="take_photo" msgid="7496128293167402354">"Сликај"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Сликај нову слику"</string>
<string name="pick_photo" msgid="2129509985223564942">"Изабери слику"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Изабери нову слику"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Контакт листа се ажурира."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Претражује се..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Прикажи изабрано"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Прикажи све"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Изабери све"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Поништи све изборе"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Додај ново"</string>
- <string name="add_organization" msgid="7311893231158291197">"Додај организацију"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Датум"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Назив групе"</string>
- <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Главна слика"</string>
- <string name="description_star" msgid="2605854427360036550">"омиљено"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Измените контакт"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Желите ли да актуелни контакт обједините са изабраним контактом?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ознака"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Откажи"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затворите"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Желите ли да пребаците на уређивање изабраног контакта? Биће копиране информације које сте унели до сада."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Копирај у моје контакте"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Додај у Моје контакте"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Каталог <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Прилагођено"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Подешавања"</string>
<string name="menu_settings" msgid="377929915873428211">"Подешавања"</string>
<string name="menu_help" msgid="1680178646764069976">"Помоћ и повратне информације"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Опције приказа"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Број телефона"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Додај у контакте"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Додајте контакту"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Затвори"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Прикажи годину"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Учитава се…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Направи нови контакт"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Додајте налог"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Увези контакте"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Прављење нове групе"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Направи нову групу"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> групе</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Желите ли да избришете групу „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контакти неће бити избрисани.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> особа са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> особе са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> особа са налога <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> особе</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Увeзи"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Направи нову…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Желите да избришете ознаку „<xliff:g id="GROUP_LABEL">%1$s</xliff:g>“? (Контакти неће бити избрисани.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Унесите име контакта пре него што га обједините са другим контактом."</string>
<string name="copy_text" msgid="3257145021583508761">"Копирај у прив. меморију"</string>
<string name="set_default" msgid="4417505153468300351">"Постави на подразумевано"</string>
<string name="clear_default" msgid="7193185801596678067">"Обриши подразумевану вредност"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст је копиран"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Желите ли да одбаците промене и прекинете са изменама?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Желите да одбаците промене?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Одбаци"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Настави изменe"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Подеси мој профил"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Унесите име особе"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Назив групе"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Откажи"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Желите да одбаците прилагођавања?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Претражите контакте"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Уклоните контакте"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Мој локални профил"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Мој <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профил"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Приказани су сви контакти"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Очувајте безбедност контаката чак и ако изгубите телефон – синхронизујте са услугом на мрежи."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додавање налога"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Неће бити направљена резервна копија новог контакта. Желите ли да додате налог који прави резервну копију контаката онлајн?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Одвојте мало времена да бисте додали налог помоћу ког ћете направити резервну копију контаката на Google-у."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Нови контакти ће бити сачувани на налогу <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изаберите подразумевани налог за нове контакте:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Додај нови контакт"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Нови контакт"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Измените контакт"</string>
- <string name="keep_local" msgid="1258761699192993322">"Задржи локално"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Само преглед"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Изаберите контакт за измену"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Обједињени контакти"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Додај"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Раздвој"</string>
<string name="add_account" msgid="8201790677994503186">"Додај налог"</string>
<string name="add_new_account" msgid="5748627740680940264">"Додај нови налог"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Извези датотеке базе података"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"додавање новог контакта"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Направи нови контакт"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Прикажи више"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Прикажи мање"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Прикажи све"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Недавно"</string>
<string name="about_card_title" msgid="2920942314212825637">"Основни подаци"</string>
- <string name="send_message" msgid="8938418965550543196">"Пошаљи поруку"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Прављење личне копије..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Јуче"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Прављење личне копије..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Сутра"</string>
<string name="today" msgid="8041090779381781781">"Данас"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Данас у <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Сутра у <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Ненасловљени догађај)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Подеси"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Размена тренутних порука"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Тренутне поруке"</string>
<string name="header_organization_entry" msgid="8515394955666265406">"Организација"</string>
<string name="header_nickname_entry" msgid="6743561883967451485">"Надимак"</string>
<string name="header_note_entry" msgid="4320190426480612344">"Белешка"</string>
<string name="header_website_entry" msgid="1411467850000824745">"Веб-сајт"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Догађај"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Однос"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Налог"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Име"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Имејл"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Слика"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Кликните да бисте проширили уређивач контаката."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Кликните да бисте скупили уређивач контаката."</string>
<string name="content_description_directions" msgid="2686791825798189335">"упутства до локације"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Недавни SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Кликните за одговор"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Недавни SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Кликните за одговор"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"долазни"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"одлазни"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропуштени"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Недавни позив. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Кликните за повратни позив"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Недавни позив. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Кликните за повратни позив"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ви: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts ради боље кад унесете Hangouts идентификатор особе у поље за имејл адресу или број телефона."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Још поља"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Промените слику"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Oтварање уређивача није успело."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Чува се"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Тренутно се чува на налогу <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Додирните двапут да бисте изабрали други налог."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Обједињени контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Обједињени контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Обједињени контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Обједињених контаката: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Још поља"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Промените слику контакта"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додајте слику контакта"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Слика контакта"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Oтварање уређивача није успело."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Чува се на"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Није могуће изменити контакт информације са <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ОБЈЕДИНИ КОНТАКТЕ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЖИ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> могућ дупликат</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> могућа дупликата</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> могућих дупликата</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> обједињен контакт</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> обједињена контакта</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> обједињених контаката</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Овај контакт"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Могући дупликати"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Изгледа да су ови контакти иста особа. Можете да их обједините у један контакт."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Обједињени контакти"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Са ваших налога"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Сликај"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Све слике"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Изаберите слику"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Са <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Избриши <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Слика са <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> налога <xliff:g id="USER_NAME">%s </xliff:g> није означена"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Слика са <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> налога <xliff:g id="USER_NAME">%s </xliff:g> је означена"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Слика са непознатог налога није означена"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Слика са непознатог налога је означена"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Листа контаката се тренутно ажурира како би се применила промена језика.\n\nСачекајте..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Предлози"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Отвори фиоку за навигацију"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Затвори фиоку за навигацију"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Ознака <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Ознаке"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Налози"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Прегледајте заједничку историју"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Догађаји и поруке"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Догађаји"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Поруке"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Предлози"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Нека вам контакти буду организовани и корисни"</string>
+ <string name="undo" msgid="1425165101664071422">"Опозови"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Позови <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Позови кућни телефон"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Позови мобилни телефон"</string>
+ <string name="call_work" msgid="5328785911463744028">"Позови пословни телефон"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Позови факс"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Позови кућни факс"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Позови пејџер"</string>
+ <string name="call_other" msgid="8563753966926932052">"Позови"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Позови за повратни позив"</string>
+ <string name="call_car" msgid="3280537320306436445">"Позови телефон у аутомобилу"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Позови главни телефон предузећа"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Позови ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Позови главни телефон"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Позови факс"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Позови мобилни телефон"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Позови телекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Позови TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Позови пословни мобилни телефон"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Позови пословни пејџер"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Позови <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Позови MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (позови)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Пошаљи SMS на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Пошаљи SMS на кућни телефон"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Пошаљи SMS на мобилни телефон"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Пошаљи SMS на пословни телефон"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Пошаљи SMS на пословни факс"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Пошаљи SMS на кућни факс"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Пошаљи SMS на пејџер"</string>
+ <string name="sms_other" msgid="806127844607642331">"Teкст"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Пошаљи SMS за повратни позив"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Пошаљи SMS на телефон у аутомобилу"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Пошаљи SMS на главни број телефона предузећа"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Пошаљи SMS на ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Пошаљи SMS на главни телефон"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Пошаљи SMS на факс"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Пошаљи SMS на мобилни телефон"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Пошаљи SMS на телекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Пошаљи SMS на TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Пошаљи SMS на пословни мобилни телефон"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Пошаљи SMS на пејџер"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Пошаљи SMS на <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Пошаљи SMS на MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (пошаљи SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Упутите видео позив"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Брисање често контактираних?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Обрисаћете листу често контактираних у апликацијама Контакти и Телефон, па ће имејл апликације морати из почетка да прикупе информације о адресирању."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Брисање често контактираних..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Доступан/на"</string>
+ <string name="status_away" msgid="1838861100379804730">"Одсутан/на"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Заузет/а"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Друго"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Каталог за Work"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Сви контакти"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Брзи контакт за корисника <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Без имена)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често контактирани"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Сви контакти са бројевима телефона"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти са профила за Work"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Прикажи ажурирања"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Уређај"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Надимак"</string>
+ <string name="name_given" msgid="4280790853455320619">"Име"</string>
+ <string name="name_family" msgid="7466985689626017037">"Презиме"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Префикс за име"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Средње слово"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Суфикс имена"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Име – фонетски"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Име – фонетски"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Средње име – фонетски"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Презиме – фонетски"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Имејл"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адреса"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Тренутне поруке"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Организација"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Однос"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Посебан дан"</string>
+ <string name="sms" msgid="1756857139634224222">"Текстуална порука"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адреса"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Предузеће"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Наслов"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Белешке"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Прилагођено"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Веб-сајт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Ознаке"</string>
+ <string name="email_home" msgid="8573740658148184279">"Пошаљи имејл на кућну имејл адресу"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Пошаљи имејл на број мобилног телефона"</string>
+ <string name="email_work" msgid="2807430017302722689">"Пошаљи имејл на пословни број телефона"</string>
+ <string name="email_other" msgid="3454004077967657109">"Пошаљи имејлом"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Пошаљи имејл на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Пошаљи имејлом"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Град"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Држава"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Поштански број"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Земља"</string>
+ <string name="map_home" msgid="1243547733423343982">"Прикажи кућну адресу"</string>
+ <string name="map_work" msgid="1360474076921878088">"Прикажи пословну адресу"</string>
+ <string name="map_other" msgid="3817820803587012641">"Прикажи адресу"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Прикажи адресу <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Започни ћаскање преко AIM-а"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Започни ћаскање преко Windows Live-а"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Започни ћаскање преко Yahoo-а"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Започни ћаскање преко Skype-а"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Започни ћаскање преко QQ-а"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Ћаскај преко Google Talk-а"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Започни ћаскање преко ICQ-а"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Започни ћаскање преко Jabber-а"</string>
+ <string name="chat" msgid="9025361898797412245">"Ћаскање"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"избриши"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Прикажите још поља за име"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Скупите поља за име"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Прикажите још поља за фонетско име"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Скупите поља за фонетско име"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Проширите"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Скупите"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Проширено је"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Скупљено је"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Сви контакти"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Са звездицом"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Прилагоди"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Сви други контакти"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Сви контакти"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Уклони групу за синхронизацију"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Додај групу за синхронизацију"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Још група…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Уклањањем групе „<xliff:g id="GROUP">%s</xliff:g>“ са листе за синхронизацију уклонићете и све негруписане контакте са те листе."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Чување опција приказа је у току..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Прилагођени приказ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Сачувајте увезене контакте на:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Са SIM картице"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"Са SIM картице <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d контакт</item>
+ <item quantity="few">%1$d контакта</item>
+ <item quantity="other">%1$d контаката</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> контакта • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контаката • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Из .vcf датотеке"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Нема ничега за увоз"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Желите да увезете контакте из vCard датотеке?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Желите ли да откажете увоз датотеке <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Желите ли да откажете извоз датотеке <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Није могуће отказати vCard увоз/извоз"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Непозната грешка."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Није могуће отворити датотеку „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Није могуће покренути програм за извоз: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нема контаката за извоз."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Онемогућили сте обавезну дозволу."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Дошло је до грешке при извозу: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Нема довољно меморије. Датотека је можда превелика."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат није подржан."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Извоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је завршен."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Извоз контаката је завршен."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Извоз контаката је завршен. Кликните на обавештење да бисте их делили."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Додирните да бисте делили контакте."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Извоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је отказан"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Извоз података о контактима је у току"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Подаци о контактима се извозе."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Није могуће преузети информације из базе података"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нема контаката које је могуће извести."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Програм за израду vCard датотека се није исправно покренуо."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Није могуће извести"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Подаци о контактима низу извезени.\nРазлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Увоз <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Није могуће читати vCard податке"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Увоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је завршен"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Увоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је отказан"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Датотека <xliff:g id="FILENAME">%s</xliff:g> ће ускоро бити увезена."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Датотека ће ускоро бити увезена."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Захтев за извоз vCard датотеке је одбијен. Покушајте касније."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакти ће ускоро бити извезени."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Захтев за извоз vCard датотеке је одбијен. Покушајте касније."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Кеширање vCard датотеке у локалну привремену меморију. Увоз ће ускоро започети."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Није могуће увести vCard датотеку."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт преко NFC-а"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширање..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Увоз <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Извези у .vcf датотеку"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортирај према"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Име и презиме – фонетски"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Увек приказуј"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Сакриј ако је празно"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Име"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Презиме"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Формат имена"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Прво име"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Прво презиме"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Налози"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Подразумевани налог за нове контакте"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Моје информације"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Подесите профил"</string>
+ <string name="setting_about" msgid="7014388749752042863">"О Контактима"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Дели омиљене контакте"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Дели све контакте"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Дељење контаката није успело."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Извезите контакте"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Увезите контакте"</string>
+ <string name="share_error" msgid="948429331673358107">"Овај контакт не може да се дели."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контаката за дељење."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за приказ"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за приказ"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Прилагодите приказ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сачувај"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Претражите контакте"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омиљено"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Увeзи"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Извези"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани бројеви"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"преко <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> преко <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"зауставите претраживање"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Брисање претраге"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Налог"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Увек користи ово за позиве"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Упути позив са белешком"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Унесите белешку коју ћете послати уз позив…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ПОШАЉИ И ПОЗОВИ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Верзија"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Лиценце отвореног кода"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Подаци о лиценци за софтвер отвореног кода"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Политика приватности"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Услови коришћења услуге"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Лиценце отвореног кода"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Отварање URL-а није успело."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Означено: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Није означено: <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Упутите видео позив"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Избришите"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Три тачке"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> с <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ова пречица је онемогућена"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт је уклоњен"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Увeзи"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Изаберите контакте"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Нема контаката на SIM картици"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Контакт је већ на листи"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Увезен је <xliff:g id="COUNT">%d</xliff:g> контакт са SIM картице</item>
+ <item quantity="few">Увезена су <xliff:g id="COUNT">%d</xliff:g> контакта са SIM картице</item>
+ <item quantity="other">Увезено је <xliff:g id="COUNT">%d</xliff:g> контаката са SIM картице</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Увоз контаката са SIM картице није успео"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Увезите са SIM-а"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Откажите"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Аутоматска синхронизација је искључена. Додирните да бисте је укључили."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Одбаците"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Синхронизација налога је искључена. Додирните да бисте је укључили."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Желите да укључите аутоматску синхронизацију?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"На вебу и уређајима ће се редовно ажурирати промене које уносите у свим апликацијама и на свим налозима, а не само у Google контактима."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Укључи"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Веза није успостављена"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Прикажи више"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Увоз са SIM картице је завршен"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Увоз није успео"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Увоз контаката са SIM картице није успео"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Увози се са SIM-а"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Обавештења"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7fcf0f1d2..cb2d040c5 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kontakter"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontakter"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Visa kontakt"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Redigera kontakt"</string>
<string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Lägg till kontakt"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direktval"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direktmeddelande"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Välj genväg till kontakten"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Välj ett nummer att ringa"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Välj ett nummer för sms"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Välj kontakt"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Lägg till kontakt"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Välj en kontakt"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Välj"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Skapa ny kontakt"</string>
- <string name="starredList" msgid="4817256136413959463">"Stjärnmärkta"</string>
- <string name="frequentList" msgid="7154768136473953056">"Ofta"</string>
- <string name="strequentList" msgid="5640192862059373511">"Favoriter"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktuppgifter"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Redigera kontakt"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Skapa kontakt"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Redigera grupp"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Skapa grupp"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Om"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Uppdat."</string>
<string name="searchHint" msgid="8482945356247760701">"Sök efter kontakter"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Visa kontakt"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Lägg till i Favoriter"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ta bort från Favoriter"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Borttagen från favoriter"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Redigera"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Ta bort"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Ändra bild"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Placera på startskärmen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ring upp kontakt"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Skicka SMS till kontakt"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Skapa genväg"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Ta bort länk"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Redigera"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Ta bort"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Lägg till kontakt"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Lägg till grupp"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Ta bort kontakter"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Byt namn på etikett"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Radera etikett"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Lägg till kontakt"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Välj kontakter"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lägg till kontakter"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ta bort från etikett"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Skapa etikett"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Vill du ta bort länken mellan kontakterna?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ta bort länk"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vill du spara de ändringar som redan gjorts och ta bort länken mellan kontakterna?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Spara och ta bort länken"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Vill du spara de ändringar som redan gjorts och länka till den valda kontakten?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Spara och länka"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Länkar"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Tar bort länk"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Länka"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Visa länkade kontakter"</string>
<string name="menu_save" msgid="1727844363591825909">"Spara"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Länka kontakter"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Välj vilken kontakt du vill länka till <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Visa alla kontakter"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Föreslagna kontakter"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Alla kontakter"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> länkad"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontakterna har länkats"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> har raderats"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> och <xliff:g id="NAME_1">%2$s</xliff:g> har raderats"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g> … raderade"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kontakterna har tagits bort</item>
<item quantity="one">Kontakten har tagits bort</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakter</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Från Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Från: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Ställ in ringsignal"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Alla samtal till röstbrevlådan"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Kontakter från skrivskyddade konton kan inte tas bort. De kan dock döljas."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Dölj"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Kontakten som ska tas bort innehåller information från flera konton. Information från skrivskyddade konton kommer att döljas men inte tas bort."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Du måste markera minst två kontakter som ska länkas."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Vill du länka samman valda kontakter?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Länka"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Dirigera till röstbrevlåda"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Sluta dirigera till röstbrevl."</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Den här kontakten är skrivskyddad. Den går inte att ta bort, men går att dölja."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Dölj kontakt"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Skrivskyddade konton för den här kontakten döljs och raderas inte."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Vill du ta bort kontakten?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Vill du ta bort de valda kontakterna?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Kontakter från skrivskyddade konton kan inte tas bort. De kan dock döljas."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Om du tar bort den här kontakten tar du bort information från flera konton."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Vill du ta bort kontakten?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ta bort"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Ta bort ändringar"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kontakten finns inte."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakten har lagts till på startskärmen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> har lagts till på startskärmen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Skapa ny kontakt"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Skapa ny kontakt"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Organisation"</item>
- <item msgid="7196592230748086755">"Anteckning"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Det finns inga bilder på surfplattan."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Det finns inga bilder på telefonen."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Det finns inga bilder på enheten."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbild"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Anpassat etikettsnamn"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Skicka samtal direkt till röstbrevlåda"</string>
<string name="removePhoto" msgid="4898105274130284565">"Ta bort foto"</string>
- <string name="noContacts" msgid="4955659076981974652">"Inga kontakter"</string>
- <string name="noGroups" msgid="8614664663561385253">"Inga grupper."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Om du vill skapa grupper måste du ha ett konto."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Inga personer i denna grupp."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Redigera gruppen om du vill lägga till personer."</string>
- <string name="savingContact" msgid="4075751076741924939">"Sparar kontakt..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Kontaktlistan är tom"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Inga kontakter med den här etiketten"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Det finns inga kontakter på det här kontot"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlistan är tom"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> sparad"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kontakt sparad"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Länken mellan kontakterna har tagits bort"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Det gick inte att spara ändringarna i kontakten."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Det gick inte att ta bort länken för kontakten."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Det gick inte att länka kontakten."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Det gick inte att spara kontakten."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Det gick inte att spara ändringarna av kontaktfotot."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Gruppen sparades."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Det gick inte att spara ändringarna i gruppen."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakter med telefonnummer</item>
- <item quantity="one">1 kontakt med telefonnummer</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Inga kontakter med telefonnummer"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hittades</item>
- <item quantity="one">1 hittades</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Det gick inte att spara kontaktändringarna"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Det gick inte att ta bort kontaktens länk"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Det gick inte att länka kontakten"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Det gick inte att spara kontakten"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Det gick inte att spara kontaktfotots ändringar"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Det gick inte att läsa in etiketten"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten raderad"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etikett skapad"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Det går inte att skapa etikett"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiketten uppdaterad"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Borttagen från etikett"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Tillagt till etikett"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Det gick inte att spara etikettändringarna"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Den etiketten finns redan"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Vissa kontakter saknar e-postadress."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Vissa kontakter saknar telefonnummer."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Skicka e-post"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Skicka meddelande"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Välj kontakter"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Skicka"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Inga kontakter"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hittades</item>
- <item quantity="one">1 hittades</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Alla"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriter"</string>
- <string name="callBack" msgid="5498224409038809224">"Ring upp"</string>
- <string name="callAgain" msgid="3197312117049874778">"Ring igen"</string>
- <string name="returnCall" msgid="8171961914203617813">"Ring upp"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vill du lägga till <xliff:g id="EMAIL">%s</xliff:g> i Kontakter?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontaktbild"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Dina kontakters namn"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Ingen app som kan hantera åtgärden hittades."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klicka om du vill återvända till föregående skärm"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lägg till telefonnummer"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Lägg till e-post"</string>
<string name="missing_app" msgid="1466111003546611387">"Ingen app som kan hantera åtgärden hittades"</string>
<string name="menu_share" msgid="943789700636542260">"Dela"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Lägg till i Kontakter"</string>
- <string name="share_via" msgid="563121028023030093">"Dela kontakt via"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Skapa grupp under konto"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Lägg till"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Dela kontakter med</item>
+ <item quantity="one">Dela kontakt med</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Välj konto"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Skapa etikett"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Byt namn på etikett"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etikettnamn"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etikettnamn"</string>
<string name="audio_chat" msgid="2535716629358298691">"Röstchatt"</string>
<string name="video_chat" msgid="1872255818640336072">"Videochatt"</string>
- <string name="connections" msgid="8098440723172028350">"Anslutningar"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Lägg till anslutning"</string>
- <string name="recent" msgid="2659189233141493004">"Senaste"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Nya uppdateringar"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Kan inte redigeras från den här appen."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Kan inte redigeras i den här enheten."</string>
<string name="take_photo" msgid="7496128293167402354">"Ta en bild"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Ta ny bild"</string>
<string name="pick_photo" msgid="2129509985223564942">"Välj bild"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Välj ett nytt foto"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontaktlistan uppdateras."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Söker …"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Visa markerade"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Visa alla"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Markera alla"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Avmarkera alla"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lägg till ny"</string>
- <string name="add_organization" msgid="7311893231158291197">"Lägg till organisation"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Gruppnamn"</string>
- <string name="change_photo" msgid="8530597935483526383">"Ändra"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Primärt foto"</string>
- <string name="description_star" msgid="2605854427360036550">"favorit"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Redigera kontakt"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vill du länka den aktuella kontakten till den markerade kontakten?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Avbryt"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Tillbaka"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"stäng"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Vill du fortsätta att redigera den markerade kontakten? Information som du har angett hittills kommer att kopieras."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopiera till mina kontakter"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Lägg till i mina kontakter"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Anpassad"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Inställningar"</string>
<string name="menu_settings" msgid="377929915873428211">"Inställningar"</string>
<string name="menu_help" msgid="1680178646764069976">"Hjälp och feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Visa alternativ"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefonnummer"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lägg till i Kontakter"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Lägg till kontakt"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Stäng"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Inkludera år"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Läser in …"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skapa en ny kontakt"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Lägg till ett konto"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Importera kontakter"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Skapa ny grupp"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Skapa ny grupp"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grupper</item>
- <item quantity="one">1 grupp</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Vill du ta bort gruppen <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Kontakterna tas inte bort.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> personer från <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person från <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> personer</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> person</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importera"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Skapa ny ..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Ta bort etiketten <xliff:g id="GROUP_LABEL">%1$s</xliff:g>? (Själva kontakterna tas inte bort.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Skriv kontaktens namn innan du länkar den till en annan."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopiera till Urklipp"</string>
<string name="set_default" msgid="4417505153468300351">"Ange standard"</string>
<string name="clear_default" msgid="7193185801596678067">"Rensa standardinställningar"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Texten har kopierats"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Vill du tar bort ändringarna och sluta redigera?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Vill du ignorera ändringarna?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignorera"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Fortsätt redigera"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Skapa min profil"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Ange personens namn"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Gruppens namn"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Avbryt"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vill du ignorera anpassningarna?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Sök efter kontakter"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Ta bort kontakter"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Min lokala profil"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Min <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profil"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Visar alla kontakter"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Skydda dina kontakter även om du förlorar mobilen. Synkronisera med en onlinetjänst."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Lägg till ett konto"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Din nya kontakt kommer inte att säkerhetskopieras. Vill du lägga till ett konto så att kontakterna säkerhetskopieras online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Ägna en minut åt att lägga till ett konto för säkerhetskopiering av dina kontakter till Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nya kontakter sparas i <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Välj ett standardkonto för nya kontakter:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Lägg till ny kontakt"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Skapa ny kontakt"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Redigera kontakt"</string>
- <string name="keep_local" msgid="1258761699192993322">"Spara lokalt"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Skrivskyddat"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Välj kontakt att redigera"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Länkade kontakter"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Lägg till"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ta bort länk"</string>
<string name="add_account" msgid="8201790677994503186">"Lägg till ett konto"</string>
<string name="add_new_account" msgid="5748627740680940264">"Lägg till ett nytt konto"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Exportera databasfiler"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"lägg till ny kontakt"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Skapa ny kontakt"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Visa mer"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Visa mindre"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Visa alla"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Senaste"</string>
<string name="about_card_title" msgid="2920942314212825637">"Om"</string>
- <string name="send_message" msgid="8938418965550543196">"Skicka meddelande"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Skapar en personlig kopia ..."</string>
- <string name="yesterday" msgid="6840858548955018569">"I går"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"En personlig kopia skapas ..."</string>
<string name="tomorrow" msgid="6241969467795308581">"I morgon"</string>
<string name="today" msgid="8041090779381781781">"I dag"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgon kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(händelse utan titel)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Ange"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Chatt"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Webbplats"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Händelse"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Namn"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Bild"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Klicka om du vill expandera kontaktredigeraren."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klicka om du vill komprimera kontaktredigeraren."</string>
<string name="content_description_directions" msgid="2686791825798189335">"vägbeskrivning till plats"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klicka om du vill svara"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klicka om du vill svara"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"inkommande"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"utgående"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missade"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"samtal. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klicka om du vill ringa upp"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"samtal. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klicka om du vill ringa upp"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Du: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts fungerar bättre när du anger personens identifierare i Hangouts i e-postfältet eller mobilfältet."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Fler fält"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Byt bild"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Det gick inte att öppna redigeringsappen."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sparas till"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kontakterna sparas för närvarande i <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryck snabbt två gånger om du vill använda ett annat konto."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Länkade kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Länkad kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> länkade kontakter"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Fler fält"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ändra kontaktfoto"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Lägg till kontaktfoto"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontaktfoto"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Det gick inte att öppna redigeraren."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Sparas i"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Det går inte att redigera kontaktinformation från <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LÄNKA KONTAKTER"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"AVBRYT"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> möjliga dubbletter</item>
- <item quantity="one">1 möjlig dubblett</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> länkade kontakter</item>
- <item quantity="one">1 länkad kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Den här kontakten"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Möjlig dubblett"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Dessa kontakter avser möjligen samma person. Du kan länka samman dem till en enda kontakt."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Länkade kontakter"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Från dina konton"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Ta en bild"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Alla foton"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Välj bild"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Från <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Radera <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Radera <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Radera <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotot från <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> har inte markerats"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotot från <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> har markerats"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Ett foto från ett okänt konto har inte markerats"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Ett foto från ett okänt konto har markerats"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kontaktlistan uppdateras så att språkändringen visas.\n\nVänta..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Förslag"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nytt"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Öppna navigeringspanelen"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Stäng navigeringspanelen"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Etiketten <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketter"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Konton"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Se historiken tillsammans"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Händelser och meddelanden"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Event"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Meddelanden"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Förslag"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Håll dina kontakter ordnade och användbara"</string>
+ <string name="undo" msgid="1425165101664071422">"Ångra"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Ring <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Ring hem"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Ring mobilen"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ring – arbete"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Ring – arbetsfax"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Ring upp hemfax"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Ring personsökare"</string>
+ <string name="call_other" msgid="8563753966926932052">"Ring"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Ring upp återuppringningsnummer"</string>
+ <string name="call_car" msgid="3280537320306436445">"Ring bilen"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Ring företagets växel"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Ring upp ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Ring upp primärt nummer"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Samtal till fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Ring radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Ring upp telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Ring upp TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ring upp jobbmobil"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ring upp jobbpersonsökare"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Ring <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Samtal – MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ring)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Skicka sms till <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS – hem"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS – mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS – arbete"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS – arbetsfax"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS – hemfax"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS – personsökare"</string>
+ <string name="sms_other" msgid="806127844607642331">"Text"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Skicka SMS till återuppringningsnummer"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS – bil"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS – jobbväxel"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Skicka SMS till ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Skicka SMS till primärt nummer"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Text till fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS – radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Skicka SMS till telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Skicka SMS till TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Skicka SMS till jobbmobil"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Skicka SMS till jobbpersonsökare"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Skicka SMS till <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Skicka MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (skicka sms)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Ring videosamtal"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Rensa listan?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Du rensar listan över personer som du kontaktar ofta i apparna Kontakter och Telefon. E-postappar tvingas lära sig dina mottagarinställningar från början."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Listan rensas …"</string>
+ <string name="status_available" msgid="5586870015822828392">"Tillgänglig"</string>
+ <string name="status_away" msgid="1838861100379804730">"Borta"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Upptagen"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Övrigt"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Jobbkatalog"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Alla kontakter"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Snabbkontakt för <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Inget namn)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofta kontaktade"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Alla kontakter med telefonnummer"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakter i jobbprofilen"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Visa uppdateringar"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Enhet"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Namn"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Smeknamn"</string>
+ <string name="name_given" msgid="4280790853455320619">"Förnamn"</string>
+ <string name="name_family" msgid="7466985689626017037">"Efternamn"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Namnprefix"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Mellannamn"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Namnsuffix"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetiskt namn"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetiskt förnamn"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetiskt mellannamn"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetiskt efternamn"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-post"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adress"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chatt"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Organisation"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Relation"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Särskilt datum"</string>
+ <string name="sms" msgid="1756857139634224222">"Textmeddelande"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adress"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Företag"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Titel"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Anteckningar"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Anpassat"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Webbplats"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketter"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-postadress – hem"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Skicka e-post till mobil"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-postadress – arbete"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-post"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Skicka e-post till <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-post"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Gata"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Stad"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Delstat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Land"</string>
+ <string name="map_home" msgid="1243547733423343982">"Visa hemadress"</string>
+ <string name="map_work" msgid="1360474076921878088">"Visa jobbadress"</string>
+ <string name="map_other" msgid="3817820803587012641">"Visa adress"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Visa adressen <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Chatta med AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Chatta med Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Chatta med Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Chatta med Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Chatta med QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Chatta med Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Chatta med ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Chatta med Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Chatt"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ta bort"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Visa fler namnfält"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Komprimera namnfält"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Visa fler fonetiska namnfält"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Komprimera fonetiska namnfält"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Expandera"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Komprimera"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Utökat"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Komprimerat"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Alla kontakter"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Stjärnmärkt"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Anpassa"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Alla andra kontakter"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Alla kontakter"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Ta bort synkgrupp"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Lägg till synkgrupp"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Fler grupper …"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Om du tar bort <xliff:g id="GROUP">%s</xliff:g> från synkroniseringen tas även kontakter som inte tillhör grupper bort från synkroniseringen."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Sparar visningsalternativ ..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Anpassad vy"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Spara importerade kontakter i:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kontakter</item>
+ <item quantity="one">En kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kontakter • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf-fil"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Inget att importera"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Importera kontakter från vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Vill du avbryta importen av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vill du avbryta exporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Det gick inte att avbryta importen/exporten av vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Okänt fel."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Det gick inte att öppna <xliff:g id="FILE_NAME">%1$s</xliff:g>: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Det gick inte att starta exportverktyget: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Det finns ingen kontakt att exportera."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Du har inaktiverat en behörighet som krävs."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ett fel inträffade under exporten: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fel"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Det finns inte tillräckligt med minne. Filen kan vara för stor."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet stöds inte."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> har exporterats."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontakterna har exporterats."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakterna har exporterats. Klicka på aviseringen om du vill dela dem."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Tryck här om du vill dela kontakterna."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Exporten av <xliff:g id="FILENAME">%s</xliff:g> avbröts."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporterar kontaktuppgifter"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktuppgifterna exporteras."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Det gick inte att hämta databasinformation."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Det finns inga kontakter att exportera."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-kompositören initierades inte korrekt."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kunde inte exportera"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktuppgifterna exporterades inte.\nOrsak: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Importerar <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Det gick inte att läsa vCard-data"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard-filen <xliff:g id="FILENAME">%s</xliff:g> har importerats"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importen av <xliff:g id="FILENAME">%s</xliff:g> avbröts"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importeras snart."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen kommer snart att importeras."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Begäran om vCard-import avvisades. Försök igen vid ett senare tillfälle."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakterna exporteras snart."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Begäran om vCard-export avvisades. Försök igen vid ett senare tillfälle."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-fil(er) cachelagras till en lokal tillfällig lagringsenhet. Den faktiska importen börjar snart."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Det gick inte att importera vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Mott. v. NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Cachelagrar ..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Importerar <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Exportera till VCF-fil"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortera efter"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetiskt namn"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Visa alltid"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Dölj om tom"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Förnamn"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Efternamn"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Namnformat"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Förnamn först"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Efternamn först"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Konton"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Standardkonto för nya kontakter"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Mina uppgifter"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Konfigurera profilen"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Om Kontakter"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Dela favoritkontakterna"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Dela alla kontakter"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Det gick inte att dela kontakterna."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Exportera kontakter"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Importera kontakter från"</string>
+ <string name="share_error" msgid="948429331673358107">"Den här kontakten kan inte delas."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Det finns inga kontakter att dela."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter som ska visas"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter som ska visas"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Anpassa vy"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Spara"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Sök efter kontakter"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriter"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Importera"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Exportera"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockerade nummer"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"via <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"avbryt sökning"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Rensa sökning"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Använd alltid för samtal"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Ring med anteckning"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Gör en anteckning som skickas när du ringer…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"SKICKA OCH RING"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Programversion"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenser, öppen källkod"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licensinformation för programvara med öppen källkod"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Sekretesspolicy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Användarvillkor"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Licenser, öppen källkod"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Det gick inte att öppna webbadressen."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> har markerats"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> har inte markerats"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Ring ett videosamtal"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Radera"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> tim <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sek"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Den här genväg är inaktiverad"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt borttagen"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Importera"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Välj kontakter"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Inga kontakter på SIM-kortet"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Kontakten finns redan på listan"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM-kontakter importerade</item>
+ <item quantity="one">En SIM-kontakt importerad</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Det gick inte att importera SIM-kontakter"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Importera från SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Avbryt"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Automatisk synkronisering har inaktiverats. Aktivera genom att trycka."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Avvisa"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Kontosynkronisering har inaktiverats. Aktivera genom att trycka."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Aktivera automatisk synkronisering?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Ändringar du gör i alla appar och konton, inte bara i Kontakter, uppdateras mellan webben och dina enheter."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aktivera"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Ingen anslutning"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Visa fler"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import av SIM-kort slutförd"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Det gick inte att importera"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Det gick inte att importera kontakter från SIM-kortet"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importerar SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Meddelanden"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 32f503164..51b62a986 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Anwani"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Anwani"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Angalia Anwani"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Badilisha Anwani"</string>
<string name="contactsList" msgid="8661624236494819731">"Anwani"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Ongeza anwani"</string>
<string name="shortcutContact" msgid="749243779392912958">"Anwani"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Upigaji wa moja kwa moja"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Ujumbe wa moja kwa moja"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Chagua njia ya mkato ya anwani"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Chagua nambari ya kupiga"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Chagua nambari ya kutumia ujumbe"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Chagua anwani"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ongeza kwenye anwani"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Chagua anwani"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Teua"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ongeza anwani mpya"</string>
- <string name="starredList" msgid="4817256136413959463">"Zenye nyota"</string>
- <string name="frequentList" msgid="7154768136473953056">"Mara kwa mara"</string>
- <string name="strequentList" msgid="5640192862059373511">"Vipendwa"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Maelezo ya anwani"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Hariri anwani"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Unda anwani"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Hariri kikundi"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Unda kikundi"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Kuhusu"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Masasisho"</string>
<string name="searchHint" msgid="8482945356247760701">"Tafuta anwani"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Tazama anwani"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Ongeza kwenye vipendwa"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Ondoa kwenye vipendwa"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Imeondolowa kwenye vipendewa"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Badilisha"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Futa"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Badilisha picha"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Weka kwenye skrini ya Mwanzo"</string>
- <string name="menu_call" msgid="3992595586042260618">"Mpigie"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Tuma ujumbe kwa anwani"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Unda njia ya mkato"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Tenganisha"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Badilisha"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Futa"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Ongeza Anwani"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Ongeza Kikundi"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Ondoa anwani"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Badilisha jina la lebo"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Futa lebo"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Ongeza anwani"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Chagua unaowasiliana nao"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ongeza anwani"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ondoa kutoka kwenye lebo"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Unda lebo"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Je, unataka kutenganisha anwani hii kuwa anwani nyingi?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Tenganisha"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Je, ungetaka kuhifadhi mabadiliko uliyoyafanya na utenganishe anwani hii kuwa anwani nyingi?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Hifadhi na Utenganishe"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Je, ungetaka kuhifadhi mabadiliko uliyofanya na uunganishe na anwani uliyochagulia?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Hifadhi na Uunganishe"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Inaunganisha"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Inatenganisha"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Unganisha"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Angalia anwani zilizounganishwa"</string>
<string name="menu_save" msgid="1727844363591825909">"Hifadhi"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Unganisha anwani"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Chagua anwani ambayo ungependa kuunganisha na <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Onyesha anwani zote"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Anwani zilizopendekezwa"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Anwani zote"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ameunganishwa"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Anwani zimeunganishwa"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> amefutwa"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> na <xliff:g id="NAME_1">%2$s</xliff:g> wamefutwa"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… zimefutwa"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Anwani zimefutwa</item>
<item quantity="one">Anwani imefutwa</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other">Anwani <xliff:g id="COUNT_1">%d</xliff:g></item>
+ <item quantity="one">Anwani <xliff:g id="COUNT_0">%d</xliff:g></item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other">Anwani <xliff:g id="COUNT_2">%1$d</xliff:g> · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one">Anwani <xliff:g id="COUNT_0">%1$d</xliff:g> · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Kutoka Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Kutoka <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Weka mlio wa simu"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Simu zijibiwe kwa ujumbe-sauti"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Anwani kutoka akaunti zako za kusoma pekee haziwezi kufutwa, lakini zinaweza kufichwa."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ficha"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Anwani unayotaka kufuta ina maelezo kutoka akaunti nyingi. Maelezo kutoka akaunti za kusoma pekee yatafichwa, bali hayatafutwa."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Unahitaji kuchagua angalau anwani mbili ili uunganishe."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Je, ungependa kuunganisha anwani ulizochagua?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Unganisha"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Elekeza kwenye ujumbe wa sauti"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ondoa kwenye ujumbe wa sauti"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Anwani hii inaweza kusomwa tu. Haiwezi kufutwa, lakini unaweza kuificha."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ficha Anwani"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Akaunti zinazoweza kusomwa tu zilizo katika anwani hii zitafichwa wala hazitafutwa."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Je, ungependa kufuta anwani hii?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Ungependa kufuta anwani ulizochagua?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Anwani kutoka akaunti zako za kusoma pekee haziwezi kufutwa, lakini zinaweza kufichwa."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kufuta anwani hii kutafuta maelezo kwenye akaunti nyingi."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Je, ungependa kufuta anwani hii?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Futa"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Usihifadhi mabadiliko"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Mwasiliani hayupo."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Anwani imeongezwa kwenye Skrini ya kwanza."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> imeongezwa kwenye Skrini ya kwanza."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Weka anwani mpya"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Ongeza anwani mpya"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Shirika"</item>
- <item msgid="7196592230748086755">"Hati"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Hakuna picha inayopatikana kwenye kompyuta ndogo."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Hakuna picha zinazopatikana kwenye simu."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Hakuna picha inayopatikana kwenye kifaa."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Picha ya anwani"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Jina maalum la lebo"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Tuma simu moja kwa moja kwenye ujumbe wa sauti"</string>
<string name="removePhoto" msgid="4898105274130284565">"Ondoa picha"</string>
- <string name="noContacts" msgid="4955659076981974652">"Hakuna anwani"</string>
- <string name="noGroups" msgid="8614664663561385253">"Hakuna vikundi."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Ili kuunda vikundi unahitaji akaunti"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Hakuna watu katika kikundi hiki."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Kuongeza baadhi, hariri kikundi."</string>
- <string name="savingContact" msgid="4075751076741924939">"Inahifadhi anwani..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Orodha yako ya anwani haina kitu"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Hakuna anwani zilizo na lebo hii"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Hakuna anwani katika akaunti hii"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Orodha yako ya anwani haina kitu"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> amehifadhiwa"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Anwani imehifadhiwa"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Imetenganisha anwani"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Haikuweza kuhifadhi mabadiliko ya mwasiliani."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Haikuweza kutenganisha anwani."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Haikuweza kuunganisha anwani."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kumekuwa na hitilafu ya kuhifadhi anwani."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Haikuweza kuhifadhi mabadiliko ya picha ya unayewasiliana naye."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Kikundi kimehifadhiwa."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Haikuweza kuhifadhi mabadiliko ya kikundi."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> unaowasiliana nao wenye nambari za simu</item>
- <item quantity="one">1 unayewasiliana naye mwenye nambari ya simu</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Hakuna anwani zilizo na nambari za simu"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> zimepatikana</item>
- <item quantity="one">1 imepatikana</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Imeshindwa kuhifadhi mabadiliko ya maelezo ya unayewasiliana naye"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Imeshindwa kutenganisha anwani"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Imeshindwa kuunganisha anwani"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hitilafu imetokea wakati wa kuhifadhi anwani"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Imeshindwa kuhifadhi mabadiliko ya picha ya unayewasiliana naye"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Imeshindwa kupakia lebo"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Lebo imefutwa"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Lebo imeundwa"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Imeshindwa kutengeneza lebo"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Lebo mesasishwa"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Imeondolewa kwenye lebo"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Imeongezwa kwenye lebo"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Imeshindwa kuhifadhi mabadiliko ya lebo"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Lebo hiyo tayari ipo"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Baadhi ya watu hawana anwani za barua pepe."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Baadhi ya anwani hazina nambari za simu."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Tuma barua pepe"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Tuma ujumbe"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Chagua Anwani"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Tuma"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Hakuna anwani"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> zimepatikana</item>
- <item quantity="one">Moja imepatikana</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Zote"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Vipendwa"</string>
- <string name="callBack" msgid="5498224409038809224">"Mpigie"</string>
- <string name="callAgain" msgid="3197312117049874778">"Piga simu tena"</string>
- <string name="returnCall" msgid="8171961914203617813">"Mpigie"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ongeza \"<xliff:g id="EMAIL">%s</xliff:g>\" kwa anwani?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"picha ya anwani"</string>
- <string name="description_plus_button" msgid="515164827856229880">"jumlisha"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ya anwani <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Majina ya anwani zako"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Hakuna programu iliyopatikana ya kushughulikia tendo hili."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Bofya ili urudi kwenye skrini iliyotangulia"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ongeza nambari ya simu"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Ongeza anwani ya barua pepe"</string>
<string name="missing_app" msgid="1466111003546611387">"Hakuna programu iliyopatikana ya kushughulikia tendo hili."</string>
<string name="menu_share" msgid="943789700636542260">"Shiriki"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Ongeza kwenye anwani"</string>
- <string name="share_via" msgid="563121028023030093">"Shiriki anwani kupitia"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Buni kikundi chini ya akaunti"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Ongeza"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Shiriki anwani kupitia</item>
+ <item quantity="one">Shiriki anwani kupitia</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Teua akaunti"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Unda lebo"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Badilisha jina la lebo"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Jina la lebo"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Jina la lebo"</string>
<string name="audio_chat" msgid="2535716629358298691">"Gumzo la sauti"</string>
<string name="video_chat" msgid="1872255818640336072">"Piga gumzo la video"</string>
- <string name="connections" msgid="8098440723172028350">"Miunganisho"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Ongeza muunganisho"</string>
- <string name="recent" msgid="2659189233141493004">"Za Hivi karibuni"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Masasisho vya hivi karibuni"</string>
<string name="account_type_format" msgid="718948015590343010">"Anwani <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Akaunti ya <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Haiwezi kuhaririwa kutoka kwa programu hii."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Haiwezi kuhaririwa kwenye kifaa hiki"</string>
<string name="take_photo" msgid="7496128293167402354">"Piga picha"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Piga picha mpya"</string>
<string name="pick_photo" msgid="2129509985223564942">"Chagua picha"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Chagua picha mpya"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Orodha ya anwani inasasishwa."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Inatafuta…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Onyesha iliyochaguliwa"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Onyesha zote"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Chagua zote"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Usichague zozote"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ongeza mpya"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ongeza shirika"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarehe"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Jina la kikundi"</string>
- <string name="change_photo" msgid="8530597935483526383">"Badilisha"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Picha ya msingi"</string>
- <string name="description_star" msgid="2605854427360036550">"kipendwa"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Hariri anwani"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Ungependa kuunganisha anwani ya sasa na anwani uliyochagua?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lebo"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Ghairi"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Rudi nyuma"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"funga"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Ungependa kubadilisha anwani uliyochagua? Maelezo uliyoweka kufikia sasa yatanakiliwa."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Nakili kwa Anwani Zangu"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Ongeza kwa Anwani Zangu"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Saraka <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Maalum"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Mipangilio"</string>
<string name="menu_settings" msgid="377929915873428211">"Mipangilio"</string>
<string name="menu_help" msgid="1680178646764069976">"Usaidizi na maoni"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Chaguo za kuonyesha"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Nambari ya simu"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ongeza kwa anwani"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ongeza kwa anwani"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Funga"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Jumuisha mwaka"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Anwani"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Inapakia…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Fungua akaunti mpya"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ongeza akaunti"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ingiza anwani"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Unda kikundi kipya"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Unda kikundi kipya"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other">Makundi <xliff:g id="COUNT">%0$d</xliff:g></item>
- <item quantity="one">Kundi kimoja</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Futa kikundi \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Anwani zenyewe hazitafutwa.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other">Watu <xliff:g id="COUNT_2">%1$d</xliff:g> kutoka <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one">Mtu<xliff:g id="COUNT_0">%1$d</xliff:g> kutoka <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other">Watu <xliff:g id="COUNT_1">%1$d</xliff:g></item>
- <item quantity="one">Mtu <xliff:g id="COUNT_0">%1$d</xliff:g></item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Leta"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Unda mpya…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Ungependa kufuta lebo iitwayo \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Anwani zenyewe hazitafutwa.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Andika jina ya anwani kabla ya kuiunganisha na nyingine."</string>
<string name="copy_text" msgid="3257145021583508761">"Nakili kwenye ubao wa kunakili"</string>
<string name="set_default" msgid="4417505153468300351">"Weka chaguo-msingi"</string>
<string name="clear_default" msgid="7193185801596678067">"Ondoa chaguo-msingi"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Maandishi yamenakiliwa"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Je, ungependa kutupa mabadiliko yako na uache kubadilisha?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Una uhakika hutaki kuhifadhi mabadiliko uliyofanya?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Tupa"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Endelea kubadilisha"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Unda wasifu wangu"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Charaza jina la mtu"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Jina la kikundi"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ghairi"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Una uhakika hutaki kuhifadhi mabadiliko uliyoyafanya?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Tafuta anwani"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Ondoa anwani"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Wasifu wangu wa ndani."</string>
<string name="external_profile_title" msgid="8034998767621359438">"Wasifu wangu wa <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Inaonyesha anwani zote"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Weka anwani za unaowasiliana nao salama hata ukipoteza simu yako: sawazisha kwa huduma iliyo mtandaoni."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ongeza akaunti"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Anwani yako mpya haitakuwa na nakala rudufu. Je, ungependa kuongeza akaunti ambayo inahifadhi nakala za anwani mtandaoni?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Chukua muda kidogo uongeze akaunti ya kuhifadhia nakala ya anawani zako katika Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Anwani mpya zitahifadhiwa kwenye <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Chagua akaunti ya msingi ya anwani mpya:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Ongeza anwani mpya"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Ongeza anwani mpya"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Badilisha anwani"</string>
- <string name="keep_local" msgid="1258761699192993322">"Weka ndani ya kifaa"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Kuangalia pekee"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Chagua anwani ya kubadilisha"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Anwani zilizounganishwa"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Ongeza"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Tenganisha"</string>
<string name="add_account" msgid="8201790677994503186">"Ongeza akaunti"</string>
<string name="add_new_account" msgid="5748627740680940264">"Ongeza akaunti mpya"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Hamisha faili za hifadhidata"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"ongeza anwani mpya"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Ongeza anwani mpya"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Angalia zaidi"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Angalia chache"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Angalia zote"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Hivi majuzi"</string>
<string name="about_card_title" msgid="2920942314212825637">"Kuhusu"</string>
- <string name="send_message" msgid="8938418965550543196">"Tuma ujumbe"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Inaunda nakala binafsi..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Jana"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Inaunda nakala ya kibinafsi..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Kesho"</string>
<string name="today" msgid="8041090779381781781">"Leo"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Leo saa <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Kesho saa <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Tukio lisilokuwa na kichwa)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Weka"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Ujumbe wa Papo Hapo"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Tovuti"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Tukio"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Uhusiano"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Akaunti"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Jina"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Barua pepe"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Simu"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Picha"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Bofya ili upanue kihariri cha anwani."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Bofya ili ukunje kihariri cha anwani."</string>
<string name="content_description_directions" msgid="2686791825798189335">"maelekezo ya kwenda mahali"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms ya hivi majuzi. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. bofya ili ujibu"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms ya hivi majuzi. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. bofya ili ujibu"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"zinazoingia"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"zinazotoka"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ulizokosa kupokea"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"simu ya hivi karibuni. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. bofya ili upige simu"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"simu ya hivi karibuni. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. bofya ili upige simu"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Wewe: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangout hufanya kazi vizuri zaidi unapoweka nambari ya mtu ya utambulisho wa Hangout katika sehemu ya anwani ya barua pepe au sehemu ya nambari ya simu."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Sehemu zaidi"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Badilisha picha"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Imeshindwa kufungua kihariri."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Inahifadhi kwenye"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kwa sasa inahifadhi katika <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Gonga mara mbili ili ubadilishe akaunti."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Anwani (<xliff:g id="COUNT">%d</xliff:g>) zilizounganishwa</item>
- <item quantity="one">Anwani iliyounganishwa</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Anwani <xliff:g id="COUNT">%d</xliff:g> zilizounganishwa"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>(<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Sehemu zingine"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Badilisha picha ya anwani"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ongeza picha ya anwani"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Picha ya anwani"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Imeshindwa kufungua kihariri."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Inahifadhi kwenye"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Huwezi kubadilisha maelezo ya anwani zilizo ktk <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"UNGANISHA ANWANI"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"GHAIRI"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">Nakala <xliff:g id="COUNT">%d</xliff:g> zinazoweza kurudufishwa</item>
- <item quantity="one">Nakala 1 inayoweza kurudufishwa</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Anwani <xliff:g id="COUNT">%d</xliff:g> zilizounganishwa</item>
- <item quantity="one">Anwani 1 iliyounganishwa</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Anwani hii"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Anwani zinazoweza kurudufishwa"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Anwani hizi zinaweza kuwa za mtu mmoja. Unaweza kuziunganisha zote kuwa anwani moja."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Anwani zilizounganishwa"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Kutoka akaunti zako"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Piga picha"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Picha zote"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Chagua picha"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Kutoka kwa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Futa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Futa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Futa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Picha kutoka <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> haijateuliwa"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Picha kutoka <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> imeteuliwa"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Picha kutoka akaunti isiyojulikana haijateuliwa"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Picha kutoka akaunti isiyojulikana imeteuliwa"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Orodha ya anwani inasasishwa ili kuonesha mabadiliko ya lugha.\n\nTafadhali subiri..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Mapendekezo"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Mpya"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Fungua droo ya kusogeza"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Funga droo ya kusogeza"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Lebo ya <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Lebo"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Akaunti"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Angalia historia yenu pamoja"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Matukio na ujumbe"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Matukio"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Ujumbe"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Mapendekezo"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Weka anwani zako nadhifu na kwa njia inayokufaa"</string>
+ <string name="undo" msgid="1425165101664071422">"Tendua"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Piga <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Piga simu nyumbani"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Pigia simu ya mkononi"</string>
+ <string name="call_work" msgid="5328785911463744028">"Piga simu kazini"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Piga simu kwa pepesi ya kazini"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Piga simu kwa pepesi ya nyumbani"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Piga simu kwa peja"</string>
+ <string name="call_other" msgid="8563753966926932052">"Piga simu"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Mpigie"</string>
+ <string name="call_car" msgid="3280537320306436445">"Piga simu kwa gari"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Pigia nambari kuu ya simu ya kampuni"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Piga simu kwa ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Piga simu kuu"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Piga simu ya faksi"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Piga simu kwa redio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Piga simu kwa telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Pigia TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Piga simu kwa simu ya mkononi ya kazini"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Piga simu kwa peja"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Piga <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Piga simu kwa MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Piga)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Tuma SMS kwa <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Tuma ujumbe kwa simu ya nyumbani"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Tuma ujumbe wa maandishi kwa simu ya mkononi"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Tuma ujumbe kazini"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Tuma maandishi kwa faksi ya kazini"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Tuma ujumbe kwa pepesi ya nyumbani"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Tuma ujumbe kwa peja"</string>
+ <string name="sms_other" msgid="806127844607642331">"Matini"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Piga simu tena kwa kutumia maandishi"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Tuma ujumbe kwa gari"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Kampuni kuu ya maandishi"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Tuma ujumbe kwa ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Tuma ujumbe wa simu kuu"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Faksi ya maandishi"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Tuma ujumbe kwa redio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Tuma ujumbe kwa teleksi"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Tuma ujumbe kwa TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Tuma ujumbe kwa simu ya mkononi ya kazini"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Tuma ujumbe kwa peja ya kazini"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Tuma ujumbe kwa <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Tuma maandishi ya MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Tuma Ujumbe)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Piga Hangout ya Video"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Futa uliowasiliana nao mara kwa mara?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Utafuta orodha ya unaowasiliana nao mara kwa mara katika programu ya Anwani na ya Simu, na kulazimisha programu za barua pepe zitambue mapendeleo yako ya anwani kutoka mwanzo."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Inafuta uliowasiliana nao mara kwa mara..."</string>
+ <string name="status_available" msgid="5586870015822828392">"Nipo"</string>
+ <string name="status_away" msgid="1838861100379804730">"Mbali"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Ana shughuli"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Nyingineyo"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Saraka"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Anwani za kazi"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Anwani zote"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Mwasiliani wa haraka wa <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Hakuna jina)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Unaowasiliana nao zaidi"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Anwani zote zilizo na nambari za simu"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Anwani za watu wa kazini"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Tazama masasisho"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Kifaa"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Jina"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Jina la utani"</string>
+ <string name="name_given" msgid="4280790853455320619">"Jina la kwanza"</string>
+ <string name="name_family" msgid="7466985689626017037">"Jina la mwisho"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Herufi za kwanza za jina"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Jina la kati"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Herufi za mwisho za jina"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Jina la kifonetiki"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Jina la kwanza kifonetiki"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Jina la katikati kifonetiki"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Jina la mwisho kifonetiki"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Simu"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Barua pepe"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Anwani"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Ujumbe wa Papo Hapo"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Shirika"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Uhusiano"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Tarehe maalum"</string>
+ <string name="sms" msgid="1756857139634224222">"Ujumbe wa maandishi"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Anwani"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Kampuni"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Jina la heshima"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Hati"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Maalum"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Tovuti"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Lebo"</string>
+ <string name="email_home" msgid="8573740658148184279">"Nyumbani mwa barua pepe"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Tuma barua pepe kwa simu ya mkononi"</string>
+ <string name="email_work" msgid="2807430017302722689">"Tuma barua pepe kazini"</string>
+ <string name="email_other" msgid="3454004077967657109">"Barua pepe"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Tuma barua pepe kwa <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Barua pepe"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Barabara"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Jiji"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Jimbo"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Msimbo wa posta"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Nchi"</string>
+ <string name="map_home" msgid="1243547733423343982">"Angalia anwani ya nyumbani"</string>
+ <string name="map_work" msgid="1360474076921878088">"Angalia anwani ya kazini"</string>
+ <string name="map_other" msgid="3817820803587012641">"Tazama anwani"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Angalia anwani <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Piga gumzo kwa kutumia AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Piga gumzo kwa kutumia Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Piga gumzo kwa kutumia Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Piga gumzo kwa kutumia Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Piga gumzo kwa kutumia QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Piga gumzo kwa kutumia Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Piga gumzo kwa kutumia ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Piga gumzo kwa kutumia Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Gumzo"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"futa"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Onyesha sehemu zingine za kujaza majina"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Kunja sehemu za majina"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Onyesha sehemu zingine za kujaza majina ya kifonetiki"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Kunja sehemu za majina ya kifonetiki"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Panua"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Kunja"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Imepanuliwa"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Imekunjwa"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Anwani zote"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Zenye Nyota"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Badilisha kukufaa"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Anwani"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Anwani Zingine Zote"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Anwani zote"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Ondoa kikundi cha usawazishaji"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Ongeza kikundi cha usawazishaji"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Vikundi zaidi..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Kuondoa \"<xliff:g id="GROUP">%s</xliff:g>\" \"kutoka usawazishaji pia kutaondoa anwani zisizo katika kikundi kwenye usawazishaji."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Inahifadhi chaguo za mwonyesho.."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Mwonekano maalum"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Hifadhi anwani zinazoletwa kwenye:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM kadi"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM ya <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">Anwani %1$d</item>
+ <item quantity="one">Anwani 1</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other">Anwani <xliff:g id="COUNT_2">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one">Anwani <xliff:g id="COUNT_0">^1</xliff:g> • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Faili ya .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Hakuna anwani za kuletwa"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Je, unataka kuleta anwani kutoka kwenye vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Ghairi kuletwa kwa <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Ghairi kuhamishwa kwa <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Haikuweza kughairi kuingiza/kuhamisha vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Hitilafu isiyojulikana."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Haikuweza kufungua \"{<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Haikuweza kuanzisha kihamishaji: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Hakuna anwani inayoweza kuhamishwa."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Umeondoa idhini inayohitajika."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Hitilafu imetokea wakati wa uhamisho: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Hitilafu ya I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Hakuna kumbukumbu ya kutosha. Faili inaweza kuwa kubwa mno."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Fomati haiauniwi"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Imemaliza kuhamisha <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Anwani zimehamishwa."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Anwani zimehamishwa; bofya arifa ili ushiriki anwani."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Gonga ili ushiriki anwani."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Kuhamisha <xliff:g id="FILENAME">%s</xliff:g> kumeghairiwa"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Inahamisha data ya anwani"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data ya anwani inahamishwa."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Haikupata maelezo ya hifadhidata."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Hakuna anwani zinazoweza kuhamishwa."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Kitunzi cha vCard hakikuanza vizuri."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Imeshindwa kuhamisha"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data ya mwasiliani haikuhamishwa.\nSababu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Inaingiza <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Haikuweza kusoma data ya vKadi"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Imemaliza kuleta vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kuingiza <xliff:g id="FILENAME">%s</xliff:g> kumeghairiwa"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> italetwa hivi karibuni."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Faili italetwa hivi karibuni."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Ombi la kuleta vCard limekataliwa. Tafadhali jaribu baadaye."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Anwani zitahamishwa baada ya muda mfupi."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Ombi la kuhamishwa kwa vCard limekataliwa. Jaribu tena baadaye."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"anwani"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Vcard Inaakibisha ndani ya hifadhi ya muda mfupi. Uhamisho halisi utaanza hivi karibuni."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Haikuweza kuingiza vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Anwani imepokewa kupitia NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Inaakibisha..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Inaingiza <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Tuma kwenye faili ya .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Panga kwa"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Jina la kifonetiki"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Onyesha kila wakati"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ficha ikiwa halijaongezwa"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Jina la kwanza"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Jina la mwisho"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Mpangilio wa majina"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Anza kwa jina la kwanza"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Anza kwa jina la mwisho"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Akaunti"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Akaunti chaguo-msingi ya kuhifadhi anwani mpya"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Maelezo yangu"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Weka wasifu wako"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Kuhusu Anwani"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Shiriki anwani unazopenda"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Shiriki anwani zote"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Imeshindwa kushiriki anwani."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Hamisha anwani"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Leta anwani kutoka kwenye"</string>
+ <string name="share_error" msgid="948429331673358107">"Mwasiliani huyu hawezi kushirikishwa."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Hakuna anwani za kushiriki."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Anwani za kuonyesha"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Anwani za kuonyesha"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Badilisha upendavyo"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Hifadhi"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Tafuta anwani"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Vipendwa"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Leta"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Hamisha"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Nambari zilizozuiwa"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"kupitia <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> kupitia <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"acha kutafuta"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Futa utafutaji"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Akaunti"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Tumia hii kupiga simu kila wakati"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Piga simu inayoambatana na dokezo"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Andika dokezo litakaloambatana na simu utakayopiga…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"TUMA na UPIGE SIMU"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Toleo la muundo"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Leseni za programu huria"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Maelezo ya leseni za programu huria"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Sera ya faragha"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Sheria na masharti"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Leseni za programu huria"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Imeshindwa kufungua url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> imeteuliwa"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> haijateuliwa"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Anzisha Hangout ya Video"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Futa"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Alama ya Dukuduku"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"Sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"Dakika <xliff:g id="MINUTES">%1$s</xliff:g> sekunde <xliff:g id="SECONDS">%2$s</xliff:g>"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"Saa <xliff:g id="MINUTES_0">%1$s</xliff:g> dakika <xliff:g id="MINUTES_1">%2$s</xliff:g> sekunde <xliff:g id="SECONDS">%3$s</xliff:g>"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Njia hii ya mkato imezimwa"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Anwani imeondolewa"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Leta"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Chagua anwani"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Hakuna anwani zilizo kwenye SIM kadi yako."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Anwani hii tayari ipo katika orodha yako"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Anwani <xliff:g id="COUNT">%d</xliff:g> zilizokuwa kwenye SIM zimeletwa</item>
+ <item quantity="one">Anwani 1 iliyokuwa kwenye SIM imeletwa</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Imeshindwa kuleta anwani zilizo kwenye SIM kadi"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Leta kutoka kwenye SIM kadi"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Ghairi"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Usawazishaji wa kiotomatiki umezimwa. Gonga ili uuwashe."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Ondoa"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Usawazishaji wa akaunti umezimwa. Gonga ili uuwashe."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Je, unataka kuwasha usawazishaji wa kiotomatiki?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Mabadiliko utakayofanya katika programu na akaunti zote, wala si katika Anwani tu, yatasawazishwa kwenye wavuti na kwenye vifaa vyako."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Washa"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Hakuna muunganisho"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Onyesha zingine"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Imemaliza kuleta anwani za SIM kadi"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Imeshindwa kuleta anwani"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Imeshindwa kuleta anwani kutoka kwenye SIM kadi"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Anwani zilizo kwenye SIM kadi zinaletwa"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Arifa"</string>
</resources>
diff --git a/res/values-sw600dp-land/colors.xml b/res/values-sw600dp-land/colors.xml
deleted file mode 100644
index c5f846e1f..000000000
--- a/res/values-sw600dp-land/colors.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <!-- This needs to match the color of the background card, when the center card is visible. -->
- <color name="list_item_pinned_header_color">@color/contact_all_list_background_color</color>
-</resources>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 99f749c77..7d9eb336e 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -14,9 +14,23 @@
limitations under the License.
-->
<resources>
- <dimen name="group_editor_side_padding">64dip</dimen>
- <dimen name="quick_contact_photo_container_height">180dip</dimen>
- <dimen name="list_visible_scrollbar_padding">32dip</dimen>
- <dimen name="detail_contact_photo_size">192dip</dimen>
- <dimen name="detail_contact_photo_margin">16dip</dimen>
+ <!-- Copied from java/com/google/android/assets/launchscreens/res/values-sw600dp-land-v21/dimens.xml -->
+ <!-- Values adjusted for nav bar size due to windowDrawsSystemBarBackgrounds -->
+ <dimen name="launchscreens_product_logo_bottom">72dp</dimen>
+ <dimen name="launchscreens_google_logo_bottom">96dp</dimen>
+
+ <!-- Height for the image for empty group view-->
+ <dimen name="empty_view_image_height">180dp</dimen>
+
+ <!-- Top padding for the text for empty group view -->
+ <dimen name="empty_group_view_text_padding_top">32dp</dimen>
+
+ <!-- Gap b/w image view and top of the screen in empty main view -->
+ <dimen name="empty_home_view_image_offset">175dp</dimen>
+
+ <!-- Width for the image for contacts no account empty view -->
+ <dimen name="contacts_no_account_empty_image_width">180dp</dimen>
+
+ <!-- Margin offset b/w the image top and app bar bottom for no account empty view -->
+ <dimen name="contacts_no_account_empty_image_offset">175dp</dimen>
</resources>
diff --git a/res/values-sw600dp-land/integers.xml b/res/values-sw600dp-land/integers.xml
index 08aab2da9..732ea7e5f 100644
--- a/res/values-sw600dp-land/integers.xml
+++ b/res/values-sw600dp-land/integers.xml
@@ -14,15 +14,19 @@
limitations under the License.
-->
<resources>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">5</integer>
-
- <integer name="contact_tile_column_count">3</integer>
-
<!-- Layout weight of space elements in PeopleActivity for favorites list and all
contacts list-->
<integer name="contact_list_space_layout_weight">1</integer>
<!-- Layout weight of ListViews in PeopleActivityfor tile favorites list and all
contacts list in PeopleActivity -->
<integer name="contact_list_card_layout_weight">6</integer>
+
+ <!-- Top margin ratio for the image for empty group view -->
+ <integer name="empty_group_view_image_margin_divisor">8</integer>
+
+ <!-- Top margin ratio for the image for empty account view -->
+ <integer name="empty_account_view_image_margin_divisor">5</integer>
+
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <integer name="snippet_length_before_tokenize">20</integer>
</resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 1af9d755b..a38364c2f 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -14,47 +14,57 @@
limitations under the License.
-->
<resources>
- <dimen name="editor_padding_top">32dip</dimen>
+ <!-- Copied from java/com/google/android/assets/launchscreens/res/values-sw600dp-port-v21/dimens.xml -->
+ <!-- Values adjusted for nav bar size due to windowDrawsSystemBarBackgrounds -->
+ <dimen name="launchscreens_product_logo_bottom">72dp</dimen>
+ <dimen name="launchscreens_google_logo_bottom">96dp</dimen>
+
<dimen name="editor_type_label_width">122dip</dimen>
- <dimen name="editor_add_field_label_left_padding">16dip</dimen>
- <dimen name="detail_item_vertical_margin">16dip</dimen>
- <dimen name="detail_item_icon_margin">8dip</dimen>
<dimen name="shortcut_icon_size">64dip</dimen>
- <dimen name="list_section_height">37dip</dimen>
- <dimen name="group_detail_border_padding">16dip</dimen>
- <dimen name="search_view_width">400dip</dimen>
- <dimen name="contact_tile_list_padding_top">18dip</dimen>
<dimen name="contact_browser_list_item_text_size">18sp</dimen>
- <dimen name="contact_browser_list_item_photo_size">50dp</dimen>
<dimen name="contact_browser_list_item_gap_between_image_and_text">25dp</dimen>
- <dimen name="contact_browser_list_top_margin">18dp</dimen>
- <!-- Contact list (vertical scroll bar comes left) -->
- <dimen name="list_visible_scrollbar_padding">32dip</dimen>
- <dimen name="list_header_extra_top_padding">@dimen/contact_browser_list_top_margin</dimen>
-
- <dimen name="quick_contact_photo_container_height">360dip</dimen>
- <!-- Height of the selection indicator of a tab. -->
- <dimen name="tab_selected_underline_height">3dp</dimen>
- <!-- Size of text in tabs. -->
- <dimen name="tab_text_size">16sp</dimen>
+ <dimen name="contact_browser_list_item_gap_between_indexer_and_image">25dp</dimen>
+ <dimen name="directory_header_extra_top_padding">0dp</dimen>
<!-- Because the "join" screen has the vertical scroll bar on right,
we cannot use @dimen/contact_browser_list_header_left_margin as is. -->
<dimen name="join_header_left_margin">24dip</dimen>
- <dimen name="join_header_right_margin">@dimen/list_visible_scrollbar_padding</dimen>
+ <dimen name="join_header_right_margin">32dip</dimen>
<dimen name="join_header_top_margin">16dip</dimen>
<dimen name="join_header_bottom_margin">16dip</dimen>
- <!-- Left padding for a group member list item -->
- <dimen name="group_member_item_left_padding">12dip</dimen>
- <!-- Left margin for the group member list to match the built in margin in the autocomplete asset -->
- <dimen name="group_editor_member_list_left_margin">4dip</dimen>
- <!-- Right margin for the group member list to match the built in margin in the autocomplete asset -->
- <dimen name="group_editor_member_list_right_margin">4dip</dimen>
- <!-- Account title left padding -->
- <dimen name="account_container_left_padding">16dip</dimen>
- <!-- Left padding of the auto complete field to line hint text up with member list -->
- <dimen name="group_editor_autocomplete_left_padding">16dip</dimen>
- <dimen name="contact_detail_list_top_padding">8dip</dimen>
<dimen name="frequently_contacted_title_text_size">24sp</dimen>
+
+ <!-- End margin of edit group title -->
+ <dimen name="edit_group_end_margin">80dp</dimen>
+
+ <!-- Top padding for the image for empty group view -->
+ <dimen name="empty_group_view_image_padding_top">0dp</dimen>
+
+ <!-- Top and bottom padding for the text for empty account view -->
+ <dimen name="empty_account_view_text_padding_top">32dp</dimen>
+
+ <!-- Gap b/w image view and top of the screen in empty main view -->
+ <dimen name="empty_home_view_image_offset">218dp</dimen>
+
+ <!-- Margin offset b/w the image top and app bar bottom for no account empty view -->
+ <dimen name="contacts_no_account_empty_image_offset">238dp</dimen>
+
+ <dimen name="contact_browser_list_header_left_margin">@dimen/list_visible_scrollbar_padding</dimen>
+ <dimen name="contact_browser_list_header_right_margin">24dip</dimen>
+
+ <!-- End margin of the account filter header icon -->
+ <dimen name="contact_browser_list_header_icon_right_margin">22dp</dimen>
+ <dimen name="contact_browser_list_header_icon_right_margin_alt">24dp</dimen>
+
+ <dimen name="contact_filter_list_item_padding_start">24dp</dimen>
+ <dimen name="contact_filter_left_margin">16dp</dimen>
+
+ <!-- Right margin of the floating action button -->
+ <dimen name="floating_action_button_margin_right">32dp</dimen>
+ <!-- Bottom margin of the floating action button -->
+ <dimen name="floating_action_button_margin_bottom">32dp</dimen>
+
+ <!-- Side padding within the navigation drawer -->
+ <dimen name="drawer_side_padding">24dp</dimen>
</resources>
diff --git a/res/values-sw600dp/integers.xml b/res/values-sw600dp/integers.xml
index 19e2ec60a..8226b4926 100644
--- a/res/values-sw600dp/integers.xml
+++ b/res/values-sw600dp/integers.xml
@@ -1,20 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
<resources>
- <integer name="contact_tile_column_count">2</integer>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">4</integer>
+ <!-- Top margin ratio for the image for empty group view -->
+ <integer name="empty_group_view_image_margin_divisor">4</integer>
+
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <!-- Yikes, there is less space on a tablet! This makes the search experience rather
+ poor. Another reason to get rid of the exist tablet layout. -->
+ <integer name="snippet_length_before_tokenize">15</integer>
</resources>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
deleted file mode 100644
index d92d3c766..000000000
--- a/res/values-sw600dp/styles.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
-
- <style name="ContactPickerLayout" parent="ContactPickerTheme">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">match_parent</item>
- </style>
-
- <style name="DetailActivityTheme" parent="@android:Theme.Dialog">
- <item name="android:windowContentOverlay">@null</item>
- </style>
-
- <style name="DirectoryHeader" parent="PeopleTheme">
- <item name="android:paddingTop">0dip</item>
-
- <item name="android:background">@android:color/transparent</item>
- </style>
-
- <style name="ConfirmAddDetailViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">wrap_content</item>
- </style>
-
- <style name="ConfirmAddDetailHeaderViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">200dip</item>
- </style>
-
-</resources>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
deleted file mode 100644
index 9dfb96ac2..000000000
--- a/res/values-sw720dp-land/dimens.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<resources>
- <dimen name="group_detail_border_padding">32dip</dimen>
- <dimen name="group_editor_side_padding">64dip</dimen>
- <dimen name="contact_detail_list_top_padding">32dip</dimen>
- <dimen name="contact_tile_list_padding_top">32dip</dimen>
- <dimen name="list_visible_scrollbar_padding">48dip</dimen>
- <dimen name="detail_contact_photo_size">256dip</dimen>
- <!-- Right margin of the floating action button -->
- <dimen name="floating_action_button_margin_right">32dp</dimen>
- <dimen name="people_activity_landscape_tabs_text_size">16dp</dimen>
-</resources>
diff --git a/res/values-sw720dp-land/integers.xml b/res/values-sw720dp-land/integers.xml
index 2ebb10033..a0783c268 100644
--- a/res/values-sw720dp-land/integers.xml
+++ b/res/values-sw720dp-land/integers.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
+<!--
+ 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
+ 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
+ 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.
--->
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
<resources>
- <integer name="contact_tile_column_count">4</integer>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">5</integer>
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <integer name="snippet_length_before_tokenize">30</integer>
</resources>
diff --git a/res/values-sw720dp-land/styles.xml b/res/values-sw720dp-land/styles.xml
deleted file mode 100644
index 9fa3d0877..000000000
--- a/res/values-sw720dp-land/styles.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<resources>
- <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Medium" />
-</resources>
diff --git a/res/values-sw720dp/colors.xml b/res/values-sw720dp/colors.xml
deleted file mode 100644
index c5f846e1f..000000000
--- a/res/values-sw720dp/colors.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <!-- This needs to match the color of the background card, when the center card is visible. -->
- <color name="list_item_pinned_header_color">@color/contact_all_list_background_color</color>
-</resources>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 3186b8934..1ab7ab802 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -17,17 +17,11 @@
<dimen name="editor_type_label_width">180dip</dimen>
<dimen name="editor_round_button_padding_left">8dip</dimen>
<dimen name="editor_round_button_padding_right">8dip</dimen>
- <dimen name="group_editor_side_padding">16dip</dimen>
- <dimen name="quick_contact_photo_container_height">360dip</dimen>
- <dimen name="contact_picker_contact_list_min_height">650dip</dimen>
- <dimen name="list_visible_scrollbar_padding">48dip</dimen>
<!-- When QC is uncollapsed, the title has this much margin on its left and right -->
<dimen name="quickcontact_title_initial_margin">32dp</dimen>
<!-- When QC is uncollapsed, the title has this much margin on its bottom -->
<dimen name="quickcontact_title_initial_bottom_margin">0dp</dimen>
- <!-- Right margin of the floating action button -->
- <dimen name="floating_action_button_margin_right">100dp</dimen>
<dimen name="expanding_entry_card_marginStartEnd">10dp</dimen>
diff --git a/res/values-sw720dp/integers.xml b/res/values-sw720dp/integers.xml
index ff73c62df..05c97e13a 100644
--- a/res/values-sw720dp/integers.xml
+++ b/res/values-sw720dp/integers.xml
@@ -14,15 +14,13 @@
limitations under the License.
-->
<resources>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">4</integer>
-
- <integer name="contact_tile_column_count">2</integer>
-
<!-- Layout weight of column space elements for favorites list, all contacts list and
QuickContact-->
<integer name="contact_list_space_layout_weight">11</integer>
<!-- Layout weight of the content column for tile favorites list, all contacts list, and
QuickContact -->
<integer name="contact_list_card_layout_weight">81</integer>
+
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <integer name="snippet_length_before_tokenize">20</integer>
</resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
deleted file mode 100644
index 47169991d..000000000
--- a/res/values-ta-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"தொடர்புகள்"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"தொடர்புகள்"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"தொடர்பைக் காட்டு"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"தொடர்பைத் திருத்து"</string>
- <string name="contactsList" msgid="8661624236494819731">"தொடர்புகள்"</string>
- <string name="shortcutContact" msgid="749243779392912958">"தொடர்பு"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"நேரடி டயல்"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"நேரடி செய்தி"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"தொடர்பின் குறுக்குவழியைத் தேர்வுசெய்தல்"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"அழைப்பதற்கான எண்ணைத் தேர்வுசெய்யவும்"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"செய்தி அனுப்ப எண்ணைத் தேர்வுசெய்க"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"தொடர்பில் சேர்"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"தொடர்பைத் தேர்வுசெய்யவும்"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"புதிய தொடர்பை உருவாக்கவும்"</string>
- <string name="starredList" msgid="4817256136413959463">"நட்சத்திரமிட்டது"</string>
- <string name="frequentList" msgid="7154768136473953056">"அடிக்கடி"</string>
- <string name="strequentList" msgid="5640192862059373511">"பிடித்தவை"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"தொடர்பு விவரங்கள்"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"தொடர்பைத் திருத்து"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"தொடர்பை உருவாக்கு"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"குழுவைத் திருத்து"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"குழுவை உருவாக்கு"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"அறிமுகம்"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"புதுப்பிப்புகள்"</string>
- <string name="searchHint" msgid="8482945356247760701">"தொடர்புகளைத் தேடு"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"தொடர்பைக் காட்டு"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"பிடித்தவற்றில் சேர்"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"பிடித்தவற்றிலிருந்து அகற்று"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"விருப்பங்களிலிருந்து அகற்றப்பட்டது"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"விருப்பங்களில் சேர்க்கப்பட்டது"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"திருத்து"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"நீக்கு"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"படத்தை மாற்று"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"முகப்புத் திரையில் அமை"</string>
- <string name="menu_call" msgid="3992595586042260618">"தொடர்பை அழை"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"தொடர்பிற்கு உரைச் செய்தியை அனுப்பு"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"தொடர்பைப் பிரி"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"திருத்து"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"நீக்கு"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"தொடர்பைச் சேர்"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"குழுவைச் சேர்"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"தொடர்பை அகற்று"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"நீங்கள் ஏற்கனவே செய்த மாற்றங்களைச் சேமித்து, பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"சேமித்து தொடர்பை அகற்று"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"நீங்கள் ஏற்கனவே செய்த மாற்றங்களைச் சேமித்து, தேர்ந்தெடுத்த தொடர்புடன் இணைக்கவா?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"சேமித்து இணை"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"இணை"</string>
- <string name="menu_save" msgid="1727844363591825909">"சேமி"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"தொடர்புகளை இணைத்தல்"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> உடன் இணைக்க விரும்பும் தொடர்பைத் தேர்வுசெய்க:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"எல்லா தொடர்புகளையும் காட்டு"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"பரிந்துரைக்கப்படும் தொடர்புகள்"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"எல்லா தொடர்புகளும்"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"தொடர்புகள் இணைக்கப்பட்டன"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">தொடர்புகள் நீக்கப்பட்டன</item>
- <item quantity="one">தொடர்பு நீக்கப்பட்டது</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"ரிங்டோனை அமை"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"அழைப்புகளை குரலஞ்சலிற்கு திருப்பு"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"படிக்க மட்டுமேயான கணக்குகளிலிருந்து தொடர்புகளை நீக்க முடியாது, ஆனால் அவற்றை மறைக்கலாம்."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"மறை"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"நீக்குவதற்குத் தேர்ந்தெடுத்த தொடர்பில் பல கணக்குகளின் விவரங்கள் உள்ளன. படிக்க மட்டுமேயான கணக்குகளின் விவரங்கள் மறைக்கப்படுமே தவிர நீக்கப்படாது."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"ஒன்றிணைப்பதற்கு, குறைந்தபட்சம் இரண்டு தொடர்புகளையாவது தேர்ந்தெடுத்திருக்க வேண்டும்."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"தேர்ந்தெடுத்த தொடர்புகளை இணைக்கவா?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"இணை"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"தொடர்பை நீக்கவா?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"தேர்ந்தெடுத்த தொடர்புகளை நீக்கவா?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"படிக்க மட்டுமேயான கணக்குகளிலிருந்து தொடர்புகளை நீக்க முடியாது, ஆனால் அவற்றை மறைக்கலாம்."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"நீக்குவதற்குத் தேர்ந்தெடுத்த தொடர்புகளில் பல கணக்குகளின் விவரங்கள் உள்ளன. படிக்க மட்டுமேயான கணக்குகளின் விவரங்கள் மறைக்கப்படுமே தவிர நீக்கப்படாது."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"தொடர்பை நீக்கினால், பல கணக்குகளிலிருக்கும் விவரங்கள் நீக்கப்படும்."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"தொடர்பை நீக்கவா?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"நீக்கு"</string>
- <string name="menu_discard" msgid="6854657936970228164">"மாற்றங்களை நிராகரி"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"தொடர்பு இல்லை."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> என்ற தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"புதிய தொடர்பை உருவாக்கவும்"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"புதிய தொடர்பை உருவாக்கவும்"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"நிறுவனம்"</item>
- <item msgid="7196592230748086755">"குறிப்பு"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"டேப்லெட்டில் படங்கள் எதுவும் இல்லை."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"மொபைலில் படங்கள் எதுவும் இல்லை."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"தொடர்பு படம்"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"தனிப்பயன் லேபிள் பெயர்"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"அழைப்புகளை நேரடியாகக் குரலஞ்சலுக்கு அனுப்பு"</string>
- <string name="removePhoto" msgid="4898105274130284565">"படத்தை அகற்று"</string>
- <string name="noContacts" msgid="4955659076981974652">"தொடர்புகள் இல்லை"</string>
- <string name="noGroups" msgid="8614664663561385253">"குழுக்கள் இல்லை."</string>
- <string name="noAccounts" msgid="7768267764545265909">"குழுக்களை உருவாக்க கணக்கு அவசியம்."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"குழுவில் யாரும் இல்லை."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"சிலவற்றைச் சேர்க்க, குழுவைத் திருத்தவும்."</string>
- <string name="savingContact" msgid="4075751076741924939">"தொடர்பைச் சேமிக்கிறது…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"தொடர்பு சேமிக்கப்பட்டது"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"தொடர்புகள் பிரிக்கப்பட்டன"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"தொடர்பின் மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"தொடர்பை அகற்ற முடியவில்லை."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"தொடர்பை இணைக்க முடியவில்லை."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"தொடர்பைச் சேமிப்பதில் பிழை."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"தொடர்பின் பட மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"குழு சேமிக்கப்பட்டது."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"குழு மாற்றங்களைச் சேமிக்க முடியவில்லை."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">மொபைல் எண்களுடன் <xliff:g id="COUNT">%d</xliff:g> தொடர்புகள் உள்ளன</item>
- <item quantity="one">மொபைல் எண்ணுடன் 1 தொடர்பு உள்ளது</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"மொபைல் எண்களுடன் தொடர்புகள் இல்லை"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன</item>
- <item quantity="one">1 கண்டறியப்பட்டது</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"தொடர்புகள் எதுவும் இல்லை"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> கண்டறியப்பட்டன</item>
- <item quantity="one">1 கண்டறியப்பட்டது</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"எல்லாம்"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"பிடித்தவை"</string>
- <string name="callBack" msgid="5498224409038809224">"அழை"</string>
- <string name="callAgain" msgid="3197312117049874778">"மீண்டும் அழை"</string>
- <string name="returnCall" msgid="8171961914203617813">"திரும்பி அழை"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ஐத் தொடர்புகளில் சேர்க்கவா?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"தொடர்பு படம்"</string>
- <string name="description_plus_button" msgid="515164827856229880">"சேர்"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> தொடர்புகளில் <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"உங்கள் தொடர்புகளின் பெயர்கள்"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"இந்தச் செயலைச் செய்வதற்கான பயன்பாடு எதுவுமில்லை."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"முந்தைய திரைக்குச் செல்ல கிளிக் செய்க"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"மொபைல் எண்ணைச் சேர்க்கவும்"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"மின்னஞ்சலைச் சேர்க்கவும்"</string>
- <string name="missing_app" msgid="1466111003546611387">"இந்தச் செயலைச் செய்ய பயன்பாடு எதுவுமில்லை."</string>
- <string name="menu_share" msgid="943789700636542260">"பகிர்"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"தொடர்புகளில் சேர்"</string>
- <string name="share_via" msgid="563121028023030093">"தொடர்பை இதில் பகிர்:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"கணக்கின் கீழ் குழுவை உருவாக்கவும்"</string>
- <string name="audio_chat" msgid="2535716629358298691">"குரல் அரட்டை"</string>
- <string name="video_chat" msgid="1872255818640336072">"வீடியோ அரட்டை"</string>
- <string name="connections" msgid="8098440723172028350">"இணைப்புகள்"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"இணைப்பைச் சேர்"</string>
- <string name="recent" msgid="2659189233141493004">"சமீபத்தில்"</string>
- <string name="recent_updates" msgid="4267258535615860710">"சமீபத்திய புதுப்பிப்புகள்"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> தொடர்பு"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> கணக்கு"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"இந்தப் பயன்பாட்டிலிருந்து திருத்த முடியாது."</string>
- <string name="group_read_only" msgid="1061762906115697637">"இந்தச் சாதனத்தில் திருத்தக்கூடியதல்ல."</string>
- <string name="take_photo" msgid="7496128293167402354">"படமெடு"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"புதிய படத்தை எடு"</string>
- <string name="pick_photo" msgid="2129509985223564942">"படத்தைத் தேர்வுசெய்யவும்"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"புதிய படத்தைத் தேர்ந்தெடுக்கவும்"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"தொடர்பு பட்டியல் புதுப்பிக்கப்படுகிறது."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"தேடுகிறது..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"தேர்ந்தெடுத்தவற்றைக் காட்டு"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"அனைத்தையும் காட்டு"</string>
- <string name="menu_select_all" msgid="621719255150713545">"எல்லாவற்றையும் தேர்ந்தெடு"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"எல்லாவற்றையும் தேர்வுநீக்கு"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"புதியதைச் சேர்"</string>
- <string name="add_organization" msgid="7311893231158291197">"நிறுவனத்தைச் சேர்"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"தேதி"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"குழு பெயர்"</string>
- <string name="change_photo" msgid="8530597935483526383">"மாற்று"</string>
- <string name="primary_photo" msgid="8517942231868516999">"முதன்மை படம்"</string>
- <string name="description_star" msgid="2605854427360036550">"பிடித்தது"</string>
- <string name="edit_contact" msgid="7529281274005689512">"தொடர்பைத் திருத்து"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"தேர்ந்தெடுத்த தொடர்புடன் தற்போதைய தொடர்பை இணைக்கவா?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"தேர்ந்தெடுத்த தொடர்பைத் திருத்துதலுக்கு மாறவா? இதுவரை உள்ளிட்ட தகவல் நகலெடுக்கப்படும்."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"எனது தொடர்புகளுக்கு நகலெடு"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"எனது தொடர்புகளில் சேர்"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"கோப்பகம் <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"தனிப்பயன்"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"அமைப்பு"</string>
- <string name="menu_settings" msgid="377929915873428211">"அமைப்பு"</string>
- <string name="menu_help" msgid="1680178646764069976">"உதவி &amp; கருத்து"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"திரை விருப்பங்கள்"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"மொபைல் எண்"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"தொடர்புகளில் சேர்"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"தொடர்பில் சேர்"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"மூடு"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"ஆண்டைச் சேர்"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"தொடர்பு"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"ஏற்றுகிறது..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"புதிய தொடர்பை உருவாக்கு"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"கணக்கைச் சேர்"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"தொடர்புகளை இறக்குமதி செய்"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"புதிய குழுவை உருவாக்கு"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"புதிய குழு"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> குழுக்கள்</item>
- <item quantity="one">1 குழு</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" குழுவை நீக்கவா? (அதன் தொடர்புகள் நீக்கப்படாது.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_2">%1$d</xliff:g> பேர்</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> இலிருந்து <xliff:g id="COUNT_0">%1$d</xliff:g> நபர்</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> பேர்</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> நபர்</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"வேறொன்றுடன் இணைப்பதற்கு முன் தொடர்பின் பெயரை உள்ளிடவும்."</string>
- <string name="copy_text" msgid="3257145021583508761">"கிளிப்போர்டுக்கு நகலெடு"</string>
- <string name="set_default" msgid="4417505153468300351">"இயல்புநிலையாக அமை"</string>
- <string name="clear_default" msgid="7193185801596678067">"இயல்பை அழி"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"உரை நகலெடுக்கப்பட்டது"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"மாற்றங்களை நிராகரித்து, திருத்துவதிலிருந்து வெளியேறவா?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"நிராகரி"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"தொடர்ந்து திருத்து"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"எனது சுயவிவரத்தை அமை"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"பெயரை உள்ளிடவும்"</string>
- <string name="group_name_hint" msgid="238359485263401293">"குழுவின் பெயர்"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"எனது சுயவிவரம்"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"எனது <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> சுயவிவரம்"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"எல்லா தொடர்புகளையும் காட்டுகிறது"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"மொபைலை தொலைத்தாலும் தொடர்புகளைப் பாதுகாப்புடன் வைத்திருக்கலாம்: ஆன்லைன் சேவையுடன் ஒத்திசைக்கவும்."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"கணக்கைச் சேர்"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"புதிய தொடர்பை நகலெடுக்க முடியாது. தொடர்புகளை ஆன்லைனில் சேமிக்க, கணக்கைச் சேர்க்க விரும்புகிறீர்களா?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"புதிய தொடர்புகள் <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> இல் சேமிக்கப்படும்."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"புதிய தொடர்புகளுக்கான இயல்பு கணக்கைத் தேர்வுசெய்க:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"புதிய தொடர்பைச் சேர்"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"தொடர்பைத் திருத்து"</string>
- <string name="keep_local" msgid="1258761699192993322">"ஃபோனில் சேமி"</string>
- <string name="add_account" msgid="8201790677994503186">"கணக்கைச் சேர்"</string>
- <string name="add_new_account" msgid="5748627740680940264">"புதிய கணக்கைச் சேர்"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"தரவுத்தள கோப்புகளை ஏற்றுமதி செய்"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"புதிய தொடர்பைச் சேர்"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"மேலும் காட்டு"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"குறைவாகக் காட்டு"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"எல்லாம் காட்டு"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"சமீபத்தியவை"</string>
- <string name="about_card_title" msgid="2920942314212825637">"அறிமுகம்"</string>
- <string name="send_message" msgid="8938418965550543196">"செய்தி அனுப்பு"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"தனிப்பட்ட நகலை உருவாக்குகிறது..."</string>
- <string name="yesterday" msgid="6840858548955018569">"நேற்று"</string>
- <string name="tomorrow" msgid="6241969467795308581">"நாளை"</string>
- <string name="today" msgid="8041090779381781781">"இன்று"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"இன்று <xliff:g id="TIME_INTERVAL">%s</xliff:g> மணிக்கு"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"நாளை <xliff:g id="TIME_INTERVAL">%s</xliff:g> மணிக்கு"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(பெயரிடப்படாத நிகழ்வு)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"அமை"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"நிறுவனம்"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"செல்லப்பெயர்"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"குறிப்பு"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"இணையதளம்"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"நிகழ்வு"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"உறவு"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"கணக்கு"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"பெயர்"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"மின்னஞ்சல்"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ஃபோன்"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"படம்"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"தொடர்பு திருத்தியை விரிக்க, கிளிக் செய்க."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"தொடர்பு திருத்தியைச் சுருக்க, கிளிக் செய்க."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"இடத்தை நோக்கிய திசைகள்"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"சமீபத்திய sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. பதிலளிக்க, கிளிக் செய்க"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"உள்வரும் அழைப்பு"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"வெளிச்செல்லும் அழைப்பு"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"தவறிய அழைப்பு"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"சமீபத்திய அழைப்பு. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. திரும்ப அழைக்க, கிளிக் செய்க"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"நீங்கள்: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"பிறரின் Hangouts அடையாளத்தை மின்னஞ்சல் அல்லது ஃபோன் புலத்தில் உள்ளிடும் போது, Hangouts இன்னும் சிறப்பாகச் செயல்படும்."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"மேலும் புலங்கள்"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"படத்தை மாற்றவும்"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"எடிட்டரைத் திறக்க முடியவில்லை."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"இதில் சேமிக்கிறது"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"தற்போது <xliff:g id="ACCOUNT_NAME">%s</xliff:g> இல் சேமிக்கிறது. வேறொரு கணக்கைத் தேர்ந்தெடுக்க, இருமுறை தட்டவும்."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">இணைக்கப்பட்ட தொடர்புகள் (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">இணைக்கப்பட்ட தொடர்பு</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> இணைக்கப்பட்ட தொடர்புகள்"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"தொடர்புகளை இணை"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ரத்துசெய்"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> சாத்தியமுள்ள நகல்கள்</item>
- <item quantity="one">1 சாத்தியமுள்ள நகல்</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> இணைக்கப்பட்ட தொடர்புகள்</item>
- <item quantity="one">1 இணைக்கப்பட்ட தொடர்பு</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"இந்தத் தொடர்பு"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"சாத்தியமுள்ள நகல்கள்"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"இவை ஒரே பயனருடையதாக இருக்கக்கூடும். அவற்றை ஒரே தொடர்பில் இணைக்கலாம்."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"இணைத்த தொடர்புகள்"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"உங்கள் கணக்குகளில் இருந்து"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"படமெடு"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"எல்லா படங்களும்"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"படத்தைத் தேர்வுசெய்க"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> இலிருந்து"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ஐ நீக்கு"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ஐ நீக்கு"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> வழங்கிய படம் தேர்ந்தெடுக்கப்படவில்லை"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> வழங்கிய படம் தேர்ந்தெடுக்கப்பட்டது"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"அறியப்படாத கணக்கிலிருந்து படம் தேர்ந்தெடுக்கப்படவில்லை"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"அறியப்படாத கணக்கிலிருந்து படம் தேர்ந்தெடுக்கப்பட்டது"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"மொழி மாற்றத்தைக் காட்ட, தொடர்புப் பட்டியல் புதுப்பிக்கப்படுகிறது.\n\nகாத்திருக்கவும்..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"தடுக்கப்பட்ட எண்கள்"</string>
-</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
new file mode 100644
index 000000000..fe4817f2f
--- /dev/null
+++ b/res/values-ta/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"தொடர்புகள்"</string>
+ <string name="contactsList" msgid="8661624236494819731">"தொடர்புகள்"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"தொடர்பைச் சேர்"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"தொடர்பு"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"நேரடி டயல்"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"நேரடி செய்தி"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"தொடர்பைத் தேர்வுசெய்க"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"தொடர்பில் சேர்"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"தொடர்பைத் தேர்வுசெய்யவும்"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"தேர்ந்தெடுக்கவும்"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"புதிய தொடர்பை உருவாக்கவும்"</string>
+ <string name="searchHint" msgid="8482945356247760701">"தொடர்புகளைத் தேடு"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"பிடித்தவற்றில் சேர்"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"பிடித்தவற்றிலிருந்து அகற்று"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"விருப்பங்களிலிருந்து அகற்றப்பட்டது"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"விருப்பங்களில் சேர்க்கப்பட்டது"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"திருத்து"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"நீக்கு"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"படத்தை மாற்று"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"குறுக்குவழியை உருவாக்கு"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"தொடர்பைப் பிரி"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"தொடர்புகளை அகற்று"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"லேபிளின் பெயரை மாற்று"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"லேபிளை நீக்கு"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"தொடர்பைச் சேர்"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"தொடர்புகளைத் தேர்ந்தெடு"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"தொடர்புகளைச் சேர்"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"லேபிளிலிருந்து அகற்று"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"லேபிளை உருவாக்கு"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"தொடர்பை அகற்று"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"நீங்கள் ஏற்கனவே செய்த மாற்றங்களைச் சேமித்து, பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"சேமித்து தொடர்பை அகற்று"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"நீங்கள் ஏற்கனவே செய்த மாற்றங்களைச் சேமித்து, தேர்ந்தெடுத்த தொடர்புடன் இணைக்கவா?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"சேமித்து இணை"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"இணைக்கிறது"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"இணைப்பை நீக்குகிறது"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"இணை"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"இணைத்த தொடர்புகளைக் காட்டு"</string>
+ <string name="menu_save" msgid="1727844363591825909">"சேமி"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"தொடர்புகளை இணைத்தல்"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> உடன் இணைக்க விரும்பும் தொடர்பைத் தேர்வுசெய்க:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"பரிந்துரைக்கப்படும் தொடர்புகள்"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"எல்லா தொடர்புகளும்"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> இணைக்கப்பட்டது"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"தொடர்புகள் இணைக்கப்பட்டன"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> நீக்கப்பட்டது"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> மற்றும் <xliff:g id="NAME_1">%2$s</xliff:g> நீக்கப்பட்டன"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… நீக்கப்பட்டன"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">தொடர்புகள் நீக்கப்பட்டன</item>
+ <item quantity="one">தொடர்பு நீக்கப்பட்டது</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> தொடர்புகள்</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> தொடர்பு</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> தொடர்புகள் · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> தொடர்பு · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google கணக்கிலிருந்து"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> இலிருந்து"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"ரிங்டோனை அமை"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"குரலஞ்சலுக்குப் பகிர்"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"குரலஞ்சலுக்குப் பகிராதே"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"இது படிக்க மட்டுமேயான தொடர்பாகும். இதை நீக்கலாம், அதற்குப் பதிலாக மறைக்கவும் செய்யலாம்."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"தொடர்பை மறை"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"இந்தத் தொடர்பிலுள்ள படிக்க மட்டுமேயான கணக்குகள் மறைக்கப்படும், ஆனால் நீக்கப்படாது."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"தொடர்பை நீக்கவா?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"தேர்ந்தெடுத்த தொடர்புகளை நீக்கவா?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"படிக்க மட்டுமேயான கணக்குகளிலிருந்து தொடர்புகளை நீக்க முடியாது, ஆனால் அவற்றை மறைக்கலாம்."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"நீக்குவதற்குத் தேர்ந்தெடுத்த தொடர்புகளில் பல கணக்குகளின் விவரங்கள் உள்ளன. படிக்க மட்டுமேயான கணக்குகளின் விவரங்கள் மறைக்கப்படுமே தவிர நீக்கப்படாது."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"தொடர்பை நீக்கினால், பல கணக்குகளிலிருக்கும் விவரங்கள் நீக்கப்படும்."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"தொடர்பை நீக்கவா?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"நீக்கு"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"தொடர்பு இல்லை."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> என்ற தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"சாதனத்தில் படங்கள் எதுவுமில்லை."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"தொடர்பு படம்"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"தனிப்பயன் லேபிள் பெயர்"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"படத்தை அகற்று"</string>
+ <string name="noContacts" msgid="2228592924476426108">"தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"இந்த லேபிளைக் கொண்ட தொடர்புகள் இல்லை"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"இந்தக் கணக்கில் தொடர்புகள் இல்லை"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> சேமிக்கப்பட்டது"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"தொடர்பு சேமிக்கப்பட்டது"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"தொடர்புகள் பிரிக்கப்பட்டன"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"தொடர்பு மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"தொடர்பை அகற்ற முடியவில்லை"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"தொடர்பை இணைக்க முடியவில்லை"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"தொடர்பைச் சேமிப்பதில் பிழை"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"தொடர்புப் பட மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"லேபிளை ஏற்ற முடியவில்லை"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"லேபிள் நீக்கப்பட்டது"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"லேபிள் உருவாக்கப்பட்டது"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"லேபிளை உருவாக்க முடியவில்லை"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"லேபிள் புதுப்பிக்கப்பட்டது"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"லேபிளிலிருந்து அகற்றப்பட்டது"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"லேபிளில் சேர்க்கப்பட்டது"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"லேபிள் மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"லேபிள் ஏற்கனவே உள்ளது"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"சில தொடர்புகளில் மின்னஞ்சல்கள் இல்லை."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"சில தொடர்புகளில் ஃபோன் எண்கள் இல்லை."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"மின்னஞ்சல் அனுப்பு"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"செய்தி அனுப்பு"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"தொடர்புகளைத் தேர்வுசெய்"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"அனுப்பு"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"தொடர்புகள் எதுவும் இல்லை"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" ஐத் தொடர்புகளில் சேர்க்கவா?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"உங்கள் தொடர்புகளின் பெயர்கள்"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"முந்தைய திரைக்குச் செல்ல கிளிக் செய்க"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"மொபைல் எண்ணைச் சேர்க்கவும்"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"மின்னஞ்சலைச் சேர்க்கவும்"</string>
+ <string name="missing_app" msgid="1466111003546611387">"இந்தச் செயலைச் செய்ய பயன்பாடு எதுவுமில்லை."</string>
+ <string name="menu_share" msgid="943789700636542260">"பகிர்"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"தொடர்புகளில் சேர்"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"சேர்"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">தொடர்புகளை இதில் பகிர்:</item>
+ <item quantity="one">தொடர்பை இதில் பகிர்:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"கணக்கைத் தேர்வுசெய்க"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"லேபிளை உருவாக்கு"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"லேபிளின் பெயரை மாற்று"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"லேபிளின் பெயர்"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"லேபிளின் பெயர்"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"குரல் அரட்டை"</string>
+ <string name="video_chat" msgid="1872255818640336072">"வீடியோ அரட்டை"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> தொடர்பு"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> கணக்கு"</string>
+ <string name="take_photo" msgid="7496128293167402354">"படமெடு"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"புதிய படத்தை எடு"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"படத்தைத் தேர்வுசெய்யவும்"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"புதிய படத்தைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"தேடுகிறது..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"தேதி"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"லேபிளைச் சேர்"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ரத்துசெய்யும் பொத்தான்"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"முந்தையதற்குச் செல்லும் பொத்தான்"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"மூடும்"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"தேர்ந்தெடுத்த தொடர்பைத் திருத்துதலுக்கு மாறவா? இதுவரை உள்ளிட்ட தகவல் நகலெடுக்கப்படும்."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"கோப்பகம் <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"அமைப்பு"</string>
+ <string name="menu_settings" msgid="377929915873428211">"அமைப்பு"</string>
+ <string name="menu_help" msgid="1680178646764069976">"உதவி &amp; கருத்து"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"மொபைல் எண்"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"தொடர்புகளில் சேர்"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"மூடு"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"ஆண்டைச் சேர்"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"கணக்கைச் சேர்"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"இறக்கு"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"புதியதை உருவாக்கு…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" லேபிளை நீக்கவா? (அதன் தொடர்புகள் நீக்கப்படாது.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"வேறொன்றுடன் இணைப்பதற்கு முன் தொடர்பின் பெயரை உள்ளிடவும்."</string>
+ <string name="copy_text" msgid="3257145021583508761">"கிளிப்போர்டுக்கு நகலெடு"</string>
+ <string name="set_default" msgid="4417505153468300351">"இயல்புநிலையாக அமை"</string>
+ <string name="clear_default" msgid="7193185801596678067">"இயல்பை அழி"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"உரை நகலெடுக்கப்பட்டது"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"மாற்றங்களை நிராகரிக்கவா?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"நிராகரி"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ரத்துசெய்"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"தனிப்பயனாக்கங்களை நிராகரிக்கவா?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"தொடர்புகளில் தேடுக"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"தொடர்புகளை அகற்று"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"எனது சுயவிவரம்"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"எனது <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> சுயவிவரம்"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"உங்கள் தொடர்புகளை Googleக்குக் காப்புப் பிரதி எடுக்கும் கணக்கைச் சேர்க்க ஒரு நிமிடம் ஒதுக்கவும்."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"புதிய தொடர்புகள் <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> இல் சேமிக்கப்படும்."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"புதிய தொடர்புகளுக்கான இயல்பு கணக்கைத் தேர்வுசெய்க:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"புதிய தொடர்பு"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"தொடர்பைத் திருத்து"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"பார்க்க மட்டும்"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"திருத்துவதற்கு, தொடர்பைத் தேர்வுசெய்யவும்"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"இணைத்த தொடர்புகள்"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"சேர்"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"இணைப்பை நீக்கு"</string>
+ <string name="add_account" msgid="8201790677994503186">"கணக்கைச் சேர்"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"புதிய கணக்கைச் சேர்"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"தரவுத்தள கோப்புகளை ஏற்றுமதி செய்"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"புதிய தொடர்பை உருவாக்கும்"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"மேலும் காட்டு"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"குறைவாகக் காட்டு"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"சமீபத்தியவை"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"அறிமுகம்"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"தனிப்பட்ட நகலை உருவாக்குகிறது…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"நாளை"</string>
+ <string name="today" msgid="8041090779381781781">"இன்று"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"இன்று <xliff:g id="TIME_INTERVAL">%s</xliff:g> மணிக்கு"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"நாளை <xliff:g id="TIME_INTERVAL">%s</xliff:g> மணிக்கு"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(பெயரிடப்படாத நிகழ்வு)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"அமை"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"நிறுவனம்"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"செல்லப்பெயர்"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"குறிப்பு"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"இணையதளம்"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"நிகழ்வு"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"உறவு"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"பெயர்"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"மின்னஞ்சல்"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ஃபோன்"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"இடத்தை நோக்கிய திசைகள்"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"சமீபத்திய sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. பதிலளிக்க, கிளிக் செய்க"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"உள்வரும் அழைப்பு"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"வெளிச்செல்லும் அழைப்பு"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"தவறிய அழைப்பு"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"சமீபத்திய அழைப்பு. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. திரும்ப அழைக்க, கிளிக் செய்க"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"நீங்கள்: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"மேலும் புலங்கள்"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"தொடர்புப் படத்தை மாற்றும்"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"தொடர்புப் படத்தைச் சேர்க்கும்"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"தொடர்புப் படம்"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"எடிட்டரைத் திறக்க முடியவில்லை."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"இதில் சேமிக்கிறது:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> இன் தொடர்புத் தகவலைத் திருத்த முடியாது"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"தொடர்புகளை இணை"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ரத்துசெய்"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"இந்தத் தொடர்பு"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"சாத்தியமுள்ள நகல்கள்"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"இவை ஒரே பயனருடையதாக இருக்கக்கூடும். அவற்றை ஒரே தொடர்பில் இணைக்கலாம்."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ஐ நீக்கு"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ஐ நீக்கு"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"பரிந்துரைகள்"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"புதிது"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"வழிசெலுத்தல் டிராயரைத் திறக்கும்"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"வழிசெலுத்தல் டிராயரை மூடும்"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> லேபிள்"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"லேபிள்கள்"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"கணக்குகள்"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"நிகழ்வுகள் &amp; செய்திகளின் வரலாற்றை ஒன்றாகப் பார்க்கவும்"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"நிகழ்வுகளும் செய்திகளும்"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"நிகழ்வுகள்"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"செய்திகள்"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"பரிந்துரைகள்"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"தொடர்புகளை ஒழுங்கமைத்தும் பயனுள்ளதாகவும் வைத்திருக்கலாம்"</string>
+ <string name="undo" msgid="1425165101664071422">"செயல்தவிர்"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>ஐ அழை"</string>
+ <string name="call_home" msgid="1990519474420545392">"வீட்டு ஃபோனை அழை"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"மொபைல் எண்ணில் அழை"</string>
+ <string name="call_work" msgid="5328785911463744028">"பணியிடத் தொலைபேசி எண்ணில் அழை"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"பணியிடத்தின் தொலைநகல் எண்ணில் அழை"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"வீட்டின் தொலைநகல் எண்ணில் அழை"</string>
+ <string name="call_pager" msgid="9003902812293983281">"பேஜர் எண்ணில் அழை"</string>
+ <string name="call_other" msgid="8563753966926932052">"அழை"</string>
+ <string name="call_callback" msgid="1910165691349426858">"திரும்ப அழை"</string>
+ <string name="call_car" msgid="3280537320306436445">"காரின் மொபைல் எண்ணில் அழை"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"நிறுவனத்தின் முதன்மை மொபைல் எண்ணில் அழை"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN ஐ அழை"</string>
+ <string name="call_main" msgid="6082900571803441339">"முதன்மை ஃபோனை அழை"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"தொலைநகல் எண்ணில் அழை"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ரேடியோ தொலைபேசி எண்ணில் அழை"</string>
+ <string name="call_telex" msgid="2223170774548648114">"டெலக்ஸ் எண்ணில் அழை"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDD தொலைபேசி எண்ணில் அழை"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"பணியிட மொபைல் எண்ணில் அழை"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"பணியிடத்தின் பேஜர் எண்ணில் அழை"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>ஐ அழை"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS ஃபோனை அழை"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (அழை)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>க்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_home" msgid="7524332261493162995">"வீட்டு தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"மொபைல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_work" msgid="2269624156655267740">"பணியிட தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"பணியிட தொலைநகல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"வீட்டு தொலைநகல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"பேஜருக்கு உரை அனுப்பு"</string>
+ <string name="sms_other" msgid="806127844607642331">"உரை"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"அழைத்த எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_car" msgid="7444227058437359641">"காரின் தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"நிறுவனத்தின் முதன்மை மொபைல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDN தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_main" msgid="8621625784504541679">"முதன்மைத் தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"தொலைநகல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ரேடியோ தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"டெலக்ஸ் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDD தொலைபேசி எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"பணியிட மொபைல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"பணியிட பேஜர் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> க்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS மொபைல் எண்ணிற்கு உரைச்செய்தி அனுப்பு"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (செய்தி அனுப்பு)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"வீடியோ அழைப்பைத் தொடங்கும்"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"அடிக்கடி தொடர்புகொண்ட தொடர்பை அழிக்கவா?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"தொடர்புகள் மற்றும் ஃபோன் பயன்பாடுகளில் உள்ள அடிக்கடி தொடர்பு கொண்டவர்களின் பட்டியல் அழிக்கப்பட்டு, தொடக்கத்திலிருந்து மீண்டும் உங்கள் முகவரி விருப்பத்தேர்வுகளை மின்னஞ்சல் பயன்பாடுகள் அறியும்படி செய்யப்படும்."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"அடிக்கடித் தொடர்புகொண்ட தொடர்பை அழிக்கிறது…"</string>
+ <string name="status_available" msgid="5586870015822828392">"இருக்கிறார்"</string>
+ <string name="status_away" msgid="1838861100379804730">"வெளியே"</string>
+ <string name="status_busy" msgid="9147992455450257136">"பணிமிகுதி"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"மற்றவை"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"கோப்பகம்"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"பணிக் கோப்பகம்"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"எல்லா தொடர்புகளும்"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> க்கான உடனடித் தொடர்பு"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(பெயர் இல்லை)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"அடிக்கடி தொடர்புகொண்டவர்கள்"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"மொபைல் எண்களுடனான எல்லா தொடர்புகளும்"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"பணியின் சுயவிவரத் தொடர்புகள்"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"புதுப்பிப்புகளைக் காட்டு"</string>
+ <string name="account_phone" msgid="7128032778471187553">"சாதனம்"</string>
+ <string name="account_sim" msgid="6519016427905087952">"சிம்"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"பெயர்"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"செல்லப்பெயர்"</string>
+ <string name="name_given" msgid="4280790853455320619">"பெயரின் முற்பகுதி"</string>
+ <string name="name_family" msgid="7466985689626017037">"பெயரின் பிற்பகுதி"</string>
+ <string name="name_prefix" msgid="59756378548779822">"பெயரின் முன்னொட்டு"</string>
+ <string name="name_middle" msgid="8467433655992690326">"பெயரின் நடுப்பகுதி"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"பெயரின் பின்னொட்டு"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"பெயரின் ஒலிப்புமுறை"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ஒலிப்புமுறையில் பெயரின் முற்பகுதி"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ஒலிப்புமுறையில் பெயரின் நடுப்பகுதி"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ஒலிப்புமுறையில் பெயரின் பிற்பகுதி"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ஃபோன்"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"மின்னஞ்சல்"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"முகவரி"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"நிறுவனம்"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"உறவு"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"சிறப்பு தேதி"</string>
+ <string name="sms" msgid="1756857139634224222">"உரைச் செய்தி"</string>
+ <string name="postal_address" msgid="8765560217149624536">"முகவரி"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"நிறுவனம்"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"தலைப்பு"</string>
+ <string name="label_notes" msgid="8337354953278341042">"குறிப்புகள்"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"தனிப்பயன்"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"இணையதளம்"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"லேபிள்கள்"</string>
+ <string name="email_home" msgid="8573740658148184279">"வீட்டு மின்னஞ்சல் முகவரிக்கு மின்னஞ்சல் அனுப்பு"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"மொபைல் மின்னஞ்சல் முகவரிக்கு மின்னஞ்சல் அனுப்பு"</string>
+ <string name="email_work" msgid="2807430017302722689">"பணியிட மின்னஞ்சல் முகவரிக்கு மின்னஞ்சல் அனுப்பு"</string>
+ <string name="email_other" msgid="3454004077967657109">"மின்னஞ்சல்"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>க்கு மின்னஞ்சல் அனுப்பு"</string>
+ <string name="email" msgid="5668400997660065897">"மின்னஞ்சல்"</string>
+ <string name="postal_street" msgid="8133143961580058972">"தெரு"</string>
+ <string name="postal_city" msgid="6597491300084895548">"நகரம்"</string>
+ <string name="postal_region" msgid="6045263193478437672">"மாநிலம்"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"அஞ்சல் எண்"</string>
+ <string name="postal_country" msgid="7638264508416368690">"நாடு"</string>
+ <string name="map_home" msgid="1243547733423343982">"வீட்டு முகவரியைக் காட்டு"</string>
+ <string name="map_work" msgid="1360474076921878088">"பணியிட முகவரியைக் காட்டு"</string>
+ <string name="map_other" msgid="3817820803587012641">"முகவரியைக் காட்டு"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> முகவரியைக் காட்டு"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM இல் அரட்டையடி"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live இல் அரட்டையடி"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo இல் அரட்டையடி"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype இல் அரட்டையடி"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ இல் அரட்டையடி"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk இல் அரட்டையடி"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ இல் அரட்டையடி"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber இல் அரட்டையடி"</string>
+ <string name="chat" msgid="9025361898797412245">"அரட்டை"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"நீக்கு"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"கூடுதல் பெயர்ப் புலங்களைக் காட்டு"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"பெயர்ப் புலங்களைச் சுருக்கும்"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"கூடுதல் ஒலிப்புமுறை பெயர்ப் புலங்களைக் காட்டு"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ஒலிப்புமுறைப் பெயர்ப் புலங்களைச் சுருக்கும்"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"விரிக்கும்"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"சுருக்கும்"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"விரிக்கப்பட்டது"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"சுருக்கப்பட்டது"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"எல்லா தொடர்புகளும்"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"நட்சத்திரமிட்டவை"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"தனிப்பயனாக்கு"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"தொடர்பு"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"பிற எல்லா தொடர்புகளும்"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"எல்லா தொடர்புகளும்"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"ஒத்திசைவுக் குழுவை அகற்று"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"ஒத்திசைவு குழுவைச் சேர்"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"மேலும் குழுக்கள்…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ஒத்திசைவிலிருந்து \"<xliff:g id="GROUP">%s</xliff:g>\" ஐ அகற்றுவது, ஒத்திசைவிலிருந்து குழுவாக்கப்படாத எல்லா தொடர்புகளையும் அகற்றும்."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"காட்சி விருப்பங்களைச் சேமிக்கிறது…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"தனிப்பயனாக்கிய காட்சி"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"இறக்கிய தொடர்புகளை இதில் சேமிக்கவும்:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"சிம் கார்டு"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> சிம்"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d தொடர்புகள்</item>
+ <item quantity="one">1 தொடர்பு</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> தொடர்புகள் • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> தொடர்பு • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf கோப்பு"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"இறக்குவதற்கு எதுவுமில்லை"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard இலிருந்து தொடர்புகளை இறக்கவா?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> இன் இறக்குமதியை ரத்துசெய்யவா?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> இன் ஏற்றுமதியை ரத்துசெய்யவா?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard இன் இறக்குமதி/ஏற்றுமதியை ரத்துசெய்ய முடியவில்லை"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"தெரியாத பிழை."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ஐத் திறக்க முடியவில்லை: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ஏற்றுமதியைத் தொடங்க முடியவில்லை: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ஏற்றுமதி செய்யக்கூடிய தொடர்பு இல்லை."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"தேவைப்படும் அனுமதியை முடக்கியுள்ளீர்கள்."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ஏற்றுமதி செய்யும்போது பிழை: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O பிழை"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"போதுமான நினைவகம் இல்லை. கோப்பு மிகவும் பெரியதாக இருக்கலாம்."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"வடிவம் ஆதரிக்கப்படவில்லை."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ஏற்றப்பட்டது."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"தொடர்புகள் ஏற்றப்பட்டன."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"தொடர்புகள் ஏற்றப்பட்டன. தொடர்புகளைப் பகிர, அறிவிப்பைக் கிளிக் செய்யவும்."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"தொடர்புகளைப் பகிர, தட்டவும்."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> ஐ ஏற்றுமதி செய்வது ரத்துசெய்யப்பட்டது."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"தொடர்பு தரவை ஏற்றுமதி செய்கிறது"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"தொடர்பின் தரவு ஏற்றப்படுகிறது."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"தரவுத்தளத் தகவலைப் பெற முடியவில்லை."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ஏற்றத்தக்க தொடர்புகள் இல்லை."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard தொகுப்பான் முறையாகத் தொடங்கவில்லை."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ஏற்றுமதி செய்ய முடியவில்லை"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"தொடர்பு தரவு ஏற்றுமதி செய்யப்படவில்லை.\nகாரணம்: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ஐ இறக்குமதி செய்கிறது"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard தரவைப் படிக்க முடியவில்லை"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> இறக்கப்பட்டது"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ஐ இறக்குமதிசெய்வது ரத்துசெய்யப்பட்டது"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> விரைவில் இறக்குமதி செய்யப்படும்."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"கோப்பு விரைவில் இறக்குமதி செய்யப்படும்."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard இன் இறக்குமதி கோரிக்கை நிராகரிக்கப்பட்டது. பிறகு முயற்சிக்கவும்."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"கூடிய விரைவில் தொடர்புகள் ஏற்றப்படும்."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard இன் ஏற்றுமதி கோரிக்கை நிராகரிக்கப்பட்டது. பிறகு முயற்சிக்கவும்."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"தொடர்பு"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(களை) ஐ அகச் சேமிப்பிடத்தில் தற்காலிகமாகச் சேமிக்கிறது. அசல் இறக்குமதி உடனடியாக தொடங்கப்படும்."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ஐ இறக்குமதி செய்ய முடியவில்லை."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC வழியாக தொடர்பு பெறப்பட்டது"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"தற்காலிகமாகச் சேமித்தல்"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ஐ இறக்குமதி செய்கிறது: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf கோப்பிற்கு ஏற்று"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"இதன்படி வரிசைப்படுத்து:"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ஒலிப்புமுறைப் பெயர்"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"எப்போதும் காட்டு"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"காலியாக இருந்தால், மறை"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"பெயரின் முற்பகுதி"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"பெயரின் பிற்பகுதி"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"பெயர் வடிவம்"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"பெயரின் முதற்பகுதி முதலில்"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"பெயரின் பிற்பகுதி முதலில்"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"கணக்குகள்"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"புதிய தொடர்புகளுக்கான இயல்பு கணக்கு"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"எனது தகவல்"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"சுயவிவரத்தை அமைக்கவும்"</string>
+ <string name="setting_about" msgid="7014388749752042863">"தொடர்புகள் - ஓர் அறிமுகம்"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"பிடித்த தொடர்புகளைப் பகிர்"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"எல்லா தொடர்புகளையும் பகிர்"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"தொடர்புகளைப் பகிர முடியவில்லை."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"தொடர்புகளை ஏற்று"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"இதிலிருந்து தொடர்புகளை இறக்கு:"</string>
+ <string name="share_error" msgid="948429331673358107">"தொடர்பைப் பகிர முடியவில்லை."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"பகிர, தொடர்புகள் இல்லை."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"காட்ட வேண்டிய தொடர்புகள்"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"காட்ட வேண்டிய தொடர்புகள்"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"காட்சியைத் தனிப்பயனாக்குக"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"சேமி"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"தொடர்புகளில் தேடுக"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"விருப்பமானவை"</string>
+ <string name="menu_import" msgid="6107961135813836467">"இறக்கு"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ஏற்று"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"தடுக்கப்பட்ட எண்கள்"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> வழியாக"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> வழியாக <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"தேடுவதை நிறுத்தும்"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"தேடலை அழி"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"கணக்கு"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"அழைப்புகளுக்கு எப்போதும் இதைப் பயன்படுத்து"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"குறிப்புடன் அழை"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"அழைப்புடன் சேர்த்து அனுப்ப, குறிப்பை உள்ளிடவும்…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"அனுப்பு &amp; அழை"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"பதிப்பு எண்"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ஓப்பன் சோர்ஸ் மென்பொருளுக்கான உரிம விவரங்கள்"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"தனியுரிமைக் கொள்கை"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"சேவை விதிமுறைகள்"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"urlஐத் திறக்க முடியவில்லை."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> தேர்ந்தெடுக்கப்பட்டது"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> தேர்ந்தெடுக்கப்படவில்லை"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"வீடியோ அழைப்பைச் செய்யும்"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"நீக்கும்"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"முப்புள்ளி"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> வி"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> நி <xliff:g id="SECONDS">%2$s</xliff:g> வி"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ம <xliff:g id="MINUTES_1">%2$s</xliff:g> நி <xliff:g id="SECONDS">%3$s</xliff:g> வி"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"இந்தக் குறுக்குவழி முடக்கப்பட்டது"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"தொடர்பு அகற்றப்பட்டது"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"இறக்கு"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"தொடர்புகளைத் தேர்ந்தெடு"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"சிம் கார்டில் தொடர்புகள் இல்லை"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"தொடர்பு ஏற்கனவே உங்கள் பட்டியலில் உள்ளது"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> சிம் தொடர்புகள் இறக்கப்பட்டன</item>
+ <item quantity="one">1 சிம் தொடர்பு இறக்கப்பட்டது</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"சிம் தொடர்புகளை இறக்க முடியவில்லை"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"சிம்மிலிருந்து இறக்கு"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ரத்துசெய்யும்"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"தானாக ஒத்திசை எனும் அம்சம் முடக்கப்பட்டுள்ளது. இயக்க, தட்டவும்."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"நிராகரிக்கும்"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"கணக்கு ஒத்திசைவு எனும் அம்சம் முடக்கப்பட்டுள்ளது. இயக்க, தட்டவும்."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"தானாக ஒத்திசைப்பதை இயக்கவா?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Google தொடர்புகள் மட்டுமல்லாமல் எல்லாப் பயன்பாடுகளிலும் கணக்குகளிலும் நீங்கள் செய்யும் மாற்றங்கள், இணையத்திலும் உங்கள் சாதனங்களிலும் புதுப்பித்த நிலையில் வைக்கப்படும்."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"இயக்கு"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"இணைப்பு இல்லை"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"சிம்"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"மேலும் காட்டு"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"சிம் கார்டு இறக்கப்பட்டது"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"இறக்க முடியவில்லை"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"சிம் கார்டிலிருந்து தொடர்புகளை இறக்க முடியவில்லை"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"சிம் கார்டை இறக்குகிறது"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"அறிவிப்புகள்"</string>
+</resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
deleted file mode 100644
index f2fd6b8d5..000000000
--- a/res/values-te-rIN/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"పరిచయాలు"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"పరిచయాలు"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"పరిచయాన్ని వీక్షించండి"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"పరిచయాన్ని సవరించండి"</string>
- <string name="contactsList" msgid="8661624236494819731">"పరిచయాలు"</string>
- <string name="shortcutContact" msgid="749243779392912958">"పరిచయం"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"నేరుగా డయల్"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"నేరుగా సందేశం"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"పరిచయం యొక్క సత్వరమార్గాన్ని ఎంచుకోండి"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"కాల్ చేయాల్సిన నంబర్‌ను ఎంచుకోండి"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"సందేశం పంపడానికి నంబర్‌ను ఎంచుకోండి"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"పరిచయానికి జోడించండి"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"పరిచయాన్ని ఎంచుకోండి"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
- <string name="starredList" msgid="4817256136413959463">"నక్షత్రం గుర్తు ఉన్నవి"</string>
- <string name="frequentList" msgid="7154768136473953056">"తరచుగా"</string>
- <string name="strequentList" msgid="5640192862059373511">"ఇష్టమైనవి"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"పరిచయ వివరాలు"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"పరిచయాన్ని సవరించు"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"పరిచయాన్ని సృష్టించండి"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"సమూహాన్ని సవరించు"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"సమూహాన్ని సృష్టించండి"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"గురించి"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"నవీకరణలు"</string>
- <string name="searchHint" msgid="8482945356247760701">"పరిచయాలను శోధించు"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"పరిచయాన్ని వీక్షించండి"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"ఇష్టమైనవాటికి జోడించు"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"ఇష్టమైనవాటి నుండి తీసివేయి"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ఇష్టమైనవి నుండి తీసివేయబడింది"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"ఇష్టమైనవికి జోడించబడింది"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"సవరించు"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"తొలగించు"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"ఫోటోను మార్చు"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"హోమ్ స్క్రీన్‌లో ఉంచు"</string>
- <string name="menu_call" msgid="3992595586042260618">"పరిచయానికి కాల్ చేయి"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"పరిచయానికి వచనం పంపు"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"వేరు చేయి"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"సవరించు"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"తొలగించు"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"పరిచయాన్ని జోడించు"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"సమూహాన్ని జోడించు"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలా?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"వేరు చేయి"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"మీరు ఇప్పటికే చేసిన మార్పులను సేవ్ చేసి, ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలనుకుంటున్నారా?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"సేవ్ చేసి, వేరు చేయి"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"మీరు ఇప్పటికే చేసిన మార్పులను సేవ్ చేసి, ఎంచుకున్న పరిచయంతో లింక్ చేయాలనుకుంటున్నారా?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"సేవ్ చేసి, లింక్ చేయి"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"లింక్ చేయి"</string>
- <string name="menu_save" msgid="1727844363591825909">"సేవ్ చేయి"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"పరిచయాలను లింక్ చేయండి"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"మీరు <xliff:g id="NAME">%s</xliff:g>తో లింక్ చేయాలనుకునే పరిచయాన్ని ఎంచుకోండి:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"అన్ని పరిచయాలను చూపు"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"సూచిత పరిచయాలు"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"అన్ని పరిచయాలు"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"పరిచయాలు లింక్ చేయబడ్డాయి"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">పరిచయాలు తొలగించబడ్డాయి</item>
- <item quantity="one">పరిచయం తొలగించబడింది</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"రింగ్‌టో‌న్‌ను సెట్ చేయి"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"అన్ని కాల్‌లు వాయిస్ మెయిల్‌కు"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"మీ చదవడానికి మాత్రమే ఖాతాల నుండి పరిచయాలు తొలగించబడవు, కానీ అవి దాచబడవచ్చు."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"దాచు"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"తొలగించాల్సిన పరిచయం పలు ఖాతాల నుండి వివరాలను కలిగి ఉంది. చదవడానికి మాత్రమే ఖాతాల నుండి వివరాలు దాచబడతాయి, తొలగించబడవు."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"మీరు లింక్ చర్యను అమలు చేయడానికి కనీసం రెండు పరిచయాలను ఎంచుకోవాలి."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ఎంచుకున్న పరిచయాలను లింక్ చేయాలా?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"లింక్ చేయి"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"ఈ పరిచయాన్ని తొలగించాలా?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"ఎంచుకున్న పరిచయాలను తొలగించాలా?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"మీ చదవడానికి మాత్రమే ఖాతాల నుండి పరిచయాలు తొలగించబడవు, కానీ అవి దాచబడవచ్చు."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"తొలగించాల్సిన పరిచయాలు పలు ఖాతాల నుండి వివరాలను కలిగి ఉన్నాయి. చదవడానికి మాత్రమే ఖాతాల నుండి వివరాలు దాచబడతాయి, తొలగించబడవు."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ఈ పరిచయాన్ని తొలగించడం వలన పలు ఖాతాల నుండి వివరాలు తొలగించబడతాయి."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"ఈ పరిచయాన్ని తొలగించాలా?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"తొలగించు"</string>
- <string name="menu_discard" msgid="6854657936970228164">"మార్పులను విస్మరించు"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"పరిచయం ఉనికిలో లేదు."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"పరిచయం హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"సంస్థ"</item>
- <item msgid="7196592230748086755">"గమనిక"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"టాబ్లెట్‌లో చిత్రాలు ఏవీ అందుబాటులో లేవు."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ఫోన్‌లో చిత్రాలు ఏవీ అందుబాటులో లేవు."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"పరిచయం ఫోటో"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"అనుకూల లేబుల్ పేరు"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"కాల్‌లను నేరుగా వాయిస్ మెయిల్‌కు పంపండి"</string>
- <string name="removePhoto" msgid="4898105274130284565">"ఫోటోను తీసివేయి"</string>
- <string name="noContacts" msgid="4955659076981974652">"పరిచయాలు లేవు"</string>
- <string name="noGroups" msgid="8614664663561385253">"సమూహాలు లేవు."</string>
- <string name="noAccounts" msgid="7768267764545265909">"సమూహాలను సృష్టించడానికి మీకు ఖాతా అవసరం."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ఈ సమూహంలో వ్యక్తులు లేరు."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"కొంతమందిని జోడించడానికి, సమూహాన్ని సవరించండి."</string>
- <string name="savingContact" msgid="4075751076741924939">"పరిచయాన్ని సేవ్ చేస్తోంది…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"పరిచయం సేవ్ చేయబడింది"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"పరిచయాలు వేరు చేయబడ్డాయి"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"పరిచయ మార్పులను సేవ్ చేయడం సాధ్యపడలేదు."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"పరిచయాన్ని వేరు చేయడం సాధ్యపడలేదు."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"పరిచయాన్ని లింక్ చేయడం సాధ్యపడలేదు."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"పరిచయాన్ని సేవ్ చేయడంలో లోపం ఏర్పడింది."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"పరిచయం ఫోటో మార్పులను సేవ్ చేయలేకపోయింది."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"సమూహం సేవ్ చేయబడింది."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"సమూహ మార్పులను సేవ్ చేయడం సాధ్యపడలేదు."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">ఫోన్ నంబర్‌లు ఉన్న <xliff:g id="COUNT">%d</xliff:g> పరిచయాలు</item>
- <item quantity="one">ఫోన్ నంబర్ ఉన్న 1 పరిచయం</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ఫోన్ నంబర్‌లు గల పరిచయాలు లేవు"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> కనుగొనబడ్డాయి</item>
- <item quantity="one">1 కనుగొనబడింది</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"పరిచయాలు లేవు"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> కనుగొనబడ్డాయి</item>
- <item quantity="one">1 కనుగొనబడింది</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"అన్నీ"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"ఇష్టమైనవి"</string>
- <string name="callBack" msgid="5498224409038809224">"కాల్ చేయి"</string>
- <string name="callAgain" msgid="3197312117049874778">"మళ్లీ కాల్ చేయి"</string>
- <string name="returnCall" msgid="8171961914203617813">"కాల్‌ను తిరిగి చేయి"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"ని పరిచయాలకు జోడించాలా?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"పరిచయ ఫోటో"</string>
- <string name="description_plus_button" msgid="515164827856229880">"ప్లస్"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> పరిచయాల్లో <xliff:g id="CURRENT_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"మీ పరిచయాల యొక్క పేర్లు"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ఈ చర్యను నిర్వహించడానికి అనువర్తనం ఏదీ కనుగొనబడలేదు."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"మునుపటి స్క్రీన్‌కి తిరిగి రావడానికి క్లిక్ చేయండి"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ఫోన్ నంబర్‌ను జోడించండి"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ఇమెయిల్ జోడించండి"</string>
- <string name="missing_app" msgid="1466111003546611387">"ఈ చర్యను నిర్వహించడానికి అనువర్తనం ఏదీ కనుగొనబడలేదు."</string>
- <string name="menu_share" msgid="943789700636542260">"భాగస్వామ్యం చేయి"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"పరిచయాలకు జోడించు"</string>
- <string name="share_via" msgid="563121028023030093">"పరిచయాన్ని దీని ద్వారా భాగస్వామ్యం చేయండి"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"ఖాతాలో సమూహాన్ని సృష్టించండి"</string>
- <string name="audio_chat" msgid="2535716629358298691">"వాయిస్ చాట్"</string>
- <string name="video_chat" msgid="1872255818640336072">"వీడియో చాట్"</string>
- <string name="connections" msgid="8098440723172028350">"కనెక్షన్‌లు"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"కనెక్షన్‌ను జోడించు"</string>
- <string name="recent" msgid="2659189233141493004">"ఇటీవలివి"</string>
- <string name="recent_updates" msgid="4267258535615860710">"ఇటీవలి నవీకరణలు"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> పరిచయం"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ఖాతా"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ఈ అనువర్తనం నుండి సవరించడం కుదరదు."</string>
- <string name="group_read_only" msgid="1061762906115697637">"ఈ పరికరంలో సవరించడం కుదరదు."</string>
- <string name="take_photo" msgid="7496128293167402354">"ఫోటో తీయండి"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"కొత్త ఫోటో తీసుకోండి"</string>
- <string name="pick_photo" msgid="2129509985223564942">"ఫోటోను ఎంచుకోండి"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"కొత్త ఫోటోను ఎంచుకోండి"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"పరిచయ జాబితా నవీకరించబడుతోంది."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"శోధిస్తోంది..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"ఎంచుకున్న వాటిని చూపు"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"అన్నీ చూపు"</string>
- <string name="menu_select_all" msgid="621719255150713545">"అన్నింటినీ ఎంచుకోండి"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"అన్నింటి ఎంపికను తీసివేయి"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"కొత్తదాన్ని జోడించు"</string>
- <string name="add_organization" msgid="7311893231158291197">"సంస్థను జోడించు"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"తేదీ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"సమూహం పేరు"</string>
- <string name="change_photo" msgid="8530597935483526383">"మార్చు"</string>
- <string name="primary_photo" msgid="8517942231868516999">"ప్రాథమిక ఫోటో"</string>
- <string name="description_star" msgid="2605854427360036550">"ఇష్టంగా గుర్తించు"</string>
- <string name="edit_contact" msgid="7529281274005689512">"పరిచయాన్ని సవరించు"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ప్రస్తుత పరిచయాన్ని ఎంచుకున్న పరిచయంతో లింక్ చేయాలా?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ఎంచుకున్న పరిచయాన్ని సవరించగల స్థితికి మార్చాలా? మీరు ఇప్పటి వరకు నమోదు చేసిన సమాచారం కాపీ చేయబడుతుంది."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"నా పరిచయాలకు కాపీ చేయి"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"నా పరిచయాలకి జోడించు"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"డైరెక్టరీ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"అనుకూలం"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"సెట్టింగ్‌లు"</string>
- <string name="menu_settings" msgid="377929915873428211">"సెట్టింగ్‌లు"</string>
- <string name="menu_help" msgid="1680178646764069976">"సహాయం &amp; అభిప్రాయం"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ప్రదర్శన ఎంపికలు"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"ఫోన్ నంబర్"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"పరిచయాలకు జోడించు"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"పరిచయానికి జోడించండి"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"మూసివేయి"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"సంవత్సరాన్ని చేర్చు"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"పరిచయం"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"లోడ్ చేస్తోంది…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"కొత్త పరిచయాన్ని సృష్టించు"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ఖాతాను జోడించు"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"పరిచయాలను దిగుమతి చేయి"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"సమూహాన్ని సృష్టించండి"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"సమూహాన్ని సృష్టించండి"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> సమూహాలు</item>
- <item quantity="one">1 సమూహం</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"సమూహం \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"ని తొలగించాలా? (పరిచయాలు వాటంతట అవే తొలగించబడవు.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> నుండి <xliff:g id="COUNT_2">%1$d</xliff:g> మంది వ్యక్తులు</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> నుండి <xliff:g id="COUNT_0">%1$d</xliff:g> వ్యక్తి</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> మంది వ్యక్తులు</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> వ్యక్తి</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"మరొకదానితో లింక్ చేయడానికి ముందు పరిచయం పేరు టైప్ చేయండి."</string>
- <string name="copy_text" msgid="3257145021583508761">"క్లిప్‌బోర్డ్‌కు కాపీ చేయి"</string>
- <string name="set_default" msgid="4417505153468300351">"డిఫాల్ట్‌గా సెట్ చేయి"</string>
- <string name="clear_default" msgid="7193185801596678067">"డిఫాల్ట్‌ను క్లియర్ చేయి"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"వచనం కాపీ చేయబడింది"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"మీ మార్పులను విస్మరించి, సవరణ నుండి నిష్క్రమించాలా?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"విస్మరించు"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"సవరణను కొనసాగించు"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"నా ప్రొఫైల్‌ను సెటప్ చేయి"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"వ్యక్తి పేరు టైప్ చేయండి"</string>
- <string name="group_name_hint" msgid="238359485263401293">"సమూహం పేరు"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"నా స్థానిక ప్రొఫైల్"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"నా <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ప్రొఫైల్"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"అన్ని పరిచయాలను ప్రదర్శిస్తోంది"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"మీరు మీ ఫోన్‌ను పోగొట్టుకున్నప్పటికీ మీ పరిచయాలను సురక్షితంగా ఉంచుకోండి: ఆన్‌లైన్ సేవతో సమకాలీకరించండి."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ఖాతాను జోడించండి"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"మీ కొత్త పరిచయం బ్యాకప్ చేయబడదు. ఆన్‌లైన్‌లో పరిచయాలను బ్యాకప్ చేసే ఖాతాను జోడించాలా?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"కొత్త పరిచయాలు <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>కి సేవ్ చేయబడతాయి."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"కొత్త పరిచయాల కోసం డిఫాల్ట్ ఖాతాను ఎంచుకోండి:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"కొత్త పరిచయం చేర్చు"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"సవరించండి"</string>
- <string name="keep_local" msgid="1258761699192993322">"స్థానికంగా ఉంచండి"</string>
- <string name="add_account" msgid="8201790677994503186">"ఖాతాను జోడించు"</string>
- <string name="add_new_account" msgid="5748627740680940264">"కొత్త ఖాతాను జోడించు"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"డేటాబేస్ ఫైల్‌లను ఎగుమతి చేయి"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"కొత్త పరిచయాన్ని జోడించు"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"మరిన్ని చూడండి"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"తక్కువ చూడండి"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"అన్నీ చూడండి"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"ఇటీవలివి"</string>
- <string name="about_card_title" msgid="2920942314212825637">"పరిచయం"</string>
- <string name="send_message" msgid="8938418965550543196">"సందేశాన్ని పంపండి"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"వ్యక్తిగత కాపీని సృష్టిస్తోంది..."</string>
- <string name="yesterday" msgid="6840858548955018569">"నిన్న"</string>
- <string name="tomorrow" msgid="6241969467795308581">"రేపు"</string>
- <string name="today" msgid="8041090779381781781">"ఈ రోజు"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"ఈ రోజు <xliff:g id="TIME_INTERVAL">%s</xliff:g>కి"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"రేపు <xliff:g id="TIME_INTERVAL">%s</xliff:g>కి"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(శీర్షిక లేని ఈవెంట్)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"సెట్ చేయి"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"సంస్థ"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"మారుపేరు"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"గమనిక"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"వెబ్‌సైట్"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ఈవెంట్"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"సంబంధం"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"ఖాతా"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"పేరు"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ఇమెయిల్"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"ఫోన్"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"ఫోటో"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"పరిచయ ఎడిటర్‌ని విస్తరింపజేయడానికి క్లిక్ చేయండి."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"పరిచయ ఎడిటర్‌ని కుదించడానికి క్లిక్ చేయండి."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"స్థానానికి వెళ్లడానికి దిశలు"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"ఇటీవలి sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. ప్రతిస్పందించడానికి క్లిక్ చేయండి"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ఇన్‌కమింగ్"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"అవుట్‌గోయింగ్"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"మిస్డ్"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ఇటీవలి కాల్. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. తిరిగి కాల్ చేయడానికి క్లిక్ చేయండి"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"మీరు: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"మీరు ఇమెయిల్ ఫీల్డ్ లేదా ఫోన్ ఫీల్డ్‌లో వ్యక్తి యొక్క Hangouts ఐడెంటిఫైయర్‌ని నమోదు చేసినప్పుడు Hangouts ఉత్తమంగా పని చేస్తాయి."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"మరిన్ని ఫీల్డ్‌లు"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"ఫోటోను మార్చండి"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ఎడిటర్‌ను తెరవడం విఫలమైంది."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"దీనికి సేవ్ చేయబడుతోంది"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ప్రస్తుతం <xliff:g id="ACCOUNT_NAME">%s</xliff:g>కి సేవ్ చేస్తోంది. వేరే ఖాతాను ఎంచుకోవడానికి రెండుసార్లు నొక్కండి."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">లింక్ చేయబడిన పరిచయాలు (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">లింక్ చేయబడిన పరిచయం</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> లింక్ చేయబడిన పరిచయాలు"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"పరిచయాలను లింక్ చేయి"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"రద్దు చేయి"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> సంభావ్య నకిలీలు</item>
- <item quantity="one">1 సంభావ్య నకిలీ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> లింక్ చేయబడిన పరిచయాలు</item>
- <item quantity="one">1 లింక్ చేయబడిన పరిచయం</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ఈ పరిచయం"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"సంభావ్య నకిలీలు"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"ఈ పరిచయాలు ఒకే వ్యక్తికి సంబంధించినవి అయ్యి ఉండవచ్చు. మీరు వాటిని ఒకే పరిచయంగా లింక్ చేయవచ్చు."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"లింక్ చేయబడిన పరిచయాలు"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"మీ ఖాతాల నుండి"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ఫోటో తీయి"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"అన్ని ఫోటోలు"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"ఫోటోను ఎంచుకోండి"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> నుండి"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ని తొలగిస్తుంది"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ని తొలగిస్తుంది"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>లోని ఫోటో ఎంచుకోబడలేదు"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>లోని ఫోటో ఎంచుకోబడింది"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"తెలియని ఖాతా నుండి అందించబడిన ఫోటో ఎంచుకోబడలేదు"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"తెలియని ఖాతా నుండి అందించబడిన ఫోటో ఎంచుకోబడింది"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"భాష మార్పుని చూపడానికి పరిచయ జాబితా నవీకరించబడుతోంది.\n\nదయచేసి వేచి ఉండండి..."</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"బ్లాక్ చేయబడిన నంబర్‌లు"</string>
-</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
new file mode 100644
index 000000000..9d3efd624
--- /dev/null
+++ b/res/values-te/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"పరిచయాలు"</string>
+ <string name="contactsList" msgid="8661624236494819731">"పరిచయాలు"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"పరిచయాన్ని జోడించండి"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"పరిచయం"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"నేరుగా డయల్"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"నేరుగా సందేశం"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"పరిచయాన్ని ఎంచుకోండి"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"పరిచయానికి జోడించండి"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"పరిచయాన్ని ఎంచుకోండి"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ఎంచుకోండి"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
+ <string name="searchHint" msgid="8482945356247760701">"పరిచయాలను శోధించు"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"ఇష్టమైనవాటికి జోడించు"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"ఇష్టమైనవాటి నుండి తీసివేయి"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"ఇష్టమైనవి నుండి తీసివేయబడింది"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"ఇష్టమైనవికి జోడించబడింది"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"సవరించు"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"తొలగించు"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"ఫోటోను మార్చు"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"సత్వరమార్గాన్ని సృష్టించు"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"వేరు చేయి"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"పరిచయాలను తీసివేయి"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"లేబుల్ పేరును మార్చు"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"లేబుల్‌ను తొలగించు"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"పరిచయాన్ని జోడించు"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"పరిచయాలను ఎంచుకోండి"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"పరిచయాలను జోడించు"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"లేబుల్ నుండి తీసివేయి"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"లేబుల్‌ను సృష్టించు"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలా?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"వేరు చేయి"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"మీరు ఇప్పటికే చేసిన మార్పులను సేవ్ చేసి, ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలనుకుంటున్నారా?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"సేవ్ చేసి, వేరు చేయి"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"మీరు ఇప్పటికే చేసిన మార్పులను సేవ్ చేసి, ఎంచుకున్న పరిచయంతో లింక్ చేయాలనుకుంటున్నారా?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"సేవ్ చేసి, లింక్ చేయి"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"లింక్ చేస్తున్నాము"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"అన్‌లింక్ చేస్తున్నాము"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"లింక్ చేయి"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"లింక్ చేసిన పరిచయాలను చూడండి"</string>
+ <string name="menu_save" msgid="1727844363591825909">"సేవ్ చేయి"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"పరిచయాలను లింక్ చేయండి"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"మీరు <xliff:g id="NAME">%s</xliff:g>తో లింక్ చేయాలనుకునే పరిచయాన్ని ఎంచుకోండి:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"సూచిత పరిచయాలు"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"అన్ని పరిచయాలు"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> లింక్ చేయబడ్డారు"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"పరిచయాలు లింక్ చేయబడ్డాయి"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> తొలగించబడింది"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> మరియు <xliff:g id="NAME_1">%2$s</xliff:g> తొలగించబడ్డాయి"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… తొలగించబడ్డాయి"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">పరిచయాలు తొలగించబడ్డాయి</item>
+ <item quantity="one">పరిచయం తొలగించబడింది</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> పరిచయాలు</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> పరిచయం</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> పరిచయాలు · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> పరిచయం · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google అందించినవి"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> అందించినవి"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"రింగ్‌టో‌న్‌ను సెట్ చేయి"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"వాయిస్ మెయిల్‌కు మళ్లించు"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"వాయిస్ మెయిల్‌కు మళ్లించవద్దు"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"ఈ పరిచయం చదవడానికి మాత్రమే. దీన్ని తొలగించలేరు, కానీ దీన్ని దాచి ఉంచగలరు."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"పరిచయాన్ని దాచు"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"ఈ పరిచయంలోని చదవడానికి మాత్రమే ప్రాప్యత గల ఖాతాలు దాచి ఉంచబడతాయి, అంతేకానీ తొలగించబడవు."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"ఈ పరిచయాన్ని తొలగించాలా?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"ఎంచుకున్న పరిచయాలను తొలగించాలా?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"మీ చదవడానికి మాత్రమే ఖాతాల నుండి పరిచయాలు తొలగించబడవు, కానీ అవి దాచబడవచ్చు."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"తొలగించాల్సిన పరిచయాలు పలు ఖాతాల నుండి వివరాలను కలిగి ఉన్నాయి. చదవడానికి మాత్రమే ఖాతాల నుండి వివరాలు దాచబడతాయి, తొలగించబడవు."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ఈ పరిచయాన్ని తొలగించడం వలన పలు ఖాతాల నుండి వివరాలు తొలగించబడతాయి."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"ఈ పరిచయాన్ని తొలగించాలా?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"తొలగించు"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"పరిచయం ఉనికిలో లేదు."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"పరిచయం హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"పరికరంలో చిత్రాలు ఏవీ అందుబాటులో లేవు."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"పరిచయం ఫోటో"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"అనుకూల లేబుల్ పేరు"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"ఫోటోను తీసివేయి"</string>
+ <string name="noContacts" msgid="2228592924476426108">"మీ పరిచయాల జాబితా ఖాళీగా ఉంది"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ఈ లేబుల్‌తో పరిచయాలు ఏవీ లేవు"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ఈ ఖాతాలో పరిచయాలు ఏవీ లేవు"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"మీ పరిచయాల జాబితా ఖాళీగా ఉంది"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> సేవ్ చేయబడింది"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"పరిచయం సేవ్ చేయబడింది"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"పరిచయాలు వేరు చేయబడ్డాయి"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"పరిచయం మార్పులను సేవ్ చేయలేకపోయింది"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"పరిచయాన్ని అన్‌లింక్ చేయలేకపోయింది"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"పరిచయాన్ని లింక్ చేయలేకపోయింది"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"పరిచయాన్ని సేవ్ చేయడంలో లోపం ఏర్పడింది"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"పరిచయం ఫోటో మార్పులను సేవ్ చేయలేకపోయింది"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"లేబుల్‌ను లోడ్ చేయడంలో విఫలమైంది"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"లేబుల్ తొలగించబడింది"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"లేబుల్ సృష్టించబడింది"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"లేబుల్‌ను సృష్టించడం సాధ్యపడదు"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"లేబుల్ నవీకరించబడింది"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"లేబుల్ నుండి తీసివేయబడ్డాయి"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"లేబుల్‌కు జోడించబడింది/జోడించబడ్డాయి"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"లేబుల్ మార్పులను సేవ్ చేయలేకపోయింది"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ఈ లేబుల్ ఇప్పటికే ఉంది"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"కొన్ని పరిచయాలకు ఇమెయిల్‌లు లేవు."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"కొన్ని పరిచయాలకు ఫోన్ నంబర్‌లు లేవు."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ఇమెయిల్‌ను పంపు"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"సందేశాన్ని పంపు"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"పరిచయాలను ఎంచుకోండి"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"పంపు"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"పరిచయాలు లేవు"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\"ని పరిచయాలకు జోడించాలా?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"మీ పరిచయాల యొక్క పేర్లు"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"మునుపటి స్క్రీన్‌కి తిరిగి రావడానికి క్లిక్ చేయండి"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"ఫోన్ నంబర్‌ను జోడించండి"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ఇమెయిల్ జోడించండి"</string>
+ <string name="missing_app" msgid="1466111003546611387">"ఈ చర్యను నిర్వహించడానికి అనువర్తనం ఏదీ కనుగొనబడలేదు."</string>
+ <string name="menu_share" msgid="943789700636542260">"భాగస్వామ్యం చేయి"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"పరిచయాలకు జోడించు"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"జోడించు"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">పరిచయాలను దీని ద్వారా భాగస్వామ్యం చేయండి</item>
+ <item quantity="one">పరిచయాన్ని దీని ద్వారా భాగస్వామ్యం చేయండి</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"ఖాతాను ఎంచుకోండి"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"లేబుల్‌ను సృష్టించండి"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"లేబుల్ పేరును మార్చండి"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"లేబుల్ పేరు"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"లేబుల్ పేరు"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"వాయిస్ చాట్"</string>
+ <string name="video_chat" msgid="1872255818640336072">"వీడియో చాట్"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> పరిచయం"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ఖాతా"</string>
+ <string name="take_photo" msgid="7496128293167402354">"ఫోటో తీయండి"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"కొత్త ఫోటో తీసుకోండి"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"ఫోటోను ఎంచుకోండి"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"కొత్త ఫోటోను ఎంచుకోండి"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"శోధిస్తోంది..."</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"తేదీ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"లేబుల్"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"రద్దు చేస్తుంది"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"వెనుకకు వెళ్తుంది"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"మూసివేస్తుంది"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"ఎంచుకున్న పరిచయాన్ని సవరించగల స్థితికి మార్చాలా? మీరు ఇప్పటి వరకు నమోదు చేసిన సమాచారం కాపీ చేయబడుతుంది."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"డైరెక్టరీ <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"సెట్టింగ్‌లు"</string>
+ <string name="menu_settings" msgid="377929915873428211">"సెట్టింగ్‌లు"</string>
+ <string name="menu_help" msgid="1680178646764069976">"సహాయం &amp; అభిప్రాయం"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"ఫోన్ నంబర్"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"పరిచయాలకు జోడించు"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"మూసివేయి"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"సంవత్సరాన్ని చేర్చు"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"ఖాతాను జోడించు"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"దిగుమతి చేయి"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"కొత్తది సృష్టించు…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" లేబుల్‌ని తొలగించాలా? (పరిచయాలు వాటంతట అవే తొలగించబడవు.)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"మరొకదానితో లింక్ చేయడానికి ముందు పరిచయం పేరు టైప్ చేయండి."</string>
+ <string name="copy_text" msgid="3257145021583508761">"క్లిప్‌బోర్డ్‌కు కాపీ చేయి"</string>
+ <string name="set_default" msgid="4417505153468300351">"డిఫాల్ట్‌గా సెట్ చేయి"</string>
+ <string name="clear_default" msgid="7193185801596678067">"డిఫాల్ట్‌ను క్లియర్ చేయి"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"వచనం కాపీ చేయబడింది"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"మార్పులను విస్మరించాలా?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"విస్మరించు"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"రద్దు చేయి"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"అనుకూలీకరణలను విస్మరించాలా?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"పరిచయాలను శోధించండి"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"పరిచయాలను తీసివేయండి"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"నా స్థానిక ప్రొఫైల్"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"నా <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ప్రొఫైల్"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"మీ పరిచయాలను Googleకు బ్యాకప్ చేసే ఖాతాను జోడించడానికి ఒక నిమిషం కేటాయించండి."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"కొత్త పరిచయాలు <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>కి సేవ్ చేయబడతాయి."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"కొత్త పరిచయాల కోసం డిఫాల్ట్ ఖాతాను ఎంచుకోండి:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"కొత్త పరి. సృష్టించు"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"సవరించండి"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"వీక్షణ మాత్రమే"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"సవరించాల్సిన పరిచయాన్ని ఎంచుకోండి"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"లింక్ చేసిన పరిచయాలు"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"జోడించు"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"అన్‌లింక్ చేయి"</string>
+ <string name="add_account" msgid="8201790677994503186">"ఖాతాను జోడించు"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"కొత్త ఖాతాను జోడించు"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"డేటాబేస్ ఫైల్‌లను ఎగుమతి చేయి"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"కొత్త పరిచయాన్ని సృష్టిస్తుంది"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"మరిన్ని చూడండి"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"తక్కువ చూడండి"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"ఇటీవలివి"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"పరిచయం"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"వ్యక్తిగత కాపీని సృష్టిస్తోంది..."</string>
+ <string name="tomorrow" msgid="6241969467795308581">"రేపు"</string>
+ <string name="today" msgid="8041090779381781781">"ఈ రోజు"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"ఈ రోజు <xliff:g id="TIME_INTERVAL">%s</xliff:g>కి"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"రేపు <xliff:g id="TIME_INTERVAL">%s</xliff:g>కి"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(శీర్షిక లేని ఈవెంట్)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"సెట్ చేయి"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"సంస్థ"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"మారుపేరు"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"గమనిక"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"వెబ్‌సైట్"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ఈవెంట్"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"సంబంధం"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"పేరు"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ఇమెయిల్"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"ఫోన్"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"స్థానానికి వెళ్లడానికి దిశలు"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"ఇటీవలి sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. ప్రతిస్పందించడానికి క్లిక్ చేయండి"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ఇన్‌కమింగ్"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"అవుట్‌గోయింగ్"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"మిస్డ్"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ఇటీవలి కాల్. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. తిరిగి కాల్ చేయడానికి క్లిక్ చేయండి"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"మీరు: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"మరిన్ని ఫీల్డ్‌లు"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"పరిచయ ఫోటోను మారుస్తుంది"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"పరిచయ ఫోటోను జోడిస్తుంది"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"పరిచయ ఫోటో"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ఎడిటర్‌ను తెరవడం విఫలమైంది."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"దీనికి సేవ్ చేయబడుతోంది"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>లోని సంప్రదింపు సమాచారం సవరించగలిగే విధంగా లేదు"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"పరిచయాలను లింక్ చేయి"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"రద్దు చేయి"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ఈ పరిచయం"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"సంభావ్య నకిలీలు"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"ఈ పరిచయాలు ఒకే వ్యక్తికి సంబంధించినవి అయ్యి ఉండవచ్చు. మీరు వాటిని ఒకే పరిచయంగా లింక్ చేయవచ్చు."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ని తొలగిస్తుంది"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ని తొలగిస్తుంది"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"సూచనలు"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"కొత్తది"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"నావిగేషన్ డ్రాయర్‌ను తెరుస్తుంది"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"నావిగేషన్ డ్రాయర్‌ను మూసివేస్తుంది"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> లేబుల్"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"లేబుల్‌లు"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"ఖాతాలు"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"మీ చరిత్ర అంతా కలిపి చూడండి"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ఈవెంట్‌లు మరియు సందేశాలు"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ఈవెంట్‌లు"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"సందేశాలు"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"సూచనలు"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"మీ పరిచయాలను ఉత్తమంగా నిర్వహించండి మరియు ఉపయోగించండి"</string>
+ <string name="undo" msgid="1425165101664071422">"చర్య రద్దు చేయి"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>కి కాల్ చేయి"</string>
+ <string name="call_home" msgid="1990519474420545392">"ఇంటికి కాల్ చేయండి"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"మొబైల్‌కు కాల్ చేయండి"</string>
+ <string name="call_work" msgid="5328785911463744028">"కార్యాలయానికి కాల్ చేయండి"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"కార్యాలయ ఫ్యాక్స్‌కు కాల్ చేయండి"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"ఇంటి ఫ్యాక్స్‌కు కాల్ చేయండి"</string>
+ <string name="call_pager" msgid="9003902812293983281">"పేజర్‌కు కాల్ చేయండి"</string>
+ <string name="call_other" msgid="8563753966926932052">"కాల్ చేయండి"</string>
+ <string name="call_callback" msgid="1910165691349426858">"కాల్‌బ్యాక్‌కు కాల్ చేయండి"</string>
+ <string name="call_car" msgid="3280537320306436445">"కారుకు కాల్ చేయండి"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"కంపెనీ ప్రధాన నంబర్‌కు కాల్ చేయండి"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDNకి కాల్ చేయండి"</string>
+ <string name="call_main" msgid="6082900571803441339">"ప్రధాన నంబర్‌కు కాల్ చేయండి"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"ఫ్యాక్స్‌కి కాల్ చేయండి"</string>
+ <string name="call_radio" msgid="8296755876398357063">"రేడియోకు కాల్ చేయండి"</string>
+ <string name="call_telex" msgid="2223170774548648114">"టెలెక్స్‌కు కాల్ చేయండి"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"TTY/TDDకి కాల్ చేయండి"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"కార్యాలయ మొబైల్‌కు కాల్ చేయండి"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"కార్యాలయ పేజర్‌కు కాల్ చేయండి"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>కి కాల్ చేయి"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMSకు కాల్ చేయండి"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (కాల్ చేయి)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>కి వచనం పంపు"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ఇంటికి వచనం పంపండి"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"మొబైల్‌కు వచనం పంపండి"</string>
+ <string name="sms_work" msgid="2269624156655267740">"కార్యాలయానికి వచనం పంపండి"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"కార్యాలయం ఫ్యాక్స్‌కు వచనం పంపండి"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ఇంటి ఫ్యాక్స్‌కు వచనం పంపండి"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"పేజర్‌కు వచనం పంపండి"</string>
+ <string name="sms_other" msgid="806127844607642331">"వచనం పంపండి"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"కాల్‌బ్యాక్‌కు వచనం పంపండి"</string>
+ <string name="sms_car" msgid="7444227058437359641">"కారుకు వచనం పంపండి"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"కంపెనీ ప్రధాన నంబర్‌కు వచనం పంపండి"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ISDNకి వచనం పంపండి"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ప్రధాన నంబర్‌కు వచనం పంపండి"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ఫ్యాక్స్‌కు వచనం పంపండి"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"రేడియోకు వచనం పంపండి"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"టెలెక్స్‌కు వచనం పంపండి"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"TTY/TDDకి వచనం పంపండి"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"కార్యాలయ మొబైల్‌కు వచనం పంపండి"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"కార్యాలయ పేజర్‌కు వచనం పంపండి"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g>కు వచనం పంపండి"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS నంబర్‌కు వచనం పంపండి"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (సందేశం)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"వీడియో కాల్ చేస్తుంది"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"తరచుగా సంప్రదించినవాటిని క్లియర్ చేయాలా?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"మీరు పరిచయాలు మరియు ఫోన్ అనువర్తనాల్లో తరచుగా సంప్రదించిన పరిచయాల జాబితాను తీసివేస్తారు మరియు స్క్రాచ్ నుండి మీ చిరునామా ప్రాధాన్యతలను తెలుసుకునేలా ఇమెయిల్ అనువర్తనాలను నిర్బంధిస్తారు."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"తరచుగా సంప్రదించినవాటిని క్లియర్ చేస్తోంది…"</string>
+ <string name="status_available" msgid="5586870015822828392">"అందుబాటులో ఉన్నారు"</string>
+ <string name="status_away" msgid="1838861100379804730">"దూరంగా ఉన్నారు"</string>
+ <string name="status_busy" msgid="9147992455450257136">"బిజీగా ఉన్నారు"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"ఇతరం"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"డైరెక్టరీ"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"కార్యాలయ డైరెక్టరీ"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"అన్ని పరిచయాలు"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> కోసం త్వరిత సంప్రదింపు"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(పేరు లేదు)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"తరచుగా సంప్రదించబడినవి"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"ఫోన్ నంబర్‌లు గల అన్ని పరిచయాలు"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"కార్యాలయ ప్రొఫైల్ పరిచయాలు"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"తాజా విషయాలను వీక్షించండి"</string>
+ <string name="account_phone" msgid="7128032778471187553">"పరికరం"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"పేరు"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"మారుపేరు"</string>
+ <string name="name_given" msgid="4280790853455320619">"మొదటి పేరు"</string>
+ <string name="name_family" msgid="7466985689626017037">"చివరి పేరు"</string>
+ <string name="name_prefix" msgid="59756378548779822">"పేరు ఆదిప్రత్యయం"</string>
+ <string name="name_middle" msgid="8467433655992690326">"మధ్య పేరు"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"పేరు అంత్యప్రత్యయం"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ఫోనెటిక్ రూపంలో పేరు"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"ఫొనెటిక్ మొదటి పేరు"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ఫోనెటిక్ మధ్య పేరు"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"ఫొనెటిక్ చివరి పేరు"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"ఫోన్"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ఇమెయిల్"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"చిరునామా"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"సంస్థ"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"సంబంధం"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"ప్రత్యేక తేదీ"</string>
+ <string name="sms" msgid="1756857139634224222">"వచన సందేశం"</string>
+ <string name="postal_address" msgid="8765560217149624536">"చిరునామా"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"కంపెనీ"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"శీర్షిక"</string>
+ <string name="label_notes" msgid="8337354953278341042">"గమనికలు"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"అనుకూలం"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"వెబ్‌సైట్"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"లేబుల్‌లు"</string>
+ <string name="email_home" msgid="8573740658148184279">"ఇంటికి ఇమెయిల్ చేయండి"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"మొబైల్‌కు ఇమెయిల్ చేయండి"</string>
+ <string name="email_work" msgid="2807430017302722689">"కార్యాలయానికి ఇమెయిల్ చేయండి"</string>
+ <string name="email_other" msgid="3454004077967657109">"ఇమెయిల్ చేయండి"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>కి ఇమెయిల్ పంపు"</string>
+ <string name="email" msgid="5668400997660065897">"ఇమెయిల్ చేయండి"</string>
+ <string name="postal_street" msgid="8133143961580058972">"వీధి"</string>
+ <string name="postal_city" msgid="6597491300084895548">"నగరం"</string>
+ <string name="postal_region" msgid="6045263193478437672">"రాష్ట్రం"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"జిప్ కోడ్"</string>
+ <string name="postal_country" msgid="7638264508416368690">"దేశం"</string>
+ <string name="map_home" msgid="1243547733423343982">"ఇంటి చిరునామాను వీక్షించండి"</string>
+ <string name="map_work" msgid="1360474076921878088">"కార్యాలయ చిరునామాను వీక్షించండి"</string>
+ <string name="map_other" msgid="3817820803587012641">"చిరునామాను వీక్షించండి"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> చిరునామాను వీక్షించండి"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIMని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Liveని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahooని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skypeని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talkని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabberని ఉపయోగించి చాట్ చేయండి"</string>
+ <string name="chat" msgid="9025361898797412245">"చాట్ చేయండి"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"తొలగించు"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"మరిన్ని పేరు ఫీల్డ్‌లను చూపుతుంది"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"పేరు ఫీల్డ్‌లను కుదిస్తుంది"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"మరిన్ని ఉచ్ఛారణ ఆధారిత పేరు ఫీల్డ్‌లను చూపుతుంది"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ఫొనెటిక్ పేరు ఫీల్డ్‌లను కుదిస్తుంది"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"విస్తరింపజేస్తుంది"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"కుదిస్తుంది"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"విస్తరింపజేయబడింది"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"కుదించబడింది"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"అన్ని పరిచయాలు"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"నక్షత్రం గుర్తు ఉన్నవి"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"అనుకూలీకరించు"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"పరిచయం"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"అన్ని ఇతర పరిచయాలు"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"అన్ని పరిచయాలు"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"సమకాలీకరణ సమూహాన్ని తీసివేయి"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"సమకాలీకరణ సమూహాన్ని జోడించండి"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"మరిన్ని సమూహాలు…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"సమకాలీకరణ నుండి \"<xliff:g id="GROUP">%s</xliff:g>\"ని తీసివేయడం వలన సమకాలీకరణ నుండి సమూహం చేయబడని పరిచయాలు కూడా తీసివేయబడతాయి."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ప్రదర్శన ఎంపికలను సేవ్ చేస్తోంది…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"అనుకూలీకృత వీక్షణ"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"దిగుమతి చేసిన పరిచయాలను దీనిలో సేవ్ చేయి:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM కార్డ్"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d పరిచయాలు</item>
+ <item quantity="one">1 పరిచయం</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> పరిచయాలు • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> పరిచయం • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf ఫైల్"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"దిగుమతి చేయడానికి ఏవీ లేవు"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard నుండి పరిచయాలను దిగుమతి చేయాలా?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> యొక్క దిగుమతిని రద్దు చేయాలా?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> యొక్క ఎగుమతిని రద్దు చేయాలా?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard దిగుమతి/ఎగుమతిని రద్దు చేయడం సాధ్యపడలేదు"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"తెలియని లోపం."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"ని తెరవడం సాధ్యపడలేదు: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ఎక్స్‌పోర్టర్‌ను ప్రారంభించడం సాధ్యపడలేదు: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ఎగమతి చేయగల పరిచయం లేదు."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"మీరు అవసరమైన అనుమతిని నిలిపివేసారు."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ఎగుమతి సమయంలో లోపం సంభవించింది: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O లోపం"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"తగినంత మెమరీ లేదు. ఫైల్ చాలా పెద్దదిగా ఉండవచ్చు."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ఆకృతికి మద్దతు లేదు."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>ని ఎగుమతి చేయడం పూర్తయింది."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"పరిచయాలను ఎగుమతి చేయడం పూర్తయింది."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"పరిచయాలను ఎగుమతి చేయడం పూర్తయింది, పరిచయాలను భాగస్వామ్యం చేయడానికి నోటిఫికేషన్‌ను క్లిక్ చేయండి."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"పరిచయాలను భాగస్వామ్యం చేయడానికి నొక్కండి."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g>ని ఎగుమతి చేయడం రద్దు చేయబడింది."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"పరిచయ డేటాను ఎగుమతి చేస్తోంది"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"పరిచయ డేటా ఎగుమతి చేయబడుతోంది."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"డేటాబేస్ సమాచారాన్ని పొందడం సాధ్యపడలేదు."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ఎగుమతి చేయదగిన పరిచయాలు ఏవీ లేవు."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard కంపోజర్ సరిగ్గా ప్రారంభించబడలేదు."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ఎగుమతి చేయడం సాధ్యపడలేదు"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"పరిచయ డేటా ఎగుమతి చేయబడలేదు.\nకారణం: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>ని దిగుమతి చేస్తోంది"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard డేటాను చదవడం సాధ్యపడలేదు"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g>ని దిగుమతి చేయడం పూర్తయింది"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>ని దిగుమతి చేయడం రద్దు చేయబడింది"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> కొద్దిసేపట్లో దిగుమతి చేయబడుతుంది."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ఫైల్ కొద్దిసేపట్లో దిగుమతి చేయబడుతుంది."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard దిగుమతి అభ్యర్థన తిరస్కరించబడింది. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"పరిచయాలు కొద్ది సేపట్లో ఎగుమతి చేయబడతాయి."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ఎగుమతి అభ్యర్థన తిరస్కరించబడింది. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"పరిచయం"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(ల)ను స్థానిక తాత్కాలిక నిల్వకు కాష్ చేస్తోంది. అసలు దిగుమతి కొద్దిసేపట్లో ప్రారంభమవుతుంది."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCardని దిగుమతి చేయడం సాధ్యపడలేదు."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"పరిచయం NFC ద్వారా స్వీకరించబడింది"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"కాష్ చేస్తోంది"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>లో <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> దిగుమతి చేయబడుతోంది: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf ఫైల్‌కు ఎగుమతి చేయి"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ఇలా క్రమబద్ధీకరించు"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"ఫొనెటిక్ పేరు"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ఎల్లప్పుడూ చూపు"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ఖాళీగా ఉంటే దాచు"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"మొదటి పేరు"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"చివరి పేరు"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"పేరు ఆకృతి"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ముందుగా మొదటి పేరు"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"ముందుగా చివరి పేరు"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"ఖాతాలు"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"కొత్త పరిచయాల కోసం డిఫాల్ట్ ఖాతా"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"నా సమాచారం"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"మీ ప్రొఫైల్‌ను సెటప్ చేయండి"</string>
+ <string name="setting_about" msgid="7014388749752042863">"పరిచయాల గురించి"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"ఇష్టమైన పరిచయాలను భాగస్వామ్యం చేయి"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"పరిచయాలన్నీ భాగస్వామ్యం చేయి"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"పరిచయాలను భాగస్వామ్యం చేయడంలో విఫలమైంది."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"పరిచయాలను ఎగుమతి చేయండి"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"దీనిలో నుండి పరిచయాలను దిగుమతి చేయండి"</string>
+ <string name="share_error" msgid="948429331673358107">"ఈ పరిచయాన్ని భాగస్వామ్యం చేయడం సాధ్యపడదు."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"భాగస్వామ్యం చేయడానికి పరిచయాలు ఏవీ లేవు."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ప్రదర్శించాల్సిన పరిచయాలు"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ప్రదర్శించాల్సిన పరిచయాలు"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"అనుకూలీకరించిన వీక్షణ"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"సేవ్ చేయి"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"పరిచయాలను శోధించండి"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ఇష్టమైనవి"</string>
+ <string name="menu_import" msgid="6107961135813836467">"దిగుమతి చేయి"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ఎగుమతి చేయి"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"బ్లాక్ చేయబడిన నంబర్‌లు"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> ద్వారా"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ద్వారా <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"శోధించడం ఆపివేస్తుంది"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"శోధనను క్లియర్ చేయి"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"ఖాతా"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"కాల్‌ల కోసం ఎప్పుడూ ఇది ఉపయోగించు"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"గమనికతో కాల్ చేయి"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"కాల్‌తో పాటు పంపడానికి గమనికను టైప్ చేయండి…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"పంపు &amp; కాల్ చేయి"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"బిల్డ్ సంస్కరణ"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ఓపెన్ సోర్స్ సాఫ్ట్‌వేర్ యొక్క లైసెన్స్ వివరాలు"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"గోప్యతా విధానం"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"సేవా నిబంధనలు"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"urlని తెరవడంలో విఫలమైంది."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ఎంచుకోబడింది"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> ఎంచుకోబడలేదు"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"వీడియో కాల్ చేస్తుంది"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"తొలగిస్తుంది"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"అధ్యాహారం"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> నిమి <xliff:g id="SECONDS">%2$s</xliff:g> సెక"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> గం <xliff:g id="MINUTES_1">%2$s</xliff:g> నిమి <xliff:g id="SECONDS">%3$s</xliff:g> సెక"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ఈ సత్వరమార్గం నిలిపివేయబడింది"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"పరిచయం తీసివేయబడింది"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"దిగుమతి చేయి"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"పరిచయాలను ఎంచుకోండి"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"మీ SIM కార్డ్‌లో పరిచయాలు ఏవీ లేవు"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"పరిచయం మీ జాబితాలో ఇప్పటికే ఉంది"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM పరిచయాలు దిగుమతి చేయబడ్డాయి</item>
+ <item quantity="one">1 SIM పరిచయం దిగుమతి చేయబడింది</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM పరిచయాలను దిగుమతి చేయడంలో విఫలమైంది"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM నుండి దిగుమతి చేసుకోండి"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"రద్దు చేస్తుంది"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"స్వీయ-సమకాలీకరణ ఆఫ్‌లో ఉంది. ఆన్ చేయడానికి నొక్కండి."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"తీసివేస్తుంది"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ఖాతా సమకాలీకరణ ఆఫ్‌లో ఉంది. ఆన్ చేయడానికి నొక్కండి."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"స్వీయ సమకాలీకరణను ఆన్ చేయాలా?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"మీరు కేవలం పరిచయాలకు చేసే మార్పులే కాకుండా అన్ని అనువర్తనాలు మరియు ఖాతాలకు చేసే మార్పులు వెబ్ మరియు మీ పరికరాల మధ్య ఎప్పటికప్పుడు నవీకృతంగా ఉంచబడతాయి."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"ఆన్ చేయండి"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"కనెక్షన్ లేదు"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"మరిన్ని చూపుతుంది"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM కార్డ్ దిగుమతి ముగిసింది"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"దిగుమతి విఫలమైంది"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM కార్డ్ నుండి పరిచయాలను దిగుమతి చేయలేకపోయింది"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIMను దిగుమతి చేస్తోంది"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"నోటిఫికేషన్‌లు"</string>
+</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 8235c1a33..16671a3a1 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"รายชื่อติดต่อ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"รายชื่อติดต่อ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"ดูรายชื่อติดต่อ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"แก้ไขรายชื่อติดต่อ"</string>
- <string name="contactsList" msgid="8661624236494819731">"รายชื่อในสมุดโทรศัพท์"</string>
+ <string name="contactsList" msgid="8661624236494819731">"รายชื่อติดต่อ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"เพิ่มรายชื่อติดต่อ"</string>
<string name="shortcutContact" msgid="749243779392912958">"สมุดโทรศัพท์"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"สายตรง"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"ข้อความส่วนตัว"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"เลือกทางลัดของสมุดโทรศัพท์"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"เลือกหมายเลขที่จะโทร"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"เลือกหมายเลขที่จะส่งข้อความ"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"เลือกรายชื่อติดต่อ"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"เพิ่มลงในรายชื่อติดต่อ"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"เลือกรายชื่อติดต่อ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"เลือก"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"สร้างรายชื่อติดต่อใหม่"</string>
- <string name="starredList" msgid="4817256136413959463">"ที่ติดดาว"</string>
- <string name="frequentList" msgid="7154768136473953056">"บ่อยครั้ง"</string>
- <string name="strequentList" msgid="5640192862059373511">"รายการโปรด"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"รายละเอียดของรายชื่อ"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"แก้ไขรายชื่อติดต่อ"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"สร้างรายชื่อ"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"แก้ไขกลุ่ม"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"สร้างกลุ่ม"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"เกี่ยวกับ"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"อัปเดต"</string>
<string name="searchHint" msgid="8482945356247760701">"ค้นหารายชื่อติดต่อ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"ดูสมุดโทรศัพท์"</string>
<string name="menu_addStar" msgid="2908478235715404876">"เพิ่มในรายการโปรด"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"ลบจากรายการโปรด"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"นำออกจากรายการโปรดแล้ว"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"แก้ไข"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"ลบ"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"เปลี่ยนรูปภาพ"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"วางบนหน้าจอหลัก"</string>
- <string name="menu_call" msgid="3992595586042260618">"โทรหารายชื่อในสมุดโทรศัพท์"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"ส่งข้อความถึงรายชื่อในสมุดโทรศัพท์"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"สร้างทางลัด"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"ยกเลิกการลิงก์"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"แก้ไข"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"ลบ"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"เพิ่มรายชื่อผู้ติดต่อ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"เพิ่มกลุ่ม"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"นำรายชื่อติดต่อออก"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"เปลี่ยนชื่อป้ายกำกับ"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"ลบป้ายกำกับ"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"เพิ่มผู้ติดต่อ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"เลือกรายชื่อติดต่อ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"เพิ่มรายชื่อติดต่อ"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"นำออกจากป้ายกำกับ"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"สร้างป้ายกำกับ"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"ยกเลิกการลิงก์รายชื่อติดต่อนี้กับรายชื่อติดต่อหลายรายการไหม"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ยกเลิกการลิงก์"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"คุณต้องการบันทึกการเปลี่ยนแปลงที่ได้ทำไปแล้วและยกเลิกการลิงก์รายชื่อติดต่อนี้กับรายชื่อติดต่อหลายรายการไหม"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"บันทึกและยกเลิกการลิงก์"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"คุณต้องการบันทึกการเปลี่ยนแปลงที่ได้ทำไปแล้วและลิงก์กับรายชื่อติดต่อที่เลือกไว้ไหม"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"บันทึกและลิงก์"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"กำลังลิงก์"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"กำลังยกเลิกการลิงก์"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"ลิงก์"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"ดูรายชื่อติดต่อที่ลิงก์"</string>
<string name="menu_save" msgid="1727844363591825909">"บันทึก"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"ลิงก์รายชื่อติดต่อ"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"เลือกรายชื่อติดต่อที่คุณต้องการลิงก์กับ <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"แสดงรายชื่อติดต่อทั้งหมด"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"รายชื่อที่แนะนำ"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"รายชื่อติดต่อทั้งหมด"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"ลิงก์ <xliff:g id="NAME">%s</xliff:g> แล้ว"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"ลิงก์รายชื่อติดต่อแล้ว"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"ลบ <xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"ลบ <xliff:g id="NAME_0">%1$s</xliff:g> และ <xliff:g id="NAME_1">%2$s</xliff:g> แล้ว"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"ลบ <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… แล้ว"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">รายชื่อติดต่อที่ลบแล้ว</item>
<item quantity="one">รายชื่อติดต่อที่ลบแล้ว</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other">รายชื่อติดต่อ <xliff:g id="COUNT_1">%d</xliff:g> ราย</item>
+ <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%d</xliff:g> ราย</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other">รายชื่อติดต่อ <xliff:g id="COUNT_2">%1$d</xliff:g> ราย · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%1$d</xliff:g> ราย · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"จาก Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"จาก <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"ตั้งเสียงเรียกเข้า"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"โอนทุกสายไปยังข้อความเสียง"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"ไม่สามารถลบรายชื่อติดต่อจากบัญชีอ่านอย่างเดียว แต่สามารถซ่อนรายชื่อติดต่อได้"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"ซ่อน"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"รายชื่อติดต่อที่จะลบมีรายละเอียดจากหลายบัญชี ระบบจะซ่อนรายละเอียดจากบัญชีอ่านอย่างเดียว แต่ไม่ได้ลบรายละเอียด"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"คุณต้องเลือกรายชื่อติดต่ออย่างน้อย 2 รายการเพื่อทำการลิงก์"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"ลิงก์รายชื่อติดต่อที่เลือกไว้ไหม"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"ลิงก์"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"โอนสายไปยังข้อความเสียง"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"ยกเลิกการโอนสายไปยังข้อความเสียง"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"รายชื่อติดต่อนี้สำหรับอ่านอย่างเดียว ไม่สามารถลบออกได้ แต่คุณสามารถซ่อนได้"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"ซ่อนรายชื่อติดต่อ"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"บัญชีที่อ่านอย่างเดียวในรายชื่อติดต่อนี้จะถูกซ่อน ไม่ถูกลบออก"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"ลบรายชื่อติดต่อนี้ไหม"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"ลบรายชื่อติดต่อที่เลือกไว้ไหม"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"ไม่สามารถลบรายชื่อติดต่อจากบัญชีอ่านอย่างเดียว แต่สามารถซ่อนรายชื่อติดต่อได้"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"การลบรายชื่อติดต่อนี้จะลบรายละเอียดจากหลายบัญชี"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"ลบรายชื่อติดต่อนี้ไหม"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ลบ"</string>
- <string name="menu_discard" msgid="6854657936970228164">"ยกเลิกการเปลี่ยนแปลง"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"ไม่มีรายชื่อติดต่อนี้"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"เพิ่มรายชื่อติดต่อลงในหน้าจอหลักแล้ว"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"เพิ่ม <xliff:g id="NAME">%s</xliff:g> ลงในหน้าจอหลักแล้ว"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"สร้างรายชื่อในสมุดโทรศัพท์ใหม่"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"สร้างรายชื่อติดต่อใหม่"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"องค์กร"</item>
- <item msgid="7196592230748086755">"หมายเหตุ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ไม่มีรูปภาพให้ใช้งานบนแท็บเล็ต"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"ไม่มีรูปให้ใช้งานบนโทรศัพท์"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"ไม่มีรูปภาพให้ใช้งานบนอุปกรณ์"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"ภาพของรายชื่อติดต่อ"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"ชื่อป้ายที่กำหนดเอง"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"ส่งการโทรไปยังข้อความเสียงโดยตรง"</string>
<string name="removePhoto" msgid="4898105274130284565">"นำภาพออก"</string>
- <string name="noContacts" msgid="4955659076981974652">"ไม่มีรายชื่อติดต่อ"</string>
- <string name="noGroups" msgid="8614664663561385253">"ไม่มีกลุ่ม"</string>
- <string name="noAccounts" msgid="7768267764545265909">"คุณจำเป็นต้องมีบัญชีเพื่อสร้างกลุ่ม"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"ไม่มีสมาชิกในกลุ่มนี้"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"หากต้องการเพิ่มสมาชิก ให้แก้ไขกลุ่ม"</string>
- <string name="savingContact" msgid="4075751076741924939">"กำลังบันทึกรายชื่อ…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"รายชื่อติดต่อของคุณว่างเปล่า"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"ไม่มีรายชื่อติดต่อที่มีป้ายกำกับนี้"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"ไม่มีรายชื่อติดต่อในบัญชีนี้"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"รายชื่อติดต่อของคุณว่างเปล่า"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"บันทึก <xliff:g id="DISPLAY_NAME">%s</xliff:g> แล้ว"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"บันทึกรายชื่อติดต่อแล้ว"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"ยกเลิกการลิงก์รายชื่อติดต่อแล้ว"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"ไม่สามารถบันทึกการเปลี่ยนแปลงรายชื่อติดต่อ"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"ไม่สามารถยกเลิกการลิงก์รายชื่อติดต่อ"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"ไม่สามารถลิงก์รายชื่อติดต่อ"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"เกิดข้อผิดพลาดในการบันทึกรายชื่อติดต่อ"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"ไม่สามารถบันทึกการเปลี่ยนแปลงในรูปภาพรายชื่อติดต่อ"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"บันทึกกลุ่มแล้ว"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"ไม่สามารถบันทึกการเปลี่ยนแปลงในกลุ่ม"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> รายชื่อติดต่อมีหมายเลขโทรศัพท์</item>
- <item quantity="one">1 รายชื่อติดต่อมีหมายเลขโทรศัพท์</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"ไม่มีรายชื่อติดต่อที่มีหมายเลขโทรศัพท์"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">พบ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
- <item quantity="one">พบ 1 รายการ</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"ไม่สามารถบันทึกการเปลี่ยนแปลงรายชื่อติดต่อ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"ไม่สามารถยกเลิกการลิงก์รายชื่อติดต่อ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"ไม่สามารถลิงก์รายชื่อติดต่อ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"เกิดข้อผิดพลาดในการบันทึกรายชื่อติดต่อ"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ไม่สามารถบันทึกการเปลี่ยนแปลงในรูปภาพรายชื่อติดต่อ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"โหลดป้ายกำกับไม่สำเร็จ"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"ลบป้ายกำกับออกแล้ว"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"สร้างป้ายกำกับแล้ว"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"ไม่สามารถสร้างป้ายกำกับ"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"อัปเดตป้ายกำกับแล้ว"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"นำออกจากป้ายกำกับแล้ว"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"เพิ่มรายชื่อติดต่อไปยังป้ายกำกับแล้ว"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"ไม่สามารถบันทึกการเปลี่ยนแปลงป้ายกำกับได้"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"ป้ายกำกับนี้มีอยู่แล้ว"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"รายชื่อติดต่อบางรายการไม่มีอีเมล"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"รายชื่อติดต่อบางรายการไม่มีหมายเลขโทรศัพท์"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ส่งอีเมล"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"ส่งข้อความ"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"เลือกรายชื่อติดต่อ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"ส่ง"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"ไม่มีรายชื่อติดต่อ"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">พบ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
- <item quantity="one">พบ 1 รายการ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"ทั้งหมด"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"รายการโปรด"</string>
- <string name="callBack" msgid="5498224409038809224">"ติดต่อกลับ"</string>
- <string name="callAgain" msgid="3197312117049874778">"โทรอีกครั้ง"</string>
- <string name="returnCall" msgid="8171961914203617813">"โทรกลับ"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"เพิ่ม \"<xliff:g id="EMAIL">%s</xliff:g>\" ในสมุดโทรศัพท์หรือไม่"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"ภาพของรายชื่อ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"รายชื่อในสมุดโทรศัพท์ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> จาก <xliff:g id="TOTAL_NUMBER">%s</xliff:g> รายการ"</string>
<string name="search_settings_description" msgid="2675223022992445813">"ชื่อของรายชื่อในสมุดโทรศัพท์ของคุณ"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"ไม่พบแอปพลิเคชันสำหรับการทำงานนี้"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"คลิกเพื่อกลับไปยังหน้าจอก่อนหน้า"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"เพิ่มหมายเลขโทรศัพท์"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"เพิ่มอีเมล"</string>
<string name="missing_app" msgid="1466111003546611387">"ไม่พบแอปสำหรับการทำงานนี้"</string>
- <string name="menu_share" msgid="943789700636542260">"ใช้ร่วมกัน"</string>
+ <string name="menu_share" msgid="943789700636542260">"แชร์"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"เพิ่มในสมุดติดต่อ"</string>
- <string name="share_via" msgid="563121028023030093">"ใช้สมุดโทรศัพท์ร่วมกันทาง"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"สร้างกลุ่มภายในบัญชี"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"เพิ่ม"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">แชร์ผู้ติดต่อผ่านทาง</item>
+ <item quantity="one">แชร์ผู้ติดต่อผ่านทาง</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"เลือกบัญชี"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"สร้างป้ายกำกับ"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"เปลี่ยนชื่อป้ายกำกับ"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"ชื่อป้ายกำกับ"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"ชื่อป้ายกำกับ"</string>
<string name="audio_chat" msgid="2535716629358298691">"แชทด้วยเสียง"</string>
<string name="video_chat" msgid="1872255818640336072">"วิดีโอแชท"</string>
- <string name="connections" msgid="8098440723172028350">"การเชื่อมต่อ"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"เพิ่มการเชื่อมต่อ"</string>
- <string name="recent" msgid="2659189233141493004">"ล่าสุด"</string>
- <string name="recent_updates" msgid="4267258535615860710">"การอัปเดตล่าสุด"</string>
<string name="account_type_format" msgid="718948015590343010">"รายชื่อในสมุดโทรศัพท์จาก <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"บัญชี <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"ไม่สามารถแก้ไขได้จากแอปพลิเคชันนี้"</string>
- <string name="group_read_only" msgid="1061762906115697637">"ไม่สามารถแก้ไขได้ในอุปกรณ์นี้"</string>
<string name="take_photo" msgid="7496128293167402354">"ถ่ายภาพ"</string>
<string name="take_new_photo" msgid="7341354729436576304">"ถ่ายภาพใหม่"</string>
<string name="pick_photo" msgid="2129509985223564942">"เลือกรูปภาพ"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"เลือกรูปภาพใหม่"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"กำลังอัปเดตรายการรายชื่อติดต่อ"</string>
<string name="search_results_searching" msgid="3984833028938569930">"กำลังค้นหา..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"แสดงรายการที่เลือก"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"แสดงทั้งหมด"</string>
- <string name="menu_select_all" msgid="621719255150713545">"เลือกทั้งหมด"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"ยกเลิกการเลือกทั้งหมด"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"เพิ่มใหม่"</string>
- <string name="add_organization" msgid="7311893231158291197">"เพิ่มองค์กร"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"วันที่"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"ชื่อกลุ่ม"</string>
- <string name="change_photo" msgid="8530597935483526383">"เปลี่ยน"</string>
- <string name="primary_photo" msgid="8517942231868516999">"รูปภาพหลัก"</string>
- <string name="description_star" msgid="2605854427360036550">"รายการโปรด"</string>
- <string name="edit_contact" msgid="7529281274005689512">"แก้ไขรายชื่อติดต่อ"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ลิงก์รายชื่อติดต่อปัจจุบันกับรายชื่อติดต่อที่เลือกใช่ไหม"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"ป้ายกำกับ"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"ยกเลิก"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"กลับ"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ปิด"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"เปลี่ยนไปแก้ไขรายชื่อติดต่อที่เลือกหรือไม่ ข้อมูลที่คุณป้อนไว้จนถึงขณะนี้จะถูกคัดลอก"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"คัดลอกไปยังสมุดโทรศัพท์ของฉัน"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"เพิ่มในสมุดโทรศัพท์ของฉัน"</string>
<string name="contact_directory_description" msgid="683398073603909119">"ไดเรกทอรี <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"กำหนดเอง"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"การตั้งค่า"</string>
<string name="menu_settings" msgid="377929915873428211">"การตั้งค่า"</string>
<string name="menu_help" msgid="1680178646764069976">"ความช่วยเหลือและความคิดเห็น"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ตัวเลือกการแสดงผล"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"หมายเลขโทรศัพท์"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"เพิ่มลงในสมุดโทรศัพท์"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"เพิ่มลงในรายชื่อติดต่อ"</string>
<string name="non_phone_close" msgid="7608506439725515667">"ปิด"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"รวมปี"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"รายชื่อติดต่อ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"กำลังโหลด..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"สร้างรายชื่อติดต่อใหม่"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"เพิ่มบัญชี"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"นำเข้าสมุดโทรศัพท์"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"สร้างกลุ่มใหม่"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"สร้างกลุ่มใหม่"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> กลุ่ม</item>
- <item quantity="one">1 กลุ่ม</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"ลบกลุ่ม \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" หรือไม่ (รายชื่อติดต่อจะไม่ถูกลบ)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> คนจาก <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> คน</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> คน</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"นำเข้า"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"สร้างใหม่…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"ลบป้ายกำกับ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" ไหม (รายชื่อติดต่อจะไม่ถูกลบ)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"พิมพ์ชื่อของผู้ติดต่อก่อนลิงก์กับรายชื่อติดต่ออื่น"</string>
<string name="copy_text" msgid="3257145021583508761">"คัดลอกไปยังคลิปบอร์ด"</string>
<string name="set_default" msgid="4417505153468300351">"ตั้งเป็นค่าเริ่มต้น"</string>
<string name="clear_default" msgid="7193185801596678067">"ล้างจากค่าเริ่มต้น"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"คัดลอกข้อความแล้ว"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"ยกเลิกการเปลี่ยนแปลงและออกจากการแก้ไขใช่ไหม"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"ยกเลิกการเปลี่ยนแปลงหรือไม่"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ทิ้ง"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"แก้ไขต่อ"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"ตั้งค่าโปรไฟล์ของฉัน"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"พิมพ์ชื่อของบุคคล"</string>
- <string name="group_name_hint" msgid="238359485263401293">"ชื่อกลุ่ม"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ยกเลิก"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ยกเลิกการปรับแต่งหรือไม่"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"ค้นหารายชื่อติดต่อ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"นำรายชื่อติดต่อออก"</string>
<string name="local_profile_title" msgid="2021416826991393684">"โปรไฟล์ในอุปกรณ์ของฉัน"</string>
<string name="external_profile_title" msgid="8034998767621359438">"โปรไฟล์ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ของฉัน"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"แสดงรายชื่อติดต่อทั้งหมด"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"เก็บรายชื่อติดต่อของคุณไว้อย่างปลอดภัยด้วยการซิงค์กับบริการออนไลน์แม้ว่าคุณจะทำโทรศัพท์หาย"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"เพิ่มบัญชี"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"รายชื่อติดต่อใหม่ของคุณจะไม่ได้รับการสำรองข้อมูล เพิ่มบัญชีที่สำรองข้อมูลรายชื่อติดต่อออนไลน์ไหม"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"เพิ่มบัญชีที่จะใช้สำรองข้อมูลรายชื่อติดต่อไปยัง Google"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"รายชื่อติดต่อใหม่จะบันทึกไว้ใน <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"เลือกบัญชีเริ่มต้นสำหรับรายชื่อติดต่อใหม่:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"เพิ่มรายชื่อติดต่อ"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"สร้างรายชื่อติดต่อใหม่"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"แก้ไขรายชื่อติดต่อ"</string>
- <string name="keep_local" msgid="1258761699192993322">"จัดเก็บในตัวเครื่อง"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"ดูอย่างเดียว"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"เลือกผู้ติดต่อเพื่อแก้ไข"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"รายชื่อติดต่อที่ลิงก์"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"เพิ่ม"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"ยกเลิกการลิงก์"</string>
<string name="add_account" msgid="8201790677994503186">"เพิ่มบัญชี"</string>
<string name="add_new_account" msgid="5748627740680940264">"เพิ่มบัญชีใหม่"</string>
<string name="menu_export_database" msgid="2659719297530170820">"ส่งออกไฟล์ฐานข้อมูล"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"เพิ่มรายชื่อติดต่อใหม่"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"สร้างรายชื่อติดต่อใหม่"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"ดูเพิ่มเติม"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ดูน้อยลง"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"ดูทั้งหมด"</string>
<string name="recent_card_title" msgid="8982782042698001695">"ล่าสุด"</string>
<string name="about_card_title" msgid="2920942314212825637">"เกี่ยวกับ"</string>
- <string name="send_message" msgid="8938418965550543196">"ส่งข้อความ"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"กำลังสร้างสำเนาส่วนตัว..."</string>
- <string name="yesterday" msgid="6840858548955018569">"เมื่อวานนี้"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"กำลังสร้างสำเนาส่วนบุคคล..."</string>
<string name="tomorrow" msgid="6241969467795308581">"พรุ่งนี้"</string>
<string name="today" msgid="8041090779381781781">"วันนี้"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"วันนี้เวลา <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"พรุ่งนี้เวลา <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g> <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(กิจกรรมไม่มีชื่อ)"</string>
<string name="date_time_set" msgid="4761419824439606690">"ตั้งค่า"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"เว็บไซต์"</string>
<string name="header_event_entry" msgid="6738250422744401460">"กิจกรรม"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"ความสัมพันธ์"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"บัญชี"</string>
<string name="header_name_entry" msgid="1592791008096288306">"ชื่อ"</string>
<string name="header_email_entry" msgid="8666093061171624478">"อีเมล"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"โทรศัพท์"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"รูปภาพ"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"คลิกเพื่อขยายตัวแก้ไขรายชื่อติดต่อ"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"คลิกเพื่อยุบตัวแก้ไขรายชื่อติดต่อ"</string>
<string name="content_description_directions" msgid="2686791825798189335">"เส้นทางไปยังสถานที่"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS ล่าสุด <xliff:g id="MESSAGE_BODY">%s</xliff:g> <xliff:g id="PHONE_NUMBER">%s</xliff:g> <xliff:g id="DATE">%s</xliff:g> คลิกเพื่อตอบกลับ"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS ล่าสุด <xliff:g id="MESSAGE_BODY">%1$s</xliff:g> <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g> คลิกเพื่อตอบกลับ"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"สายโทรเข้า"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"สายโทรออก"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ไม่ได้รับ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"โทรล่าสุด <xliff:g id="CALL_TYPE">%s</xliff:g> <xliff:g id="PHONE_NUMBER">%s</xliff:g> <xliff:g id="DATE">%s</xliff:g> คลิกเพื่อโทรกลับ"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"โทรล่าสุด <xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> <xliff:g id="DATE">%3$s</xliff:g> คลิกเพื่อโทรกลับ"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"คุณ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"แฮงเอาท์ทำงานได้ดียิ่งขึ้นเมื่อคุณป้อนตัวระบุแฮงเอาท์ของบุคคลที่ต้องการลงในช่องอีเมลหรือช่องโทรศัพท์"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"ช่องอื่นๆ"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"เปลี่ยนรูปภาพ"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ไม่สามารถเปิดตัวแก้ไข"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"บันทึกลงใน"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"ขณะนี้กำลังบันทึกไปยัง <xliff:g id="ACCOUNT_NAME">%s</xliff:g> แตะ 2 ครั้งเพื่อเลือกบัญชีอื่น"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">รายชื่อติดต่อที่ลิงก์ (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">รายชื่อติดต่อที่ลิงก์</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"รายชื่อติดต่อที่ลิงก์ <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"ช่องอื่นๆ"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"เปลี่ยนรูปภาพรายชื่อติดต่อ"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"เพิ่มรูปภาพรายชื่อติดต่อ"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"รูปภาพรายชื่อติดต่อ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ไม่สามารถเปิดตัวแก้ไข"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"บันทึกลงใน"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ข้อมูลติดต่อจาก <xliff:g id="ACCOUNT">%s</xliff:g> ไม่สามารถแก้ไขได้"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ลิงก์รายชื่อติดต่อ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ยกเลิก"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other">อาจซ้ำกับรายการอื่น <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
- <item quantity="one">อาจซ้ำกับรายการอื่น 1 รายการ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">ลิงก์รายชื่อติดต่อ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
- <item quantity="one">ลิงก์รายชื่อติดต่อ 1 รายการ</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"รายชื่อติดต่อนี้"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"อาจซ้ำกับรายการอื่น"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"รายชื่อติดต่อเหล่านี้อาจเป็นบุคคลเดียวกัน คุณสามารถลิงก์รายชื่อติดต่อดังกล่าวเป็นรายชื่อติดต่อเดียว"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"รายชื่อติดต่อที่ลิงก์"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"จากบัญชีของคุณ"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ถ่ายภาพ"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"รูปภาพทั้งหมด"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"เลือกรูปภาพ"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"จาก <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"ลบ<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"ลบ<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"ลบ <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ไม่ได้เลือกรูปภาพจาก <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"เลือกรูปภาพจาก <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"รูปภาพนี้ไม่ได้เลือกจากบัญชีที่ไม่รู้จัก"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"รูปภาพนี้เลือกจากบัญชีที่ไม่รู้จัก"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"กำลังอัปเดตรายการสมุดโทรศัพท์เพื่อแสดงการเปลี่ยนภาษา\n\nโปรดรอสักครู่..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"คำแนะนำ"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ใหม่"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"เปิดลิ้นชักการนำทาง"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"ปิดลิ้นชักการนำทาง"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"ป้ายกำกับ<xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"ป้ายกำกับ"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"บัญชี"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"ดูประวัติพร้อมกัน"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"กิจกรรมและข้อความ"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"กิจกรรม"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"ข้อความ"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"คำแนะนำ"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"จัดรายชื่อติดต่อให้เป็นระเบียบและใช้ประโยชน์ได้ง่าย"</string>
+ <string name="undo" msgid="1425165101664071422">"เลิกทำ"</string>
+ <string name="call_custom" msgid="6385303130912713318">"โทร <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"โทรเข้าบ้าน"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"โทรเข้ามือถือ"</string>
+ <string name="call_work" msgid="5328785911463744028">"โทรหาที่ทำงาน"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"โทรหาแฟกซ์ที่ทำงาน"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"โทรเข้าหมายเลขแฟกซ์ที่บ้าน"</string>
+ <string name="call_pager" msgid="9003902812293983281">"โทรหาเพจเจอร์"</string>
+ <string name="call_other" msgid="8563753966926932052">"โทร"</string>
+ <string name="call_callback" msgid="1910165691349426858">"โทรหาหมายเลขติดต่อกลับ"</string>
+ <string name="call_car" msgid="3280537320306436445">"โทรเข้าโทรศัพท์ในรถ"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"โทรหาโทรศัพท์หลักของบริษัท"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"โทรหา ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"โทรเข้าโทรศัพท์หลัก"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"โทรเข้าหมายเลขแฟกซ์"</string>
+ <string name="call_radio" msgid="8296755876398357063">"โทรเข้าวิทยุ"</string>
+ <string name="call_telex" msgid="2223170774548648114">"โทรเข้าหมายเลขเทเล็กซ์"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"โทรหา TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"โทรเข้ามือถือที่ทำงาน"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"โทรเข้าเพจเจอร์ที่ทำงาน"</string>
+ <string name="call_assistant" msgid="670941612175068337">"โทร <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"โทรหา MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (โทร)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"ส่งข้อความ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"ส่งข้อความเข้าโทรศัพท์บ้าน"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"ส่งข้อความเข้ามือถือ"</string>
+ <string name="sms_work" msgid="2269624156655267740">"ส่งข้อความถึงโทรศัพท์ที่ทำงาน"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"ส่งข้อความถึงแฟกซ์ที่ทำงาน"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"ส่งข้อความเข้าหมายเลขแฟกซ์บ้าน"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"ส่งข้อความถึงเพจเจอร์"</string>
+ <string name="sms_other" msgid="806127844607642331">"ข้อความ"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"ส่งข้อความถึงหมายเลขติดต่อกลับ"</string>
+ <string name="sms_car" msgid="7444227058437359641">"ส่งข้อความถึงรถยนต์"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"ส่งข้อความเข้าโทรศัพท์หลักของบริษัท"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"ส่งข้อความถึง ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"ส่งข้อความถึงโทรศัพท์หลัก"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"ส่งข้อความถึงหมายเลขแฟกซ์"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ส่งข้อความถึงวิทยุ"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ส่งข้อความถึงเทเล็กซ์"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"ส่งข้อความถึง TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"ส่งข้อความถึงโทรศัพท์มือถือที่ทำงาน"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"ส่งข้อความเข้าเพจเจอร์ที่ทำงาน"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"ส่งข้อความถึง <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"ส่งข้อความถึง MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (ข้อความ)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ใช้แฮงเอาท์วิดีโอ"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"ล้างผู้ที่คุณติดต่อด้วยบ่อยๆ หรือไม่"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"คุณจะล้างรายชื่อของผู้ที่ติดต่อด้วยบ่อยๆ ในแอปพลิเคชัน Contact และ Phone และบังคับให้แอปพลิเคชันอีเมลเรียนรู้ค่ากำหนดที่อยู่ของคุณใหม่ตั้งแต่ต้น"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"กำลังล้างผู้ที่คุณติดต่อด้วยบ่อยๆ…"</string>
+ <string name="status_available" msgid="5586870015822828392">"ว่าง"</string>
+ <string name="status_away" msgid="1838861100379804730">"ไม่อยู่"</string>
+ <string name="status_busy" msgid="9147992455450257136">"ไม่ว่าง"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"อื่นๆ"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ไดเรกทอรี"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"ไดเรกทอรีที่ทำงาน"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"รายชื่อติดต่อทั้งหมด"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"สมุดโทรศัพท์ด่วนสำหรับ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(ไม่มีชื่อ)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ที่ติดต่อบ่อยครั้ง"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"รายชื่อติดต่อทั้งหมดที่มีหมายเลขโทรศัพท์"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"รายชื่อติดต่อในโปรไฟล์งาน"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"ดูการอัปเดต"</string>
+ <string name="account_phone" msgid="7128032778471187553">"อุปกรณ์"</string>
+ <string name="account_sim" msgid="6519016427905087952">"ซิม"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"ชื่อ"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ชื่อเล่น"</string>
+ <string name="name_given" msgid="4280790853455320619">"ชื่อ"</string>
+ <string name="name_family" msgid="7466985689626017037">"นามสกุล"</string>
+ <string name="name_prefix" msgid="59756378548779822">"คำนำหน้าชื่อ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"ชื่อกลาง"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"คำต่อท้ายชื่อ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"ชื่อแบบออกเสียง"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"การออกเสียงชื่อ"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"ชื่อกลางแบบออกเสียง"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"การออกเสียงนามสกุล"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"โทรศัพท์"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"อีเมล"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"ที่อยู่"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"องค์กร"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"ความสัมพันธ์"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"วันที่พิเศษ"</string>
+ <string name="sms" msgid="1756857139634224222">"ข้อความตัวอักษร"</string>
+ <string name="postal_address" msgid="8765560217149624536">"ที่อยู่"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"บริษัท"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"ชื่อ"</string>
+ <string name="label_notes" msgid="8337354953278341042">"หมายเหตุ"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"กำหนดเอง"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"เว็บไซต์"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"ป้ายกำกับ"</string>
+ <string name="email_home" msgid="8573740658148184279">"ส่งไปที่อีเมลส่วนตัว"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"ส่งอีเมลเข้ามือถือ"</string>
+ <string name="email_work" msgid="2807430017302722689">"ส่งอีเมลถึงที่ทำงาน"</string>
+ <string name="email_other" msgid="3454004077967657109">"อีเมล"</string>
+ <string name="email_custom" msgid="5536404237099078802">"ส่งอีเมล <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"อีเมล"</string>
+ <string name="postal_street" msgid="8133143961580058972">"ถนน"</string>
+ <string name="postal_city" msgid="6597491300084895548">"เมือง"</string>
+ <string name="postal_region" msgid="6045263193478437672">"รัฐ"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"รหัสไปรษณีย์"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ประเทศ"</string>
+ <string name="map_home" msgid="1243547733423343982">"ดูที่อยู่บ้าน"</string>
+ <string name="map_work" msgid="1360474076921878088">"ดูที่อยู่ที่ทำงาน"</string>
+ <string name="map_other" msgid="3817820803587012641">"ดูที่อยู่"</string>
+ <string name="map_custom" msgid="8761800628069473526">"ดูที่อยู่ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"แชทโดยใช้ AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"แชทโดยใช้ Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"แชทโดยใช้ Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"แชทโดยใช้ Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"แชทโดยใช้ QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"แชทโดยใช้ Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"แชทโดยใช้ ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"แชทโดยใช้ Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"แชท"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"ลบ"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"แสดงช่องชื่อเพิ่ม"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"ยุบช่องชื่อ"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"แสดงช่องคำอ่านชื่อเพิ่ม"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"ยุบช่องคำอ่านชื่อ"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"ขยาย"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"ยุบ"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"ขยายแล้ว"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"ยุบแล้ว"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"รายชื่อติดต่อทั้งหมด"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ที่ติดดาว"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"กำหนดค่า"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"รายชื่อติดต่อ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"รายชื่อติดต่ออื่นทั้งหมด"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"รายชื่อติดต่อทั้งหมด"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"นำกลุ่มที่ซิงค์ออก"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"เพิ่มกลุ่มที่ซิงค์"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"กลุ่มเพิ่มเติม…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"การนำ \"<xliff:g id="GROUP">%s</xliff:g>\" ออกจากการซิงค์จะนำรายชื่อติดต่อที่ไม่ได้จัดกลุ่มไว้ออกจากการซิงค์ด้วย"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"บันทึกตัวเลือกการแสดงผล..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"มุมมองที่กำหนดเอง"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"บันทึกรายชื่อติดต่อที่นำเข้าลงใน:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"ซิมการ์ด"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"ซิม <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">ผู้ติดต่อ %1$d คน</item>
+ <item quantity="one">ผู้ติดต่อ 1 คน</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other">ผู้ติดต่อ <xliff:g id="COUNT_2">^1</xliff:g> คน • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one">ผู้ติดต่อ <xliff:g id="COUNT_0">^1</xliff:g> คน • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"ไฟล์ .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"ไม่มีรายการที่จะนำเข้า"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"นำเข้ารายชื่อติดต่อจาก vCard ไหม"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"ยกเลิกการนำเข้า <xliff:g id="FILENAME">%s</xliff:g> หรือไม่"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ยกเลิกการส่งออก <xliff:g id="FILENAME">%s</xliff:g> หรือไม่"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"ไม่สามารถยกเลิกการนำเข้า/ส่งออก vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"ข้อผิดพลาดที่ไม่รู้จัก"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ไม่สามารถเปิด \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"เริ่มใช้งานโปรแกรมส่งออกไม่ได้: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"คุณปิดใช้สิทธิ์ที่จำเป็นแล้ว"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"เกิดข้อผิดพลาดระหว่างส่งออก: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"ข้อผิดพลาด I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"หน่วยความจำไม่เพียงพอ ไฟล์อาจใหญ่เกินไป"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"ไม่สนับสนุนรูปแบบนี้"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"ส่งออก <xliff:g id="FILENAME">%s</xliff:g> เสร็จแล้ว"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ส่งออกรายชื่อติดต่อเรียบร้อยแล้ว"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ส่งออกรายชื่อติดต่อเสร็จแล้ว คลิกการแจ้งเตือนเพื่อแชร์รายชื่อติดต่อ"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"แตะเพื่อแชร์รายชื่อติดต่อ"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"ยกเลิกการส่งออก <xliff:g id="FILENAME">%s</xliff:g> แล้ว"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"กำลังส่งออกข้อมูลสมุดโทรศัพท์"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"กำลังส่งออกข้อมูลรายชื่อติดต่อ"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ไม่สามารถดึงข้อมูลจากฐานข้อมูล"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"โปรแกรมเขียนข้อความ vCard เริ่มการทำงานไม่ถูกต้อง"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ไม่สามารถส่งออก"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ไม่ได้ส่งออกข้อมูลรายชื่อติดต่อ\nสาเหตุ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"กำลังนำเข้า <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"ไม่สามารถอ่านข้อมูล vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"นำเข้า vCard <xliff:g id="FILENAME">%s</xliff:g> เรียบร้อยแล้ว"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"ยกเลิกการนำเข้า <xliff:g id="FILENAME">%s</xliff:g> แล้ว"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"การนำเข้า <xliff:g id="FILENAME">%s</xliff:g> จะเกิดขึ้นในไม่ช้า"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ไฟล์จะถููกนำเข้าในไม่ช้า"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"คำขอนำเข้า vCard ถูกปฏิเสธ ลองใหม่ภายหลัง"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ระบบจะส่งออกรายชื่อติดต่อในไม่ช้า"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"คำขอส่งออก vCard ถูกปฏิเสธ ลองใหม่ภายหลัง"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"สมุดโทรศัพท์"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"กำลังแคช vCard ไปยังที่จัดเก็บข้อมูลชั่วคราวในตัวเครื่อง การนำเข้าจริงจะเริ่มต้นในอีกสักครู่"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"ไม่สามารถนำเข้า vCard"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ผู้ติดต่อทาง NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"กำลังแคช"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"กำลังนำเข้า <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"ส่งออกเป็นไฟล์ .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"จัดเรียงตาม"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"คำอ่านชื่อ"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"แสดงเสมอ"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"ซ่อนหากว่างเปล่า"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ชื่อ"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"นามสกุล"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"รูปแบบชื่อ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"ชื่อขึ้นก่อน"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"นามสกุลขึ้นก่อน"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"บัญชี"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"บัญชีเริ่มต้นสำหรับรายชื่อติดต่อใหม่"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"ข้อมูลของฉัน"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"ตั้งค่าโปรไฟล์ของคุณ"</string>
+ <string name="setting_about" msgid="7014388749752042863">"เกี่ยวกับ \"รายชื่อติดต่อ\""</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"แชร์รายชื่อติดต่อโปรด"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"แชร์รายชื่อติดต่อทั้งหมด"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"ไม่สามารถแชร์รายชื่อติดต่อ"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"ส่งออกรายชื่อติดต่อ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"นำเข้ารายชื่อติดต่อจาก"</string>
+ <string name="share_error" msgid="948429331673358107">"ไม่สามารถแชร์รายชื่อติดต่อนี้ได้"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"ไม่มีรายชื่อติดต่อที่จะแชร์"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"รายชื่อติดต่อที่จะแสดง"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"รายชื่อติดต่อที่จะแสดง"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"ปรับแต่งมุมมอง"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"บันทึก"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"ค้นหารายชื่อติดต่อ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"รายการโปรด"</string>
+ <string name="menu_import" msgid="6107961135813836467">"นำเข้า"</string>
+ <string name="menu_export" msgid="2658783911863503902">"ส่งออก"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"หมายเลขที่ถูกบล็อก"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"ผ่านทาง <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ผ่านทาง <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"หยุดการค้นหา"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"ล้างการค้นหา"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"บัญชี"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"ใช้ในการโทรทุกครั้ง"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"โทรพร้อมโน้ต"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"พิมพ์โน้ตเพื่อส่งพร้อมการโทร..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ส่งและโทร"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"เวอร์ชันบิวด์"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"สัญญาอนุญาตโอเพนซอร์ส"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"รายละเอียดสัญญาอนุญาตสำหรับซอฟต์แวร์โอเพนซอร์ส"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"นโยบายความเป็นส่วนตัว"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"ข้อกำหนดในการให้บริการ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"สัญญาอนุญาตโอเพนซอร์ส"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"เปิด URL ไม่สำเร็จ"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"เลือก <xliff:g id="ACCOUNT_INFO">%s</xliff:g> แล้ว"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"ไม่ได้เลือก <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"เริ่มแฮงเอาท์วิดีโอ"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"ลบ"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"จุดไข่ปลา"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> นาที <xliff:g id="SECONDS">%2$s</xliff:g> วินาที"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ชั่วโมง <xliff:g id="MINUTES_1">%2$s</xliff:g> นาที <xliff:g id="SECONDS">%3$s</xliff:g> วินาที"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ทางลัดนี้ถูกปิดใช้งาน"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"รายชื่อติดต่อถูกนำออก"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"นำเข้า"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"เลือกผู้ติดต่อ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"ไม่มีผู้ติดต่อในซิมการ์ด"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"มีผู้ติดต่อคนนี้อยู่ในรายชื่อแล้ว"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">นำเข้าผู้ติดต่อ <xliff:g id="COUNT">%d</xliff:g> รายจากซิมแล้ว</item>
+ <item quantity="one">นำเข้าผู้ติดต่อ 1 รายจากซิมแล้ว</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"นำเข้าผู้ติดต่อจากซิมไม่สำเร็จ"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"นำเข้าจากซิมการ์ด"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"ยกเลิก"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"ซิงค์อัตโนมัติปิดอยู่ แตะเพื่อเปิด"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"ปิด"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"ซิงค์บัญชีปิดอยู่ แตะเพื่อเปิด"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"เปิดซิงค์อัตโนมัติไหม"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"ระบบจะอัปเดตข้อมูลการเปลี่ยนแปลงต่างๆ ทั้ง Google Contacts รวมถึงแอปและบัญชีทั้งหมดให้เป็นปัจจุบันระหว่างเว็บและอุปกรณ์ของคุณ"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"เปิด"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"ไม่มีการเชื่อมต่อ"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"ซิม"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"แสดงเพิ่มเติม"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"นำเข้าจากซิมการ์ดเสร็จแล้ว"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"การนำเข้าล้มเหลว"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"นำเข้ารายชื่อติดต่อจากซิมการ์ดไม่ได้"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"กำลังนำเข้าจากซิมการ์ด"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"การแจ้งเตือน"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index f6f837bf1..294e7da69 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Mga Contact"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Mga Contact"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Tingnan ang Contact"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"I-edit ang Contact"</string>
<string name="contactsList" msgid="8661624236494819731">"Mga Contact"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Magdagdag ng contact"</string>
<string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Direktang pag-dial"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Direktang mensahe"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pumili ng shortcut sa contact"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pumili ng tatawagang numero"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pumili ng numero na padadalhan ng mensahe"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pumili ng contact"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Idagdag sa contact"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pumili ng isang contact"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pumili"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Gumawa ng bagong contact"</string>
- <string name="starredList" msgid="4817256136413959463">"Naka-star"</string>
- <string name="frequentList" msgid="7154768136473953056">"Madalas"</string>
- <string name="strequentList" msgid="5640192862059373511">"Mga Paborito"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Mga detalye ng contact"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"I-edit ang contact"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Lumikha ng contact"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"I-edit ang pangkat"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Lumikha ng pangkat"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Tungkol sa"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Mga Update"</string>
<string name="searchHint" msgid="8482945356247760701">"Maghanap ng mga contact"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Tingnan ang contact"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Idagdag sa mga paborito"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Alisin mula sa mga paborito"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Inalis sa mga paborito"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"I-edit"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"I-delete"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Palitan ang larawan"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Ilagay sa Home screen"</string>
- <string name="menu_call" msgid="3992595586042260618">"Tawagan ang contact"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Mag-text sa contact"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Gumawa ng shortcut"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"I-unlink"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"I-edit"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"I-delete"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Magdagdag ng Contact"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Magdagdag ng Pangkat"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Alisin ang mga contact"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Palitan ang pangalan ng label"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"I-delete ang label"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Magdagdag ng contact"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Pumili ng mga contact"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Magdagdag ng mga contact"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Alisin mula sa label"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Gumawa ng label"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"I-unlink ang contact na ito sa maraming contact?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"I-unlink"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gusto mo bang i-save ang mga pagbabagong nagawa mo na at i-unlink ang contact na ito sa maraming contact?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"I-save at I-unlink"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Gusto mo bang i-save ang mga nagawa mo nang pagbabago at i-link sa napiling contact?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"I-save at I-link"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Nili-link"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ina-unlink"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"I-link"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Tingnan ang naka-link na contact"</string>
<string name="menu_save" msgid="1727844363591825909">"I-save"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"I-link ang mga contact"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Piliin ang contact na gusto mong i-link kay <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Ipakita ang lahat ng mga contact"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Mga iminumungkahing contact"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Lahat ng mga contact"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Na-link sina <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Na-link na ang mga contact"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Na-delete si <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Na-delete sina <xliff:g id="NAME_0">%1$s</xliff:g> at <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Na-delete sina <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Na-delete na ang mga contact</item>
<item quantity="other">Na-delete na ang mga contact</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na contact</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> na contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Mula sa Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Mula sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Itakda ang ringtone"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Lahat ng tawag sa voicemail"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Hindi maaaring i-delete ang mga contact mula sa mga read-only na account mo, ngunit maaaring itago ang mga ito."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Itago"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Ang contact na ide-delete ay may mga detalye mula sa maraming account. Itatago at hindi ide-delete ang mga detalye mula sa mga read-only na account."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Upang makapag-link, kailangan mo ng hindi bababa sa dalawang contact."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"I-link ang mga napiling contact?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"I-link"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Iruta sa voicemail"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Huwag iruta sa voicemail"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Read-only ang contact na ito. Hindi ito maaaring i-delete, ngunit maaari mo itong itago."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Itago ang Contact"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Itatago ang read-only na mga account sa contact na ito, hindi ide-delete."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"I-delete ang contact na ito?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"I-delete ang mga napiling contact?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Hindi maaaring i-delete ang mga contact mula sa mga read-only na account mo, ngunit maaaring itago ang mga ito."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kapag na-delete ang contact na ito. may mga detalye mula sa maraming account na made-delete."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"I-delete ang contact na ito?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"I-delete"</string>
- <string name="menu_discard" msgid="6854657936970228164">"I-discard ang mga pagbabago"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Hindi umiiral ang contact."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Naidagdag ang contact sa Home screen."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Naidagdag ang <xliff:g id="NAME">%s</xliff:g> sa Home screen."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Lumikha ng bagong contact"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Lumikha ng bagong contact"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Samahan"</item>
- <item msgid="7196592230748086755">"Tandaan"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Walang available na mga larawan sa tablet."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Walang mga larawan ang available sa telepono."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Walang available na larawan sa device."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Larawan ng contact"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom na pangalan ng label"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Ipadala ang mga tawag nang direkta sa voicemail"</string>
<string name="removePhoto" msgid="4898105274130284565">"Alisin ang larawan"</string>
- <string name="noContacts" msgid="4955659076981974652">"Walang mga contact"</string>
- <string name="noGroups" msgid="8614664663561385253">"Walang mga pangkat."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Upang lumikha ng mga pangkat kailangan mo ng isang account."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Walang mga tao sa pangkat na ito."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Upang magdagdag ng ilan, i-edit ang pangkat."</string>
- <string name="savingContact" msgid="4075751076741924939">"Nagse-save ng contact…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Walang laman ang iyong listahan ng mga contact"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Walang mga contact na mayroong ganitong label"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Walang mga contact sa account na ito"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Walang laman ang iyong listahan ng mga contact"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Na-save si <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Na-save ang contact"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Na-unlink ang mga contact"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Hindi ma-save ang mga pagbabago sa contact."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Hindi ma-unlink ang contact."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Hindi ma-link ang contact."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Error sa pagse-save ng contact."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Hindi ma-save ang mga pagbabago sa larawan ng contact."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Na-save ang pangkat."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Hindi ma-save ang mga pagbabago sa pangkat."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact na may mga numero ng telepono</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na contact na may mga numero ng telepono</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Walang mga contact na may mga numero ng telepono"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Hindi ma-save ang mga pagbabago sa contact"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Hindi ma-unlink ang contact"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Hindi ma-link ang contact"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error sa pag-save ng contact"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Hindi ma-save ang mga pagbabago sa larawan ng contact"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nabigong i-load ang label"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Na-delete ang label"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Nagawa ang label"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Hindi makagawa ng label"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"In-update ang label"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Inalis sa label"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Idinagdag sa label"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Hindi ma-save ang mga pagbabago sa label"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Mayroon nang ganyang label"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Walang mga email ang ilang contact."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Walang mga numero ng telepono ang ilang contact."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Magpadala ng email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Magpadala ng mensahe"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pumili ng Mga Contact"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Ipadala"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Walang mga contact"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ang nahanap</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Lahat"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Mga Paborito"</string>
- <string name="callBack" msgid="5498224409038809224">"Tumawag pabalik"</string>
- <string name="callAgain" msgid="3197312117049874778">"Tawagan muli"</string>
- <string name="returnCall" msgid="8171961914203617813">"Pabalik na tawag"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Idagdag ang \"<xliff:g id="EMAIL">%s</xliff:g>\" sa mga contact?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"larawan ng contact"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ng <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (na) contact"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Mga pangalan ng iyong mga contact"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Walang natagpuang app na mangangasiwa sa pagkilos na ito."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"I-click upang bumalik sa nakaraang screen"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Magdagdag ng numero ng telepono"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Magdagdag ng email"</string>
<string name="missing_app" msgid="1466111003546611387">"Walang nakitang app na gagawa sa aksyong ito."</string>
<string name="menu_share" msgid="943789700636542260">"Ibahagi"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Idagdag sa mga contact"</string>
- <string name="share_via" msgid="563121028023030093">"Ibahagi ang contact sa pamamagitan ng"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Lumikha ng pangkat sa ilalim ng account"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Idagdag"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Ibahagi ang mga contact sa pamamagitan ng</item>
+ <item quantity="other">Ibahagi ang mga contact sa pamamagitan ng</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Pumili ng account"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Gumawa ng label"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Palitan ang pangalan ng label"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Pangalan ng label"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Pangalan ng label"</string>
<string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
<string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
- <string name="connections" msgid="8098440723172028350">"Mga Koneksyon"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Magdagdag ng koneksyon"</string>
- <string name="recent" msgid="2659189233141493004">"Kamakailan"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Mga kamakailang update"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Hindi maaaring i-edit mula sa app na ito."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Hindi maaaring i-edit sa device na ito."</string>
<string name="take_photo" msgid="7496128293167402354">"Kumuha ng larawan"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Kumuha ng bagong larawan"</string>
<string name="pick_photo" msgid="2129509985223564942">"Pumili ng larawan"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Pumili ng bagong larawan"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Ina-update ang listahan ng contact."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Naghahanap…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Ipakita ang napili"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Ipakita lahat"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Piliin lahat"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Alisin sa pagkakapili ang lahat"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Magdagdag ng bago"</string>
- <string name="add_organization" msgid="7311893231158291197">"Magdagdag ng samahan"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Petsa"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Pangalan ng pangkat"</string>
- <string name="change_photo" msgid="8530597935483526383">"Baguhin"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Pangunahing larawan"</string>
- <string name="description_star" msgid="2605854427360036550">"paborito"</string>
- <string name="edit_contact" msgid="7529281274005689512">"I-edit ang Contact"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"I-link ang kasalukuyang contact sa piniling contact?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lagyan ng label"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Kanselahin"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Bumalik"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"isara"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Lumipat sa pag-edit ng napiling contact? Kokopyahin ang impormasyong ipinasok mo sa ngayon."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopyahin sa Aking Mga Contact"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Idagdag sa Aking Mga Contact"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Direktoryo na <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Custom"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Mga Setting"</string>
<string name="menu_settings" msgid="377929915873428211">"Mga Setting"</string>
<string name="menu_help" msgid="1680178646764069976">"Tulong at feedback"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Mga pagpipilian sa pagpapakita"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Numero ng telepono"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Idagdag sa mga contact"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Idagdag sa contact"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Isara"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Isama ang taon"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Naglo-load…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Lumikha ng bagong contact"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Magdagdag ng account"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Mag-import ng mga contact"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Lumikha ng bagong pangkat"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Bagong pangkat"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> pangkat</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> na pangkat</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Tanggalin ang pangkat na \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Hindi tatanggalin ang mismong mga contact.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> tao mula sa <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> na tao mula sa <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> tao</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> na tao</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"I-import"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Gumawa ng bagong…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"I-delete ang label na \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Ang mga contact mismo ay hindi ide-delete.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"I-type ang pangalan ng contact bago i-link sa iba."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopyahin sa clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Itakda ang default"</string>
<string name="clear_default" msgid="7193185801596678067">"I-clear ang default"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Kinopya ang teksto"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Gusto mo bang i-discard ang iyong mga pagbabago at huminto sa pag-e-edit?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"I-discard ang mga pagbabago?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"I-discard"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Patuloy na mag-edit"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"I-set up ang profile"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"I-type ang pangalan ng tao"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Pangalan ng pangkat"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Kanselahin"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"I-discard ang mga pag-customize?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Maghanap ng mga contact"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Alisin ang mga contact"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Aking lokal na profile"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Aking <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> na profile"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ipinapakita ang lahat ng contact"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Panatilihing ligtas ang iyong mga contact kahit na mawala mo ang iyong telepono: mag-synchronize sa isang online na serbisyo."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Magdagdag ng account"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Hindi maba-back up ang iyong bagong contact. Magdagdag ng account na nagba-back up ng mga contact online?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Maglaan nang sandali upang magdagdag ng account na magba-back up ng iyong mga contact sa Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Mase-save ang mga bagong contact sa <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pumili ng default na account para sa mga bagong contact:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Mag-add ng contact"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Gumawa ng bagong contact"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"I-edit"</string>
- <string name="keep_local" msgid="1258761699192993322">"Panatilihing lokal"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Pagtingin lang"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Pumili ng contact upang i-edit"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Mga naka-link na contact"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Magdagdag"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"I-unlink"</string>
<string name="add_account" msgid="8201790677994503186">"Magdagdag ng account"</string>
<string name="add_new_account" msgid="5748627740680940264">"Magdagdag ng bagong account"</string>
<string name="menu_export_database" msgid="2659719297530170820">"I-export ang mga file ng database"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"magdagdag ng bagong contact"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Gumawa ng bagong contact"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Tumingin nang higit pa"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Tumingin nang mas kaunti"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Tingnan lahat"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Kamakailan"</string>
<string name="about_card_title" msgid="2920942314212825637">"Tungkol dito"</string>
- <string name="send_message" msgid="8938418965550543196">"Magpadala ng mensahe"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Gumagawa ng personal na kopya..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Kahapon"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Lumilikha ng personal na kopya…"</string>
<string name="tomorrow" msgid="6241969467795308581">"Bukas"</string>
<string name="today" msgid="8041090779381781781">"Ngayon"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Ngayong <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Bukas nang <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Kaganapang walang pamagat)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Itakda"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Kaganapan"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Kaugnayan"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Pangalan"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telepono"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Larawan"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"I-click upang palawakin ang contact editor."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"I-click upang i-collapse ang contact editor."</string>
<string name="content_description_directions" msgid="2686791825798189335">"mga direksyon sa lokasyon"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"kamakailang sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. mag-click upang tumugon"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"kamakailang sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. mag-click upang tumugon"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"papalabas"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"hindi nasagot"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"kamakailang tawag. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. mag-click upang tumawag"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"kamakailang tawag. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. mag-click upang tumawag"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ikaw: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Gagana nang mas maayos ang Hangouts kapag inilagay mo ang identifier sa Hangouts ng isang tao sa field ng email o sa field ng telepono."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Higit pang mga field"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Palitan ang larawan"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Hindi nabuksan ang editor."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Sine-save sa"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Kasalukuyang naipon sa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Mag-double tap upang pumili ng ibang account."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Mga naka-link na contact (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Mga naka-link na contact (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> (na) naka-link na contact"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Higit pang mga field"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Baguhin ang larawan ng contact"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Magdagdag ng larawan ng contact"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Larawan ng contact"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Nabigong buksan ang editor."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Sine-save sa"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Hindi mae-edit ang impormasyon ng contact mula sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"I-LINK ANG MGA CONTACT"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KANSELAHIN"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> Posibleng duplicate</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na Posibleng duplicate</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> naka-link na contact</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na naka-link na contact</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ang contact na ito"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mga posibleng duplicate"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Maaaring iisang tao ang mga contact na ito. Maaari mong i-link ang mga ito sa isa\'t isa bilang iisang contact."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Mga naka-link na contact"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Mula sa iyong mga account"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Kumuha ng larawan"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Lahat ng larawan"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Pumili ng larawan"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Mula kay <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"I-delete ang <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"I-delete ang <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"I-delete ang <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Hindi napili ang larawan sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Napili na ang larawan mula sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Hindi nilagyan ng check ang larawan mula sa isang hindi kilalang account"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Nalagyan na ng check ang larawan mula sa isang hindi kilalang account"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Ina-update ang listahan ng contact upang ipakita ang pagbabago ng wika.\n\nPakihintay..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Mga Suhestyon"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Bago"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Binubuksan ang navigation drawer"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Isinasara ang navigation drawer"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Label na <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Mga Label"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Mga Account"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Magkasamang makita ang inyong history"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Mga event at mensahe"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Mga Event"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Mga Mensahe"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Mga Suhestyon"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Panatilihing maayos at kapaki-pakinabang ang iyong mga contact"</string>
+ <string name="undo" msgid="1425165101664071422">"I-undo"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Tawagan ang <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Tawagan ang tahanan"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Tawagan ang mobile"</string>
+ <string name="call_work" msgid="5328785911463744028">"Tawagan ang trabaho"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Tawagan ang fax sa trabaho"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Tawagan ang fax sa tahanan"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Tawagan ang pager"</string>
+ <string name="call_other" msgid="8563753966926932052">"Tawag"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Tawagan ang pabalik na tawag"</string>
+ <string name="call_car" msgid="3280537320306436445">"Tawagan sa kotse"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Tawagan ang pangunahing kumpanya"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Tawagan ang ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Tawagan ang pangunahin"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Tawagan ang fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Tumawag sa radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Tawagan ang telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Tawagan ang TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Tawagan ang mobile sa trabaho"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Tawagan ang pager sa trabaho"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Tawagan ang <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Tawagan ang MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Tawagan)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"I-text ang <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Mag-text sa bahay"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Mag-text sa mobile"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Mag-text sa trabaho"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Mag-text sa fax sa trabaho"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"I-text ang fax sa tahanan"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Mag-text sa pager"</string>
+ <string name="sms_other" msgid="806127844607642331">"Teksto"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"I-text ang callback"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Mag-text sa kotse"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Mag-text sa pangunahin ng kumpanya"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Mag-text sa ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"I-text ang pangunahin"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"I-text ang fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Mag-text sa radyo"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Mag-text sa telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"I-text ang TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"I-text ang mobile sa trabaho"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Mag-text sa pager sa trabaho"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Mag-text sa <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Mag-text ng MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Imensahe)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Makipag-video call"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"I-clear ang mga madalas tinatawagan?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Iki-clear mo ang listahan ng madalas na kontakin sa mga app na Mga Contact at Telepono at pupuwersahin mo ang mga app ng email na matutunan ang iyong mga kagustuhan sa pag-a-address mula sa simula."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Kini-clear ang mga madalas tinatawagan…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Available"</string>
+ <string name="status_away" msgid="1838861100379804730">"Malayo"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Busy"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Iba pa"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Direktoryo"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Directory sa trabaho"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Lahat ng contact"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Mabilisang contact para kay <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Walang pangalan)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Madalas na kino-contact"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Lahat ng contact na may mga numero ng telepono"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Mga contact ng profile sa trabaho"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Tingnan ang mga update"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Device"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Pangalan"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Palayaw"</string>
+ <string name="name_given" msgid="4280790853455320619">"Pangalan"</string>
+ <string name="name_family" msgid="7466985689626017037">"Apelyido"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Prefix ng pangalan"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Gitnang pangalan"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Suffix ng pangalan"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Phonetic na pangalan"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Phonetic na pangalan"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Phonetic na gitnang pangalan"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Phonetic na apelyido"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telepono"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Address"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Samahan"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Kaugnayan"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Espesyal na petsa"</string>
+ <string name="sms" msgid="1756857139634224222">"Text message"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Address"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Kumpanya"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Pamagat"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Mga Tala"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Custom"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Website"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Mga Label"</string>
+ <string name="email_home" msgid="8573740658148184279">"Mag-email sa bahay"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Mag-email sa mobile"</string>
+ <string name="email_work" msgid="2807430017302722689">"Mag-email sa trabaho"</string>
+ <string name="email_other" msgid="3454004077967657109">"Email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"I-email si <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Kalye"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Lungsod"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Katayuan"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"ZIP code"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Bansa"</string>
+ <string name="map_home" msgid="1243547733423343982">"Tingnan ang home address"</string>
+ <string name="map_work" msgid="1360474076921878088">"Tingnan ang address ng trabaho"</string>
+ <string name="map_other" msgid="3817820803587012641">"Tingnan ang address"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Tingnan ang <xliff:g id="CUSTOM_LABEL">%s</xliff:g> address"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Makipag-chat gamit ang AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Makipag-chat gamit ang Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Makipag-chat gamit ang Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Makipag-chat gamit ang Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Makipag-chat gamit ang QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Makipag-chat gamit ang Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Makipag-chat gamit ang ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Makipag-chat gamit ang Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Makipag-chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"tanggalin"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Magpakita ng higit pang field ng pangalan"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"I-collapse ang mga field ng pangalan"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Magpakita ng higit pang field ng phonetic na pangalan"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"I-collapse ang mga field ng phonetic na pangalan"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Palawakin"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"I-collapse"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Pinalawak"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Naka-collapse"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Lahat ng mga contact"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Naka-star"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"I-customize"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Contact"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Lahat ng iba pang contact"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Lahat ng contact"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Alisin ang pangkat sa pag-sync"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Magdagdag ng pangkat sa pag-sync"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Higit pang mga pangkat…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Aalisin rin ng pag-aalis sa \"<xliff:g id="GROUP">%s</xliff:g>\" mula sa sync ang anumang mga hindi nakapangkat na contact mula sa sync."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Sine-save ang mga pagpipilian sa pagpapakita…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Naka-customize na view"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"I-save ang mga na-import na contact sa:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM na <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d contact</item>
+ <item quantity="other">%1$d na contact</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> na contact • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf na file"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Walang i-import"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"I-import ang mga contact mula sa vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Kanselahin ang pag-import ng <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselahin ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Di makansela pag-import/pag-export vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Hindi kilalang error."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Hindi mabuksan ang \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Hindi masimulan ang exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Walang maaaring i-export na contact."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Na-disable mo ang isang kinakailangang pahintulot."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Naganap ang isang error habang nag-e-export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O na error"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Walang sapat na memory. Maaaring masyadong malaki ang file."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Hindi sinusuportahan ang format."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Tapos na ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Tapos nang i-export ang mga contact."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Tapos nang i-export ang mga contact, i-click ang notification upang ibahagi ang mga contact."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"I-tap upang ibahagi ang mga contact."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Kinansela ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Pag-e-export ng data ng contact"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Ine-export ang data ng contact."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Hindi makuha ang impormasyon ng database."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Walang nae-export na contact."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Hindi nagsimula nang tama ang composer ng vCard."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Hindi ma-export"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Hindi na-export ang data ng contact.\nDahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Nag-iimport <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Hindi mabasa ang data ng vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Tapos na ang pag-import ng vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kinansela ang pag-import ng <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Mai-import ang <xliff:g id="FILENAME">%s</xliff:g> sa ilang saglit."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Sa ilang sandali ay mai-import na ang file."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tinanggihan ang kahilingan sa pag-import ng vCard. Pakisubukang muli sa ibang pagkakataon."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"I-e-export ang mga contact sa ilang sandali."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tinanggihan ang kahilingan sa pag-export ng vCard. Subukang muli sa ibang pagkakataon."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Kina-cache ang (mga) vCard sa lokal na pansamantalang storage. Magsisimula sa lalong madaling panahon ang aktuwal na pag-import."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Hindi ma-import ang vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Natanggap ang contact sa NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Nagka-cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Nag-i-import <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"I-export sa .vcf file"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Pagbukud-bukurin ayon sa"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Phonetic na pangalan"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Palaging ipakita"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Itago kung walang laman"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Pangalan"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Apelyido"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Format ng pangalan"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Pangalan muna"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Apelyido muna"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Mga Account"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Default na account para sa mga bagong contact"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Aking impormasyon"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"I-set up ang iyong profile"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Tungkol sa Mga Contact"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Ibahagi ang mga paboritong contact"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Ibahagi ang lahat ng contact"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Nabigong ibahagi ang mga contact."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Mag-export ng mga contact"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"I-import ang mga contact mula sa"</string>
+ <string name="share_error" msgid="948429331673358107">"Hindi maibabahagi ang contact na ito."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Walang ibabahaging mga contact."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Mga contact na ipapakita"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Mga contact na ipapakita"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"I-customize ang view"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"I-save"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Maghanap sa mga contact"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mga Paborito"</string>
+ <string name="menu_import" msgid="6107961135813836467">"I-import"</string>
+ <string name="menu_export" msgid="2658783911863503902">"I-export"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Mga naka-block na numero"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"sa pamamagitan ng <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> sa pamamagitan ng <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ihinto ang paghahanap"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"I-clear ang paghahanap"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Gamitin ito palagi sa mga tawag"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Tumawag nang may kasamang tala"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Mag-type ng isang tala na ipadadala kasama ng tawag …"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"IPADALA &amp; TUMAWAG"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Bersyon ng build"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Mga open source na lisensya"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Mga detalye ng lisensya para sa open source na software"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Patakaran sa privacy"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Mga tuntunin ng serbisyo"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Mga open source na lisensya"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Nabigong buksan ang url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Nilagyan ng check ang <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Hindi nilagyan ng check ang <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Magsimula ng video call"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"I-delete"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> (na) min <xliff:g id="SECONDS">%2$s</xliff:g> (na) seg"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> (na) oras <xliff:g id="MINUTES_1">%2$s</xliff:g> (na) min <xliff:g id="SECONDS">%3$s</xliff:g> (na) seg"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Na-disable ang shortcut na ito"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Inalis ang contact"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"I-import"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Pumili ng mga contact"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Walang contact sa iyong SIM card"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Nasa listahan mo na ang contact"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact sa SIM ang na-import</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na contact sa SIM ang na-import</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Hindi na-import ang mga contact sa SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"I-import mula sa SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Kanselahin"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Naka-off ang auto-sync. I-tap upang i-on."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"I-dismiss"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Naka-off ang pag-sync ng account. I-tap upang i-on."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"I-on ang auto-sync?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Ang mga pagbabagong ginagawa mo sa lahat ng app at account, hindi lang sa Google Contacts, ay pananatilihing up to date sa pagitan ng web at ng mga device mo."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"I-on"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Walang koneksyon"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Magpakita ng higit pa"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Tapos nang i-import ang SIM card"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Nabigong i-import"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Hindi ma-import ang mga contact mula sa SIM card"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Ini-import ang SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Mga Notification"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 70251c0fe..4b64456a0 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Kişiler"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kişiler"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kişiyi Göster"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Kişiyi Düzenle"</string>
<string name="contactsList" msgid="8661624236494819731">"Kişiler"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Kişi ekle"</string>
<string name="shortcutContact" msgid="749243779392912958">"Kişi"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Doğrudan çevirme"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Doğrudan mesaj"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Bir kişi kısayolu seçin"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Aranacak numarayı seçin"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"İleti gönderilecek bir numara seçin"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kişi seçin"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kişiye ekle"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Bir kişi seçin"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seç"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yeni kişi oluştur"</string>
- <string name="starredList" msgid="4817256136413959463">"Yıldızlı"</string>
- <string name="frequentList" msgid="7154768136473953056">"Sık sık"</string>
- <string name="strequentList" msgid="5640192862059373511">"Sık Kullanılanlar"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kişi ayrıntıları"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Kişiyi düzenle"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Kişi oluştur"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Grubu düzenle"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Grup oluştur"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Hakkında"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Güncellemlr"</string>
<string name="searchHint" msgid="8482945356247760701">"Kişilerde ara"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Kişiyi görüntüle"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Sık kullanılanlara ekle"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Sık kullanılanlardan kaldır"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Favorilerden kaldırıldı"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Düzenle"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Sil"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Fotoğrafı değiştir"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Ana ekrana yerleştir"</string>
- <string name="menu_call" msgid="3992595586042260618">"Ara"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Kısa mesaj gönder"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Kısayol oluştur"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Bağlantıyı kaldır"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Düzenle"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Sil"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Kişi Ekle"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Grup Ekle"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Kişileri kaldır"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Etiketi yeniden adlandır"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Etiketi sil"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Kişi ekle"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kişileri seç"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kişileri ekle"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Etiketten kaldır"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Etiket oluştur"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Bu kişinin bağlantısı kaldırılarak birden çok kişiye dönüştürülsün mü?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Bağlantıyı Kaldır"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Yapmış olduğunuz değişiklikleri kaydetmek ve bu kişinin bağlantısını kaldırıp birden çok kişiye dönüştürmek istiyor musunuz?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Kaydet ve Bağlantıyı Kaldır"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Önceden yaptığınız değişiklikleri kaydetmek ve seçilen kişiyle bağlantı oluşturmak istiyor musunuz?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Kaydet ve Bağlantı Oluştur"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Bağlanıyor"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Bağlantı kaldırılıyor"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Bağlantı oluştur"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Bağlı kişileri göster"</string>
<string name="menu_save" msgid="1727844363591825909">"Kaydet"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kişileri bağla"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ile bağlamak istediğiniz kişiyi seçin:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Tüm kişileri göster"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Önerilen kişiler"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tüm kişiler"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> bağlandı"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Kişiler arasında bağlantı oluşturuldu"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> silindi"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> ve <xliff:g id="NAME_1">%2$s</xliff:g> silindi"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… silindi"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Kişiler silindi</item>
<item quantity="one">Kişi silindi</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kişi</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kişi</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kişi · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kişi · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google\'dan"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Zil sesi ayarla"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Tüm çağrıları sesli mesaja"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Salt okunur hesaplarınızdaki kişiler silinemez, ancak gizlenebilir."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Gizle"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Silinecek kişi birden fazla hesaptan ayrıntılar içeriyor. Salt okunur hesaplardaki ayrıntılar silinmez, gizlenir."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Bağlantı oluşturmak için en az iki kişi seçmeniz gerekir."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Seçili kişiler için bağlantı oluşturulsun mu?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Bağlantı oluştur"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Sesli mesaja yönlendir"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Yönlendirmeyi iptal et"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Bu kişi salt okunur. Kişi silinemez ancak gizlenebilir."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Kişiyi Gizle"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Bu kişinin içerdiği salt okunur hesaplar gizlenecek, silinmeyecek."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Bu kişi silinsin mi?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Seçili kişiler silinsin mi?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Salt okunur hesaplarınızdaki kişiler silinemez, ancak gizlenebilir."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kişiyi silmek, birden fazla hesaba ait ayrıntıları da siler."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Bu kişi silinsin mi?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Sil"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Değişiklikleri sil"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Kişi mevcut değil."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kişi, Ana ekrana eklendi."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>, Ana ekrana eklendi."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yeni kişi oluştur"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Yeni kişi oluştur"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Kuruluş"</item>
- <item msgid="7196592230748086755">"Not"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tablette kullanılabilir resim yok."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda hiçbir resim yok."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Cihazda kullanılabilir resim yok."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kişi fotoğrafı"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Özel etiket adı"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Çağrıları doğrudan sesli mesaja gönder"</string>
<string name="removePhoto" msgid="4898105274130284565">"Fotoğrafı kaldır"</string>
- <string name="noContacts" msgid="4955659076981974652">"Hiç kişi yok"</string>
- <string name="noGroups" msgid="8614664663561385253">"Grup yok."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Grup oluşturmanız için hesap gerekir."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Bu grupta hiç kimse yok."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Üye eklemek için grubu düzenleyin."</string>
- <string name="savingContact" msgid="4075751076741924939">"Kişi kaydediliyor..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Kişi listeniz boş"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Bu etikete sahip kişi yok"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Bu hesapta kişi yok"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Kişi listeniz boş"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> kaydedildi"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Kişi kaydedildi"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Kişilerin bağlantısı kaldırıldı"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kişi değişiklikleri kaydedilemedi."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kişinin bağlantısı kaldırılamadı."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kişi bağlanamadı."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kişi kaydedilirken hata oluştu."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kişi fotoğrafı değişiklikleri kaydedilmedi."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Grup kaydedildi."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Grup değişiklikleri kaydedilemedi."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">Telefon numarası olan <xliff:g id="COUNT">%d</xliff:g> kişi</item>
- <item quantity="one">Telefon numarası olan 1 kişi</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon numarası olan hiçbir kişi yok"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kişi bulundu</item>
- <item quantity="one">1 kişi bulundu</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kişi değişiklikleri kaydedilemedi"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kişinin bağlantısı kaldırılamadı"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kişi bağlanamadı"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kişi kaydedilirken hata oluştu"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kişi fotoğrafı değişiklikleri kaydedilmedi"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiket yüklenemedi"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket oluşturuldu"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiket oluşturulamıyor"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Etiket güncellendi"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Etiketten kaldırıldı"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Etikete eklendi"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Etiket değişiklikleri kaydedilemedi"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Bu etiket zaten var"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Bazı kişilerin e-posta adresi yok."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Bazı kişilerin telefon numarası yok."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-posta gönder"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Mesaj gönder"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kişi Seçin"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Gönder"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Hiç kişi yok"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kişi bulundu</item>
- <item quantity="one">1 kişi bulundu</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tümü"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Favoriler"</string>
- <string name="callBack" msgid="5498224409038809224">"Geri ara"</string>
- <string name="callAgain" msgid="3197312117049874778">"Tekrar çağrı yap"</string>
- <string name="returnCall" msgid="8171961914203617813">"Geri ara"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" adresi kişilere eklensin mi?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kişi fotoğrafı"</string>
- <string name="description_plus_button" msgid="515164827856229880">"artı"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"Toplam <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kişi"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Kişilerinizin adları"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Bu işlemi gerçekleştirecek uygulama bulunamadı."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Önceki ekrana dönmek için tıklayın"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefon numarası ekle"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"E-posta adresi ekle"</string>
<string name="missing_app" msgid="1466111003546611387">"Bu işlemi gerçekleştirecek uygulama bulunamadı."</string>
<string name="menu_share" msgid="943789700636542260">"Paylaş"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Kişilere ekle"</string>
- <string name="share_via" msgid="563121028023030093">"Kişiyi şunu kullanarak paylaş:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Grubu şu hesabın altında oluştur:"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Ekle"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kişileri şunu kullanarak paylaş:</item>
+ <item quantity="one">Kişiyi şunu kullanarak paylaş:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Hesap seçin"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Etiket oluşturun"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Etiketi yeniden adlandırın"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Etiket adı"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiket adı"</string>
<string name="audio_chat" msgid="2535716629358298691">"Sesli sohbet"</string>
<string name="video_chat" msgid="1872255818640336072">"Görüntülü sohbet"</string>
- <string name="connections" msgid="8098440723172028350">"Bağlantılar"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Bağlantı ekle"</string>
- <string name="recent" msgid="2659189233141493004">"Son"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Son güncellemeler"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kişi"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabı"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Bu uygulamadan düzenlenemez."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Bu cihazda düzenlenemez."</string>
<string name="take_photo" msgid="7496128293167402354">"Fotoğraf çek"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Yeni fotoğraf çek"</string>
<string name="pick_photo" msgid="2129509985223564942">"Fotoğraf seç"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Yeni fotoğraf seç"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kişi listesi güncelleniyor."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Aranıyor…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Seçileni göster"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Tümünü göster"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Tümünü seç"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Tümünün seçimini kaldır"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yeni ekle"</string>
- <string name="add_organization" msgid="7311893231158291197">"Kuruluş ekle"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarih"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Grup adı"</string>
- <string name="change_photo" msgid="8530597935483526383">"Değiştir"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Birincil fotoğraf"</string>
- <string name="description_star" msgid="2605854427360036550">"favori"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Kişiyi düzenle"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Mevcut kişi, seçili kişiye bağlansın mı?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"İptal edilir"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Geri"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"kapatın"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçili kişiyi düzenlemeye geçilsin mi? Şimdiye kadar girdiğiniz bilgiler kopyalanacak."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kişilerime kopyala"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Kişilerime ekle"</string>
<string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> dizini"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Özel"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
<string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
<string name="menu_help" msgid="1680178646764069976">"Yardım ve geri bildirim"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Görüntüleme seçenekleri"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Telefon numarası"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kişilere ekle"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kişiye ekle"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Kapat"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Yılı ekle"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kişi"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Yükleniyor..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yeni kişi oluştur"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hesap ekle"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kişileri içe aktar"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Yeni grup oluştur"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Yeni grup oluştur"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> grup</item>
- <item quantity="one">1 grup</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" grubu silinsin mi? (Kişilerin kendileri silinmeyecektir.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> türünde <xliff:g id="COUNT_2">%1$d</xliff:g> kişi</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> türünde <xliff:g id="COUNT_0">%1$d</xliff:g> kişi</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> kişi</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kişi</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"İçe aktar"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Yeni oluştur…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" etiketi silinsin mi? (Kişiler silinmez.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Başka bir kişiye bağlamadan önce kişi adını yazın."</string>
<string name="copy_text" msgid="3257145021583508761">"Panoya kopyala"</string>
<string name="set_default" msgid="4417505153468300351">"Varsayılan olarak ayarla"</string>
<string name="clear_default" msgid="7193185801596678067">"Varsayılanları temizle"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Metin kopyalandı"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Değişiklikleriniz yok sayılsın ve düzenlemeden çıkılsın mı?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Değişiklikler yok sayılsın mı?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Yok say"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Düzenlemeye devam et"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Profilimi ayarla"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Kişinin adını yazın"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Grubun adı"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"İptal"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Özelleştirmeler silinsin mi?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Kişilerde arayın"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kişileri kaldır"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Yerel profilim"</string>
<string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Tüm içerik görüntüleniyor"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Telefonunuzu kaybetseniz dahi kişilerinizi güvenle saklayın: çevrimiçi bir hizmetle senkronize edin."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hesap ekleyin"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Yeni kişiniz yedeklenmeyecek. Kişileri çevrimiçi olarak yedekleyen bir hesap eklensin mi?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Birkaç dakikanızı ayırarak, kişilerinizi Google\'a yedeklemek için kullanılacak bir hesap ekleyin."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yeni kişiler <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hesabına kaydedilecek."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yeni kişiler için bir varsayılan hesap seçin:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Yeni kişi ekle"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Yeni kişi oluştur"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kişiyi düzenle"</string>
- <string name="keep_local" msgid="1258761699192993322">"Yerel olarak sakla"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Yalnızca görüntüleme"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Düzenlemek için kişi seçin"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Bağlı kişiler"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Ekle"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Bağlantıyı kes"</string>
<string name="add_account" msgid="8201790677994503186">"Hesap ekle"</string>
<string name="add_new_account" msgid="5748627740680940264">"Yeni hesap ekle"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Veritabanı dosyalarını dışarı aktar"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"yeni kişi ekle"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Yeni kişi oluşturulur"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Daha fazla göster"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Daha az göster"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Tümünü göster"</string>
<string name="recent_card_title" msgid="8982782042698001695">"En son"</string>
<string name="about_card_title" msgid="2920942314212825637">"Hakkında"</string>
- <string name="send_message" msgid="8938418965550543196">"İleti gönder"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Kişisel kopya oluşturuluyor..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Dün"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Kişisel kopya oluşturuluyor..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Yarın"</string>
<string name="today" msgid="8041090779381781781">"Bugün"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Bugün şu saatler arasında: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Yarın şu saatler arasında: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Başlıksız etkinlik)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Ayarla"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Web sitesi"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Etkinlik"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"İlişki"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Hesap"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
<string name="header_email_entry" msgid="8666093061171624478">"E-posta"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Fotoğraf"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kişi düzenleyiciyi genişletmek için tıklayın."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kişi düzenleyiciyi daraltmak için tıklayın."</string>
<string name="content_description_directions" msgid="2686791825798189335">"konum için yol tarifi"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"son gelen sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. yanıtlamak için dokunun"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"son gelen sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. yanıtlamak için dokunun"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gelen"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"giden"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"cevapsız"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"son gelen çağrı. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. geri aramak için dokunun"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"son gelen çağrı. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. geri aramak için dokunun"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Kişinin Hangouts tanımlayıcısını e-posta veya telefon alanına girdiğinizde Hangouts daha iyi çalışır."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Diğer alanlar"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Fotoğrafı değiştir"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Editör açılamadı."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Kaydedilecek hesap:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Şu anda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabına kaydediliyor. Farklı bir hesap seçmek için iki kez hafifçe dokunun."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Bağlı kişiler (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Bağlı kişi</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Bağlı <xliff:g id="COUNT">%d</xliff:g> kişi"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Diğer alanlar"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kişi fotoğrafı değiştirilir"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kişi fotoğrafı eklenir"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kişi fotoğrafı"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Düzenleyici açılamadı."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Kaydedilecek hesap:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabındaki kişi bilgisi düzenlenebilir değil"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KİŞİLERİ BAĞLA"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"İPTAL"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Olası kopya</item>
- <item quantity="one">1 Olası kopya</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">Bağlı <xliff:g id="COUNT">%d</xliff:g> kişi</item>
- <item quantity="one">Bağlı 1 kişi</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Bu kişi"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Olası kopyalar"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kişiler aynı kişi olabilir. Tek bir kişi olarak birleştirecek şekilde bağlantı oluşturabilirsiniz."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Bağlantılı kişiler"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Hesaplarınızdan"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Fotoğraf çek"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Tüm fotoğraflar"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Fotoğraf seçin"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> adlı hesaptan"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Sil: <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Sil: <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Sil: <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotoğraf: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> işaretlenmedi"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotoğraf: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> işaretlendi"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Bilinmeyen hesaptan fotoğraf işaretlenmedi"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Bilinmeyen hesaptan fotoğraf işaretlendi"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Kişi listesi, dil değişikliğini yansıtmak üzere güncelleniyor.\n\nLütfen bekleyin..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Öneriler"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yeni"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Gezinme çekmecesi açılır"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Gezinme çekmecesi kapatılır"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> etiketi"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Etiketler"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Hesaplar"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Ortak geçmişinizi görün"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Etkinlikler ve mesajlar"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Etkinlikler"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"İletiler"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Öneriler"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Kişilerinizi düzenli ve kullanışlı halde tutun"</string>
+ <string name="undo" msgid="1425165101664071422">"Geri al"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Telefon et: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Çağrı yap (ev)"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Çağrı yap (mobil)"</string>
+ <string name="call_work" msgid="5328785911463744028">"Çağrı yap (iş)"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Çağrı yap (iş faksı)"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Çağrı yap (ev faksı)"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Çağrı yap (çağrı cihazı)"</string>
+ <string name="call_other" msgid="8563753966926932052">"Ara"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Geri aramayı ara"</string>
+ <string name="call_car" msgid="3280537320306436445">"Çağrı yap (araç)"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Çağrı yap (şirket ana hattı)"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Ara (ISDN)"</string>
+ <string name="call_main" msgid="6082900571803441339">"Çağrı yap (ana hat)"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Faksı çağrı yap"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Çağrı yap (telsiz)"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Teleksi ara"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Ara (TTY/TDD)"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ara (iş mobil)"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"İş çağrı cihazını ara"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Telefon et: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Çağrı yap (MMS)"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Telefon et)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Kısa mesaj gönder: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS gönder (ev)"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS gönder (mobil)"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS gönder (iş)"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS gönder (iş faksı)"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS gönder (ev faksı)"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS gönder (çağrı cihazı)"</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS Gönder ()"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS Gönder (geri arama)"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS gönder (araç)"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS gönder (şirket merkezi)"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS Gönder (ISDN)"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS Gönder (ana hat)"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Faksa SMS gönder"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS gönder (telsiz)"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS Gönder (teleks)"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS Gönder (TTY/TDD)"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS Gönder (iş mobil)"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS Gönder (iş yeri çağrı cihazı)"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS Gönder (<xliff:g id="ASSISTANT">%s</xliff:g>)"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS gönder (MMS)"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Mesaj gönder)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Görüntülü görüşme yapın"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Sık iletişim kurulanlar silinsin mi?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Kişiler ve Telefon uygulamalarındaki sık iletişim kurulanlar listesini temizleyecek ve e-posta uygulamalarını adres tercihlerinizi en baştan öğrenmeye zorlayacaksınız."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Sık iletişim kurulanlar siliniyor…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Uygun"</string>
+ <string name="status_away" msgid="1838861100379804730">"Dışarıda"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Meşgul"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Diğer"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Dizin"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"İş dizini"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tüm kişiler"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> için hızlı kişi"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Adsız)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sık iletişim kurulanlar"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Telefon numarası olan tüm kişiler"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"İş profili kişileri"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Gncellmlri görüntüle"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Cihaz"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ad"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Takma ad"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ad"</string>
+ <string name="name_family" msgid="7466985689626017037">"Soyadı"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Ad öneki"</string>
+ <string name="name_middle" msgid="8467433655992690326">"İkinci ad"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Ad soneki"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Fonetik ad"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Fonetik ad"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Fonetik ikinci ad"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Fonetik soyadı"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-posta"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Adres"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Kuruluş"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"İlişki"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Özel tarih"</string>
+ <string name="sms" msgid="1756857139634224222">"Kısa mesaj"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Adres"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Şirket"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Başlık"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Notlar"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Özel"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Web sitesi"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Etiketler"</string>
+ <string name="email_home" msgid="8573740658148184279">"E-posta gönder (ev)"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"E-posta gönder (mobil)"</string>
+ <string name="email_work" msgid="2807430017302722689">"E-posta gönder (iş)"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-posta"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-posta gönder: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"E-posta"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Cadde"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Şehir"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Eyalet"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Alan kodu"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Ülke"</string>
+ <string name="map_home" msgid="1243547733423343982">"Ev adresini görüntüle"</string>
+ <string name="map_work" msgid="1360474076921878088">"İş adresini görüntüle"</string>
+ <string name="map_other" msgid="3817820803587012641">"Adresi görüntüle"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> adresini görüntüle"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM kullanarak sohbet et"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live kullanarak sohbet et"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo kullanarak sohbet et"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype kullanarak sohbet et"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ kullanarak sohbet et"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk kullanarak sohbet et"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ kullanarak sohbet et"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber kullanarak sohbet et"</string>
+ <string name="chat" msgid="9025361898797412245">"Sohbet"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"sil"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Diğer ad alanları gösterilir"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ad alanları daraltılır"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Diğer fonetik ad alanları gösterilir"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ad alanları daraltılır"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Genişletir"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Daraltır"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Genişletildi"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Daraltıldı"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tüm kişiler"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Yıldızlı"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Özelleştir"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kişi"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Diğer tüm kişiler"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tüm kişiler"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Senkronize grubu kaldır"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Senk. grup ekle"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Diğer gruplar..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" adlı grubu senkronizasyondan kaldırmak, gruplanmamış tüm kişilerin de senkronizasyondan kaldırılmasına neden olur."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Görüntüleme seçenekleri kaydediliyor..."</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Özelleştirilmiş görünüm"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"İçe aktarılan kişilerin kaydedileceği yer:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM kart"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"<xliff:g id="SIM_NAME">%1$s</xliff:g> SIM"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d kişi</item>
+ <item quantity="one">1 kişi</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> kişi • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> kişi • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf dosyası"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"İçe aktarılacak öğe yok"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"vCard\'daki kişiler içe aktarılsın mı?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> dosyasının içe aktarılması iptal edilsin mi?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> dosyasının dışa aktarılması iptal edilsin mi?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"İçe/dışa aktrma işlmi iptl edilemedi"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Bilinmeyen hata."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" açılamadı: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Dışa aktarıcı başlatılamadı: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Dışa verilebilecek kişi yok."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Gerekli bir izni devre dışı bıraktınız."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Dışa aktarma sırasında bir hata oluştu: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"G/Ç Hatası"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Bellek yetersiz. Dosya çok büyük olabilir."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Biçim desteklenmiyor."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını dışa aktarma tamamlandı."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kişileri dışa aktarma işlemi tamamlandı."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kişileri dışa aktarma işlemi tamamlandı. Dışa aktarılan kişileri paylaşmak için bildirimi tıklayın."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Kişileri paylaşmak için dokunun."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını dışa aktarma iptal edildi."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kişi verileri dışa aktarılıyor"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kişi verileri dışa aktarılıyor."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Veritabanı bilgileri alınamadı."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Dışa aktarılabilecek kişi yok."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard oluşturucu düzgün başlamadı."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Dışa aktarılamadı"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kişi verileri dışa aktarılamadı.\nNedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> içe aktarılıyor"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard verileri okunamadı"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> dosyasından aktarım tamamlandı"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını içe aktarma iptal edildi"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> kısa bir süre içinde içe aktarılacak."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Dosya kısa bir süre sonra içe aktarılacaktır."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard\'ı içe aktarma isteği reddedildi. Daha sonra tekrar deneyin."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kişiler kısa bir süre içinde dışa aktarılacak."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard\'ı dışa aktarma isteği reddedildi. Daha sonra tekrar deneyin."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kişi"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard\'lar geçici bir yerel depolama alanında önbelleğe alınıyor. Asıl içe aktarma işlemi kısa süre içinde başlayacak."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"vCard içe aktarılamadı."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kişi NFC ile alındı"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Önbelleğe alınıyor"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"İçe aktarılıyor <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">".vcf dosyasına aktar"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sıralama ölçütü"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Fonetik ad"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Her zaman göster"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Boşsa gizle"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ad"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Soyadı"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ad biçimi"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Önce ad"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Önce soyadı"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Hesaplar"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Yeni kişiler için varsayılan hesap"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Bilgilerim"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Profilinizi oluşturun"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Kişiler Hakkında"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Favori kişileri paylaş"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Tüm kişileri paylaş"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kişiler paylaşılamadı."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kişileri dışa aktarın"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Şuradaki kişileri içe aktarın:"</string>
+ <string name="share_error" msgid="948429331673358107">"Bu kişi paylaşılamıyor."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Paylaşılacak kişi yok."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Görüntülenecek kişiler"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Görüntülenecek kişiler"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Görünümü özelleştirin"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Kaydet"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Kişilerde arayın"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Sık Kullanılanlar"</string>
+ <string name="menu_import" msgid="6107961135813836467">"İçe aktar"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Dışa aktar"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Engellenen numaralar"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> aracılığıyla"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> üzerinden şu saatte: <xliff:g id="DATE">%1$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"aramayı durdurun"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Aramayı temizle"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Hesap"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Çağrılar için her zaman bunu kullan"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Notla telefon et"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Çağrıyla göndermek için bir not yazın…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"GÖNDER VE TELEFON ET"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Derleme sürümü"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Açık kaynak lisansları"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Açık kaynak yazılımlar için lisans ayrıntıları"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Gizlilik politikası"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Hizmet şartları"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Açık kaynak lisansları"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URL açılamadı."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> işaretlendi"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> işaretlenmedi"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Görüntülü görüşme yapın"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Sil"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Üç nokta"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sn."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> dk. <xliff:g id="SECONDS">%2$s</xliff:g> sn."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> sa. <xliff:g id="MINUTES_1">%2$s</xliff:g> dk. <xliff:g id="SECONDS">%3$s</xliff:g> sn."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu kısayol devre dışı bırakıldı"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kişi kaldırıldı"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"İçe aktar"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kişi seçin"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM kartınızda kişi yok"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Bu kişi zaten listenizde bulunuyor"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> SIM kişisi içe aktarıldı</item>
+ <item quantity="one">1 SIM kişisi içe aktarıldı</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"SIM kişileri içe aktarılamadı"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"SIM\'den içe aktarın"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"İptal eder"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Otomatik senkronizasyon kapalı. Açmak için dokunun."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Kapatır"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Hesap düzeyinde senkronizasyon kapalı. Açmak için dokunun."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Otomatik senkronizasyon etkinleştirilsin mi?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Yalnızca Google Kişiler değil, tüm uygulama ve hesaplarda yaptığınız değişiklikler web ile cihazlarınız arasında güncel tutulur."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Aç"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Bağlantı yok"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Diğer seçenekler gösterilir"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartın içe aktarılması tamamlandı"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"İçe aktarma başarısız oldu"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM karttaki kişiler içe aktarılamadı"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM kişileri içe aktarılıyor"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Bildirimler"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index a88d5f913..5c3624925 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Контакти"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Переглянути контакт"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Редагувати контакт"</string>
<string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Додати контакт"</string>
<string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Швидкий набір"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Швидке повідомл."</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Вибрати ярлик контакту"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Вибір номера для виклику"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Вибрати номера для SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Вибрати контакт"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додати в контактні дані"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Вибрати контакт"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Вибрати"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Створити новий контакт"</string>
- <string name="starredList" msgid="4817256136413959463">"Із зіроч."</string>
- <string name="frequentList" msgid="7154768136473953056">"Найчастіші"</string>
- <string name="strequentList" msgid="5640192862059373511">"Вибране"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Деталі контакту"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Редаг. контакт"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Створити контакт"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Редагувати групу"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Створити групу"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Про контакт"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Оновлення"</string>
<string name="searchHint" msgid="8482945356247760701">"Пошук контактів"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Див. контакт"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Додати до вибраного"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Видалити з вибраного"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Видалено з вибраного"</string>
@@ -49,42 +35,62 @@
<string name="menu_editContact" msgid="9042415603857662633">"Редагувати"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Видалити"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Змінити фото"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Помістити на головний екран"</string>
- <string name="menu_call" msgid="3992595586042260618">"Набрати конт."</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Повід. контакт"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Створити ярлик"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Розділити"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Редагувати"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Видалити"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Додати контакт"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Додати групу"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Вилучити контакти"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Перейменувати мітку"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Видалити мітку"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Додати контакт"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Вибрати контакти"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додати контакти"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Вилучити з мітки"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Створити мітку"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Розділити цей контакт?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Розділити"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Зберегти зміни та розділити цей контакт?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Зберегти та розділити"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Зберегти зміни й об’єднати з вибраним контактом?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Зберегти й об’єднати"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Об’єднання"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Розділення"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Об’єднати"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Переглянути об’єднані контакти"</string>
<string name="menu_save" msgid="1727844363591825909">"Зберегти"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Об’єднання контактів"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Виберіть контакт, який ви хочете об’єднати з контактом <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Показ. всі контакти"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Пропоновані контакти"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Усі контакти"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакт <xliff:g id="NAME">%s</xliff:g> зв’язано"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Контакти об’єднано"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Контакт <xliff:g id="NAME">%1$s</xliff:g> видалено"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> і <xliff:g id="NAME_1">%2$s</xliff:g> видалено"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… видалено"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Контакти видалено</item>
<item quantity="few">Контакти видалено</item>
<item quantity="many">Контакти видалено</item>
<item quantity="other">Контакти видалено</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
+ <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакти</item>
+ <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> контактів</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакти (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> контактів (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Від Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"З обл. запису <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Мелодія"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Усі виклики на голосову пошту"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Дані з облікових записів лише для перегляду не можна видалити, але можна сховати."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Сховати"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"У контакті, який ви хочете видалити, є дані з кількох облікових записів. Дані з облікових записів лише для перегляду буде сховано, а не видалено."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Виберіть принаймні два контакти, щоб об’єднати їх."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Об’єднати вибрані контакти?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Об’єднати"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Спрямовувати на голосову пошту"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Не спрямовувати на гол. пошту"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Цей контакт доступний лише для перегляду. Його не можна видалити, однак можна сховати."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Сховати контакт"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Дані з облікових записів лише для перегляду буде сховано в цьому контакті, а не видалено."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Видалити цей контакт?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Видалити вибрані контакти?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Дані з облікових записів лише для перегляду не можна видалити, але можна сховати."</string>
@@ -92,189 +98,126 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Якщо видалити цей контакт, буде видалено дані з кількох облікових записів."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Видалити цей контакт?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Видалити"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Відхилити зміни"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Контакт не існує."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт додано на головний екран."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт <xliff:g id="NAME">%s</xliff:g> додано на головний екран."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Створ. новий контакт"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Створити новий контакт"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Організація"</item>
- <item msgid="7196592230748086755">"Прим."</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"У пристрої немає доступних зображень."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"У телефоні немає доступних зображень."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"На пристрої немає зображень."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Фото контакта"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Назва"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Надсилати дзвінки на голос. пошту"</string>
<string name="removePhoto" msgid="4898105274130284565">"Видалити фото"</string>
- <string name="noContacts" msgid="4955659076981974652">"Контактів немає"</string>
- <string name="noGroups" msgid="8614664663561385253">"Немає груп."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Для створення груп потрібен обліковий запис."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"У цій групі немає людей."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Щоб додати когось, відредагуйте групу."</string>
- <string name="savingContact" msgid="4075751076741924939">"Збереж-ня контакту…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Ваш список контактів порожній"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Немає контактів із цією міткою"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"У цьому обліковому записі немає контактів"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Ваш список контактів порожній"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Контакт <xliff:g id="DISPLAY_NAME">%s</xliff:g> збережено"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Контакт збережено"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Контакти розділено"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Не вдалося зберегти зміни в контакті."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Не вдалося розділити контакт."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Не вдалося об’єднати контакти."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Не вдалося зберегти контакт."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Не вдалося зберегти зміни у фотографії контакта."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Групу збережено."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Не вдалося зберегти зміни в групі."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт із номерами телефону</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакти з номерами телефону</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> контактів із номерами телефону</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> контакта з номерами телефону</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Немає контактів з номерами телефону"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Не вдалося зберегти зміни в контакті"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Не вдалося від’єднати контакт"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Не вдалося зв’язати контакти"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Помилка збереження контакта"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не вдалося зберегти зміни у фотографії контакта"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не вдалося завантажити мітку"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Мітку видалено"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Мітку створено"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Не вдається створити мітку"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Мітку оновлено"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Вилучено з мітки"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Додано мітку"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Не вдалося зберегти зміни в мітці"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Ця назва вже існує"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Деякі контакти не мають електронних адрес."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Деякі контакти не мають номерів телефону."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Надіслати електронний лист"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Надіслати повідомлення"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Вибрати контакти"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Надіслати"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Контактів немає"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="few">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="many">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- <item quantity="other">Знайдено <xliff:g id="COUNT">%d</xliff:g></item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Усі контакти"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Вибране"</string>
- <string name="callBack" msgid="5498224409038809224">"Передзвонити"</string>
- <string name="callAgain" msgid="3197312117049874778">"Набрати знову"</string>
- <string name="returnCall" msgid="8171961914203617813">"Зворот. виклик"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Додати в контакти <xliff:g id="EMAIL">%s</xliff:g>?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"фото контакту"</string>
- <string name="description_plus_button" msgid="515164827856229880">"плюс"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> із <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактів"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Імена ваших контактів"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Не знайдено програму для обробки цієї дії."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Натисніть, щоб повернутися на попередній екран"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Додайте номер телефону"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Додайте електронну адресу"</string>
<string name="missing_app" msgid="1466111003546611387">"Не знайдено програму для обробки цієї дії."</string>
<string name="menu_share" msgid="943789700636542260">"Надіслати"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Додати в контакти"</string>
- <string name="share_via" msgid="563121028023030093">"Надісл. контакт через"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Створити групу в обліковому записі"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Додати"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Надіслати контакти через</item>
+ <item quantity="few">Надіслати контакти через</item>
+ <item quantity="many">Надіслати контакти через</item>
+ <item quantity="other">Надіслати контакти через</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Вибір облікового запису"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Створити мітку"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Перейменувати мітку"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Назва мітки"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Назва мітки"</string>
<string name="audio_chat" msgid="2535716629358298691">"Голосовий чат"</string>
<string name="video_chat" msgid="1872255818640336072">"Відеочат"</string>
- <string name="connections" msgid="8098440723172028350">"Зв’язки"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Додати зв’язок"</string>
- <string name="recent" msgid="2659189233141493004">"Останні"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Останні оновлення"</string>
<string name="account_type_format" msgid="718948015590343010">"Контакт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Обліковий запис <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"З цієї програми неможливо редагувати."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Неможливо редагувати на цьому пристрої"</string>
<string name="take_photo" msgid="7496128293167402354">"Зробити фото"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Зробити нове фото"</string>
<string name="pick_photo" msgid="2129509985223564942">"Вибрати фото"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Вибрати нове фото"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Список контактів оновлюється."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Пошук..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Показати вибране"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Показати все"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Вибрати все"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Скасувати все"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Додати новий запис"</string>
- <string name="add_organization" msgid="7311893231158291197">"Додати організацію"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Дата"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Назва групи"</string>
- <string name="change_photo" msgid="8530597935483526383">"Змінити"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Основн. фото"</string>
- <string name="description_star" msgid="2605854427360036550">"вибране"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Редаг. контакта"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Об’єднати поточний контакт із вибраним контактом?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Мітка"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Скасувати"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрити"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Перейти до редагування вибраного контакта? Введену досі інформацію буде скопійовано."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Копіювати в мої контакти"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Додати до групи \"Мої контакти\""</string>
<string name="contact_directory_description" msgid="683398073603909119">"Каталог <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Спеціальні"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Налаштування"</string>
<string name="menu_settings" msgid="377929915873428211">"Налаштування"</string>
<string name="menu_help" msgid="1680178646764069976">"Довідка й відгуки"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Параметри відображення"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Номер телефону"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Додати до контактів"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Додати до контакта"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Закрити"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Вказати рік"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Контакт"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Завантаження..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Створити новий контакт"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Додати обліковий запис"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Імпортувати контакти"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Створити нову групу"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Створити нову групу"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> група</item>
- <item quantity="few"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
- <item quantity="many"><xliff:g id="COUNT">%0$d</xliff:g> груп</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> групи</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Видалити групу \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Самі контакти не буде видалено)."</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> особа з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> особи з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> осіб із <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> особи з <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> особа</item>
- <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> особи</item>
- <item quantity="many"><xliff:g id="COUNT_1">%1$d</xliff:g> осіб</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> особи</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Імпортувати"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Створити…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Видалити мітку \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Самі контакти видалено не буде.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Введіть ім’я контакта, перш ніж об’єднати його."</string>
<string name="copy_text" msgid="3257145021583508761">"Копіювати в буфер обміну"</string>
<string name="set_default" msgid="4417505153468300351">"Установити за умовчанням"</string>
<string name="clear_default" msgid="7193185801596678067">"Очистити налаштування за умовчанням"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Текст скопійовано"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Відхилити зміни та закінчити редагування?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Відхилити зміни?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Відхилити"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Продовжити редагування"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Налаштувати профіль"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Введіть ім’я особи"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Назва групи"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Скасувати"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Відхилити налаштування?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Пошук контактів"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Вилучити контакти"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Мій локальний профіль"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Мій профіль на <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Відображаються всі контакти"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Збережіть свої контакти на випадок втрати свого телефону: синхронізуйте їх з онлайновою службою."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додати обліковий запис"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Для вашого нового контакта не буде створено резервні копії. Додати обліковий запис, у якому буде збережено резервні копії контактів в Інтернеті?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Додайте обліковий запис, щоб створити резервну копію ваших контактів у Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Нові контакти буде збережено в обліковому записі <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Виберіть обліковий запис за умовчанням для нових контактів:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Додати контакт"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Створити новий контакт"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Змінити контакт"</string>
- <string name="keep_local" msgid="1258761699192993322">"Зберегти локально"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Лише перегляд"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Вибрати контакт для редагування"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Об’єднані контакти"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Додати"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Розділити"</string>
<string name="add_account" msgid="8201790677994503186">"Додати обліковий запис"</string>
<string name="add_new_account" msgid="5748627740680940264">"Додати новий обліковий запис"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Експортувати файли бази даних"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"додати нового контакта"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Створити новий контакт"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Показати більше"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Показати менше"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Показати все"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Нещодавні"</string>
<string name="about_card_title" msgid="2920942314212825637">"Ім\'я контакту:"</string>
- <string name="send_message" msgid="8938418965550543196">"Надіслати повідомлення"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Створення особистої копії…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Учора"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Створення особистої копії..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Завтра"</string>
<string name="today" msgid="8041090779381781781">"Сьогодні"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Сьогодні о <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Завтра о <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Подія без назви)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Установити"</string>
<string name="header_im_entry" msgid="3581720979640225615">"Чат"</string>
@@ -284,70 +227,320 @@
<string name="header_website_entry" msgid="1411467850000824745">"Веб-сайт"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Подія"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Зв’язок"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Обліковий запис"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Ім’я"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Електронна пошта"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Фото"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Натисніть, щоб розгорнути редактор контактів."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Натисніть, щоб згорнути редактор контактів."</string>
<string name="content_description_directions" msgid="2686791825798189335">"маршрути до місця"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Останнє SMS-повідомлення: <xliff:g id="MESSAGE_BODY">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Натисніть, щоб відповісти"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Останнє SMS-повідомлення: <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Натисніть, щоб відповісти"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"вхідні дзвінки"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"вихідні дзвінки"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"пропущені дзвінки"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Останній дзвінок: <xliff:g id="CALL_TYPE">%s</xliff:g>, <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Натисніть, щоб зателефонувати"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Останній дзвінок: <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Натисніть, щоб зателефонувати"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Ви: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Щоб сервіс Hangouts працював краще, введіть свій ідентифікатор Hangouts у поле \"Електронна адреса\" або \"Телефон\"."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Більше полів"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Змінити фотографію"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Не вдалося відкрити редактор."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Зберігання в обліковий запис"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Зараз контакт зберігається в обліковий запис <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Двічі торкніться, щоб вибрати інший обліковий запис."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Об’єднані контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">Об’єднані контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">Об’єднані контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Об’єднані контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Об’єднаних контактів: <xliff:g id="COUNT">%d</xliff:g>"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Більше полів"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Змінити фотографію контакту"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додати фотографію контакту"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Фотографія контакту"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Не вдалося відкрити редактор."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Зберігання в обліковий запис"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Контакти з облікового запису <xliff:g id="ACCOUNT">%s</xliff:g> не можна редагувати"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ОБ’ЄДНАТИ КОНТАКТИ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"СКАСУВАТИ"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> можлива копія</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> можливі копії</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> можливих копій</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> можливої копії</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> об’єднаний контакт</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> об’єднані контакти</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> об’єднаних контактів</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> об’єднаного контакта</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="few">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="many">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Цей контакт"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Можливі копії"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Ці контакти можуть стосуватися однієї людини. Ви можете об’єднати їх."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Об’єднані контакти"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"З ваших облікових записів"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Сфотографувати"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Усі фотографії"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Вибрати фотографію"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"З облікового запису <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Видалити <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Видалити <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Видалити <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фото з <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> не вибрано"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Фото з <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> вибрано"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Фото з невідомого облікового запису не вибрано"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Фото з невідомого облікового запису вибрано"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Список контактів оновлено для відображення зміни мови.\n\nЗачекайте..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Пропозиції"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Нові"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Відкрити панель навігації"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Закрити панель навігації"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Мітка \"<xliff:g id="LABEL_NAME">%s</xliff:g>\""</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Мітки"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Облікові записи"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Показувати всю історію разом"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Події та повідомлення"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Події"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Повідомлення"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Пропозиції"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Упорядковуйте свої контакти для зручності користування"</string>
+ <string name="undo" msgid="1425165101664071422">"Відмінити"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Зателефонувати на такий номер: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Набрати дом. ном."</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Набрати моб."</string>
+ <string name="call_work" msgid="5328785911463744028">"Набрати роб."</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Набрати роб. факс"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Набрати дом. факс"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Набрати пейдж."</string>
+ <string name="call_other" msgid="8563753966926932052">"Набрати"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Набрати зворот. виклик"</string>
+ <string name="call_car" msgid="3280537320306436445">"Набрати ном. в авто"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Набрати осн. роб. тел."</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Набрати ном. ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Набрати осн. тел."</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Набрати факс"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Набрати радіотел."</string>
+ <string name="call_telex" msgid="2223170774548648114">"Набрати телекс"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Набрати ном. TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Набрати роб. моб."</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Двон. на роб. пейдж."</string>
+ <string name="call_assistant" msgid="670941612175068337">"Зателефонувати на такий номер: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Набрати ном. MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (зателефонувати)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Надіслати SMS на такий номер: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS на дом. тел."</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS на моб."</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS на роб. ном."</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS на роб. факс"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS на дом. факс"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS на пейдж."</string>
+ <string name="sms_other" msgid="806127844607642331">"SMS"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS на зворот. викл."</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS на ном. в авто"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS на осн. роб. тел."</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS на ном. ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS на осн. ном."</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"SMS на факс"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS на радіотел."</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS на телекс"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS на TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS на роб. моб."</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS на роб. пейдж."</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"SMS на <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"SMS на ном. MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (надіслати повідомлення)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Здійснити відеодзвінок"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Очистити список частих контактів?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Буде видалено список користувачів, з якими ви часто спілкуєтеся, з додатків Контакти та Телефон і скинуто налаштування адрес у додатках для електронної пошти."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Очищення списку частих контактів…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Доступний"</string>
+ <string name="status_away" msgid="1838861100379804730">"Не на місці"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Зайнятий"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Інші"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Робочі контакти"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Усі контакти"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Швидкий контакт із: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Без імені)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часті контакти"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Усі контакти з номерами телефону"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти в робочому профілі"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Переглян. оновлення"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Пристрій"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ім\'я"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдонім"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ім’я"</string>
+ <string name="name_family" msgid="7466985689626017037">"Прізвище"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Префікс імені"</string>
+ <string name="name_middle" msgid="8467433655992690326">"По-батькові"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Суфікс імені"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Вимова імені"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Вимова імені"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Вимова по-батькові"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Вимова прізвища"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Телефон"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Електронна адреса"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Адреса"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Чат"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Організація"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Стосунки"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Спеціальна дата"</string>
+ <string name="sms" msgid="1756857139634224222">"Текстове повідомлення"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Адреса"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Компанія"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Назва"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Примітки"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Спеціальне"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Веб-сайт"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Мітки"</string>
+ <string name="email_home" msgid="8573740658148184279">"Написати на дом. адр."</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Напис. на моб."</string>
+ <string name="email_work" msgid="2807430017302722689">"Напис. на роб. адр."</string>
+ <string name="email_other" msgid="3454004077967657109">"Надісл. ел.лист"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Написати листа на таку адресу: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Відправ."</string>
+ <string name="postal_street" msgid="8133143961580058972">"Вулиця"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Місто"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Область"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Пошт. код"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Країна"</string>
+ <string name="map_home" msgid="1243547733423343982">"Див. дом. адресу"</string>
+ <string name="map_work" msgid="1360474076921878088">"Див. роб. адресу"</string>
+ <string name="map_other" msgid="3817820803587012641">"Див. адресу"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Переглянути таку адресу: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Чат через AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Чат через Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Чат через Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Чат через Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Чат через QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Чат через Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Чат через ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Чат через Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Чат"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"видалити"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Показати більше полів імені"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Згорнути поля імен"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Показати більше полів для вимови імені"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Згорнути поля вимови імен"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Розгорнути"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Згорнути"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Розгорнуто"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Згорнуто"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Усі контакти"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Із зірочкою"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Налаштувати"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Контакт"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Усі інші контакти"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Усі контакти"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Видал. синхр. групу"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Дод. синхр. групу"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Інші групи…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Видалення групи \"<xliff:g id="GROUP">%s</xliff:g>\" із синхронізації призведе до припинення синхронізації незгрупованих контактів."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Зберіг-ня парам. відображ…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Користувацький режим"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Зберегти імпортовані контакти в обліковий запис:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM-карта <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%1$d контакт</item>
+ <item quantity="few">%1$d контакти</item>
+ <item quantity="many">%1$d контактів</item>
+ <item quantity="other">%1$d контакта</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> контакт • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="few"><xliff:g id="COUNT_2">^1</xliff:g> контакти • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="many"><xliff:g id="COUNT_2">^1</xliff:g> контактів • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> контакта • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Файл .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Немає контактів для імпорту"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Імпортувати контакти з файлу vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Скасувати імпорт файлу <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Скасувати експорт файлу <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не вдалося скасув. імпорт/експорт vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Невідома помилка."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не вдалося відкрити файл \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не вдалося запустити експортер: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Немає контакту, який можна експортувати."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Ви вимкнули обов’язковий дозвіл."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Під час експорту сталася помилка: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Помилка вводу/виводу"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недостатньо пам’яті. Можливо, файл завеликий."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат не підтримується."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Експорт файлу <xliff:g id="FILENAME">%s</xliff:g> завершено."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Контакти експортовано."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Контакти експортовано. Натисніть сповіщення, щоб надати доступ до контактів."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Торкніться, щоб поділитися контактами."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Експорт файлу <xliff:g id="FILENAME">%s</xliff:g> скасовано."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Експорт. контактні дані"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Контакти експортуються."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Не вдалось отримати інформацію бази даних."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Немає контактів для експортування."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Майстер vCard не запущено належним чином."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Помилка експорту"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Контактні дані не експортовано.\nПричина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Імпорт <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Не вдалося прочитати дані vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Імпорт файлу <xliff:g id="FILENAME">%s</xliff:g> vCard завершено"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Імпорт файлу <xliff:g id="FILENAME">%s</xliff:g> скасовано"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Файл <xliff:g id="FILENAME">%s</xliff:g> незабаром буде імпортовано."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Незабаром файл буде імпортовано."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запит на імпорт файлу vCard відхилено. Повторіть спробу пізніше."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакти невдовзі буде експортовано."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запит на експорт файлу vCard відхилено. Повторіть спробу пізніше."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Кешування файлів vCard у локальну тимчасову пам’ять. Імпорт почнеться незабаром."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Не вдалось імпортувати файл vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Конт., отрим.через NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Кешування"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Імпорт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> з <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Експортувати у файл .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Параметри сортування"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Вимова імені"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Завжди показувати"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Сховати порожнє поле"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ім’я"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Прізвище"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Формат імені"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Ім’я спочатку"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Прізвище спочатку"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Облікові записи"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Обл. запис за умовчанням для нових контактів"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Мої дані"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Налаштування профілю"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Про додаток Контакти"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Поділитися вибраними контактами"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Поділитися всіма контактами"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Не вдалося поділитися контактами."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Експорт контактів"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Імпорт контактів із джерела:"</string>
+ <string name="share_error" msgid="948429331673358107">"Цей контакт неможливо надіслати."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Немає контактів, якими можна поділитися."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти для показу"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти для показу"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Налаштувати перегляд"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Зберегти"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Пошук серед контактів"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Вибране"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Імпортувати"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Експортувати"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблоковані номери"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"через <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> через <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"припинити пошук"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Очистити поле пошуку"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Обліковий запис"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Завжди використовувати для викликів"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Зателефонувати й надіслати нотатку"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Введіть нотатку, яку потрібно надіслати під час виклику…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"ЗАТЕЛЕФОНУВАТИ Й НАДІСЛАТИ"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> з <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Версія складання"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцензії з відкритим кодом"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Деталі ліцензії на програмне забезпечення з відкритим кодом"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Політика конфіденційності"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Умови використання"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Ліцензії з відкритим кодом"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Не вдалося відкрити посилання."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> вибрано"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> не вибрано"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Почати відеодзвінок"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Видалити"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Три крапки"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> хв <xliff:g id="SECONDS">%2$s</xliff:g> с"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> год <xliff:g id="MINUTES_1">%2$s</xliff:g> хв <xliff:g id="SECONDS">%3$s</xliff:g> с"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ярлик вимкнено"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт вилучено"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Імпортувати"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Вибрати контакти"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"На SIM-карті немає контактів"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Контакт уже є у вашому списку"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one">Імпортовано <xliff:g id="COUNT">%d</xliff:g> контакт із SIM-карти</item>
+ <item quantity="few">Імпортовано <xliff:g id="COUNT">%d</xliff:g> контакти із SIM-карти</item>
+ <item quantity="many">Імпортовано <xliff:g id="COUNT">%d</xliff:g> контактів із SIM-карти</item>
+ <item quantity="other">Імпортовано <xliff:g id="COUNT">%d</xliff:g> контакта із SIM-карти</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Не вдалось імпортувати контакти із SIM-карти"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Імпорт із SIM-карти"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Скасувати"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Автоматичну синхронізацію вимкнено. Торкніться, щоб увімкнути."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Закрити"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Синхронізацію облікового запису вимкнено. Торкніться, щоб увімкнути."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Увімкнути автоматичну синхронізацію?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Зміни, які ви вносите в усі додатки й облікові записи (не тільки в Контакти Google), синхронізуватимуться між веб-версією та вашими пристроями."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Увімкнути"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Немає з’єднання"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Показати більше"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-карту імпортовано"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Не вдалось імпортувати"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не вдалось імпортувати контакти із SIM-карти"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Імпорт SIM-карти"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Сповіщення"</string>
</resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
deleted file mode 100644
index 92ed655e8..000000000
--- a/res/values-ur-rPK/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"رابطے"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"رابطے"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"رابطہ دیکھیں"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"رابطہ میں ترمیم کریں"</string>
- <string name="contactsList" msgid="8661624236494819731">"رابطے"</string>
- <string name="shortcutContact" msgid="749243779392912958">"رابطہ"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"ڈائریکٹ ڈائل"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"ڈائریکٹ پیغام"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"رابطہ کا شارٹ کٹ منتخب کریں"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"کال کرنے کیلئے ایک نمبر منتخب کریں"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"پیغام بھیجنے کیلئے ایک نمبر منتخب کریں"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"رابطے میں شامل کریں"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ایک رابطہ منتخب کریں"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"نیا رابطہ بنائیں"</string>
- <string name="starredList" msgid="4817256136413959463">"ستارے کے نشان والے"</string>
- <string name="frequentList" msgid="7154768136473953056">"اکثر"</string>
- <string name="strequentList" msgid="5640192862059373511">"پسندیدہ"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"رابطہ کی تفصیلات"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"رابطہ میں ترمیم کریں"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"رابطہ بنائیں"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"گروپ میں ترمیم کریں"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"گروپ بنائیں"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"تفصیل"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"اپ ڈیٹس"</string>
- <string name="searchHint" msgid="8482945356247760701">"رابطے تلاش کریں"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"رابطہ دیکھیں"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"پسندیدہ میں شامل کریں"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"پسندیدہ سے ہٹائیں"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"پسندیدہ سے ہٹا دیا گیا"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"پسندیدہ میں شامل کر دیا گیا"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"ترمیم کریں"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"حذف کریں"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"تصویر بدلیں"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"ہوم اسکرین پر رکھیں"</string>
- <string name="menu_call" msgid="3992595586042260618">"رابطہ کو کال کریں"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"رابطہ کو متن بھیجیں"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"لنک ختم کریں"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"ترمیم کریں"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"حذف کریں"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"رابطہ شامل کریں"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"گروپ شامل کریں"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"اس رابطے کا لنک ختم کر کے اسے متعدد رابطوں میں تبدیل کریں؟"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"لنک ختم کریں"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"کیا آپ پہلے سے کی گئی تبدیلیاں محفوظ کرنا اور اس رابطے کا لنک ختم کر کے متعدد رابطوں میں تبدیل کرنا چاہیں گے؟"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"محفوظ کریں اور لنک ختم کریں"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"کیا آپ پہلے سے کی گئی تبدیلیاں محفوظ کر کے منتخب کردہ رابطے کے ساتھ لنک کرنا چاہتے ہیں؟"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"محفوظ اور لنک کریں"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"لنک کریں"</string>
- <string name="menu_save" msgid="1727844363591825909">"محفوظ کریں"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"رابطے لنک کریں"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"جو رابطہ آپ <xliff:g id="NAME">%s</xliff:g> سے لنک کرنا چاہتے ہیں اسے منتخب کریں:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"سبھی رابطے دکھائیں"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مجوزہ رابطے"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"سبھی رابطے"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"رابطے لنک ہو گئے"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">رابطے حذف ہو گئے</item>
- <item quantity="one">رابطہ حذف ہو گیا</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"رنگ ٹون طے کریں"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"صوتی میل پر سبھی کالیں"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"آپ کے صرف پڑھنے والے اکاؤنٹس سے رابطے حذف نہیں کیے جا سکتے لیکن انہیں چھپایا جا سکتا ہے۔"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"چھپائیں"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"حذف ہونے والا رابطہ متعدد اکاؤنٹس کی تفاصیل پر مشتمل ہے۔ صرف پڑھنے والے اکاؤنٹس کی تفاصیل چھپا دی جائیں گی، حذف نہیں کی جائیں گی۔"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"لنک کرنے کیلئے آپ کو کم از کم دو رابطے منتخب کرنے کی ضرورت ہے۔"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"منتخب کردہ رابطے لنک کریں؟"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"لنک کریں"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"اس رابطے کو حذف کریں؟"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"منتخب کردہ رابطے حذف کریں؟"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"آپ کے صرف پڑھنے والے اکاؤنٹس سے رابطے حذف نہیں کیے جا سکتے لیکن انہیں چھپایا جا سکتا ہے۔"</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"حذف ہونے والے رابطوں کی تفاصیل متعدد اکاؤنٹس پر مشتمل ہیں۔ صرف پڑھنے والے اکاؤنٹس کی تفاصیل چھپا دی جائیں گی، حذف نہیں کی جائیں گی۔"</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"یہ رابطہ حذف کرنے سے متعدد اکاؤنٹس کی تفاصیل حذف ہوجائیں گی۔"</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"اس رابطے کو حذف کریں؟"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف کریں"</string>
- <string name="menu_discard" msgid="6854657936970228164">"تبدیلیاں رد کریں"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"رابطہ موجود نہیں ہے۔"</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"رابطہ ہوم اسکرین میں شامل ہو گیا۔"</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ہوم اسکرین میں شامل ہو گیا۔"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"نیا رابطہ بنائیں"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"نیا رابطہ بنائیں"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"تنظیم"</item>
- <item msgid="7196592230748086755">"نوٹ"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"ٹیبلٹ پر کوئی تصاویر دستیاب نہیں ہیں۔"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"فون پر کوئی تصاویر دستیاب نہیں ہیں۔"</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"رابطہ کی تصویر"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"حسب ضرورت لیبل کا نام"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"کالیں براہ راست صوتی میل کو بھیجیں"</string>
- <string name="removePhoto" msgid="4898105274130284565">"تصویر ہٹائیں"</string>
- <string name="noContacts" msgid="4955659076981974652">"کوئی رابطے نہیں ہیں"</string>
- <string name="noGroups" msgid="8614664663561385253">"کوئی گروپس نہیں ہیں۔"</string>
- <string name="noAccounts" msgid="7768267764545265909">"گروپس بنانے کیلئے آپ کو ایک اکاؤنٹ درکار ہے۔"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"اس گروپ میں کوئی لوگ نہیں ہیں۔"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"کچھ شامل کرنے کیلئے، گروپ میں ترمیم کریں۔"</string>
- <string name="savingContact" msgid="4075751076741924939">"رابطہ محفوظ ہو رہا ہے…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"رابطہ محفوظ ہوگیا"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"رابطے اَن لنک ہو گئے"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"رابطہ میں تبدیلیاں محفوظ نہیں ہوسکیں۔"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"رابطہ غیر منسلک نہیں ہو سکا۔"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"رابطہ لنک نہیں ہو سکا۔"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"رابطہ محفوظ کرتے ہوئے خرابی۔"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"رابطہ کی تصویر کی تبدیلیاں محفوظ نہیں کی جا سکیں۔"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"گروپ محفوظ ہوگیا۔"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"گروپ میں تبدیلیوں کو محفوظ نہیں کرسکا۔"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">فون نمبرز کے ساتھ <xliff:g id="COUNT">%d</xliff:g> رابطے</item>
- <item quantity="one">فون نمبر کے ساتھ 1 رابطہ</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"فون نمبروں کے ساتھ کوئی رابطے نہیں ہیں"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ملے</item>
- <item quantity="one">1 ملا</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"کوئی رابطے نہیں ہیں"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ملے</item>
- <item quantity="one">1 ملا</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"تمام"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"پسندیدہ"</string>
- <string name="callBack" msgid="5498224409038809224">"واپس کال کریں"</string>
- <string name="callAgain" msgid="3197312117049874778">"دوبارہ کال کریں"</string>
- <string name="returnCall" msgid="8171961914203617813">"کال لوٹائیں"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" کو رابطوں میں شامل کریں؟"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"رابطہ کی تصویر"</string>
- <string name="description_plus_button" msgid="515164827856229880">"پلس"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> رابطے"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"آپ کے رابطوں کے نام"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"اس کارروائی کو نمٹانے کیلئے کوئی ایپ نہیں ملا۔"</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"سابقہ اسکرین پر واپس جانے کیلئے کلک کریں"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"فون نمبر شامل کریں"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"ای میل شامل کریں"</string>
- <string name="missing_app" msgid="1466111003546611387">"اس کارروائی کو نمٹانے کیلئے کوئی ایپ نہیں ملا۔"</string>
- <string name="menu_share" msgid="943789700636542260">"اشتراک کریں"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"رابطوں میں شامل کریں"</string>
- <string name="share_via" msgid="563121028023030093">"رابطہ کا اشتراک کریں معرفت"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"اکاؤنٹ کے تحت گروپ بنائیں"</string>
- <string name="audio_chat" msgid="2535716629358298691">"صوتی چیٹ"</string>
- <string name="video_chat" msgid="1872255818640336072">"ویڈیو چیٹ"</string>
- <string name="connections" msgid="8098440723172028350">"کنکشنز"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"کنکشن شامل کریں"</string>
- <string name="recent" msgid="2659189233141493004">"حالیہ"</string>
- <string name="recent_updates" msgid="4267258535615860710">"حالیہ اپ ڈیٹس"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> رابطہ"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> اکاؤنٹ"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"اس ایپ سے قابل ترمیم نہیں ہے۔"</string>
- <string name="group_read_only" msgid="1061762906115697637">"اس آلہ پر قابل ترمیم نہیں ہے۔"</string>
- <string name="take_photo" msgid="7496128293167402354">"تصویر لیں"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"نئی تصویر لیں"</string>
- <string name="pick_photo" msgid="2129509985223564942">"تصویر منتخب کریں"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"نئی تصویر منتخب کریں"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"رابطہ کی فہرست اپ ڈیٹ ہو رہی ہے۔"</string>
- <string name="search_results_searching" msgid="3984833028938569930">"تلاش کر رہا ہے…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"منتخب کردہ کو دکھائیں"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"سبھی دکھائیں"</string>
- <string name="menu_select_all" msgid="621719255150713545">"سبھی کو منتخب کریں"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"سبھی کو غیر منتخب کریں"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"نیا شامل کریں"</string>
- <string name="add_organization" msgid="7311893231158291197">"تنظیم شامل کریں"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"تاریخ"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"گروپ کا نام"</string>
- <string name="change_photo" msgid="8530597935483526383">"تبدیل کریں"</string>
- <string name="primary_photo" msgid="8517942231868516999">"بنیادی تصویر"</string>
- <string name="description_star" msgid="2605854427360036550">"پسندیدہ"</string>
- <string name="edit_contact" msgid="7529281274005689512">"رابطہ میں ترمیم کریں"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"موجودہ رابطہ کو منتخب کردہ رابطہ کے ساتھ لنک کریں؟"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"منتخب کردہ رابطہ میں ترمیم کرنے کیلئے سوئچ کریں؟ اب تک آپ کی درج کردہ معلومات کاپی ہوجائے گی۔"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"میرے رابطے میں کاپی کریں"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"میرے رابطوں میں شامل کریں"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"ڈائریکٹری <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"حسب ضرورت"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"ترتیبات"</string>
- <string name="menu_settings" msgid="377929915873428211">"ترتیبات"</string>
- <string name="menu_help" msgid="1680178646764069976">"مدد اور تاثرات"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"ڈسپلے کے اختیارات"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"فون نمبر"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"رابطوں میں شامل کریں"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"رابطہ میں شامل کریں"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"بند کریں"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"سال شامل کریں"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"رابطہ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"لوڈ ہو رہا ہے…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"ایک نیا رابطہ بنائیں"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"اکاؤنٹ شامل کریں"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"رابطے درآمد کریں"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"نیا گروپ بنائیں"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"نیا گروپ بنائیں"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> گروپس</item>
- <item quantity="one">1 گروپ</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"گروپ \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" کو حذف کریں؟ (رابطے بذات خود حذف نہیں ہوں گے۔)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> میں سے <xliff:g id="COUNT_2">%1$d</xliff:g> لوگ</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> میں سے <xliff:g id="COUNT_0">%1$d</xliff:g> شخص</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> لوگ</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> شخص</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"کسی دوسرے کے ساتھ لنک کرنے سے پہلے رابطہ کا نام ٹائپ کریں۔"</string>
- <string name="copy_text" msgid="3257145021583508761">"کلپ بورڈ میں کاپی کریں"</string>
- <string name="set_default" msgid="4417505153468300351">"ڈیفالٹ طے کریں"</string>
- <string name="clear_default" msgid="7193185801596678067">"ڈیفالٹ کو صاف کریں"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"متن کاپی ہوگیا"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"اپنی تبدیلیاں مسترد کریں اور ترمیم کرنا چھوڑ دیں؟"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"رد کریں"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"ترمیم کرنا جاری رکھیں"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"میرا پروفائل ترتیب دیں"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"شخص کا نام ٹائپ کریں"</string>
- <string name="group_name_hint" msgid="238359485263401293">"گروپ کا نام"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"میرا مقامی پروفائل"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"میرا <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> پروفائل"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"سبھی رابطے ڈسپلے کر رہا ہے"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"اپنے رابطوں کو محفوظ رکھیں اگرچہ آپ کا فون کھو جائے: ایک آن لائن سروس کے ساتھ مطابقت پذیر بنائیں۔"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ایک اکاؤنٹ شامل کریں"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"آپ کے نئے رابطے کا بیک اپ نہیں لیا جائے گا۔ ایک ایسا اکاؤنٹ شامل کریں جو رابطوں کا آن لائن بیک اپ لیتا ہے؟"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"نئے رابطے <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> میں محفوظ ہو جائیں گے۔"</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"نئے رابطوں کیلئے ایک ڈیفالٹ اکاؤنٹ منتخب کریں:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"نیا رابطہ شامل کریں"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"رابطہ میں ترمیم کریں"</string>
- <string name="keep_local" msgid="1258761699192993322">"مقامی رکھیں"</string>
- <string name="add_account" msgid="8201790677994503186">"اکاؤنٹ شامل کریں"</string>
- <string name="add_new_account" msgid="5748627740680940264">"نیا اکاؤنٹ شامل کریں"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"ڈیٹا بیس فائلیں برآمد کریں"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"نیا رابطہ شامل کریں"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"مزید دیکھیں"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"کم دیکھیں"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"سبھی دیکھیں"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"حالیہ"</string>
- <string name="about_card_title" msgid="2920942314212825637">"تفصیل"</string>
- <string name="send_message" msgid="8938418965550543196">"پیغام بھیجیں"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"ایک ذاتی کاپی بنائی جا رہی ہے…"</string>
- <string name="yesterday" msgid="6840858548955018569">"گزشتہ کل"</string>
- <string name="tomorrow" msgid="6241969467795308581">"آئندہ کل"</string>
- <string name="today" msgid="8041090779381781781">"ﺁﺝ"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"آج بوقت <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"کل بوقت <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(بلا عنوان ایونٹ)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"سیٹ کریں"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"تنظیم"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"عرفی نام"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"نوٹ"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"ویب سائٹ"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"ایونٹ"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"رشتہ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"اکاؤنٹ"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"نام"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"ای میل"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"فون"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"تصویر"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"رابطہ ایڈیٹر پھیلانے کیلئے کلک کریں۔"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"رابطہ ایڈیٹر سکیڑنے کیلئے کلک کریں۔"</string>
- <string name="content_description_directions" msgid="2686791825798189335">"مقام کیلئے ڈائریکشنز"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"‏حالیہ sms۔ <xliff:g id="MESSAGE_BODY">%s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%s</xliff:g>۔ <xliff:g id="DATE">%s</xliff:g>۔ جواب دینے کیلئے کلک کریں"</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"اِن کمنگ"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"آؤٹ گوئنگ"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"چھوٹی ہوئی"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"حالیہ کال۔ <xliff:g id="CALL_TYPE">%s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%s</xliff:g>۔ <xliff:g id="DATE">%s</xliff:g>۔ واپسی کال کرنے کیلئے کلک کریں"</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"آپ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"‏جب آپ کسی شخص کا Hangouts شناخت کنندہ ای میل فیلڈ یا فون فیلڈ میں داخل کرتے ہیں تو Hangouts بہتر کام کرتا ہے۔"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"مزید فیلڈز"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"تصویر بدلیں"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"ایڈیٹر کھولنے میں ناکام۔"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"اس میں محفوظ ہوگا"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"فی الحال <xliff:g id="ACCOUNT_NAME">%s</xliff:g> میں محفوظ کیا جا رہا ہے۔ کوئی مختلف اکاؤنٹ منتخـب کرنے کیلئے دو بار تھپتھپائیں۔"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">لنک کردہ رابطے (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">لنک کردہ رابطہ</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> لنک کردہ رابطے"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"رابطے لنک کریں"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"منسوخ کریں"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ممکنہ ڈپلیکیٹس</item>
- <item quantity="one">1 ممکنہ ڈپلیکیٹ</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> لنک کردہ رابطے</item>
- <item quantity="one">1 لنک کردہ رابطہ</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"یہ رابطہ"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ممکنہ ڈپلیکیٹس"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"یہ رابطے ایک ہی شخص کے ہو سکتے ہیں۔ آپ انہیں ایک رابطے کے طور پر آپس میں لنک کر سکتے ہیں۔"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"لنک کردہ رابطے"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"آپ کے اکاؤنٹس سے"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"ایک تصویر لیں"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"سبھی تصاویر"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"تصویر چنیں"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> سے"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> حذف کریں"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> حذف کریں"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> کی تصویر چیک نہیں ہوئی"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> کی تصویر چیک ہو گئی"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"نامعلوم اکاؤنٹ سے تصویر نشان زد نہیں ہے"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"نامعلوم اکاؤنٹ سے تصویر نشان زد ہے"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"زبان کی تبدیلی کو منعکس کرنے کیلئے رابطہ فہرست اپ ڈیٹ ہو رہی ہے\n\nبراہ کرم انتظار کریں…"</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"مسدود کردہ نمبرز"</string>
-</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
new file mode 100644
index 000000000..f3b5b41f5
--- /dev/null
+++ b/res/values-ur/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"رابطے"</string>
+ <string name="contactsList" msgid="8661624236494819731">"رابطے"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"رابطہ شامل کریں"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"رابطہ"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"ڈائریکٹ ڈائل"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"ڈائریکٹ پیغام"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"رابطہ چنیں"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"رابطے میں شامل کریں"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ایک رابطہ منتخب کریں"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"منتخب کریں"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"نیا رابطہ بنائیں"</string>
+ <string name="searchHint" msgid="8482945356247760701">"رابطے تلاش کریں"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"پسندیدہ میں شامل کریں"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"پسندیدہ سے ہٹائیں"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"پسندیدہ سے ہٹا دیا گیا"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"پسندیدہ میں شامل کر دیا گیا"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"ترمیم کریں"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"حذف کریں"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"تصویر بدلیں"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"شارٹ کٹ تخلیق کریں"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"لنک ختم کریں"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"رابطے ہٹائیں"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"لیبل کا نام تبدیل کریں"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"لیبل حذف کریں"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"رابطہ شامل کریں"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"رابطے منتخب کریں"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"رابطے شامل کریں"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"لیبل سے ہٹائیں"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"لیبل تخلیق کریں"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"اس رابطے کا لنک ختم کر کے اسے متعدد رابطوں میں تبدیل کریں؟"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"لنک ختم کریں"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"کیا آپ پہلے سے کی گئی تبدیلیاں محفوظ کرنا اور اس رابطے کا لنک ختم کر کے متعدد رابطوں میں تبدیل کرنا چاہیں گے؟"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"محفوظ کریں اور لنک ختم کریں"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"کیا آپ پہلے سے کی گئی تبدیلیاں محفوظ کر کے منتخب کردہ رابطے کے ساتھ لنک کرنا چاہتے ہیں؟"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"محفوظ اور لنک کریں"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"لنک ہو رہے ہیں"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"لنک ختم ہو رہا ہے"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"لنک کریں"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"لنک کردہ رابطے دیکھیں"</string>
+ <string name="menu_save" msgid="1727844363591825909">"محفوظ کریں"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"رابطے لنک کریں"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"جو رابطہ آپ <xliff:g id="NAME">%s</xliff:g> سے لنک کرنا چاہتے ہیں اسے منتخب کریں:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"مجوزہ رابطے"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"سبھی رابطے"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> لنک ہو گیا"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"رابطے لنک ہو گئے"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> حذف ہو گیا"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> اور <xliff:g id="NAME_1">%2$s</xliff:g> حذف ہو گئے"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>، <xliff:g id="NAME_1">%2$s</xliff:g>، <xliff:g id="NAME_2">%3$s</xliff:g>… حذف ہو گئے"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">رابطے حذف ہو گئے</item>
+ <item quantity="one">رابطہ حذف ہو گیا</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> رابطے</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> رابطہ</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> رابطے ۔ <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> رابطہ ۔ <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"‏Google سے"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> سے"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"رنگ ٹون طے کریں"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"صوتی میل پر منتقل کریں"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"صوتی میل سے ہٹائیں"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"یہ رابطہ صرف پڑھنے والا ہے۔ آپ اسے چھپا سکتے ہیں، لیکن اسے حذف نہیں کیا جا سکتا۔"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"رابطہ کو چھپائیں"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"اس رابطے کے صرف پڑھنے والے اکاؤنٹس مخفی ہوں گے، حذف نہیں۔"</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"اس رابطے کو حذف کریں؟"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"منتخب کردہ رابطے حذف کریں؟"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"آپ کے صرف پڑھنے والے اکاؤنٹس سے رابطے حذف نہیں کیے جا سکتے لیکن انہیں چھپایا جا سکتا ہے۔"</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"حذف ہونے والے رابطوں کی تفاصیل متعدد اکاؤنٹس پر مشتمل ہیں۔ صرف پڑھنے والے اکاؤنٹس کی تفاصیل چھپا دی جائیں گی، حذف نہیں کی جائیں گی۔"</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"یہ رابطہ حذف کرنے سے متعدد اکاؤنٹس کی تفاصیل حذف ہوجائیں گی۔"</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"اس رابطے کو حذف کریں؟"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف کریں"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"رابطہ موجود نہیں ہے۔"</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"رابطہ ہوم اسکرین میں شامل ہو گیا۔"</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ہوم اسکرین میں شامل ہو گیا۔"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"آلہ پر کوئی تصاویر دستیاب نہیں ہیں۔"</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"رابطہ کی تصویر"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"حسب ضرورت لیبل کا نام"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"تصویر ہٹائیں"</string>
+ <string name="noContacts" msgid="2228592924476426108">"آپ کے رابطوں کی فہرست خالی ہے"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"اس لیبل کے ساتھ کوئی رابطے نہیں"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"اس اکاؤنٹ میں کوئی رابطے نہیں"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"آپ کے رابطوں کی فہرست خالی ہے"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> محفوظ ہو گیا"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"رابطہ محفوظ ہوگیا"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"رابطے اَن لنک ہو گئے"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"رابطہ کی تبدیلیاں محفوظ نہیں ہوسکیں"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"رابطہ کا لنک ختم نہیں ہو سکا"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"رابطہ لنک نہیں ہو سکا"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"رابطہ محفوظ کرنے میں خرابی"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"رابطہ کی تصویر کی تبدیلیاں محفوظ نہیں ہو سکیں"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"لیبل لوڈ ہونے میں ناکام"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"لیبل حذف ہو گیا"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"لیبل تخلیق ہو گیا"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"لیبل نہیں بنایا جا سکتا"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"لیبل اپ ڈیٹ ہو گیا"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"لیبل سے ہٹا دیے گئے"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"لیبل میں شامل ہو گیا"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"لیبل کی تبدیلیاں محفوظ نہیں ہو سکیں"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"یہ لیبل پہلے سے موجود ہے"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"کچھ رابطوں کے پاس ای میلز نہیں ہیں۔"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"کچھ رابطوں کے پاس فون نمبرز نہیں ہیں۔"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"ای میل بھیجیں"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"پیغام بھیجیں"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"رابطے منتخب کریں"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"بھیجیں"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"کوئی رابطے نہیں ہیں"</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" کو رابطوں میں شامل کریں؟"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"آپ کے رابطوں کے نام"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"سابقہ اسکرین پر واپس جانے کیلئے کلک کریں"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"فون نمبر شامل کریں"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"ای میل شامل کریں"</string>
+ <string name="missing_app" msgid="1466111003546611387">"اس کارروائی کو نمٹانے کیلئے کوئی ایپ نہیں ملا۔"</string>
+ <string name="menu_share" msgid="943789700636542260">"اشتراک کریں"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"رابطوں میں شامل کریں"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"شامل کریں"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">رابطوں کا اشتراک کریں بذریعہ</item>
+ <item quantity="one">رابطہ کا اشتراک کریں بذریعہ</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"اکاؤنٹ منتخب کریں"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"لیبل تخلیق کریں"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"لیبل کا نام تبدیل کریں"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"لیبل کا نام"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"لیبل کا نام"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"صوتی چیٹ"</string>
+ <string name="video_chat" msgid="1872255818640336072">"ویڈیو چیٹ"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> رابطہ"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> اکاؤنٹ"</string>
+ <string name="take_photo" msgid="7496128293167402354">"تصویر لیں"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"نئی تصویر لیں"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"تصویر منتخب کریں"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"نئی تصویر منتخب کریں"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"تلاش کر رہا ہے…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"تاریخ"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"لیبل"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"منسوخ کریں"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"پیچھے"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بند کریں"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"منتخب کردہ رابطہ میں ترمیم کرنے کیلئے سوئچ کریں؟ اب تک آپ کی درج کردہ معلومات کاپی ہوجائے گی۔"</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"ڈائریکٹری <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"ترتیبات"</string>
+ <string name="menu_settings" msgid="377929915873428211">"ترتیبات"</string>
+ <string name="menu_help" msgid="1680178646764069976">"مدد اور تاثرات"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>، <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"فون نمبر"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"رابطوں میں شامل کریں"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"بند کریں"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"سال شامل کریں"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"اکاؤنٹ شامل کریں"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"درآمد کریں"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"‏نیا بنائیں‎…‎"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" لیبل حذف کریں؟ (رابطے حذف نہیں ہوں گے۔)"</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"کسی دوسرے کے ساتھ لنک کرنے سے پہلے رابطہ کا نام ٹائپ کریں۔"</string>
+ <string name="copy_text" msgid="3257145021583508761">"کلپ بورڈ میں کاپی کریں"</string>
+ <string name="set_default" msgid="4417505153468300351">"ڈیفالٹ طے کریں"</string>
+ <string name="clear_default" msgid="7193185801596678067">"ڈیفالٹ کو صاف کریں"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"متن کاپی ہوگیا"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"تبدیلیاں مسترد کریں؟"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"رد کریں"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"منسوخ کریں"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"حسب ضرورت بنانے کو مسترد کریں؟"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"رابطے تلاش کریں"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"رابطے ہٹائیں"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"میرا مقامی پروفائل"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"میرا <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> پروفائل"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏ایسا اکاؤنٹ شامل کرنے کیلئے تھوڑا وقت نکالیں جو آپ کے رابطے Google پر بیک اپ کرے گا۔"</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"نئے رابطے <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> میں محفوظ ہو جائیں گے۔"</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"نئے رابطوں کیلئے ایک ڈیفالٹ اکاؤنٹ منتخب کریں:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"نیا رابطہ بنائیں"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"رابطہ میں ترمیم کریں"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"صرف منظر"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"ترمیم کرنے کیلئے رابطہ منتخب کریں"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"لنک کردہ رابطے"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"شامل کریں"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"لنک ختم کریں"</string>
+ <string name="add_account" msgid="8201790677994503186">"اکاؤنٹ شامل کریں"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"نیا اکاؤنٹ شامل کریں"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"ڈیٹا بیس فائلیں برآمد کریں"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"نیا رابطہ بنائیں"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"مزید دیکھیں"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"کم دیکھیں"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"حالیہ"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"تفصیل"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"ایک ذاتی کاپی بنا رہا ہے…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"آئندہ کل"</string>
+ <string name="today" msgid="8041090779381781781">"ﺁﺝ"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"آج بوقت <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"کل بوقت <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(بلا عنوان ایونٹ)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"سیٹ کریں"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"تنظیم"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"عرفی نام"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"نوٹ"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"ویب سائٹ"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"ایونٹ"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"رشتہ"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"نام"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"ای میل"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"فون"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"مقام کیلئے ڈائریکشنز"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"‏حالیہ sms۔ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>۔ <xliff:g id="DATE">%3$s</xliff:g>۔ جواب دینے کیلئے کلک کریں"</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"اِن کمنگ"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"آؤٹ گوئنگ"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"چھوٹی ہوئی"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"حالیہ کال۔ <xliff:g id="CALL_TYPE">%1$s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>۔ <xliff:g id="DATE">%3$s</xliff:g>۔ واپسی کال کرنے کیلئے کلک کریں"</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"آپ: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"مزید فیلڈز"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"رابطہ کی تصویر تبدیل کریں"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"رابطہ کی تصویر شامل کریں"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"رابطہ کی تصویر"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"ایڈیٹر کھولنے میں ناکام۔"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"اس میں محفوظ ہو رہا ہے"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> کی جانب سے معلومات قابل ترمیم نہیں ہے"</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"رابطے لنک کریں"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"منسوخ کریں"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"یہ رابطہ"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ممکنہ ڈپلیکیٹس"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"یہ رابطے ایک ہی شخص کے ہو سکتے ہیں۔ آپ انہیں ایک رابطے کے طور پر آپس میں لنک کر سکتے ہیں۔"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> حذف کریں"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> حذف کریں"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"تجاویز"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"نیا"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"نیویگیشن دراز کھولیں"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"نیویگیشن دراز بند کریں"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> لیبل"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"لیبلز"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"اکاؤنٹس"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"اپنی سرگزشت اکٹھی دیکھیں"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"ایونٹس اور پیغامات"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"ایونٹس"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"پیغامات"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"تجاویز"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"اپنے رابطوں کو منظم اور مفید رکھیں"</string>
+ <string name="undo" msgid="1425165101664071422">"کالعدم کریں"</string>
+ <string name="call_custom" msgid="6385303130912713318">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> کو کال کریں"</string>
+ <string name="call_home" msgid="1990519474420545392">"گھر کے نمبر پر کال کریں"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"موبائل پر کال کریں"</string>
+ <string name="call_work" msgid="5328785911463744028">"دفتر کے نمبر پر کال کریں"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"دفتر کے فیکس پر کال کریں"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"گھر کے فیکس پر کال کریں"</string>
+ <string name="call_pager" msgid="9003902812293983281">"پیجر پر کال کریں"</string>
+ <string name="call_other" msgid="8563753966926932052">"کال کریں"</string>
+ <string name="call_callback" msgid="1910165691349426858">"کال بیک نمبر پر کال کریں"</string>
+ <string name="call_car" msgid="3280537320306436445">"کار کے نمبر پر کال کریں"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"کمپنی کے اصل نمبر پر کال کریں"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"‏ISDN پر کال کریں"</string>
+ <string name="call_main" msgid="6082900571803441339">"اصل نمبر پر کال کریں"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"فیکس پر کال کریں"</string>
+ <string name="call_radio" msgid="8296755876398357063">"ریڈیو پر کال کریں"</string>
+ <string name="call_telex" msgid="2223170774548648114">"ٹیلیکس پر کال کریں"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"‏TTY / TDD پر کال کریں"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"دفتر کے موبائل پر کال کریں"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"دفتر کے پیجر پر کال کریں"</string>
+ <string name="call_assistant" msgid="670941612175068337">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> کو کال کریں"</string>
+ <string name="call_mms" msgid="6274041545876221437">"‏MMS نمبر پر کال کریں"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (کال کریں)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> پر متنی پیغام بھیجیں"</string>
+ <string name="sms_home" msgid="7524332261493162995">"گھر کے نمبر پر متن بھیجیں"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"موبائل پر متن بھیجیں"</string>
+ <string name="sms_work" msgid="2269624156655267740">"دفتر کے نمبر پر متن بھیجیں"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"دفتر کے فیکس نمبر پر متن بھیجیں"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"گھر کے فیکس نمبر پر متن بھیجیں"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"پیجر نمبر پر متن بھیجیں"</string>
+ <string name="sms_other" msgid="806127844607642331">"متن بھیجیں"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"کال بیک نمبر پر متن بھیجیں"</string>
+ <string name="sms_car" msgid="7444227058437359641">"کار کے نمبر پر متن بھیجیں"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"کمپنی کے اصل نمبر پر متن بھیجیں"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"‏ISDN نمبر پر متن بھیجیں"</string>
+ <string name="sms_main" msgid="8621625784504541679">"اصل نمبر پر متن بھیجیں"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"فیکس نمبر پر متن بھیجیں"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"ریڈیو پر متن بھیجیں"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"ٹیلکس پر متن بھیجیں"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"‏TTY / TDD پر متن بھیجیں"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"دفتر کے موبائل پر متن بھیجیں"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"دفتر کے پیجر پر متن بھیجیں"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> پر متن بھیجیں"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"‏MMS نمبر پر متن بھیجیں"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (پیغام بھیجیں)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"ویڈیو کال کریں"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"اکثر رابطہ کردہ کو صاف کریں؟"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"آپ رابطے اور فون ایپس میں اکثر رابطہ کردہ فہرست کو صاف کر دیں گے اور ای میل ایپس کو از سر نو اپنے پتے کی ترجیحات جاننے پر مجبور کریں گے۔"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"اکثر رابطہ کردہ کو صاف کر رہا ہے…"</string>
+ <string name="status_available" msgid="5586870015822828392">"دستیاب"</string>
+ <string name="status_away" msgid="1838861100379804730">"دور"</string>
+ <string name="status_busy" msgid="9147992455450257136">"مصروف"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"دیگر"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"ڈائریکٹری"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"دفتری ڈائرکٹری"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"سبھی رابطے"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> کیلئے فوری رابطہ"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(کوئی نام نہیں)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"اکثر رابطہ کردہ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"فون نمبرز والے سبھی رابطے"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"دفتری پروفائل رابطے"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"اپ ڈیٹس دیکھیں"</string>
+ <string name="account_phone" msgid="7128032778471187553">"آلہ"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"نام"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"عرفی نام"</string>
+ <string name="name_given" msgid="4280790853455320619">"پہلا نام"</string>
+ <string name="name_family" msgid="7466985689626017037">"آخری نام"</string>
+ <string name="name_prefix" msgid="59756378548779822">"نام کا سابقہ"</string>
+ <string name="name_middle" msgid="8467433655992690326">"درمیانی نام"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"نام کا لاحقہ"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"فونیٹک نام"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"فونیٹک پہلا نام"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"فونیٹک درمیانی نام"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"فونیٹک آخری نام"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"فون"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"ای میل"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"پتہ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"تنظیم"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"رشتہ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"خاص تاریخ"</string>
+ <string name="sms" msgid="1756857139634224222">"متنی پیغام"</string>
+ <string name="postal_address" msgid="8765560217149624536">"پتہ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"کمپنی"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"عنوان"</string>
+ <string name="label_notes" msgid="8337354953278341042">"نوٹس"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"حسب ضرورت"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"ویب سائٹ"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"لیبلز"</string>
+ <string name="email_home" msgid="8573740658148184279">"گھر کے پتے پر ای میل کریں"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"موبائل پر ای میل کریں"</string>
+ <string name="email_work" msgid="2807430017302722689">"دفتر کو ای میل کریں"</string>
+ <string name="email_other" msgid="3454004077967657109">"ای میل"</string>
+ <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> پر ای میل کریں"</string>
+ <string name="email" msgid="5668400997660065897">"ای میل"</string>
+ <string name="postal_street" msgid="8133143961580058972">"اسٹریٹ"</string>
+ <string name="postal_city" msgid="6597491300084895548">"شہر"</string>
+ <string name="postal_region" msgid="6045263193478437672">"ریاست"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"زپ کوڈ"</string>
+ <string name="postal_country" msgid="7638264508416368690">"ملک"</string>
+ <string name="map_home" msgid="1243547733423343982">"گھر کا پتہ دیکھیں"</string>
+ <string name="map_work" msgid="1360474076921878088">"دفتر کا پتہ دیکھیں"</string>
+ <string name="map_other" msgid="3817820803587012641">"پتہ دیکھیں"</string>
+ <string name="map_custom" msgid="8761800628069473526">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> پتہ ملاحظہ کریں"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"‏AIM کے ذریعے چیٹ کریں"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"‏Windows Live کے ذریعے چیٹ کریں"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"‏Yahoo کے ذریعے چیٹ کریں"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"‏Skype کے ذریعے چیٹ کریں"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"‏QQ کے ذریعے چیٹ کریں"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"‏Google Talk کے ذریعے چیٹ کریں"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"‏ICQ کے ذریعے چیٹ کریں"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"‏Jabber کے ذریعے چیٹ کریں"</string>
+ <string name="chat" msgid="9025361898797412245">"چیٹ"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"حذف کریں"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"ناموں کی مزید فیلڈز دکھائیں"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"نام کی فیلڈز کو سکیڑیں"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"فونیٹک ناموں کی مزید فیلڈز دکھائیں"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"فونیٹک نام کی فیلڈز کو سکیڑیں"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"پھیلائیں"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"سکیڑیں"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"پھیلا ہوا"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"سکڑا ہوا"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"سبھی رابطے"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"ستارے کے نشان والے"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"مرضی کے مطابق بنائیں"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"رابطہ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"سبھی دیگر رابطے"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"سبھی رابطے"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"مطابقت پذیر گروپ کو ہٹائیں"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"مطابقت پذیر گروپ شامل کریں"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"مزید گروپس…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" کو مطابقت پذیری سے ہٹانے سے مطابقت پذیری سے گروپ سے خارج کردہ کوئی رابطے بھی ہٹ جائیں گے۔"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"ڈسپلے کے اختیارات محفوظ کر رہا ہے…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"حسب ضرورت منظر"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"درآمد کردہ رابطے اس میں محفوظ کریں:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"‏SIM کارڈ"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">‏%1$d رابطے</item>
+ <item quantity="one">1 رابطہ</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> رابطے • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> رابطہ • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"‏‎.vcf فائل"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"درآمد کرنے کیلئے کچھ نہیں ہے"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"‏‎vCard‎ سے رابطے درآمد کریں؟"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> کی درآمد منسوخ کریں"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> کی برآمد منسوخ کریں؟"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏vCard کی درآمد/برآمد کو منسوخ نہیں کرسکا"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"نامعلوم خرابی۔"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" کو نہیں کھول سکا: \"<xliff:g id="EXACT_REASON">%2$s</xliff:g>\"۔"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"برآمد کنندہ شروع نہیں ہو سکا: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"۔"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"کوئی قابل برآمد رابطہ نہیں ہے۔"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"آپ نے ایک درکار اجازت غیر فعال کر دی ہے۔"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"برآمد کرنے کے دوران ایک خرابی پیش آگئی: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"۔"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"‏I/O خرابی"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"کافی میموری نہیں ہے۔ فائل کافی بڑی ہو سکتی ہے۔"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"فارمیٹ تعاون یافتہ نہیں ہے۔"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> کی برآمد مکمل ہوگئی۔"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"رابطوں کی برآمدگی مکمل ہو گئی۔"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"رابطوں کی برآمدگی مکمل ہو گئی، رابطوں کا اشتراک کرنے کیلئے اطلاع پر کلک کریں۔"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"رابطوں کا اشتراک کرنے کے لئے تھپتھپائیں۔"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> کی برآمد منسوخ ہوگئی۔"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"رابطہ کا ڈیٹا برآمد کر رہا ہے"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"رابطہ ڈیٹا برآمد ہو رہا ہے۔"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ڈیٹابیس کی معلومات حاصل نہیں ہو سکی۔"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"کوئی قابل برآمد رابطے نہیں ہیں۔"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"‏vCard کمپوزر مناسب طریقے سے شروع نہیں ہوا۔"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"برآمد نہیں کیا جاسکا"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"رابطوں کا ڈیٹا برآمد نہیں ہوا۔\nوجہ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> کو درآمد کر رہا ہے"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏vCard کا ڈیٹا نہیں پڑھ سکا"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏vCard <xliff:g id="FILENAME">%s</xliff:g> کی درآمد پوری ہوگئی"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> کی درآمد منسوخ ہوگئی"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> جلد ہی درآمد کی جائے گی۔"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"فائل جلد ہی درآمد کی جائے گی۔"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏vCard درآمد کرنے کی درخواست مسترد ہوگئی تھی۔ بعد میں دوبارہ کوشش کریں۔"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"رابطے جلد ہی برآمد ہو جائیں گے۔"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏vCard برآمد کرنے کی درخواست مسترد ہوگئی تھی۔ بعد میں دوبارہ کوشش کریں۔"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"رابطہ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"‏vCard(s)‎ کو مقامی عارضی اسٹوریج میں ذخیرہ کر رہا ہے۔ اصل درآمد جلد ہی شروع ہوگی۔"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"‏vCard درآمد نہیں کرسکا۔"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏NFC پر موصولہ رابطہ"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"ذخیرہ کر رہا ہے"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> درآمد کر رہا ہے"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"‏‎.vcf فائل میں برآمد کریں"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"ترتیب دیں بہ لحاظ"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"فونیٹک نام"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"ہمیشہ دکھائیں"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"اگر خالی ہے تو چھپائیں"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"پہلا نام"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"آخری نام"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"نام کا فارمیٹ"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"پہلا نام پہلے"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"آخری نام پہلے"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"اکاؤنٹس"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"نئے رابطوں کیلئے ڈیفالٹ اکاؤنٹ"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"میری معلومات"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"اپنے پروفائل کو ترتیب دیں"</string>
+ <string name="setting_about" msgid="7014388749752042863">"رابطے کے بارے میں"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"پسندیدہ رابطوں کا اشتراک کریں"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"سارے رابطوں کا اشتراک کریں"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"رابطوں کا اشتراک کرنے میں ناکام۔"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"رابطے برآمد کریں"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"اس سے رابطے درآمد کریں"</string>
+ <string name="share_error" msgid="948429331673358107">"اس رابطہ کا اشتراک نہیں کیا جا سکتا۔"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"اشتراک کرنے کے لئے کوئی رابطے نہیں ہیں۔"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"ڈسپلے کرنے کیلئے رابطے"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ڈسپلے کرنے کیلئے رابطے"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"منظر حسب ضرورت بنائیں"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"محفوظ کریں"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"رابطے تلاش کریں"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"پسندیدہ"</string>
+ <string name="menu_import" msgid="6107961135813836467">"درآمد کریں"</string>
+ <string name="menu_export" msgid="2658783911863503902">"برآمد کریں"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"مسدود کردہ نمبرز"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"بذریعہ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> بذریعہ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"تلاش کرنا بند کریں"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"تلاش صاف کریں"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"اکاؤنٹ"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"کالز کیلئے ہمیشہ اس کا استعمال کریں"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"ایک نوٹ کے ساتھ کال کریں"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"کال کے ساتھ بھیجنے کیلئے ایک نوٹ ٹائپ کریں…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"بھیجیں اور کال کریں"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"بلڈ ورژن"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"اوپن سورس لائسنسز"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"اوپن سورس سافٹ ویئر کیلئے لائسنس کی تفصیلات"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"رازداری کی پالیسی"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"سروس کی شرائط"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"اوپن سورس لائسنسز"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"‏URL کھولنے میں ناکامی۔"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> چیک ہو گیا"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> چیک نہیں ہوا"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"ویڈیو کال کریں"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"حذف کریں"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"ایلپسیس"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> منٹ <xliff:g id="SECONDS">%2$s</xliff:g> سیکنڈ"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> گھنٹے <xliff:g id="MINUTES_1">%2$s</xliff:g> منٹ <xliff:g id="SECONDS">%3$s</xliff:g> سیکنڈ"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"یہ شارٹ کٹ غیر فعال کر دیا گیا ہے"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"رابطہ ہٹا دیا گیا"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"درآمد کریں"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"رابطے منتخب کریں"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"‏آپ کے SIM کارڈ پر کوئی رابطے نہیں ہیں"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"رابطہ پہلے سے آپ کی فہرست میں موجود ہے"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">‏<xliff:g id="COUNT">%d</xliff:g> SIM رابطے درآمد ہو گئے</item>
+ <item quantity="one">‏1 SIM رابطہ درآمد ہو گیا</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"‏SIM رابطے درآمد کرنے میں ناکام"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"‏SIM سے درآمد کریں"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"منسوخ کریں"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"خودکار مطابقت پذیری آف ہے۔ آن کرنے کیلئے تھپتھپائیں۔"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"برخاست کریں"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"اکاؤنٹ مطابقت پذیری آف ہے۔ آن کرنے کیلئے تھپتھپائیں۔"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"خودکار طور پر مطابقت پذیری کو آن کریں؟"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"‏نہ صرف Google رابطوں پر، بلکہ تمام ایپس اور اکاؤنٹس پر جو تبدیلیاں آپ کریں گے، انہیں آپ کے آلات اور ویب کے درمیان اپ ٹو ڈیٹ رکھا جائے گا۔"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"آن کریں"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"کوئی کنکشن نہیں ہے"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"مزید دکھائیں"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏SIM کارڈ کی درآمد مکمل ہو گئی"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"درآمد کرنا ناکام ہو گیا"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏SIM کارڈ سے رابطے درآمد نہیں ہو سکے"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏SIM درآمد ہو رہی ہے"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"اطلاعات"</string>
+</resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
deleted file mode 100644
index f295c994c..000000000
--- a/res/values-uz-rUZ/strings.xml
+++ /dev/null
@@ -1,331 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Kontaktlar"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Kontaktni ko‘rish"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Kontaktni tahrirlash"</string>
- <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
- <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
- <string name="shortcutDialContact" msgid="746622101599186779">"Tezkor chaqiruv"</string>
- <string name="shortcutMessageContact" msgid="2460337253595976198">"Tezkor SMS"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontaktni tanlang"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Raqamni tanlang"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"SMS uchun raqamni tanlang"</string>
- <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ma’lumot qo‘shish"</string>
- <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontaktni tanlang"</string>
- <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yangi kontakt yaratish"</string>
- <string name="starredList" msgid="4817256136413959463">"Yulduzchali"</string>
- <string name="frequentList" msgid="7154768136473953056">"Tez-tez aloqada"</string>
- <string name="strequentList" msgid="5640192862059373511">"Saralangan"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Kontakt tafsilotlari"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Kontaktni tahrirlash"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Kontakt yaratish"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Guruhni tahrirlash"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Guruh yaratish"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Aloqa ma’lumoti"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Yangilanishlar"</string>
- <string name="searchHint" msgid="8482945356247760701">"Kontaktlar ichidan qidirish"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Kontaktni ko‘rish"</string>
- <string name="menu_addStar" msgid="2908478235715404876">"Saralanganlarga qo‘shish"</string>
- <string name="menu_removeStar" msgid="5844227078364227030">"Saralanganlardan olib tashlash"</string>
- <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Sevimlilardan o‘chirib tashlandi"</string>
- <string name="description_action_menu_add_star" msgid="3327186327234177456">"Sevimlilarga qo‘shildi"</string>
- <string name="menu_editContact" msgid="9042415603857662633">"Tahrirlash"</string>
- <string name="menu_deleteContact" msgid="6788644058868189393">"O‘chirish"</string>
- <string name="menu_change_photo" msgid="7769177631511496210">"Suratni almashtirish"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Bosh ekranga chiqarish"</string>
- <string name="menu_call" msgid="3992595586042260618">"Qo‘ng‘iroq qilish"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"SMS/MMS yuborish"</string>
- <string name="menu_splitAggregate" msgid="2627252205317945563">"Ajratish"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Tahrirlash"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"O‘chirish"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Kontakt qo‘shish"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Guruh qo‘shish"</string>
- <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt bir nechta kontaktga ajratilsinmi?"</string>
- <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ajratish"</string>
- <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"O‘zgarishlarni saqlab, ushbu kontaktni bir nechta kontaktlarga ajratilsinmi?"</string>
- <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Ha"</string>
- <string name="joinConfirmation" msgid="8262614843581924365">"O‘zgarishlar saqlab, tanlangan kontaktga bog‘lansinmi?"</string>
- <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Ha"</string>
- <string name="menu_joinAggregate" msgid="3599512127797513606">"Bog‘lash"</string>
- <string name="menu_save" msgid="1727844363591825909">"Saqlash"</string>
- <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktlarni bog‘lash"</string>
- <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> bilan bog‘lamoqchi bo‘lgan kontaktni tanlang:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Barcha kontaktlarni ko‘rsatish"</string>
- <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Taklif etilgan kontaktlar"</string>
- <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Barcha kontaktlar"</string>
- <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar bog‘landi"</string>
- <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
- <item quantity="other">Kontaktlar o‘chirib tashlandi</item>
- <item quantity="one">Kontakt o‘chirib tashlandi</item>
- </plurals>
- <string name="menu_set_ring_tone" msgid="8728345772068064946">"Rington tayinlash"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Faqat ovozli xabarlar"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Faqat o‘qish rejimidagi hisoblardagi kontaktlar o‘chirilmaydi, lekin yashirilishi mumkin."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Yashirish"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"O‘chirilayotgan kontaktda bir nechta hisoblarga oid ma’lumotlar mavjud. Faqat o‘qish rejimidagi hisoblar yashiriladi, lekin o‘chirilmaydi."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Bog‘lash uchun kamida ikkita kontaktni tanlash lozim."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Belgilangan kontaktlar bog‘lansinmi?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Bog‘lash"</string>
- <string name="single_delete_confirmation" msgid="3106905986948679720">"Bu kontakt o‘chirib tashlansinmi?"</string>
- <string name="batch_delete_confirmation" msgid="3984346060324014108">"Belgilangan kontaktlar o‘chirib tashlansinmi?"</string>
- <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Faqat o‘qish rejimidagi hisoblardagi kontaktlar o‘chirilmaydi, lekin yashirilishi mumkin."</string>
- <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"O‘chirilayotgan kontaktlarda bir nechta hisoblarga oid ma’lumotlar mavjud. Faqat o‘qish rejimidagi hisoblar yashiriladi, lekin o‘chirilmaydi."</string>
- <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontakt o‘chirib tashlansa, bir nechta hisobdagi ma’lumotlar ham o‘chib ketadi."</string>
- <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt o‘chirib tashlansinmi?"</string>
- <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"O‘chirish"</string>
- <string name="menu_discard" msgid="6854657936970228164">"O‘zgarishlarni bekor qilish"</string>
- <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mavjud emas."</string>
- <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt bosh ekranga chiqarildi."</string>
- <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bosh ekranga chiqarildi."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yangi kontakt yaratish"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Yangi kontakt yaratish"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Tashkilot"</item>
- <item msgid="7196592230748086755">"Eslatma"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planshetda rasmlar mavjud emas."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda rasm yo‘q."</string>
- <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt surati"</string>
- <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nomi"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Chaqiruvlarni bevosita ovozli pochtaga yuborish"</string>
- <string name="removePhoto" msgid="4898105274130284565">"Suratni olib tashlash"</string>
- <string name="noContacts" msgid="4955659076981974652">"Hech qanday kontakt yo‘q"</string>
- <string name="noGroups" msgid="8614664663561385253">"Guruhlar yo‘q."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Guruh yaratish uchun hisobingiz bo‘lishi kerak."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Ushbu guruhda odam yo‘q."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Bir nechtani qo‘shish uchun guruhni tahrirlang."</string>
- <string name="savingContact" msgid="4075751076741924939">"Kontakt saqlanmoqda…"</string>
- <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt saqlandi"</string>
- <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar ajratildi"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Kontakt o‘zgarishlari saqlanmadi."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Kontaktni ajratib bo‘lmadi."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Kontaktni bog‘lab bo‘lmadi."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Kontakt saqlanishda xatolik."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Kontakt rasmi o‘zgarmadi."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Guruh saqlandi."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Guruh o‘zgarishlarini saqlab bo‘lmadi."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other">Telefon raqami bor <xliff:g id="COUNT">%d</xliff:g> ta kontakt</item>
- <item quantity="one">Telefon raqami bor 1 ta kontakt</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon raqami bor hech qanday kontakt yo‘q"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta topildi</item>
- <item quantity="one">1 ta topildi</item>
- </plurals>
- <string name="listFoundAllContactsZero" msgid="922980883593159444">"Hech qanday kontakt yo‘q."</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta topildi</item>
- <item quantity="one">1 ta topildi</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Hammasi"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Sevimlilar"</string>
- <string name="callBack" msgid="5498224409038809224">"Telefon"</string>
- <string name="callAgain" msgid="3197312117049874778">"Yana telefon qilish"</string>
- <string name="returnCall" msgid="8171961914203617813">"Telefon qilish"</string>
- <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"“<xliff:g id="EMAIL">%s</xliff:g>” kontaktlarga qo‘shilsinmi?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"kontakt surati"</string>
- <string name="description_plus_button" msgid="515164827856229880">"plyus"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ta kontakt, jami: <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
- <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlaringiz ismi"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Ushbu amalni bajarish uchun ilova topilmadi."</string>
- <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Avvalgi ekranga qaytish uchun bosing"</string>
- <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefon raqamini kiritish"</string>
- <string name="quickcontact_add_email" msgid="739298028384348482">"E-pochta manzilini kiritish"</string>
- <string name="missing_app" msgid="1466111003546611387">"Ushbu amalni bajarish uchun ilova topilmadi."</string>
- <string name="menu_share" msgid="943789700636542260">"Yuborish"</string>
- <string name="menu_add_contact" msgid="3198704337220892684">"Kontaktlarga qo‘shish"</string>
- <string name="share_via" msgid="563121028023030093">"Yuborish usuli"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Hisob ostida guruh yaratish"</string>
- <string name="audio_chat" msgid="2535716629358298691">"Ovozli suhbat"</string>
- <string name="video_chat" msgid="1872255818640336072">"Video suhbat"</string>
- <string name="connections" msgid="8098440723172028350">"Ulanishlar"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Aloqa qo‘shish"</string>
- <string name="recent" msgid="2659189233141493004">"Yaqinda"</string>
- <string name="recent_updates" msgid="4267258535615860710">"So‘nggi yangilanishlar"</string>
- <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
- <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hisobi"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ushbu ilova orqali tahrirlab bo‘lmaydi."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ushbu qurilmada tahrir qilib bo‘lmaydi."</string>
- <string name="take_photo" msgid="7496128293167402354">"Suratga olish"</string>
- <string name="take_new_photo" msgid="7341354729436576304">"Suratga olish"</string>
- <string name="pick_photo" msgid="2129509985223564942">"Surat tanlash"</string>
- <string name="pick_new_photo" msgid="9122450996263688237">"Boshqa surat tanlash"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Kontakt ro‘yxati yangilanmoqda."</string>
- <string name="search_results_searching" msgid="3984833028938569930">"Qidirilmoqda…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Tanlanganni ko‘rsatish"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Hammasini ko‘rsatish"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Hammasini belgilash"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Hammasini bekor qilish"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yangisini qo‘shish"</string>
- <string name="add_organization" msgid="7311893231158291197">"Tashkilot qo‘shish"</string>
- <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Sana"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Guruh nomi"</string>
- <string name="change_photo" msgid="8530597935483526383">"O‘zgartirish"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Asosiy rasm"</string>
- <string name="description_star" msgid="2605854427360036550">"ajratilgan"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Kontaktni tahrirlash"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Joriy kontakt tanlangan kontaktga bog‘lansinmi?"</string>
- <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Tanlangan kontaktni tahrir qilishga o‘tilsinmi? Hozirgacha kiritgan ma’lumotlaringizdan nusxa ko‘chiriladi."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kontaktlarimga nusxalash"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Kontaktlarimga qo‘shish"</string>
- <string name="contact_directory_description" msgid="683398073603909119">"Direktoriya <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Maxsus"</string>
- <string name="activity_title_settings" msgid="5464130076132770781">"Sozlamalar"</string>
- <string name="menu_settings" msgid="377929915873428211">"Sozlamalar"</string>
- <string name="menu_help" msgid="1680178646764069976">"Yordam va fikr-mulohaza"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Kontaktlarning ko‘rinishi"</string>
- <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
- <string name="non_phone_caption" msgid="1541655052330027380">"Telefon raqami"</string>
- <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlarga qo‘shish"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ma’lumot qo‘shish"</string>
- <string name="non_phone_close" msgid="7608506439725515667">"Yopish"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
- <string name="date_year_toggle" msgid="7122002148518724139">"yili bilan birga"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Yuklanmoqda…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yangi kontakt yaratish"</string>
- <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hisob qo‘shish"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Kontaktlarni import qilish"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Yangi guruh yaratish"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Yangi guruh yaratish"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> ta guruh</item>
- <item quantity="one">1 ta guruh</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\" guruhi o‘chirilsinmi? (Kontaktlarning o‘zi o‘chirilmaydi.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> guruhidan <xliff:g id="COUNT_2">%1$d</xliff:g> ta odam</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> guruhidan <xliff:g id="COUNT_0">%1$d</xliff:g> ta odam</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta odam</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta odam</item>
- </plurals>
- <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Birlashtirmoqchi bo‘lgan kontaktning ismini kiriting."</string>
- <string name="copy_text" msgid="3257145021583508761">"Vaqtinchalik xotiraga nusxalash"</string>
- <string name="set_default" msgid="4417505153468300351">"Standart sifatida belgilash"</string>
- <string name="clear_default" msgid="7193185801596678067">"Standartni tozalash"</string>
- <string name="toast_text_copied" msgid="5143776250008541719">"Matndan nuxsa olindi"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"O‘zgarishlar bekor qilinib, chiqib ketilsinmi?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Bekor qilish"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Tahrirlashda davom etish"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Profilingizni sozlang"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Kontaktning ismi"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Guruh nomi"</string>
- <string name="local_profile_title" msgid="2021416826991393684">"Qurilmadagi profilim"</string>
- <string name="external_profile_title" msgid="8034998767621359438">"Mening <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Barcha kontaktlar ko‘rsatilmoqda"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Onlayn xizmat yordamida sinxronlab, telefoningiz yo‘qolganda ham kontaktlaringizni saqlab qoling."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hisob qo‘shish"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Yangi kontaktning zaxira nusxasi saqlanmaydi. Kontaktlarni internetga saqlash uchun hisob qo‘shilsinmi?"</string>
- <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yangi kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hisobiga saqlanadi."</string>
- <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yangi kontaktlar uchun birlamchi hisobni tanlang:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Yangi kontakt qo‘shish"</string>
- <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontaktni tahrirlash"</string>
- <string name="keep_local" msgid="1258761699192993322">"Qurilmaga saqlash"</string>
- <string name="add_account" msgid="8201790677994503186">"Hisob qo‘shish"</string>
- <string name="add_new_account" msgid="5748627740680940264">"Yangi hisob qo‘shish"</string>
- <string name="menu_export_database" msgid="2659719297530170820">"Ma’lumotlar bazasi fayllarini eksport qilish"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"yangi kontakt qo‘shish"</string>
- <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Yana"</string>
- <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kamroq"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Barchasini ko‘rish"</string>
- <string name="recent_card_title" msgid="8982782042698001695">"Yaqinda"</string>
- <string name="about_card_title" msgid="2920942314212825637">"Kontakt haqida:"</string>
- <string name="send_message" msgid="8938418965550543196">"Xabar yuborish"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Shaxsiy nusxasi yaratilmoqda…"</string>
- <string name="yesterday" msgid="6840858548955018569">"Kecha"</string>
- <string name="tomorrow" msgid="6241969467795308581">"Ertaga"</string>
- <string name="today" msgid="8041090779381781781">"Bugun"</string>
- <string name="today_at_time_fmt" msgid="605665249491030460">"Bugun <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</string>
- <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ertaga <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="untitled_event" msgid="3484859385405939366">"(Nomsiz tadbir)"</string>
- <string name="date_time_set" msgid="4761419824439606690">"Saqlash"</string>
- <string name="header_im_entry" msgid="3581720979640225615">"Tezkor xabar (IM)"</string>
- <string name="header_organization_entry" msgid="8515394955666265406">"Tashkilot"</string>
- <string name="header_nickname_entry" msgid="6743561883967451485">"Taxallus"</string>
- <string name="header_note_entry" msgid="4320190426480612344">"Izoh"</string>
- <string name="header_website_entry" msgid="1411467850000824745">"Veb-sayt"</string>
- <string name="header_event_entry" msgid="6738250422744401460">"Tadbir"</string>
- <string name="header_relation_entry" msgid="1520292958088146460">"Aloqadorligi"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Hisob"</string>
- <string name="header_name_entry" msgid="1592791008096288306">"Ism"</string>
- <string name="header_email_entry" msgid="8666093061171624478">"E-pochta"</string>
- <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Rasm"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Kontaktni tahrirlash oynasini ochish uchun bosing."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kontaktni tahrirlash oynasini yopish uchun bosing."</string>
- <string name="content_description_directions" msgid="2686791825798189335">"manzilga yo\'nalishlar"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"Yaqindagi SMS xabar. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Javob berish uchun bosing."</string>
- <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"kiruvchi"</string>
- <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"chiquvchi"</string>
- <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"javobsiz"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"Yaqindagi chaqiruv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Qaytarib qilish uchun bosing."</string>
- <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts yanada yaxshi ishlashi uchun e-pochta yoki telefon raqami maydoniga foydalanuvchining Hangouts identifikatorini kiriting."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Boshqa maydonlarni ko‘rsatish"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Suratni almashtirish"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Muharrirni ochib bo‘lmadi."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Qayerga saqlansin"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hozirda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hisobiga saqlanmoqda. Boshqa hisobni tanlash uchun ikki marta bosing."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Bog‘langan kontaktlar (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Bog‘langan kontakt</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ta kontakt bog‘langan"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
- <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KONTAKTLARNI BOG‘LASH"</string>
- <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BEKOR QILISH"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta takroriy kontakt</item>
- <item quantity="one">1 ta takroriy kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta bog‘langan kontakt</item>
- <item quantity="one">1 ta bog‘langan kontakt</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
- <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Shu kontakt"</string>
- <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Takroriy kontaktlar"</string>
- <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar bitta odamga tegishli bo‘lishi mumkin. Ularni bitta kontaktga birlashtiring."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Bog‘langan kontaktlar"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Hisoblaringizdan olingan"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Suratga olish"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Barcha suratlar"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Surat tanlash"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> tomonidan"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ni o‘chirish"</string>
- <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ni o‘chirish"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> hisobi rasmi belgilanmagan"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> hisobi rasmi belgilangan"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Noma’lum hisobdan rasm tanlash bekor qilindi"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Noma’lum hisobdan rasm tanlandi"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Til o‘zgarishlarini aks ettirish uchun kontakt ro‘yxati yangilanmoqda.\n\nIltimos, kuting…"</string>
- <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklangan raqamlar"</string>
-</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
new file mode 100644
index 000000000..201756d8f
--- /dev/null
+++ b/res/values-uz/strings.xml
@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2006 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
+ <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt saqlash"</string>
+ <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
+ <string name="shortcutDialContact" msgid="746622101599186779">"Tezkor chaqiruv"</string>
+ <string name="shortcutMessageContact" msgid="2460337253595976198">"Tezkor SMS"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt tanlash"</string>
+ <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ma’lumot qo‘shish"</string>
+ <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontaktni tanlang"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Tanlash"</string>
+ <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yangi kontakt yaratish"</string>
+ <string name="searchHint" msgid="8482945356247760701">"Kontaktlar ichidan qidirish"</string>
+ <string name="menu_addStar" msgid="2908478235715404876">"Saralanganlarga qo‘shish"</string>
+ <string name="menu_removeStar" msgid="5844227078364227030">"Saralanganlardan olib tashlash"</string>
+ <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Sevimlilardan o‘chirib tashlandi"</string>
+ <string name="description_action_menu_add_star" msgid="3327186327234177456">"Sevimlilarga qo‘shildi"</string>
+ <string name="menu_editContact" msgid="9042415603857662633">"Tahrirlash"</string>
+ <string name="menu_deleteContact" msgid="6788644058868189393">"O‘chirish"</string>
+ <string name="menu_change_photo" msgid="7769177631511496210">"Suratni almashtirish"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Yorliq yaratish"</string>
+ <string name="menu_splitAggregate" msgid="2627252205317945563">"Ajratish"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Kontaktlarni olib tashlash"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Yorliqni qayta nomlash"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Yorliqni o‘chirib tashlash"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Kontakt saqlash"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktlarni tanlash"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakt qo‘shish"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Yorliqni olib tashlash"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Yorliq yaratish"</string>
+ <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt bir nechta kontaktga ajratilsinmi?"</string>
+ <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ajratish"</string>
+ <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"O‘zgarishlarni saqlab, ushbu kontaktni bir nechta kontaktlarga ajratilsinmi?"</string>
+ <string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Ha"</string>
+ <string name="joinConfirmation" msgid="8262614843581924365">"O‘zgarishlar saqlab, tanlangan kontaktga bog‘lansinmi?"</string>
+ <string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Ha"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Bog‘lanmoqda…"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Ajratilmoqda…"</string>
+ <string name="menu_joinAggregate" msgid="3599512127797513606">"Bog‘lash"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Bog‘langan kontaktlarni ko‘rish"</string>
+ <string name="menu_save" msgid="1727844363591825909">"Saqlash"</string>
+ <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Birlashtirish"</string>
+ <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> bilan bog‘lamoqchi bo‘lgan kontaktni tanlang:"</string>
+ <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Taklif etilgan kontaktlar"</string>
+ <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Barcha kontaktlar"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> bog‘landi"</string>
+ <string name="contactsJoinedMessage" msgid="3343535986195643136">"Kontaktlar bog‘landi"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> o‘chirib tashlandi"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> va <xliff:g id="NAME_1">%2$s</xliff:g> o‘chirib tashlandi"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… kontaktlari o‘chirib tashlandi"</string>
+ <plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
+ <item quantity="other">Kontaktlar o‘chirib tashlandi</item>
+ <item quantity="one">Kontakt o‘chirib tashlandi</item>
+ </plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ta kontakt</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta kontakt</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Google kontaktlari"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hisobidan"</string>
+ <string name="menu_set_ring_tone" msgid="8728345772068064946">"Rington tayinlash"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Ovozli pochtaga yo‘naltirish"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Ovozli pochtaga yo‘naltirilmasin"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Bu kontaktni faqat ko‘rish mumkin. Uni o‘chirib tashlab bo‘lmaydi, lekin berkitishingiz mumkin."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Kontaktni berkitish"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Bu kontakt ma’lumotlari faqat o‘qishga ruxsat etilgan hisoblarda berkitiladi, lekin o‘chirib tashlanmaydi."</string>
+ <string name="single_delete_confirmation" msgid="3106905986948679720">"Bu kontakt o‘chirib tashlansinmi?"</string>
+ <string name="batch_delete_confirmation" msgid="3984346060324014108">"Belgilangan kontaktlar o‘chirib tashlansinmi?"</string>
+ <string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Faqat o‘qish rejimidagi hisoblardagi kontaktlar o‘chirilmaydi, lekin yashirilishi mumkin."</string>
+ <string name="batch_delete_multiple_accounts_confirmation" msgid="8207205649127030030">"O‘chirilayotgan kontaktlarda bir nechta hisoblarga oid ma’lumotlar mavjud. Faqat o‘qish rejimidagi hisoblar yashiriladi, lekin o‘chirilmaydi."</string>
+ <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontakt o‘chirib tashlansa, bir nechta hisobdagi ma’lumotlar ham o‘chib ketadi."</string>
+ <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt o‘chirib tashlansinmi?"</string>
+ <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"O‘chirish"</string>
+ <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mavjud emas."</string>
+ <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt bosh ekranga chiqarildi."</string>
+ <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bosh ekranga chiqarildi."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Qurilmada rasm yo‘q."</string>
+ <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt surati"</string>
+ <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nomi"</string>
+ <string name="removePhoto" msgid="4898105274130284565">"Suratni olib tashlash"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Hech qanday kontakt yo‘q"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Bunday yorliqli kontakt yo‘q"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Bu hisobda hech qanday kontakt yo‘q"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Hech qanday kontakt yo‘q"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> saqlandi"</string>
+ <string name="contactSavedToast" msgid="9171862279493213075">"Kontakt saqlandi"</string>
+ <string name="contactUnlinkedToast" msgid="7122823195786012553">"Kontaktlar ajratildi"</string>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Kontakt ma’lumotlariga kiritilgan o‘zgarishlar saqlanmadi."</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Kontaktni ajratib bo‘lmadi."</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Kontaktni bog‘lab bo‘lmadi."</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktni saqlashda xatolik yuz berdi."</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt suratiga kiritilgan o‘zgarishlar saqlanmadi."</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yorliqni yuklashda xatolik yuz berdi"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Yorliq o‘chirib tashlandi"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Yorliq yaratildi"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Yorliq yaratib bo‘lmadi"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Yorliq yangilandi"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Yorliq olib tashlandi"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Yorliqqa qo‘shildi"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Yorliqqa kiritilgan o‘zgarishlarni saqlab bo‘lmadi."</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Bunday yorliq allaqachon mavjud"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Ayrim kontaktlarda e-pochta manz. ko‘rsatilmagan."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Ayrim kontaktlarda telefon raqami ko‘rsatilmagan."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"E-pochta orqali xat yuborish"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"SMS yuborish"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktlarni tanlang"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Yuborish"</string>
+ <string name="listFoundAllContactsZero" msgid="922980883593159444">"Hech qanday kontakt yo‘q."</string>
+ <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"<xliff:g id="EMAIL">%s</xliff:g> kontaktlarga saqlansinmi?"</string>
+ <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlaringiz ismi"</string>
+ <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Avvalgi ekranga qaytish uchun bosing"</string>
+ <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefon raqamini kiritish"</string>
+ <string name="quickcontact_add_email" msgid="739298028384348482">"E-pochta manzilini kiritish"</string>
+ <string name="missing_app" msgid="1466111003546611387">"Ushbu amalni bajarish uchun ilova topilmadi."</string>
+ <string name="menu_share" msgid="943789700636542260">"Yuborish"</string>
+ <string name="menu_add_contact" msgid="3198704337220892684">"Kontaktlarga saqlash"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Qo‘shish"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Kontaktlarni bu orqali baham ko‘rish</item>
+ <item quantity="one">Kontaktni bu orqali baham ko‘rish</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Hisobni tanlang"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Yorliq yaratish"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Yorliqni qayta nomlash"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Yorliq nomi"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Yorliq nomi"</string>
+ <string name="audio_chat" msgid="2535716629358298691">"Ovozli suhbat"</string>
+ <string name="video_chat" msgid="1872255818640336072">"Video suhbat"</string>
+ <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
+ <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hisobi"</string>
+ <string name="take_photo" msgid="7496128293167402354">"Suratga olish"</string>
+ <string name="take_new_photo" msgid="7341354729436576304">"Suratga olish"</string>
+ <string name="pick_photo" msgid="2129509985223564942">"Surat tanlash"</string>
+ <string name="pick_new_photo" msgid="9122450996263688237">"Boshqa surat tanlash"</string>
+ <string name="search_results_searching" msgid="3984833028938569930">"Qidirilmoqda…"</string>
+ <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Sana"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Yorliq"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Bekor qilish"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Orqaga"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"yopish"</string>
+ <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Tanlangan kontaktni tahrir qilishga o‘tilsinmi? Hozirgacha kiritgan ma’lumotlaringizdan nusxa ko‘chiriladi."</string>
+ <string name="contact_directory_description" msgid="683398073603909119">"Direktoriya <xliff:g id="TYPE">%1$s</xliff:g>"</string>
+ <string name="activity_title_settings" msgid="5464130076132770781">"Sozlamalar"</string>
+ <string name="menu_settings" msgid="377929915873428211">"Sozlamalar"</string>
+ <string name="menu_help" msgid="1680178646764069976">"Yordam va fikr-mulohaza"</string>
+ <string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
+ <string name="non_phone_caption" msgid="1541655052330027380">"Telefon raqami"</string>
+ <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlarga saqlash"</string>
+ <string name="non_phone_close" msgid="7608506439725515667">"Yopish"</string>
+ <string name="date_year_toggle" msgid="7122002148518724139">"yili bilan birga"</string>
+ <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hisob qo‘shish"</string>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import qilish"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Yangi yorliq yaratish…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"“<xliff:g id="GROUP_LABEL">%1$s</xliff:g>” yorlig‘i o‘chirib tashlansinmi? Kontaktlar o‘chib ketmaydi."</string>
+ <string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Birlashtirmoqchi bo‘lgan kontaktning ismini kiriting."</string>
+ <string name="copy_text" msgid="3257145021583508761">"Vaqtinchalik xotiraga nusxalash"</string>
+ <string name="set_default" msgid="4417505153468300351">"Standart sifatida belgilash"</string>
+ <string name="clear_default" msgid="7193185801596678067">"Standartni tozalash"</string>
+ <string name="toast_text_copied" msgid="5143776250008541719">"Matndan nuxsa olindi"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"O‘zgarishlar saqlanmasinmi?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Saqlanmasin"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Bekor qilish"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Tanlanma saqlanmasinmi?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Kontaktlar ichidan qidirish"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Kontaktlarni olib tashlash"</string>
+ <string name="local_profile_title" msgid="2021416826991393684">"Qurilmadagi profilim"</string>
+ <string name="external_profile_title" msgid="8034998767621359438">"Mening <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Kontaktlaringizni Google xizmatiga saqlash uchun hisob qo‘shing."</string>
+ <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yangi kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hisobiga saqlanadi."</string>
+ <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yangi kontaktlar uchun birlamchi hisobni tanlang:"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Yangi kontakt yaratish"</string>
+ <string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Kontaktni tahrirlash"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Faqat ko‘rish"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Kontaktni tanlang"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Bog‘langan kontaktlar"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Qo‘shish"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Ajratish"</string>
+ <string name="add_account" msgid="8201790677994503186">"Hisob qo‘shish"</string>
+ <string name="add_new_account" msgid="5748627740680940264">"Yangi hisob qo‘shish"</string>
+ <string name="menu_export_database" msgid="2659719297530170820">"Ma’lumotlar bazasi fayllarini eksport qilish"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Yangi kontakt yaratish"</string>
+ <string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Yana"</string>
+ <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kamroq"</string>
+ <string name="recent_card_title" msgid="8982782042698001695">"Yaqinda"</string>
+ <string name="about_card_title" msgid="2920942314212825637">"Kontakt haqida:"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Shaxsiy nusxasi yaratilmoqda…"</string>
+ <string name="tomorrow" msgid="6241969467795308581">"Ertaga"</string>
+ <string name="today" msgid="8041090779381781781">"Bugun"</string>
+ <string name="today_at_time_fmt" msgid="605665249491030460">"Bugun <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</string>
+ <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ertaga <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
+ <string name="untitled_event" msgid="3484859385405939366">"(Nomsiz tadbir)"</string>
+ <string name="date_time_set" msgid="4761419824439606690">"Saqlash"</string>
+ <string name="header_im_entry" msgid="3581720979640225615">"Tezkor xabar (IM)"</string>
+ <string name="header_organization_entry" msgid="8515394955666265406">"Tashkilot"</string>
+ <string name="header_nickname_entry" msgid="6743561883967451485">"Taxallus"</string>
+ <string name="header_note_entry" msgid="4320190426480612344">"Izoh"</string>
+ <string name="header_website_entry" msgid="1411467850000824745">"Veb-sayt"</string>
+ <string name="header_event_entry" msgid="6738250422744401460">"Tadbir"</string>
+ <string name="header_relation_entry" msgid="1520292958088146460">"Aloqadorligi"</string>
+ <string name="header_name_entry" msgid="1592791008096288306">"Ism"</string>
+ <string name="header_email_entry" msgid="8666093061171624478">"E-pochta"</string>
+ <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
+ <string name="content_description_directions" msgid="2686791825798189335">"manzilga yo\'nalishlar"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"Yaqindagi SMS xabar. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Javob berish uchun bosing."</string>
+ <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"kiruvchi"</string>
+ <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"chiquvchi"</string>
+ <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"javobsiz"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"Yaqindagi chaqiruv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Qaytarib qilish uchun bosing."</string>
+ <string name="message_from_you_prefix" msgid="7180706529908434482">"Siz: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Boshqa maydonlar"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakt suratini o‘zgartirish"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakt suratini qo‘shish"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Kontakt surati"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Muharrirni ochib bo‘lmadi."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Qayerga saqlansin:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hisobining kontakt ma’lumotlarini o‘zgartirib bo‘lmaydi."</string>
+ <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"BIRLASHTIRISH"</string>
+ <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BEKOR QILISH"</string>
+ <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Shu kontakt"</string>
+ <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Takroriy kontaktlar"</string>
+ <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar bitta odamga tegishli bo‘lishi mumkin. Ularni bitta kontaktga birlashtiring."</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ni o‘chirish"</string>
+ <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ni o‘chirish"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Tavsiyalar"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yangi"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigatsiya panelini ochish"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Navigatsiya panelini yopish"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"“<xliff:g id="LABEL_NAME">%s</xliff:g>” yorlig‘i"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Yorliqlar"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Hisoblar"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Umumiy tarixni ochish"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Tadbirlar va xabarlar"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Tadbirlar"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Xabarlar"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Tavsiyalar"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Kontaktlar bilan qulay ishlash uchun ularni tartibga soling"</string>
+ <string name="undo" msgid="1425165101664071422">"Bekor qilish"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Qo‘ng‘iroq qilish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="call_home" msgid="1990519474420545392">"Uy telefoni"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Mobil telefon"</string>
+ <string name="call_work" msgid="5328785911463744028">"Ishxona telefoni"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Ishxona faksi"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Uy faksi"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Peyjer"</string>
+ <string name="call_other" msgid="8563753966926932052">"Qo‘ng‘iroq qilish"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Teskari chaqiruv"</string>
+ <string name="call_car" msgid="3280537320306436445">"Avtomobildagi telefon"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Ofis"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"ISDN raqami"</string>
+ <string name="call_main" msgid="6082900571803441339">"Asosiy telefon"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Faks raqamiga qo‘ng‘iroq qilish"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Radiotelefon"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Teleks"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Teletayp"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Ishxona mobil telefoni"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Ish peyjeri"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Qo‘ng‘iroq qilish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="call_mms" msgid="6274041545876221437">"MMS markazi"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Qo‘ng‘iroq qilish)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"SMS yuborish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="sms_home" msgid="7524332261493162995">"SMS: uy telefoni"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"SMS: mobil"</string>
+ <string name="sms_work" msgid="2269624156655267740">"SMS: ishxona telefoni"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"SMS: ishxona faksi"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"SMS: uy faksi"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"SMS: peyjer"</string>
+ <string name="sms_other" msgid="806127844607642331">"Matn"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"SMS: teskari chaqiruv raqami"</string>
+ <string name="sms_car" msgid="7444227058437359641">"SMS: avtomobildagi telefon"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"SMS: ofis telefoni"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"SMS: ISDN raqami"</string>
+ <string name="sms_main" msgid="8621625784504541679">"SMS: asosiy telefon"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Faks raqamiga sms jo‘natish"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"SMS: radiotelefon"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"SMS: teleks"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"SMS: teletayp"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"SMS: ishxona (mobil)"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"SMS: ish peyjeri"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"<xliff:g id="ASSISTANT">%s</xliff:g> telefon raqamiga SMS yuborish"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (SMS)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Video qo‘ng‘iroq qilish"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Bu ro‘yxat tozalansinmi?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Kontaktlar va Telefon ilovalaridagi tez-tez aloqa qilingan kontaktlar ro‘yxati tozalanadi. E-pochta ilovalari esa e-pochta manzillarini yangidan eslay boshlaydi."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Ro‘yxat tozalanmoqda…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Aloqada"</string>
+ <string name="status_away" msgid="1838861100379804730">"Tashqarida"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Band"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Boshqa"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Ishchi katalogi"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Barcha kontaktlar"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Tezkor chaqiruv, kontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Ismi yo‘q)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Tez-tez aloqa qilingan kontaktlar"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Telefon raqamiga ega kontaktlar"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Ishchi profili kontaktlari"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Yangilanishlarni ko‘rish"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Qurilma"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM karta"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Ism"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Taxallus"</string>
+ <string name="name_given" msgid="4280790853455320619">"Ismi"</string>
+ <string name="name_family" msgid="7466985689626017037">"Familiyasi"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Murojaat shakli"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Otasining ismi"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Martabasi/unvoni"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Ism talaffuzi"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Ism talaffuzi"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Otasining ismi talaffuzi"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Familiya talaffuzi"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Telefon"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"E-pochta"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Manzil"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"Chat"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Tashkilot"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Aloqadorligi"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Maxsus sana"</string>
+ <string name="sms" msgid="1756857139634224222">"SMS"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Manzil"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Kompaniya"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Lavozimi"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Izohlar"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Maxsus"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Veb-sayt"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Yorliqlar"</string>
+ <string name="email_home" msgid="8573740658148184279">"Shaxsiy e-pochta"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Mobil e-pochta"</string>
+ <string name="email_work" msgid="2807430017302722689">"Ish e-pochtasi"</string>
+ <string name="email_other" msgid="3454004077967657109">"E-pochta xat yuborish"</string>
+ <string name="email_custom" msgid="5536404237099078802">"E-pochta xat yozish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="email" msgid="5668400997660065897">"E-pochta"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Ko‘cha"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Shahar"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Viloyat"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Pochta indeksi"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Mamlakat"</string>
+ <string name="map_home" msgid="1243547733423343982">"Uy manzilini ko‘rish"</string>
+ <string name="map_work" msgid="1360474076921878088">"Ishxona manzilini ko‘rish"</string>
+ <string name="map_other" msgid="3817820803587012641">"Manzilni ko‘rish"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Manzilni ko‘rish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"AIM orqali chat qilish"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Windows Live orqali chat"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Yahoo orqali chat"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Skype orqali chat"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"QQ orqali chat"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Google Talk orqali chat"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"ICQ orqali chat"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Jabber orqali chat"</string>
+ <string name="chat" msgid="9025361898797412245">"Chat"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"o‘chirib tashlash"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Ism uchun qo‘shimcha qatorlarni ko‘rsatish"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Ism maydonlarini berkitish"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Ism transkripsiyasi uchun qo‘shimcha qatorlarni ko‘rsatish"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Fonetik ism maydonlarini berkitish"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Ko‘rsatish"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Berkitish"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Ko‘rsatilmoqda"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Berkitildi"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Barcha kontaktlar"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Yulduzcha qo‘yilganlar"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Maxsus tanlanma"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Kontakt"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Boshqa kontaktlar"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Barcha kontaktlar"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Sinxronizatsiya guruhini o‘chirish"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Sinxronizatsiya guruhi qo‘shish"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Boshqa guruhlar…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"<xliff:g id="GROUP">%s</xliff:g> guruhini sinxronlash to‘xtatilsa, guruhga qo‘shilmagan kontaktlar ham sinxronlanmay qoladi."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Parametrlar saqlanmoqda…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Maxsus ko‘rinish"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Kontaktlar bu yerga saqlansin:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM karta"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM karta: <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%d ta kontakt</item>
+ <item quantity="one">1 ta kontakt</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> ta kontakt • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> ta kontakt • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"VCF fayl"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Import qilinadigan kontaktlar yo‘q"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Kontaktlar vCard faylidan import qilinsinmi?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"<xliff:g id="FILENAME">%s</xliff:g> faylini import qilish bekor qilinsinmi?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> faylini eksport qilish bekor qilinsinmi?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard faylini import/eksport qilishni bekor qilib bo‘lmadi."</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Noma’lum xato."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"<xliff:g id="FILE_NAME">%1$s</xliff:g> faylini ochib bo‘lmadi. Sababi: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksport qilish funksiyasini ishga tushirib bo‘lmaydi. Sababi: “<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksport qilish kontaktlar yo‘q."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Kerakli ruxsat o‘chirib qo‘yilgan."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksport qilish vaqtida xatolik yuz berdi. Sababi: “<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O xato"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Xotira yetarli joy yo‘q. Fayl juda katta bo‘lishi mumkin."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Bu format qo‘llab-quvvatlanmaydi."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> eksport qilindi."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktlar eksport qilindi."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktlar eksport qilindi. Ularni baham ko‘rish uchun bildirishnoma ustiga bosing."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Kontaktlarni baham ko‘rish uchun bu yerga bosing."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"<xliff:g id="FILENAME">%s</xliff:g> faylini eksport qilish bekor qilindi."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontakt ma’lumoti eksport qilinmoqda."</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakt ma’lumotlari eksport qilinmoqda."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ma’lumotlar bazasiga kirib bo‘lmadi."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Eksport qilish uchun hech qanday kontakt yo‘q."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard muharririni ishga tushirishda xatolik yuz berdi."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport qilinmadi"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakt ma’lumoti eksport qilinmadi.\nSababi: “<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> import qilinmoqda"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard fayli ma’lumot-ni o‘qib bo‘lmadi"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard fayli import qilindi"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> faylini import qilish bekor qilindi"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tez orada import qilinadi."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fayl tez orada import qilinadi."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tashrifnomani import qilish so‘rovi rad qilindi. Keyinroq urinib ko‘ring."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktlar tez orada eksport qilinadi."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tashrifnomani eksport qilish rad qilindi. Keyinroq urinib ko‘ring."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"vCard fayllari vaqtinchalik ichki xotira keshiga yuklanmoqda. Import qilish jarayoni tezda boshlanadi."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Tashrifnoma import qilinmadi."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC orq. olindi"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Keshga yuklanmoqda"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Import qilinmoqda: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> – <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"VCF faylga eksport qilish"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Saralash tartibi"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Ism talaffuzi"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Har doim ko‘rsatish"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Bo‘sh maydonni berkitish"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ismi"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Familiyasi"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ism formati"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Avval ismi"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Avval familiyasi"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Hisoblar"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Yangi kontaktlar uchun asosiy hisob"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Men haqimda"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Profilingizni sozlang"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Kontaktlar ilovasi haqida"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevimli kontaktlarni yuborish"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Barcha kontaktlarni yuborish"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktlarni yuborib bo‘lmadi."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Kontaktlarni eksport qilish"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Kontaktlarni import qilish"</string>
+ <string name="share_error" msgid="948429331673358107">"Bu kontaktni yuborib bo‘lmaydi."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Yuborish uchun hech qanday kontakt yo‘q."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontaktlarni filtrlash"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontaktlarni filtrlash"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Maxsus tanlanma"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Saqlash"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Kontaktlar ichidan qidirish"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Saralangan"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Import qilish"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Eksport qilish"</string>
+ <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklangan raqamlar"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"<xliff:g id="SOURCE">%1$s</xliff:g> orqali"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> – <xliff:g id="SOURCE">%2$s</xliff:g> orqali"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"qidiruvni to‘xtatish"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Izlashni tozalash"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Hisob"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Har doim qo‘ng‘iroq. uchun foyd-sin"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Qo‘ng‘iroq vaqtida matn yuborish"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Qo‘ng‘iroq vaqtida yuborish lozim bo‘lgan matnni kiriting…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"XABAR YUBORISH VA QO‘NG‘. QILISH"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Versiyasi"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Ochiq kodli DT litsenziyalari"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Ochiq kodli DT litsenziyalari haqida ma’lumot"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Maxfiylik siyosati"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Foydalanish shartlari"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Ochiq kodli DT litsenziyalari"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"URLni ochishda xatolik yuz berdi."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> belgilangan"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> belgilanmagan"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Video qo‘ng‘iroq qilish"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"O‘chirib tashlash"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Uch nuqta"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> son."</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> daq. <xliff:g id="SECONDS">%2$s</xliff:g> son."</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> soat <xliff:g id="MINUTES_1">%2$s</xliff:g> daq. <xliff:g id="SECONDS">%3$s</xliff:g> son."</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu yorliq o‘chirib tashlandi"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt olib tashlandi"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Import qilish"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Kontaktlarni tanlash"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM kartada hech qanday kontakt yo‘q."</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Bu kontakt allaqachon kontaktlaringiz ro‘yxatiga kiritilgan"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta kontakt SIM kartadan import qilindi</item>
+ <item quantity="one">1 ta kontakt SIM kartadan import qilindi</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Kontaktlarni SIM kartadan import qilib bo‘lmadi"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Kontaktlarni SIM kartadan import qilish"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Bekor qilish"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Avto-sinxronlash o‘chiq. Uni yoqish uchun bosing."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Rad etish"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Hisobni sinxronlash o‘chiq. Uni yoqish uchun bosing."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Avto sinxronlash yoqilsinmi?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Ilova va hisoblarga kiritgan o‘zgarishlar (nafaqat Google Kontaktlar), ularning veb-versiyalaridan qurilmalarga avtomatik sinxronlanadi."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Yoqish"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Aloqa yo‘q"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Yana"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Kontaktlar SIM kartadan import qilindi"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Import qilib bo‘lmadi"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktlarni SIM kartadan import qilib bo‘lmadi."</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Kontakt. SIM kartadan import qilinmoqda…"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Bildirishnomalar"</string>
+</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 5887959bc..b985cdb76 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Danh bạ"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Danh bạ"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Xem liên hệ"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Chỉnh sửa địa chỉ liên hệ"</string>
<string name="contactsList" msgid="8661624236494819731">"Danh bạ"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Thêm liên hệ"</string>
<string name="shortcutContact" msgid="749243779392912958">"Liên hệ"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Quay số trực tiếp"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Tin nhắn trực tiếp"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Chọn lối tắt cho liên hệ"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Chọn một số để gọi"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Chọn một số để gửi tin nhắn"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Chọn liên hệ"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Thêm vào liên hệ"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Chọn người liên hệ"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Chọn"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Tạo liên hệ mới"</string>
- <string name="starredList" msgid="4817256136413959463">"Được gắn dấu sao"</string>
- <string name="frequentList" msgid="7154768136473953056">"Thường xuyên"</string>
- <string name="strequentList" msgid="5640192862059373511">"Liên hệ ưa thích"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Chi tiết liên hệ"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Chỉnh sửa liên hệ"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Tạo liên hệ"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Chỉnh sửa nhóm"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Tạo nhóm"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Giới thiệu"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Cập nhật"</string>
<string name="searchHint" msgid="8482945356247760701">"Tìm kiếm trong danh bạ"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Xem liên hệ"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Thêm vào liên hệ ưa thích"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Xóa khỏi mục ưa thích"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Đã xóa khỏi mục ưa thích"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Chỉnh sửa"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Xóa"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Thay đổi ảnh"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Đặt trên màn hình chính"</string>
- <string name="menu_call" msgid="3992595586042260618">"Gọi liên hệ"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Nhắn tin tới liên hệ"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Tạo phím tắt"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Hủy liên kết"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Chỉnh sửa"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Xóa"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Thêm địa chỉ liên hệ"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Thêm nhóm"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Xóa liên hệ"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Đổi tên nhãn"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Xóa nhãn"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Thêm liên hệ"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Chọn liên hệ"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Thêm liên hệ"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Xóa khỏi nhãn"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Tạo nhãn"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Bạn muốn hủy liên kết liên hệ này thành nhiều liên hệ?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Hủy liên kết"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Bạn có muốn lưu các thay đổi mình đã thực hiện và hủy liên kết liên hệ này thành nhiều liên hệ không?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Lưu và hủy liên kết"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Bạn có muốn lưu các thay đổi mình đã thực hiện và liên kết với liên hệ đã chọn không?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Lưu và liên kết"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Đang liên kết"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Đang hủy liên kết"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Liên kết"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Xem các liên hệ đã liên kết"</string>
<string name="menu_save" msgid="1727844363591825909">"Lưu"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Liên kết liên hệ"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Chọn liên hệ bạn muốn liên kết với <xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Hiển thị tất cả liên hệ"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Liên hệ được đề xuất"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Tất cả liên hệ"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"Đã liên kết <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Đã liên kết liên hệ"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"Đã xóa <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"Đã xóa <xliff:g id="NAME_0">%1$s</xliff:g> và <xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"Đã xóa <xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">Liên hệ đã bị xóa</item>
<item quantity="one">Liên hệ đã bị xóa</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> liên hệ</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> liên hệ</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Từ Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Từ <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Đặt nhạc chuông"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Cuộc gọi sang thư thoại"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Bạn có thể ẩn chứ không thể xóa liên hệ khỏi các tài khoản chỉ đọc của mình."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Ẩn"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Liên hệ cần xóa có thông tin chi tiết từ nhiều tài khoản. Thông tin chi tiết từ các tài khoản chỉ đọc sẽ bị ẩn chứ không bị xóa."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Bạn cần chọn ít nhất hai liên hệ để thực hiện liên kết."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Bạn muốn liên kết các liên hệ đã chọn?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Liên kết"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Định tuyến đến thư thoại"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Bỏ định tuyến đến thư thoại"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Liên hệ này ở trạng thái chỉ đọc. Bạn không thể xóa nhưng có thể ẩn liên hệ này."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Ẩn liên hệ"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Các tài khoản chỉ đọc trong liên hệ này sẽ bị ẩn chứ không bị xóa."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Bạn muốn xóa liên hệ này?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Bạn muốn xóa các liên hệ đã chọn?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Bạn có thể ẩn chứ không thể xóa liên hệ khỏi các tài khoản chỉ đọc của mình."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Xóa liên hệ này sẽ xóa thông tin chi tiết khỏi nhiều tài khoản."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Bạn muốn xóa liên hệ này?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Xóa"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Hủy các thay đổi"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Địa chỉ liên hệ không tồn tại."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Đã thêm liên hệ vào Màn hình chính."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"Đã thêm <xliff:g id="NAME">%s</xliff:g> vào Màn hình chính."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Tạo liên hệ mới"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Tạo địa chỉ liên hệ mới"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Tổ chức"</item>
- <item msgid="7196592230748086755">"Ghi chú"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Không có ảnh nào trong máy tính bảng."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Không có ảnh nào trong điện thoại."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Không có ảnh nào trên thiết bị."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Ảnh của liên hệ"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Tên nhãn tùy chỉnh"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Gửi cuộc gọi trực tiếp tới thư thoại"</string>
<string name="removePhoto" msgid="4898105274130284565">"Xóa ảnh"</string>
- <string name="noContacts" msgid="4955659076981974652">"Không có liên hệ nào"</string>
- <string name="noGroups" msgid="8614664663561385253">"Không có nhóm nào."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Để tạo nhóm, bạn cần có tài khoản."</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Không có người nào trong nhóm này."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Để thêm thành viên, chỉnh sửa nhóm."</string>
- <string name="savingContact" msgid="4075751076741924939">"Đang lưu liên hệ…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"Danh sách liên hệ của bạn trống"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Không có liên hệ nào có nhãn này"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Không có danh bạ trong tài khoản này"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Danh sách liên hệ của bạn trống"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"Đã lưu <xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Đã lưu địa chỉ liên hệ"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Đã hủy liên kết liên hệ"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Không thể lưu thay đổi của địa chỉ liên hệ."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Không thể hủy liên kết liên hệ."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Không thể liên kết liên hệ."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Lỗi khi lưu địa chỉ liên hệ."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Không thể lưu thay đổi đối với ảnh của liên hệ."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Đã lưu nhóm."</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Không thể lưu thay đổi nhóm."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> liên hệ có số điện thoại</item>
- <item quantity="one">1 liên hệ có số điện thoại</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Không có liên hệ nào có số điện thoại"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g> liên hệ</item>
- <item quantity="one">Đã tìm thấy 1 liên hệ</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Không thể lưu thay đổi đối với liên hệ"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Không thể hủy liên kết liên hệ"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Không thể liên kết liên hệ"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Đã xảy ra lỗi khi lưu liên hệ"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Không thể lưu thay đổi đối với ảnh của liên hệ"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Không tải được nhãn"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Đã xóa nhãn"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Đã tạo nhãn"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Không thể tạo nhãn"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Đã cập nhật nhãn"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Đã bị xóa khỏi nhãn"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Đã thêm vào nhãn"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Không thể lưu thay đổi đối với nhãn"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Nhãn đó đã tồn tại"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Một số liên hệ không có email."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Một số liên hệ không có số điện thoại."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Gửi email"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Gửi tin nhắn"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Chọn liên hệ"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Gửi"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Không có địa chỉ liên hệ nào"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">Đã tìm thấy <xliff:g id="COUNT">%d</xliff:g> liên hệ</item>
- <item quantity="one">Đã tìm thấy 1 liên hệ</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Tất cả"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Mục yêu thích"</string>
- <string name="callBack" msgid="5498224409038809224">"Gọi lại"</string>
- <string name="callAgain" msgid="3197312117049874778">"Gọi lại"</string>
- <string name="returnCall" msgid="8171961914203617813">"Gọi lại"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Thêm \"<xliff:g id="EMAIL">%s</xliff:g>\" vào danh bạ?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"ảnh của liên hệ"</string>
- <string name="description_plus_button" msgid="515164827856229880">"cộng"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> trong tổng số <xliff:g id="TOTAL_NUMBER">%s</xliff:g> liên hệ"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Tên danh bạ của bạn"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Không tìm thấy ứng dụng nào để xử lý tác vụ này."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Nhấp để quay lại màn hình trước đó"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Thêm số điện thoại"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Thêm email"</string>
<string name="missing_app" msgid="1466111003546611387">"Không tìm thấy ứng dụng nào để xử lý tác vụ này."</string>
<string name="menu_share" msgid="943789700636542260">"Chia sẻ"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Thêm vào danh bạ"</string>
- <string name="share_via" msgid="563121028023030093">"Chia sẻ liên hệ qua"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Tạo nhóm trong tài khoản"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Thêm"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">Chia sẻ các liên hệ qua</item>
+ <item quantity="one">Chia sẻ liên hệ qua</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Chọn tài khoản"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Tạo nhãn"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Đổi tên nhãn"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Tên nhãn"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Tên nhãn"</string>
<string name="audio_chat" msgid="2535716629358298691">"Trò chuyện thoại"</string>
<string name="video_chat" msgid="1872255818640336072">"Trò chuyện qua video"</string>
- <string name="connections" msgid="8098440723172028350">"Kết nối"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Thêm kết nối"</string>
- <string name="recent" msgid="2659189233141493004">"Gần đây"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Cập nhật gần đây"</string>
<string name="account_type_format" msgid="718948015590343010">"Liên hệ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"Tài khoản <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Không chỉnh sửa được từ ứng dụng này."</string>
- <string name="group_read_only" msgid="1061762906115697637">"Không chỉnh sửa được trên thiết bị này."</string>
<string name="take_photo" msgid="7496128293167402354">"Chụp ảnh"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Chụp ảnh mới"</string>
<string name="pick_photo" msgid="2129509985223564942">"Chọn ảnh"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Chọn ảnh mới"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Danh bạ đang được cập nhật."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Đang tìm kiếm…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Hiển thị mục đã chọn"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Hiển thị tất cả"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Chọn tất cả"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Bỏ chọn tất cả"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Thêm mục mới"</string>
- <string name="add_organization" msgid="7311893231158291197">"Thêm tổ chức"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ngày"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Tên nhóm"</string>
- <string name="change_photo" msgid="8530597935483526383">"Thay đổi"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Ảnh chính"</string>
- <string name="description_star" msgid="2605854427360036550">"Yêu thích"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Chỉnh sửa liên hệ"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Liên kết liên hệ hiện tại với liên hệ đã chọn?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Nhãn"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Hủy"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Quay lại"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"đóng"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Chuyển sang chỉnh sửa liên hệ đã chọn? Thông tin bạn đã nhập đến giờ sẽ được sao chép."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Sao chép vào Danh bạ của tôi"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Thêm vào Danh bạ của tôi"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Thư mục <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Tùy chỉnh"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Cài đặt"</string>
<string name="menu_settings" msgid="377929915873428211">"Cài đặt"</string>
<string name="menu_help" msgid="1680178646764069976">"Trợ giúp và phản hồi"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Tùy chọn hiển thị"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Số điện thoại"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Thêm vào danh bạ"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Thêm vào liên hệ"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Đóng"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Bao gồm năm"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Liên hệ"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Đang tải…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Tạo liên hệ mới"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Thêm tài khoản"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Nhập danh bạ"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Tạo nhóm mới"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Tạo nhóm mới"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> nhóm</item>
- <item quantity="one">1 nhóm</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Xóa nhóm \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Danh bạ sẽ không bị xóa.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> người từ <xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> người</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> người</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Nhập"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Tạo mới…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Bạn muốn xóa nhãn \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Danh bạ sẽ không bị xóa.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Nhập tên liên hệ trước khi liên kết với liên hệ khác."</string>
<string name="copy_text" msgid="3257145021583508761">"Sao chép vào khay nhớ tạm"</string>
<string name="set_default" msgid="4417505153468300351">"Đặt mặc định"</string>
<string name="clear_default" msgid="7193185801596678067">"Xóa mặc định"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Đã sao chép văn bản"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Hủy các thay đổi của bạn và thoát chỉnh sửa?"</string>
- <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hủy"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Tiếp tục chỉnh sửa"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Thiết lập hồ sơ"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Nhập tên của người này"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Tên nhóm"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Loại bỏ thay đổi?"</string>
+ <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Loại bỏ"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Hủy"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Loại bỏ tùy chỉnh?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Tìm kiếm trong danh bạ"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Xóa liên hệ"</string>
<string name="local_profile_title" msgid="2021416826991393684">"T.sử cục bộ của tôi"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Tiểu sử <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> của tôi"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Đang hiển thị tất cả liên hệ"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Đảm bảo an toàn cho danh sách liên hệ của bạn ngay cả khi bạn mất điện thoại: hãy đồng bộ hóa với một dịch vụ trực tuyến."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Thêm tài khoản"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Liên hệ mới của bạn sẽ không được sao lưu. Thêm tài khoản sao lưu danh bạ trực tuyến?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dành chút thời gian để thêm tài khoản mà sẽ sao lưu danh bạ của bạn vào Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Liên hệ mới sẽ được lưu vào <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Chọn tài khoản mặc định cho các liên hệ mới:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Thêm liên hệ mới"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Tạo liên hệ mới"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Chỉnh sửa liên hệ"</string>
- <string name="keep_local" msgid="1258761699192993322">"Lưu trữ cục bộ"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Chỉ xem"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Chọn liên hệ cần chỉnh sửa"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Liên hệ đã liên kết"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Thêm"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Hủy liên kết"</string>
<string name="add_account" msgid="8201790677994503186">"Thêm tài khoản"</string>
<string name="add_new_account" msgid="5748627740680940264">"Thêm tài khoản mới"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Xuất các tệp cơ sở dữ liệu"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"thêm liên hệ mới"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Tạo liên hệ mới"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Xem thêm"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Xem bớt"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Xem tất cả"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Gần đây"</string>
<string name="about_card_title" msgid="2920942314212825637">"Giới thiệu"</string>
- <string name="send_message" msgid="8938418965550543196">"Gửi tin nhắn"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Đang tạo bản sao cá nhân..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Hôm qua"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Đang tạo bản sao cá nhân..."</string>
<string name="tomorrow" msgid="6241969467795308581">"Ngày mai"</string>
<string name="today" msgid="8041090779381781781">"Hôm nay"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Hôm nay lúc <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ngày mai lúc <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Sự kiện không có tiêu đề)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Đặt"</string>
<string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Trang web"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Sự kiện"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Quan hệ"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"Tài khoản"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Tên"</string>
<string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Điện thoại"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Ảnh"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Nhấp để mở rộng trình chỉnh sửa liên hệ."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Nhấp để thu gọn trình chỉnh sửa liên hệ."</string>
<string name="content_description_directions" msgid="2686791825798189335">"chỉ đường tới địa điểm"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"sms gần đây. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. nhấp để trả lời"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"sms gần đây. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. nhấp để trả lời"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"cuộc gọi đến"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"cuộc gọi đi"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"cuộc gọi bị nhỡ"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"cuộc gọi gần đây. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. nhấp để gọi lại"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"cuộc gọi gần đây. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. nhấp để gọi lại"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Bạn: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts hoạt động tốt hơn khi bạn nhập số nhận dạng Hangouts của người đó vào trường email hoặc trường điện thoại."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Trường khác"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Thay đổi ảnh"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Không mở được trình chỉnh sửa."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Lưu vào"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Hiện đang lưu vào <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Hãy nhấn đúp để chọn tài khoản khác."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">Liên hệ được liên kết (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">Liên hệ được liên kết</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> liên hệ đã liên kết"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Trường khác"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Thay đổi ảnh của liên hệ"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Thêm ảnh của liên hệ"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Ảnh của liên hệ"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Không mở được trình chỉnh sửa."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Lưu vào"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Thông tin liên hệ từ <xliff:g id="ACCOUNT">%s</xliff:g> không thể chỉnh sửa được"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIÊN KẾT LIÊN HỆ"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"HỦY"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Liên hệ có thể trùng lặp</item>
- <item quantity="one">1 liên hệ có thể trùng lặp</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> liên hệ được liên kết</item>
- <item quantity="one">1 liên hệ được liên kết</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Liên hệ này"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Có thể trùng lặp"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Các liên hệ này có thể là cùng một người. Bạn có thể liên kết chúng với nhau thành một liên hệ duy nhất."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Liên hệ đã liên kết"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Từ các tài khoản của bạn"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Chụp ảnh"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Tất cả ảnh"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Chọn ảnh"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Từ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Xóa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Xóa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Xóa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Ảnh từ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>không được chọn"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Ảnh từ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>được chọn"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Chưa chọn ảnh từ tài khoản không xác định"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Đã chọn ảnh từ tài khoản không xác định"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Danh bạ đang được cập nhật để phản ánh thay đổi ngôn ngữ.\n\nVui lòng đợi..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Đề xuất"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Mới"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Mở ngăn điều hướng"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Đóng ngăn điều hướng"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"Nhãn <xliff:g id="LABEL_NAME">%s</xliff:g>"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Nhãn"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Tài khoản"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Xem đồng thời lịch sử của bạn"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Sự kiện và tin nhắn"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Sự kiện"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Tin nhắn"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Đề xuất"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Giữ cho danh bạ của bạn luôn được sắp xếp và hữu ích"</string>
+ <string name="undo" msgid="1425165101664071422">"Hoàn tác"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Gọi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Gọi số điện thoại nhà riêng"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Gọi số điện thoại di động"</string>
+ <string name="call_work" msgid="5328785911463744028">"Gọi số điện thoại cơ quan"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Gọi số fax cơ quan"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Gọi số fax nhà riêng"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Gọi số máy nhắn tin"</string>
+ <string name="call_other" msgid="8563753966926932052">"Gọi"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Gọi số gọi lại"</string>
+ <string name="call_car" msgid="3280537320306436445">"Gọi số điện thoại trên ô tô"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Gọi số điện thoại chính của công ty"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Gọi ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Gọi số điện thoại chính"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Gọi số fax"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Gọi số điện thoại radio"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Gọi số telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Gọi số điện thoại TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Gọi số điện thoại di động tại cơ quan"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Gọi số máy nhắn tin tại cơ quan"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Gọi <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Gọi MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Gọi)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Gửi tin nhắn văn bản tới <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Nhắn tin tới số điện thoại nhà riêng"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Nhắn tin tới số điện thoại di động"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Nhắn tin tới số điện thoại cơ quan"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Nhắn tin tới số fax cơ quan"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Nhắn tin tới số fax nhà riêng"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Nhắn tin tới số máy nhắn tin"</string>
+ <string name="sms_other" msgid="806127844607642331">"Nhắn tin"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Nhắn tin tới số gọi lại"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Nhắn tin tới số điện thoại trên ô tô"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Nhắn tin tới số điện thoại chính của công ty"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Nhắn tin tới số điện thoại ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Nhắn tin tới số điện thoại chính"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Nhắn tin tới số fax"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Nhắn tin tới số điện thoại radio"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Nhắn tin tới số telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Nhắn tới số TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Nhắn tới số điện thoại di động tại cơ quan"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Nhắn tin tới số máy nhắn tin tại cơ quan"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Nhắn tin <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Nhắn tin tới số điện thoại MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Tin nhắn)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Gọi điện video"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Xóa danh sách liên hệ thường xuyên?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Bạn sẽ xóa danh sách liên hệ thường xuyên trong ứng dụng Danh bạ và điện thoại cũng như buộc các ứng dụng email phải tìm hiểu các tùy chọn gửi của bạn lại từ đầu."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Đang xóa DS liên hệ thường xuyên…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Có mặt"</string>
+ <string name="status_away" msgid="1838861100379804730">"Vắng mặt"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Bận"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Khác"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Thư mục"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Thư mục công việc"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Tất cả địa chỉ liên hệ"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Liên hệ nhanh cho <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(Không có tên)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Thường xuyên được liên hệ"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Tất cả địa chỉ liên hệ có số điện thoại"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Liên hệ trên hồ sơ công việc"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Xem thông tin c.nhật"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Thiết bị"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Tên"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Biệt hiệu"</string>
+ <string name="name_given" msgid="4280790853455320619">"Tên"</string>
+ <string name="name_family" msgid="7466985689626017037">"Họ"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Tiền tố tên"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Tên đệm"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Hậu tố tên"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Tên theo phiên âm"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Tên theo phiên âm"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Tên đệm theo phiên âm"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Họ theo phiên âm"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Điện thoại"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"Email"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Địa chỉ"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Tổ chức"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Mối quan hệ"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Ngày đặc biệt"</string>
+ <string name="sms" msgid="1756857139634224222">"Tin nhắn văn bản"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Địa chỉ"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Công ty"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Tiêu đề"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Ghi chú"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Tùy chỉnh"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Trang web"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Nhãn"</string>
+ <string name="email_home" msgid="8573740658148184279">"Gửi email tới địa chỉ email nhà riêng"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Gửi email tới địa chỉ email điện thoại di động"</string>
+ <string name="email_work" msgid="2807430017302722689">"Gửi email tới địa chỉ email cơ quan"</string>
+ <string name="email_other" msgid="3454004077967657109">"Gửi email"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Gửi email tới <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"Gửi email"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Đường phố"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Thành phố"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Tiểu bang"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Mã ZIP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Quốc gia"</string>
+ <string name="map_home" msgid="1243547733423343982">"Xem địa chỉ nhà riêng"</string>
+ <string name="map_work" msgid="1360474076921878088">"Xem địa chỉ cơ quan"</string>
+ <string name="map_other" msgid="3817820803587012641">"Xem địa chỉ"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Xem địa chỉ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Trò chuyện sử dụng AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Trò chuyện sử dụng Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Trò chuyện sử dụng Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Trò chuyện sử dụng Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Trò chuyện sử dụng QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Trò chuyện sử dụng Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Trò chuyện sử dụng ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Trò chuyện sử dụng Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Trò chuyện"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"xóa"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Hiển thị thêm trường tên"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Thu gọn trường tên"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Hiển thị thêm trường tên theo phiên âm"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Thu gọn trường tên theo phiên âm"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Mở rộng"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Thu gọn"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Đã mở rộng"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Đã thu gọn"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Tất cả địa chỉ liên hệ"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Được gắn dấu sao"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Tùy chỉnh"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Địa chỉ liên hệ"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Tất cả địa chỉ l.hệ khác"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Tất cả địa chỉ liên hệ"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Xóa nhóm đồng bộ hóa"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Thêm nhóm đồng bộ hóa"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Nhóm khác…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Xóa \"<xliff:g id="GROUP">%s</xliff:g>\" khỏi đồng bộ hóa cũng sẽ xóa bất kỳ địa chỉ liên hệ nào đã được tách nhóm khỏi đồng bộ hóa."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Đang lưu tùy chọn hiển thị…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Chế độ xem tùy chỉnh"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Lưu danh bạ đã nhập vào:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"Thẻ SIM"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d liên hệ</item>
+ <item quantity="one">1 liên hệ</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> liên hệ • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> liên hệ • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">"Tệp .vcf"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Không còn gì để nhập"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Nhập liên hệ từ vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Hủy yêu cầu nhập <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Hủy yêu cầu xuất <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Không thể nhập/xuất vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Lỗi không xác định."</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Không thể mở \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Không thể chạy trình xuất: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Không thể xuất địa chỉ liên hệ nào."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Bạn đã tắt quyền được yêu cầu."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Đã xảy ra lỗi khi xuất: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Lỗi I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Không đủ bộ nhớ. Tệp có thể quá lớn."</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Định dạng không được hỗ trợ."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Đã xuất xong <xliff:g id="FILENAME">%s</xliff:g>."</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Đã xuất xong danh bạ."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Đã xuất xong liên hệ. Nhấp vào thông báo để chia sẻ liên hệ."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Nhấp để chia sẻ liên hệ."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Quá trình xuất <xliff:g id="FILENAME">%s</xliff:g> bị hủy."</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Xuất dữ liệu liên hệ"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Dữ liệu liên hệ đang được xuất."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Không thể nhận thông tin cơ sở dữ liệu."</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Không có liên hệ nào có thể xuất."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Trình soạn vCard không khởi động đúng."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Không thể xuất"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Không xuất được dữ liệu địa chỉ liên hệ.\nLý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Đang nhập <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Không thể đọc dữ liệu vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Đã nhập xong vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Quá trình nhập <xliff:g id="FILENAME">%s</xliff:g> bị hủy"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> sẽ sớm được nhập."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Tệp sẽ sớm được nhập."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Yêu cầu nhập vCard bị từ chối. Hãy thử lại sau."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Danh bạ sẽ được xuất ngay."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Yêu cầu xuất vCard bị từ chối. Hãy thử lại sau."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"địa chỉ liên hệ"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Đang lưu vào bộ nhớ cache các tệp vCard sẽ được nhập vào bộ nhớ cục bộ tạm thời. Thao tác nhập thực sự sẽ sớm bắt đầu."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Không thể nhập vCard."</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"L.h nhận qua NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Đang lưu vào bộ nhớ cache"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Đang nhập <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Xuất sang tệp .vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sắp xếp theo"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Tên theo phiên âm"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Luôn hiển thị"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Ẩn nếu trống"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Tên"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Họ"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Định dạng tên"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Tên trước"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Họ trước"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Tài khoản"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"Tài khoản mặc định cho các liên hệ mới"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Thông tin của tôi"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Thiết lập hồ sơ của bạn"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Giới thiệu về Danh bạ"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Chia sẻ liên hệ yêu thích"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Chia sẻ tất cả các liên hệ"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Không chia sẻ được liên hệ."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Xuất danh bạ"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Nhập liên hệ từ"</string>
+ <string name="share_error" msgid="948429331673358107">"Không thể chia sẻ địa chỉ liên hệ này."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Không có liên hệ nào để chia sẻ."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Danh bạ để hiển thị"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"DS liên hệ để hiển thị"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Tùy chỉnh chế độ xem"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Lưu"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Tìm kiếm liên hệ"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mục ưa thích"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Nhập"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Xuất"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Số bị chặn"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">" qua <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> qua <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"ngừng tìm kiếm"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Xóa tìm kiếm"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"Tài khoản"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Luôn sử dụng SIM này để gọi"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Gọi điện kèm theo ghi chú"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Nhập ghi chú để gửi kèm cuộc gọi..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"GỬI VÀ GỌI"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Phiên bản đóng gói"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Giấy phép nguồn mở"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Chi tiết giấy phép cho phần mềm nguồn mở"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Chính sách bảo mật"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Điều khoản dịch vụ"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Giấy phép nguồn mở"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Không mở được url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"Đã kiểm tra <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"Chưa kiểm tra <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Gọi điện video"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Xóa"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Dấu ba chấm"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> giây"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> phút <xliff:g id="SECONDS">%2$s</xliff:g> giây"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> giờ <xliff:g id="MINUTES_1">%2$s</xliff:g> phút <xliff:g id="SECONDS">%3$s</xliff:g> giây"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Phím tắt này đã bị vô hiệu hóa"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Liên hệ đã bị xóa"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Nhập"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Chọn liên hệ"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Không có liên hệ nào trên thẻ SIM của bạn"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Liên hệ đã tồn tại trong danh sách của bạn"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">Đã nhập <xliff:g id="COUNT">%d</xliff:g> liên hệ trên SIM</item>
+ <item quantity="one">Đã nhập 1 liên hệ trên SIM</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Không nhập được liên hệ trên SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Nhập từ SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Hủy"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Tự động đồng bộ hóa đang tắt. Hãy nhấn để bật."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Loại bỏ"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Đồng bộ hóa tài khoản đang tắt. Hãy nhấn để bật."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Bật tự động đồng bộ hóa?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Những thay đổi bạn thực hiện đối với tất cả ứng dụng và tài khoản, không chỉ với Danh bạ Google, sẽ luôn được cập nhật giữa web và thiết bị của bạn."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Bật"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Không có kết nối"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Hiển thị thêm"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Đã nhập xong thẻ SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Nhập không thành công"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Không thể nhập liên hệ từ thẻ SIM"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Đang nhập SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Thông báo"</string>
</resources>
diff --git a/res/values-w470dp/dimens.xml b/res/values-w470dp/dimens.xml
deleted file mode 100644
index 2c04e5dfa..000000000
--- a/res/values-w470dp/dimens.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
-
- <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
- 470dp is the height of a "normal" screen. We should leave 240dp for
- the title and menu items -->
- <dimen name="people_activity_landscape_tabs_width">230dip</dimen>
- <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
- Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
- In portrait mode, the tabs look okay when overflowing their allocated space.
- We have to be more careful in landscape. -->
- <dimen name="people_activity_landscape_tabs_text_size">9dp</dimen>
-
-</resources> \ No newline at end of file
diff --git a/res/values-w590dp/dimens.xml b/res/values-w590dp/dimens.xml
deleted file mode 100644
index 2fff6cab2..000000000
--- a/res/values-w590dp/dimens.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
-
- <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
- 590dp is almost the height of a "large" screen. We should leave 240dp for
- the title and menu items -->
- <dimen name="people_activity_landscape_tabs_width">350dip</dimen>
- <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
- Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
- In portrait mode, the tabs look okay when overflowing their allocated space.
- We have to be more careful in landscape. -->
- <dimen name="people_activity_landscape_tabs_text_size">14dp</dimen>
-
-</resources> \ No newline at end of file
diff --git a/res/values-zh-rCN/donottranslate_config.xml b/res/values-zh-rCN/donottranslate_config.xml
new file mode 100644
index 000000000..b35785649
--- /dev/null
+++ b/res/values-zh-rCN/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2016, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources>
+ <!-- If true, an option is shown in Display Options UI to choose a sort order -->
+ <bool name="config_sort_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_sort_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a name display order -->
+ <bool name="config_display_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_display_order_primary">true</bool>
+
+ <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">false</bool>
+</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e041e7130..f6e7a3ae4 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"通讯录"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"通讯录"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"查看联系人"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"修改联系人"</string>
<string name="contactsList" msgid="8661624236494819731">"通讯录"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"添加联系人"</string>
<string name="shortcutContact" msgid="749243779392912958">"联系人"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"直接拨打电话"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"直接发送短信"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"选择联系人快捷方式"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"选择一个可直接拨号的号码"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"选择一个可直接向其发送短信的号码"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"选择联系人"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"添加到通讯录"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"选择联系人"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"选择"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"创建新联系人"</string>
- <string name="starredList" msgid="4817256136413959463">"已加星标的内容"</string>
- <string name="frequentList" msgid="7154768136473953056">"经常联系"</string>
- <string name="strequentList" msgid="5640192862059373511">"收藏"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"联系人详情"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"编辑联系人"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"创建联系人"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"修改群组"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"创建群组"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"关于"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"最新动态"</string>
<string name="searchHint" msgid="8482945356247760701">"搜索联系人"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"查看联系人"</string>
<string name="menu_addStar" msgid="2908478235715404876">"添加到收藏"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"从收藏中移除"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"已从收藏中移除"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"修改"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"删除"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"更换照片"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"放在主屏幕上"</string>
- <string name="menu_call" msgid="3992595586042260618">"呼叫联系人"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"向联系人发送短信"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"创建快捷方式"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"取消关联"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"修改"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"删除"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"添加联系人"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"添加群组"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"移除联系人"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"重命名标签"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"删除标签"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"添加联系人"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"选择联系人"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"添加联系人"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"从标签中移除"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"创建标签"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"要取消此联系人与多个联系人的关联吗?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"取消关联"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要保存目前所做的更改,并取消此联系人与多个联系人的关联吗?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"保存并取消关联"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"您要保存目前所做的更改,并将此联系人与所选联系人建立关联吗?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"保存并关联"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"正在关联"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"正在取消关联"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"关联"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"查看已关联的联系人"</string>
<string name="menu_save" msgid="1727844363591825909">"保存"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"关联联系人"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"选择您想与<xliff:g id="NAME">%s</xliff:g>关联的联系人:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"显示所有联系人"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建议的联系人"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有联系人"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"已关联<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"联系人已关联"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"已删除<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"已删除<xliff:g id="NAME_0">%1$s</xliff:g>和<xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"已删除<xliff:g id="NAME_0">%1$s</xliff:g>、<xliff:g id="NAME_1">%2$s</xliff:g>、<xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">已删除联系人</item>
<item quantity="one">已删除联系人</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位联系人</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位联系人</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"来自 Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"来自 <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"设置铃声"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"所有来电转至语音信箱"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"系统无法删除来自只读帐号的联系人信息,但可以将这些信息隐藏。"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"隐藏"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"您要删除的联系人信息中包含来自多个帐号的详细信息。系统将隐藏来自只读帐号的详细信息,而不会删除这些信息。"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"您至少需要选择两个联系人才能进行关联。"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"要关联所选联系人吗?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"关联"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"转接到语音信箱"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"取消转接到语音信箱"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"这是只读联系人信息。您无法删除此联系人,但可以将其隐藏。"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"隐藏联系人"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"此联系人的只读帐号将被隐藏,而不会被删除。"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"要删除此联系人吗?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"要删除所选联系人吗?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"系统无法删除来自只读帐号的联系人信息,但可以将这些信息隐藏。"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"删除此联系人也将删除多个帐号中的相关详细信息。"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"要删除此联系人吗?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"删除"</string>
- <string name="menu_discard" msgid="6854657936970228164">"舍弃更改"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"该联系人不存在。"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已将该联系人添加到主屏幕。"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"已将<xliff:g id="NAME">%s</xliff:g>添加到主屏幕。"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"新建联系人"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"创建新联系人"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"组织"</item>
- <item msgid="7196592230748086755">"备注"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"平板电脑上没有照片可供使用。"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"手机上没有照片。"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"设备上没有可用的照片。"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"联系人照片"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"自定义标签名称"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接将来电转到语音信箱"</string>
<string name="removePhoto" msgid="4898105274130284565">"删除照片"</string>
- <string name="noContacts" msgid="4955659076981974652">"没有联系人"</string>
- <string name="noGroups" msgid="8614664663561385253">"没有任何群组。"</string>
- <string name="noAccounts" msgid="7768267764545265909">"您需要拥有一个帐号才能创建群组。"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"此群组中没有联系人。"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"要添加联系人,请修改该群组。"</string>
- <string name="savingContact" msgid="4075751076741924939">"正在保存联系人…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"联系人列表是空的"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"此标签下没有联系人"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"此帐号中没有联系人"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"联系人列表是空的"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"已保存<xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"联系人已保存"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"已将联系人取消关联"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"无法保存联系人更改。"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"无法取消关联此联系人。"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"无法关联该联系人。"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"保存此联系人时出错。"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"无法保存联系人照片更改。"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"群组已保存。"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"无法保存所做的群组更改。"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个有电话号码的联系人</item>
- <item quantity="one">1 个有电话号码的联系人</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"没有联系人拥有电话号码"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人</item>
- <item quantity="one">找到 1 个联系人</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"无法保存对联系人的更改"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"无法取消关联联系人"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"无法关联联系人"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"保存联系人时出错"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"无法保存对联系人照片的更改"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"无法加载标签"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"已删除标签"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"已创建标签"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"无法创建标签"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新标签"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已从标签中移除"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"已添加到标签"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"无法保存对标签的修改"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"该标签已存在"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"部分联系人没有电子邮件地址。"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"部分联系人没有电话号码。"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"发送电子邮件"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"发送信息"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"选择联系人"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"发送"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"没有联系人"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 个联系人</item>
- <item quantity="one">找到 1 个联系人</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"全部"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"收藏"</string>
- <string name="callBack" msgid="5498224409038809224">"回电"</string>
- <string name="callAgain" msgid="3197312117049874778">"重拨"</string>
- <string name="returnCall" msgid="8171961914203617813">"回拨"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"将“<xliff:g id="EMAIL">%s</xliff:g>”添加到通讯录?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"联系人照片"</string>
- <string name="description_plus_button" msgid="515164827856229880">"添加"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个联系人(共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个)"</string>
<string name="search_settings_description" msgid="2675223022992445813">"联系人姓名"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"未找到可处理此操作的应用。"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"点击即可返回上一屏幕"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"添加电话号码"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"添加电子邮件地址"</string>
<string name="missing_app" msgid="1466111003546611387">"未找到可处理此操作的应用。"</string>
<string name="menu_share" msgid="943789700636542260">"分享"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"添加到通讯录"</string>
- <string name="share_via" msgid="563121028023030093">"联系人分享方式"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"要在哪个帐号下创建群组?"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"添加"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">通过以下应用分享联系人</item>
+ <item quantity="one">通过以下应用分享联系人</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"选择帐号"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"创建标签"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"重命名标签"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"标签名称"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"标签名称"</string>
<string name="audio_chat" msgid="2535716629358298691">"语音聊天"</string>
<string name="video_chat" msgid="1872255818640336072">"视频聊天"</string>
- <string name="connections" msgid="8098440723172028350">"社交网络"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"添加社交网络"</string>
- <string name="recent" msgid="2659189233141493004">"最新"</string>
- <string name="recent_updates" msgid="4267258535615860710">"最新动态"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 联系人"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>帐号"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"无法通过此应用修改。"</string>
- <string name="group_read_only" msgid="1061762906115697637">"无法在此设备上修改。"</string>
<string name="take_photo" msgid="7496128293167402354">"拍照"</string>
<string name="take_new_photo" msgid="7341354729436576304">"拍摄新照片"</string>
<string name="pick_photo" msgid="2129509985223564942">"选择照片"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"选择新照片"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新联系人列表。"</string>
<string name="search_results_searching" msgid="3984833028938569930">"正在搜索..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"已选收件人"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"全部收件人"</string>
- <string name="menu_select_all" msgid="621719255150713545">"全选"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"取消全选"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"添加新条目"</string>
- <string name="add_organization" msgid="7311893231158291197">"添加工作单位"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"群组名称"</string>
- <string name="change_photo" msgid="8530597935483526383">"更改"</string>
- <string name="primary_photo" msgid="8517942231868516999">"主照片"</string>
- <string name="description_star" msgid="2605854427360036550">"收藏"</string>
- <string name="edit_contact" msgid="7529281274005689512">"编辑联系人"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要将当前联系人与所选联系人关联吗?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"标签"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"关闭"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切换至编辑所选联系人吗?系统会复制您到目前为止输入的所有信息。"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"复制到“我的联系人”"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"添加到“我的联系人”"</string>
<string name="contact_directory_description" msgid="683398073603909119">"目录类型:<xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"自定义"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"设置"</string>
<string name="menu_settings" msgid="377929915873428211">"设置"</string>
<string name="menu_help" msgid="1680178646764069976">"帮助和反馈"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"显示选项"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>,<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"电话号码"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"添加到通讯录"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"添加到现有联系人"</string>
<string name="non_phone_close" msgid="7608506439725515667">"关闭"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"包含年份"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"联系人"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"正在加载..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"创建新联系人"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"添加帐号"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"导入联系人"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"创建新群组"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"创建新群组"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 个群组</item>
- <item quantity="one">1 个群组</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"要删除群组“<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”(并不会删除联系人本身)吗?"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 个联系人</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 个联系人</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 个联系人</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 个联系人</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"导入"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"新建…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"要删除“<xliff:g id="GROUP_LABEL">%1$s</xliff:g>”标签吗?(系统不会删除联系人。)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"请先输入联系人姓名,然后再将其与其他联系人关联。"</string>
<string name="copy_text" msgid="3257145021583508761">"复制到剪贴板"</string>
<string name="set_default" msgid="4417505153468300351">"设置默认值"</string>
<string name="clear_default" msgid="7193185801596678067">"清除默认值"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"文本已复制"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"要舍弃您所做的更改并停止修改吗?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"要舍弃更改吗?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"舍弃"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"继续修改"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"设置我的个人资料"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"键入联系人的姓名"</string>
- <string name="group_name_hint" msgid="238359485263401293">"群组名称"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要舍弃自定义设置吗?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"搜索联系人"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"移除联系人"</string>
<string name="local_profile_title" msgid="2021416826991393684">"我的本地个人资料"</string>
<string name="external_profile_title" msgid="8034998767621359438">"我的<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>个人资料"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"显示所有联系人"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使手机丢了,也能确保您的联系人信息的安全性:与在线服务同步。"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"添加帐号"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"系统不会备份您的新联系人。要添加用于在线备份联系人的帐号吗?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"请花一点时间添加帐号,以便将联系人备份到 Google。"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新建的联系人将保存到 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"选择用来保存新建联系人的默认帐号:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"新增联系人"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"创建新联系人"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"修改联系人"</string>
- <string name="keep_local" msgid="1258761699192993322">"本地保存"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"只能查看"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"选择要修改的联系人"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"已关联的联系人"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"添加"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"取消关联"</string>
<string name="add_account" msgid="8201790677994503186">"添加帐号"</string>
<string name="add_new_account" msgid="5748627740680940264">"添加新帐号"</string>
<string name="menu_export_database" msgid="2659719297530170820">"导出数据库文件"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"添加新联系人"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"创建新联系人"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"查看更多"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"隐藏部分"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"查看全部"</string>
<string name="recent_card_title" msgid="8982782042698001695">"近期活动"</string>
<string name="about_card_title" msgid="2920942314212825637">"简介"</string>
- <string name="send_message" msgid="8938418965550543196">"发送短信"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"正在创建个人副本…"</string>
- <string name="yesterday" msgid="6840858548955018569">"昨天"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"正在创建个人副本..."</string>
<string name="tomorrow" msgid="6241969467795308581">"明天"</string>
<string name="today" msgid="8041090779381781781">"今天"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"今天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"明天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>,<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>,<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(未命名的活动)"</string>
<string name="date_time_set" msgid="4761419824439606690">"设置"</string>
<string name="header_im_entry" msgid="3581720979640225615">"聊天工具"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"网站"</string>
<string name="header_event_entry" msgid="6738250422744401460">"活动"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"关系"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"帐号"</string>
<string name="header_name_entry" msgid="1592791008096288306">"姓名"</string>
<string name="header_email_entry" msgid="8666093061171624478">"电子邮件地址"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"电话号码"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"照片"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"点按即可展开联系人编辑器。"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"点按即可收起联系人编辑器。"</string>
<string name="content_description_directions" msgid="2686791825798189335">"到特定地点的路线"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"近期短信:<xliff:g id="MESSAGE_BODY">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>,<xliff:g id="DATE">%s</xliff:g>。点按可回复。"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"近期短信:<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>,<xliff:g id="DATE">%3$s</xliff:g>。点按可回复。"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"来电"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"外拨电话"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"未接电话"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"近期通话:<xliff:g id="CALL_TYPE">%s</xliff:g>,<xliff:g id="PHONE_NUMBER">%s</xliff:g>,<xliff:g id="DATE">%s</xliff:g>。点按可回拨。"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"近期通话:<xliff:g id="CALL_TYPE">%1$s</xliff:g>,<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>,<xliff:g id="DATE">%3$s</xliff:g>。点按可回拨。"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"请将联系人的环聊帐号信息输入到电子邮件地址字段或电话号码字段,以便获得更佳的环聊使用体验。"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"更多字段"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"更换照片"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"无法开启编辑器。"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"保存到"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"目前正在保存到 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。点按两次可选择其他帐号。"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">已关联的联系人(<xliff:g id="COUNT">%d</xliff:g> 位)</item>
- <item quantity="one">已关联的联系人</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 位已关联的联系人"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"更多字段"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"更改联系人照片"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"添加联系人照片"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"联系人照片"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"无法开启编辑器。"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"保存到"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"无法修改来自 <xliff:g id="ACCOUNT">%s</xliff:g> 的联系人信息"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"关联联系人"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位可能重复的联系人</item>
- <item quantity="one">1 位可能重复的联系人</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位已关联的联系人</item>
- <item quantity="one">1 位已关联的联系人</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"此联系人"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重复的联系人"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"这些联系人可能是同一个人。您可以将它们关联在一起,以合并成一个联系人。"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"已关联的联系人"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"来自您的帐号"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"拍摄照片"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"所有照片"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"选择照片"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"来源:<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"删除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"删除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"删除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未选中来自 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> 的照片"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"已选中来自 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> 的照片"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未选中来自未知帐号的照片"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已选中来自未知帐号的照片"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"正在更新联系人列表,以反映语言的变更。\n\n请稍候..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"建议"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新徽章"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"打开抽屉式导航栏"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"关闭抽屉式导航栏"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"“<xliff:g id="LABEL_NAME">%s</xliff:g>”标签"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"标签"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"帐号"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"同时显示过往记录"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"活动和信息"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"活动"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"信息"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"建议"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"让您的通讯录井井有条,方便使用"</string>
+ <string name="undo" msgid="1425165101664071422">"撤消"</string>
+ <string name="call_custom" msgid="6385303130912713318">"拨打<xliff:g id="CUSTOM_LABEL">%s</xliff:g>电话号码"</string>
+ <string name="call_home" msgid="1990519474420545392">"拨打住宅电话号码"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"呼叫手机"</string>
+ <string name="call_work" msgid="5328785911463744028">"呼叫单位"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"呼叫单位传真"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"拨打住宅传真号码"</string>
+ <string name="call_pager" msgid="9003902812293983281">"呼叫寻呼机"</string>
+ <string name="call_other" msgid="8563753966926932052">"拨打电话"</string>
+ <string name="call_callback" msgid="1910165691349426858">"呼叫回拨号码"</string>
+ <string name="call_car" msgid="3280537320306436445">"呼叫车载电话"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"呼叫公司总机"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"呼叫 ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"呼叫总机"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"呼叫传真号码"</string>
+ <string name="call_radio" msgid="8296755876398357063">"呼叫无线装置"</string>
+ <string name="call_telex" msgid="2223170774548648114">"呼叫电报"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"拨打 TTY/TDD 号码"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"呼叫单位手机"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"呼叫单位寻呼机"</string>
+ <string name="call_assistant" msgid="670941612175068337">"拨打<xliff:g id="CUSTOM_LABEL">%s</xliff:g>的电话"</string>
+ <string name="call_mms" msgid="6274041545876221437">"呼叫彩信号码"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g>(拨打电话)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"向<xliff:g id="CUSTOM_LABEL">%s</xliff:g>电话号码发短信"</string>
+ <string name="sms_home" msgid="7524332261493162995">"向住宅电话号码发短信"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"向手机发送短信"</string>
+ <string name="sms_work" msgid="2269624156655267740">"向单位电话发送短信"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"向单位传真机发送短信"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"向住宅传真号码发短信"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"向寻呼机发送文字消息"</string>
+ <string name="sms_other" msgid="806127844607642331">"发短信"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"向回拨号码发送短信"</string>
+ <string name="sms_car" msgid="7444227058437359641">"向车载电话发送短信"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"向公司总机发送短信"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"向 ISDN 发送短信"</string>
+ <string name="sms_main" msgid="8621625784504541679">"向总机发送短信"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"向传真号码发送短信"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"向无线装置发送短信"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"向电报发送短信"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"向 TTY/TDD 号码发送短信"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"向单位手机发送短信"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"向单位寻呼机发送短信"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"向<xliff:g id="ASSISTANT">%s</xliff:g>发短信"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"向彩信号码发送短信"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g>(发送短信)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"发起视频通话"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"是否清除常用联系人?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"此操作会清除“通讯录”和“电话”应用中的常用联系人列表,并强制电子邮件应用重新获取您最常使用的联系地址。"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"正在清除常用联系人…"</string>
+ <string name="status_available" msgid="5586870015822828392">"在线"</string>
+ <string name="status_away" msgid="1838861100379804730">"离开"</string>
+ <string name="status_busy" msgid="9147992455450257136">"忙碌"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"其他"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"目录"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"工作目录"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"所有联系人"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>的快捷联系方式"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(无姓名)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"经常联系的人"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"所有拥有电话号码的联系人"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"工作资料联系人"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
+ <string name="account_phone" msgid="7128032778471187553">"设备"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"昵称"</string>
+ <string name="name_given" msgid="4280790853455320619">"名字"</string>
+ <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
+ <string name="name_prefix" msgid="59756378548779822">"姓名前缀"</string>
+ <string name="name_middle" msgid="8467433655992690326">"中间名"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"姓名后缀"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"姓名拼音"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"名字拼音"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"中间名拼音"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"姓氏拼音"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"电话"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"电子邮件"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"地址"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"即时聊天工具"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"组织"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"关系"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"特别的日子"</string>
+ <string name="sms" msgid="1756857139634224222">"短信"</string>
+ <string name="postal_address" msgid="8765560217149624536">"地址"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"公司"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"职位"</string>
+ <string name="label_notes" msgid="8337354953278341042">"备注"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"自定义"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"网站"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"标签"</string>
+ <string name="email_home" msgid="8573740658148184279">"向住宅邮箱发送电子邮件"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"向手机发送电子邮件"</string>
+ <string name="email_work" msgid="2807430017302722689">"向单位邮箱发送电子邮件"</string>
+ <string name="email_other" msgid="3454004077967657109">"发送电子邮件"</string>
+ <string name="email_custom" msgid="5536404237099078802">"向<xliff:g id="CUSTOM_LABEL">%s</xliff:g>邮箱发送电子邮件"</string>
+ <string name="email" msgid="5668400997660065897">"电子邮件"</string>
+ <string name="postal_street" msgid="8133143961580058972">"街道"</string>
+ <string name="postal_city" msgid="6597491300084895548">"城市"</string>
+ <string name="postal_region" msgid="6045263193478437672">"省/直辖市/自治区"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"邮编"</string>
+ <string name="postal_country" msgid="7638264508416368690">"国家/地区"</string>
+ <string name="map_home" msgid="1243547733423343982">"查看住宅地址"</string>
+ <string name="map_work" msgid="1360474076921878088">"查看单位地址"</string>
+ <string name="map_other" msgid="3817820803587012641">"查看地址"</string>
+ <string name="map_custom" msgid="8761800628069473526">"查看<xliff:g id="CUSTOM_LABEL">%s</xliff:g>地址"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"使用 AIM 聊天"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"使用 Windows Live 聊天"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"使用雅虎软件聊天"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"使用 Skype 聊天"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"使用 QQ 聊天"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"使用 Google Talk 聊天"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"使用 ICQ 聊天"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 聊天"</string>
+ <string name="chat" msgid="9025361898797412245">"聊天"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"删除"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"显示更多姓名字段"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"收起姓名字段"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"显示更多姓名拼音字段"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"收起姓名拼音字段"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"展开"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"收起"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"已展开"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"已收起"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有联系人"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星标"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"自定义"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"联系人"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"其他所有联系人"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"所有联系人"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"删除同步群组"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"添加同步群组"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"更多群组…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果您停止同步“<xliff:g id="GROUP">%s</xliff:g>”,将同时停止同步所有未分组的联系人。"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"正在保存显示选项…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"自定义视图"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"将导入的联系人保存到:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM 卡“<xliff:g id="SIM_NAME">%1$s</xliff:g>”"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d 位联系人</item>
+ <item quantity="one">1 位联系人</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> 位联系人(在 <xliff:g id="PHONE_NUMBER_3">^2</xliff:g> 中)</item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> 位联系人(在 <xliff:g id="PHONE_NUMBER_1">^2</xliff:g> 中)</item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf 文件"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"没有可导入的对象"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"要从 vCard 中导入联系人吗?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"要取消导入 <xliff:g id="FILENAME">%s</xliff:g> 吗​​?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"要取消导出 <xliff:g id="FILENAME">%s</xliff:g> 吗​​?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"无法取消导入/导出 vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"未知错误。"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"无法打开“<xliff:g id="FILE_NAME">%1$s</xliff:g>”:<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"无法启动导出程序:“<xliff:g id="EXACT_REASON">%s</xliff:g>”。"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"没有可导出的联系人。"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"您已停用一项必需权限。"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"导出时出错:“<xliff:g id="EXACT_REASON">%s</xliff:g>”。"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 错误"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"内存不足。该文件可能过大。"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"该格式不受支持。"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"导出 <xliff:g id="FILENAME">%s</xliff:g> 已完成。"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"已成功导出联系人。"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"联系人导出已完成,点击通知即可分享联系人。"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"点按即可分享联系人。"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"已取消导出 <xliff:g id="FILENAME">%s</xliff:g>。"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在导出联系人数据"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在导出联系人数据。"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"无法获取数据库信息。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"没有可导出的联系人。"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 制作程序未正确启动。"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"无法导出"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"未导出联系人数据。\n原因:“<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"正在导入<xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"无法读取 vCard 数据"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"导入 vCard <xliff:g id="FILENAME">%s</xliff:g> 已完成"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消导入 <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 将在稍后导入。"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"系统稍后就会导入该文件。"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 导入请求遭拒,请稍后重试。"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"即将导出联系人。"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 导出请求遭拒,请稍后重试。"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"联系人"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"正在将 vCard 缓存到本地临时存储空间。实际导入操作即将开始。"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"无法导入 vCard。"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已通过 NFC 收到联系人信息"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"正在缓存..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"正在导入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 个(共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 个)联系人:<xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"导出为 .vcf 文件"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序方式"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"姓名拼音"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"一律显示"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"字段为空时将其隐藏"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"姓氏"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"姓名格式"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"名字在前"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"姓氏在前"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"帐号"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"用于保存新联系人的默认帐号"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"我的信息"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"设置您的个人资料"</string>
+ <string name="setting_about" msgid="7014388749752042863">"关于通讯录"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"分享收藏的联系人"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"分享所有联系人"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"无法分享联系人。"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"导出联系人"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"从以下来源导入联系人"</string>
+ <string name="share_error" msgid="948429331673358107">"无法分享此联系人。"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"没有可分享的联系人。"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"要显示的联系人"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要显示的联系人"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"自定义视图"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"保存"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"搜索联系人"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"收藏"</string>
+ <string name="menu_import" msgid="6107961135813836467">"导入"</string>
+ <string name="menu_export" msgid="2658783911863503902">"导出"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"已屏蔽的号码"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"来源:<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"时间:<xliff:g id="DATE">%1$s</xliff:g>,来源:<xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜索"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"清除搜索内容"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"帐号"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"一律使用这张卡进行通话"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"拨打电话并发送备注"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"输入要在拨打电话时发送的备注…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"发送并拨打电话"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"版本号"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"开放源代码许可"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"开放源代码软件的许可详情"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"隐私权政策"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"服务条款"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"开放源代码许可"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"无法打开网址。"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"已选中 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"未选中 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"发起视频通话"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"删除"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"省略号"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分钟 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小时 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分钟 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"此快捷方式已失效"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"联系人已被移除"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"导入"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"选择联系人"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM 卡上没有联系人"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"联系人已在列表中"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">已导入 <xliff:g id="COUNT">%d</xliff:g> 位 SIM 卡联系人</item>
+ <item quantity="one">已导入 1 位 SIM 卡联系人</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"无法导入 SIM 卡联系人"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"从 SIM 卡导入"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"取消"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"自动同步功能已关闭。点按即可开启。"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"关闭"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"帐号同步功能已关闭。点按即可开启。"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"要开启自动同步功能吗?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"您对所有应用和帐号(不只是 Google 通讯录)所做的更改都会在网络和您的设备之间保持同步。"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"开启"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"无网络连接"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM 卡"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"显示更多"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"已导入 SIM 卡联系人"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"导入失败"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"无法导入 SIM 卡中的联系人"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在导入 SIM 卡联系人"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"通知"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a63270edd..52a9f44e9 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"通訊錄"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"通訊錄"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"查看聯絡人"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"編輯聯絡人"</string>
<string name="contactsList" msgid="8661624236494819731">"通訊錄"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"新增聯絡人"</string>
<string name="shortcutContact" msgid="749243779392912958">"聯絡人"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"直接撥號"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"私人訊息"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"選擇聯絡人捷徑"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"選擇撥打號碼"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"選擇傳訊號碼"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"選擇聯絡人"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"新增至通訊錄"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"選擇聯絡人"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選取"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"建立新聯絡人"</string>
- <string name="starredList" msgid="4817256136413959463">"已加星號"</string>
- <string name="frequentList" msgid="7154768136473953056">"常用聯絡人"</string>
- <string name="strequentList" msgid="5640192862059373511">"我的最愛"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"聯絡人詳細資料"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"編輯聯絡人"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"建立聯絡人"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"編輯群組"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"建立群組"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"關於"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"更新"</string>
<string name="searchHint" msgid="8482945356247760701">"搜尋聯絡人"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"查看聯絡人"</string>
<string name="menu_addStar" msgid="2908478235715404876">"新增至我的最愛"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"從「我的最愛」中移除"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"已從我的最愛中移除"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"編輯"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"變更相片"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"新增到主畫面"</string>
- <string name="menu_call" msgid="3992595586042260618">"致電聯絡人"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"傳送短訊至聯絡人"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"建立捷徑"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"解除連結"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"編輯"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"刪除"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"新增聯絡人"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"新增群組"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"移除聯絡人"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"重新命名標籤"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"刪除標籤"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"新增聯絡人"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"選取聯絡人"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"新增聯絡人"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"從標籤中移除"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"建立標籤"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"要解除連結,並設為多個聯絡人嗎?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"解除連結"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要儲存變更,並解除連結此聯絡人為多個聯絡人嗎?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"儲存並解除連結"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"您要儲存變更,並連結選取的聯絡人嗎?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"儲存並連結"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"正在連結"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"正在解除連結"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"連結"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"查看已連結的聯絡人"</string>
<string name="menu_save" msgid="1727844363591825909">"儲存"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"連結聯絡人"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"選擇要連結至<xliff:g id="NAME">%s</xliff:g>的聯絡人:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"顯示所有聯絡人"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議的聯絡人"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"已連結<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"已連結聯絡人"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"已刪除<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"已刪除<xliff:g id="NAME_0">%1$s</xliff:g>和<xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"已刪除<xliff:g id="NAME_0">%1$s</xliff:g>、<xliff:g id="NAME_1">%2$s</xliff:g>、<xliff:g id="NAME_2">%3$s</xliff:g>…"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">已刪除聯絡人</item>
<item quantity="one">已刪除聯絡人</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位聯絡人</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"來自 Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"來自「<xliff:g id="ACCOUNT">%s</xliff:g>」"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"設定鈴聲"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"所有來電轉到留言信箱"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"只限讀取帳戶的聯絡人將無法刪除,只可隱藏。"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"隱藏"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"即將刪除的聯絡人的資料來自多個帳戶。只限讀取帳戶的資料將會隱藏,而不會刪除。"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"您必須選擇最少兩個聯絡人方可連結。"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"要連結已選取的聯絡人嗎?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"連結"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"轉駁到留言信箱"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"取消轉駁到留言信箱"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"這是唯讀聯絡人,因此無法刪除,但可加以隱藏。"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"隱藏聯絡人"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"此聯絡人的唯讀帳戶將會隱藏,而不會刪除。"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"要刪除此聯絡人嗎?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"要刪除已選取的聯絡人嗎?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"只限讀取帳戶的聯絡人將無法刪除,只可隱藏。"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"刪除此聯絡人將會刪除多個帳戶的資料。"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"要刪除此聯絡人嗎?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"刪除"</string>
- <string name="menu_discard" msgid="6854657936970228164">"放棄變更"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"聯絡人不存在。"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已將聯絡人增至主畫面"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"已將<xliff:g id="NAME">%s</xliff:g>增至主畫面。"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"建立新聯絡人"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"建立新聯絡人"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"機構"</item>
- <item msgid="7196592230748086755">"備註"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"平板電腦中沒有相片可供選用。"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"手機中沒有相片可供選用。"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"裝置上沒有相片可供選用。"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"聯絡人相片"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"自訂標籤名稱"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接將來電轉到留言信箱"</string>
<string name="removePhoto" msgid="4898105274130284565">"移除相片"</string>
- <string name="noContacts" msgid="4955659076981974652">"沒有聯絡人"</string>
- <string name="noGroups" msgid="8614664663561385253">"沒有群組。"</string>
- <string name="noAccounts" msgid="7768267764545265909">"如要建立群組,您需要有一個帳戶。"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"這個群組中沒有成員。"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"如要新增成員,請編輯群組。"</string>
- <string name="savingContact" msgid="4075751076741924939">"正在儲存聯絡人…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"您的聯絡人名單是空白的"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"沒有任何聯絡人有此標籤"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"此帳戶中沒有聯絡人"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人名單是空白的"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>已儲存"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"聯絡人記錄已儲存"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"已解除連結聯絡人"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"無法解除連結聯絡人。"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"無法連結聯絡人。"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"儲存聯絡人時發生錯誤。"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"無法儲存聯絡人相片變更。"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"群組已儲存。"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"無法儲存群組變更。"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
- <item quantity="one">1 位有電話號碼的聯絡人</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"所有聯絡人資訊都沒有電話號碼"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
- <item quantity="one">找到 1 位聯絡人</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"無法儲存聯絡人變更"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"無法解除連結聯絡人"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"無法連結聯絡人"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存聯絡人相片變更"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"已建立標籤"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"無法建立標籤"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新標籤"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已從標籤中移除"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"已新增至標籤"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"無法儲存標籤變更"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"該標籤已存在"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"部分聯絡人沒有電郵。"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"部分聯絡人沒有電話號碼。"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"傳送電子郵件"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"傳送訊息"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"選擇聯絡人"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"傳送"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"沒有聯絡人"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
- <item quantity="one">找到 1 位聯絡人</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"全部"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"常用聯絡人"</string>
- <string name="callBack" msgid="5498224409038809224">"回撥電話"</string>
- <string name="callAgain" msgid="3197312117049874778">"重撥"</string>
- <string name="returnCall" msgid="8171961914203617813">"回覆來電"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"要將「<xliff:g id="EMAIL">%s</xliff:g>」加到通訊錄嗎?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
- <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
<string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"找不到可以處理這個操作的應用程式。"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"按一下即可返回上一個畫面"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"新增電話號碼"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"新增電郵"</string>
<string name="missing_app" msgid="1466111003546611387">"找不到可以處理這個操作的應用程式。"</string>
<string name="menu_share" msgid="943789700636542260">"分享"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"加入通訊錄"</string>
- <string name="share_via" msgid="563121028023030093">"使用下列應用程式分享聯絡人資訊:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"選擇帳戶以建立群組"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"新增"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">使用下列應用程式分享聯絡人資訊:</item>
+ <item quantity="one">使用下列應用程式分享聯絡人資訊:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"選擇帳戶"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"建立標籤"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"重新命名標籤"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"標籤名稱"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"標籤名稱"</string>
<string name="audio_chat" msgid="2535716629358298691">"話音通訊"</string>
<string name="video_chat" msgid="1872255818640336072">"視像通訊"</string>
- <string name="connections" msgid="8098440723172028350">"聯繫"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"加入聯繫"</string>
- <string name="recent" msgid="2659189233141493004">"近況"</string>
- <string name="recent_updates" msgid="4267258535615860710">"近期動態"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> 聯絡人"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 帳戶"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"無法以這個應用程式編輯。"</string>
- <string name="group_read_only" msgid="1061762906115697637">"無法在這部裝置上編輯。"</string>
<string name="take_photo" msgid="7496128293167402354">"拍照"</string>
<string name="take_new_photo" msgid="7341354729436576304">"拍攝新相片"</string>
<string name="pick_photo" msgid="2129509985223564942">"選擇相片"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"選取新相片"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新聯絡人清單。"</string>
<string name="search_results_searching" msgid="3984833028938569930">"正在搜尋..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"顯示已選取的項目"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"顯示全部"</string>
- <string name="menu_select_all" msgid="621719255150713545">"全選"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"全部取消選取"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"新增"</string>
- <string name="add_organization" msgid="7311893231158291197">"新增機構"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"群組名稱"</string>
- <string name="change_photo" msgid="8530597935483526383">"變更"</string>
- <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
- <string name="description_star" msgid="2605854427360036550">"我的最愛"</string>
- <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要將目前的聯絡人連結至已選的聯絡人嗎?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"標籤"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切換至編輯所選聯絡人嗎?您目前已輸入的資訊將會被複製。"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"複製到我的通訊錄"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"新增至通訊錄"</string>
<string name="contact_directory_description" msgid="683398073603909119">"名錄 <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"自訂"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
<string name="menu_settings" msgid="377929915873428211">"設定"</string>
<string name="menu_help" msgid="1680178646764069976">"說明和意見反映"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"顯示選項"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>,<xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"電話號碼"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"加入通訊錄"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"加入聯絡人記錄"</string>
<string name="non_phone_close" msgid="7608506439725515667">"關閉"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"包含年份"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"聯絡人"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"正在載入..."</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"建立新聯絡人"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"新增帳戶"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"匯入通訊錄"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"建立新群組"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"建立新群組"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 個群組</item>
- <item quantity="one">1 個群組</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」群組嗎?(這並不會刪除聯絡人本身。)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g> 中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 人</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g> 中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 人</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"匯入"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"建立新…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」標籤嗎?(這並不會刪除聯絡人本身。)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"請先輸入聯絡人姓名,然後才連結。"</string>
<string name="copy_text" msgid="3257145021583508761">"複製到剪貼簿"</string>
<string name="set_default" msgid="4417505153468300351">"設為預設"</string>
<string name="clear_default" msgid="7193185801596678067">"清除預設值"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"文字已複製"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"要捨棄變更並停止編輯嗎?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"捨棄變更?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"捨棄"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"繼續編輯"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"設定我的個人資料"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"輸入聯絡人名字"</string>
- <string name="group_name_hint" msgid="238359485263401293">"群組名稱"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要捨棄自訂設定嗎?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"搜尋聯絡人"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"移除聯絡人"</string>
<string name="local_profile_title" msgid="2021416826991393684">"我的本機個人資料"</string>
<string name="external_profile_title" msgid="8034998767621359438">"我的 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 個人資料"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"顯示所有聯絡人"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使丟失手機,也要確保通訊錄安全:與網上服務保持同步。"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"新增帳戶"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"系統不會備份您的新聯絡人資料。要新增帳戶,在網上備份聯絡人資料嗎?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"請花點時間新增帳戶,以便將您的聯絡人備份到 Google。"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新聯絡人將會儲存至 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"為新聯絡人選擇預設帳戶:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"新增聯絡人"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"建立新聯絡人"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"編輯聯絡人"</string>
- <string name="keep_local" msgid="1258761699192993322">"保留在本機中"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"僅供檢視"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"選擇要編輯的聯絡人"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"已連結的聯絡人"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"新增"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"解除連結"</string>
<string name="add_account" msgid="8201790677994503186">"新增帳戶"</string>
<string name="add_new_account" msgid="5748627740680940264">"新增帳戶"</string>
<string name="menu_export_database" msgid="2659719297530170820">"匯出資料庫檔案"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"新增聯絡人"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"建立新聯絡人"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"顯示更多"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"顯示較少"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"顯示全部"</string>
<string name="recent_card_title" msgid="8982782042698001695">"近期活動"</string>
<string name="about_card_title" msgid="2920942314212825637">"關於"</string>
- <string name="send_message" msgid="8938418965550543196">"傳送訊息"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"正在建立個人副本…"</string>
- <string name="yesterday" msgid="6840858548955018569">"昨天"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"正在建立個人副本…"</string>
<string name="tomorrow" msgid="6241969467795308581">"明天"</string>
<string name="today" msgid="8041090779381781781">"今天"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"今天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"明天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g><xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(未命名活動)"</string>
<string name="date_time_set" msgid="4761419824439606690">"設定"</string>
<string name="header_im_entry" msgid="3581720979640225615">"即時通訊"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"網站"</string>
<string name="header_event_entry" msgid="6738250422744401460">"活動"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"關係"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"帳戶"</string>
<string name="header_name_entry" msgid="1592791008096288306">"名稱"</string>
<string name="header_email_entry" msgid="8666093061171624478">"電郵"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"相片"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"按一下以展開聯絡人編輯器。"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"按一下以收合聯絡人編輯器。"</string>
<string name="content_description_directions" msgid="2686791825798189335">"規劃前往特定地點的路線"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"最近短訊 (<xliff:g id="MESSAGE_BODY">%s</xliff:g>、<xliff:g id="PHONE_NUMBER">%s</xliff:g>、<xliff:g id="DATE">%s</xliff:g>)。按一下即可回覆"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"最近短訊 (<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>、<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>、<xliff:g id="DATE">%3$s</xliff:g>)。按一下即可回覆"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"來電"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"致電"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"未接來電"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"最近通話 (<xliff:g id="CALL_TYPE">%s</xliff:g>、<xliff:g id="PHONE_NUMBER">%s</xliff:g>、<xliff:g id="DATE">%s</xliff:g>)。按一下即可回電"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"最近通話 (<xliff:g id="CALL_TYPE">%1$s</xliff:g>、<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>、<xliff:g id="DATE">%3$s</xliff:g>)。按一下即可回電"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"當您在電郵欄或手機欄中輸入個人的 Hangouts 識別碼時,Hangouts 會提供更卓越的服務。"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"更多欄位"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"變更相片"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"無法打開編輯器。"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"儲存至:"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"目前儲存至 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。連按兩下即可選擇另一個帳戶。"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one">已連結的聯絡人</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 個已連結的聯絡人"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"更多欄位"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"變更聯絡人相片"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"新增聯絡人相片"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"聯絡人相片"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"無法打開編輯器。"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"儲存至:"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"無法編輯 <xliff:g id="ACCOUNT">%s</xliff:g> 的聯絡人資料"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連結聯絡人"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個可能重複的聯絡人</item>
- <item quantity="one">1 個可能重複的聯絡人</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other">已連結 <xliff:g id="COUNT">%d</xliff:g> 個聯絡人</item>
- <item quantity="one">已連結 1 個聯絡人</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"這個聯絡人"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重複"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"這些聯絡人可能是同一個人,您可連結兩者成為單一聯絡人。"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"已連結的聯絡人"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"來自您的帳戶"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"拍照"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"所有相片"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"選擇相片"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"來自 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"刪除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未選擇 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"已選擇 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未勾選不明帳戶中的相片"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已勾選不明帳戶中的相片"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"正在更新聯絡人清單以反映語言變更。\n\n請稍候…"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"建議"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"開啟導覽匣"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"關閉導覽匣"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g>標籤"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"標籤"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"帳戶"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"顯示您們的記錄"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"活動和訊息"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"活動"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"訊息"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"建議"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"讓您的聯絡人有條不紊並更加實用"</string>
+ <string name="undo" msgid="1425165101664071422">"復原"</string>
+ <string name="call_custom" msgid="6385303130912713318">"致電<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"撥打住宅電話"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"致電手機"</string>
+ <string name="call_work" msgid="5328785911463744028">"致電公司電話"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"致電公司傳真"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"致電住宅傳真"</string>
+ <string name="call_pager" msgid="9003902812293983281">"致電傳呼機"</string>
+ <string name="call_other" msgid="8563753966926932052">"致電"</string>
+ <string name="call_callback" msgid="1910165691349426858">"撥打回撥電話"</string>
+ <string name="call_car" msgid="3280537320306436445">"致電汽車電話"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"致電公司代表號"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"撥打 ISDN 電話"</string>
+ <string name="call_main" msgid="6082900571803441339">"致電主要電話"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"致電其他傳真"</string>
+ <string name="call_radio" msgid="8296755876398357063">"致電電台"</string>
+ <string name="call_telex" msgid="2223170774548648114">"致電 Telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"致電 TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"致電公司手機"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"致電公司傳呼機"</string>
+ <string name="call_assistant" msgid="670941612175068337">"致電<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"致電 MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (通話)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"傳送短訊給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"傳送短訊至住宅電話"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"傳送短訊至手機"</string>
+ <string name="sms_work" msgid="2269624156655267740">"傳送短訊至公司電話"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"傳送短訊至公司傳真"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"傳送短訊至住宅傳真"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"傳送短訊至傳呼機"</string>
+ <string name="sms_other" msgid="806127844607642331">"傳送短訊"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"傳送短訊至回撥電話"</string>
+ <string name="sms_car" msgid="7444227058437359641">"傳送短訊至車用電話"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"傳送短訊至公司代表號"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"傳送短訊至 ISDN 電話"</string>
+ <string name="sms_main" msgid="8621625784504541679">"傳送短訊至主要電話"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"傳送短訊至傳真"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"傳送短訊至電台"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"傳送短訊至電報電話"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"傳送短訊至 TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"傳送短訊至公司手機"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"傳送短訊至公司傳呼機"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"傳送短訊至 <xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"傳送短訊至 MMS 電話"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (訊息)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"進行視像通話"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"清除常用聯絡人?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"您將清除「聯絡人」應用程式和「電話」應用程式中的常用聯絡人名單,並強制電子郵件應用程式重新取得您的寄件偏好設定。"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"正在清除常用聯絡人…"</string>
+ <string name="status_available" msgid="5586870015822828392">"在線"</string>
+ <string name="status_away" msgid="1838861100379804730">"離開"</string>
+ <string name="status_busy" msgid="9147992455450257136">"忙碌"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"其他"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"名錄"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"工作目錄"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"全部聯絡人"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"快速聯絡<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(沒有名稱)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"常用聯絡人"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"所有附有電話號碼的聯絡人"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"工作設定檔聯絡人"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
+ <string name="account_phone" msgid="7128032778471187553">"裝置"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"名稱"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"暱稱"</string>
+ <string name="name_given" msgid="4280790853455320619">"名字"</string>
+ <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
+ <string name="name_prefix" msgid="59756378548779822">"姓名前稱謂"</string>
+ <string name="name_middle" msgid="8467433655992690326">"中間名"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"姓名後稱謂"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"姓名拼音"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"名字拼音"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"中間名拼音"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"姓氏拼音"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"電話"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"電子郵件"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"地址"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"機構"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"關係"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"特別日期"</string>
+ <string name="sms" msgid="1756857139634224222">"短訊"</string>
+ <string name="postal_address" msgid="8765560217149624536">"地址"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"公司"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"職位"</string>
+ <string name="label_notes" msgid="8337354953278341042">"備註"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"自訂"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"網站"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"標籤"</string>
+ <string name="email_home" msgid="8573740658148184279">"傳送電郵至住宅信箱"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"傳送電郵至手機"</string>
+ <string name="email_work" msgid="2807430017302722689">"傳送電郵至公司信箱"</string>
+ <string name="email_other" msgid="3454004077967657109">"電郵"</string>
+ <string name="email_custom" msgid="5536404237099078802">"寄電郵給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"電郵"</string>
+ <string name="postal_street" msgid="8133143961580058972">"街道"</string>
+ <string name="postal_city" msgid="6597491300084895548">"城市"</string>
+ <string name="postal_region" msgid="6045263193478437672">"州/省"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"郵遞區號"</string>
+ <string name="postal_country" msgid="7638264508416368690">"國家/地區"</string>
+ <string name="map_home" msgid="1243547733423343982">"查看住宅地址"</string>
+ <string name="map_work" msgid="1360474076921878088">"查看公司地址"</string>
+ <string name="map_other" msgid="3817820803587012641">"檢視地址"</string>
+ <string name="map_custom" msgid="8761800628069473526">"查看<xliff:g id="CUSTOM_LABEL">%s</xliff:g>地址"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"使用 AIM 進行即時通訊"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"使用 Windows Live 進行即時通訊"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"使用 Yahoo 進行即時通訊"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"使用 Skype 進行即時通訊"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"使用 QQ 進行即時通訊"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"使用「Google Talk」交談"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"使用 ICQ 進行即時通訊"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 進行即時通訊"</string>
+ <string name="chat" msgid="9025361898797412245">"即時通訊"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"刪除"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"顯示更多姓名欄位"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"收合名稱欄位"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"顯示更多姓名拼音欄位"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"收合姓名拼音欄位"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"收合"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"已展開"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"已收合"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有聯絡人"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星號"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"自訂"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"聯絡人"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"所有其他聯絡人"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"全部聯絡人"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"移除同步處理群組"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"新增同步處理群組"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"更多群組…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果從同步設定中移除「<xliff:g id="GROUP">%s</xliff:g>」群組,也會移除任何未分組的聯絡人。"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"正在儲存顯示選項…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"自訂檢視"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"儲存匯入的聯絡人至以下帳戶:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d 位聯絡人</item>
+ <item quantity="one">1 位聯絡人</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> 位聯絡人 • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> 位聯絡人 • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf 檔案"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"沒有可匯入的資料"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"要從 vCard 匯入聯絡人嗎?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"要取消匯入「<xliff:g id="FILENAME">%s</xliff:g>」的操作嗎?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"要取消匯出「<xliff:g id="FILENAME">%s</xliff:g>」的操作嗎?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"無法取消匯入/匯出 vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"不明錯誤。"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%1$s</xliff:g>」:<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"無法啟動匯出程式:「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"沒有聯絡人資料可以匯出。"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"您已停用所需權限。"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"匯出時發生錯誤:「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"匯入/匯出錯誤"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"記憶體不足,檔案可能過大。"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"不支援這種格式。"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"匯出 <xliff:g id="FILENAME">%s</xliff:g> 完畢。"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"聯絡人匯出完成。"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"聯絡人匯出完成,按一下通知即可分享聯絡人。"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"輕按即可分享聯絡人。"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"已取消匯出「<xliff:g id="FILENAME">%s</xliff:g>」的操作。"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在匯出聯絡人資料"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在匯出聯絡人資料。"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"無法取得資料庫資訊。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"沒有可匯出的聯絡人。"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 編輯器並未正確啟動。"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"無法匯出"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"聯絡人資料未匯出。\n原因:「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"匯入 <xliff:g id="NAME">%s</xliff:g> 中"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"無法讀取 vCard 資料"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"已完成匯入 vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消匯入「<xliff:g id="FILENAME">%s</xliff:g>」的操作"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯入。"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"稍後即將匯入檔案。"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 匯入要求已被拒,請稍後再試。"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"系統即將匯出聯絡人。"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 匯出要求已被拒,請稍後再試。"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"聯絡人"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"正在將 vCard 資料快取至本機暫存空間,隨即將開始實際的匯入操作。"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"無法匯入 vCard。"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已透過 NFC 收到聯絡人資訊"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"快取中"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 個:<xliff:g id="NAME">%3$s</xliff:g>,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 個"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"匯出至 .vcf 檔案"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序方式"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"姓名拼音"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"永遠顯示"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"空白時隱藏"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"姓氏"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"姓名格式"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"名字在前"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"姓氏在前"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"帳戶"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"新聯絡人的預設帳戶"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"我的資訊"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"設定您的個人檔案"</string>
+ <string name="setting_about" msgid="7014388749752042863">"關於聯絡人"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人。"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"匯出聯絡人"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"從以下來源匯入通訊錄:"</string>
+ <string name="share_error" msgid="948429331673358107">"無法分享這位聯絡人的資料。"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"沒有聯絡人可供分享。"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"要顯示的聯絡人"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要顯示的聯絡人"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"自訂檢視畫面"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"儲存"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"搜尋聯絡人"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的最愛"</string>
+ <string name="menu_import" msgid="6107961135813836467">"匯入"</string>
+ <string name="menu_export" msgid="2658783911863503902">"匯出"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"透過 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜尋"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"帳戶"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"永遠使用這張 SIM 卡通話"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"撥號時傳送筆記"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"致電時可以輸入並傳送筆記…"</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"傳送和撥號"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"型號版本"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"開放原始碼授權"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"開放原始碼軟件的授權詳情"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"私隱權政策"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"服務條款"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"開放原始碼授權"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"無法開啟網址。"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"已選取 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"未選取 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"開始視像通話"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"刪除"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"省略號"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小時 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"已停用此捷徑"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"聯絡人已移除"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"匯入"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"選取聯絡人"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"SIM 卡中沒有聯絡人"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"此聯絡人已在您的清單中"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">已匯入 <xliff:g id="COUNT">%d</xliff:g> 位 SIM 聯絡人</item>
+ <item quantity="one">已匯入 1 位 SIM 聯絡人</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"無法匯入 SIM 聯絡人"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"從 SIM 卡匯入"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"取消"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"自動同步已關閉。輕按以開啟。"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"拒絕"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"帳戶同步已關閉。輕按以開啟。"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"要開啟自動同步功能嗎?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"除了「Google 通訊錄」,您為其他所有應用程式和帳戶作出的變更亦會在網絡與裝置之間即時更新。"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"開啟"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"沒有網絡連線"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"顯示更多"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 卡匯入完成"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"匯入失敗"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"無法從 SIM 卡匯入聯絡人"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在匯入 SIM 卡"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"通知"</string>
</resources>
diff --git a/res/values-zh-rTW/donottranslate_config.xml b/res/values-zh-rTW/donottranslate_config.xml
new file mode 100644
index 000000000..b35785649
--- /dev/null
+++ b/res/values-zh-rTW/donottranslate_config.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2016, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources>
+ <!-- If true, an option is shown in Display Options UI to choose a sort order -->
+ <bool name="config_sort_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_sort_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a name display order -->
+ <bool name="config_display_order_user_changeable">false</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_display_order_primary">true</bool>
+
+ <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">false</bool>
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 17a94d003..b406ddfdd 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"通訊錄"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"通訊錄"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"查看聯絡人"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"編輯聯絡人"</string>
<string name="contactsList" msgid="8661624236494819731">"聯絡人"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"新增聯絡人"</string>
<string name="shortcutContact" msgid="749243779392912958">"聯絡人"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"直接撥號"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"直接傳訊"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"選擇聯絡人捷徑"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"選擇去電號碼"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"選擇傳訊號碼"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"選擇聯絡人"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"加入聯絡人"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"選擇聯絡人"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選取"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"建立新聯絡人"</string>
- <string name="starredList" msgid="4817256136413959463">"已加星號"</string>
- <string name="frequentList" msgid="7154768136473953056">"經常聯絡"</string>
- <string name="strequentList" msgid="5640192862059373511">"我的收藏"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"聯絡資訊"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"編輯聯絡人"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"建立聯絡人"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"編輯群組"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"建立群組"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"相關資訊"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"更新"</string>
<string name="searchHint" msgid="8482945356247760701">"搜尋聯絡人"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"檢視聯絡人"</string>
<string name="menu_addStar" msgid="2908478235715404876">"加到我的收藏"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"從我的收藏中移除"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"已從我的最愛中移除"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"編輯"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"更換相片"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"放在主螢幕上"</string>
- <string name="menu_call" msgid="3992595586042260618">"去電聯絡人"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"傳送簡訊至聯絡人"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"建立捷徑"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"取消連結"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"編輯"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"刪除"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"新增聯絡人"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"新增群組"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"移除聯絡人"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"重新命名標籤"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"刪除標籤"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"新增聯絡人"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"選取聯絡人"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"新增聯絡人"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"從標籤中移除"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"建立標籤"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"確定要將這個聯絡人的連結取消,還原為多筆聯絡人資料嗎?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"取消連結"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要儲存目前所做變更,並將這個聯絡人的連結取消,還原為多筆聯絡人資料嗎?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"儲存並取消連結"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"您要儲存目前所做變更,並與所選聯絡人連結合併嗎?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"儲存並連結"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"連結中"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"正在取消連結"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"建立連結"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"查看已連結的聯絡人"</string>
<string name="menu_save" msgid="1727844363591825909">"儲存"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"連結聯絡人"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"選擇要與<xliff:g id="NAME">%s</xliff:g>連結的聯絡人:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"顯示所有聯絡人"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"建議聯絡人"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"所有聯絡人"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"已連結<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"聯絡人連結完成"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"已刪除<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"已刪除<xliff:g id="NAME_0">%1$s</xliff:g>和<xliff:g id="NAME_1">%2$s</xliff:g>"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"已刪除<xliff:g id="NAME_0">%1$s</xliff:g>、<xliff:g id="NAME_1">%2$s</xliff:g>、<xliff:g id="NAME_2">%3$s</xliff:g>..."</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="other">已刪除聯絡人</item>
<item quantity="one">已刪除聯絡人</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位聯絡人</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"來自 Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"來自 <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"設定電話鈴聲"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"將所有來電轉到語音信箱"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"系統無法刪除擷取自唯讀帳戶的聯絡人資料,但可以將這些資料設為隱藏。"</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"隱藏"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"您要刪除的聯絡人詳細資料源自多個帳戶。針對擷取自唯讀帳戶的詳細資料,系統會予以隱藏,而不會刪除這些資料。"</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"您至少必須選取兩筆聯絡人資料才可執行連結。"</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"確定要連結所選的聯絡人嗎?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"連結"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"轉至語音信箱"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"取消轉至語音信箱"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"這是唯讀聯絡人資料,因此無法刪除,但你可以將這筆資料設為隱藏。"</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"隱藏聯絡人"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"系統不會將這筆聯絡人資料中的唯讀帳戶刪除,只會設為隱藏。"</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"確定要刪除這個聯絡人嗎?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"確定要刪除所選的聯絡人嗎?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"系統無法刪除擷取自唯讀帳戶的聯絡人資料,但可以將這些資料設為隱藏。"</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"如果刪除這個聯絡人,系統將一併刪除多個帳戶中的相關詳細資料。"</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"確定要刪除這個聯絡人嗎?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"刪除"</string>
- <string name="menu_discard" msgid="6854657936970228164">"捨棄變更"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"聯絡人不存在。"</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已在主畫面中新增這個聯絡人的捷徑。"</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"已在主畫面中新增<xliff:g id="NAME">%s</xliff:g>的捷徑。"</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"建立新聯絡人"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"建立新聯絡人"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"機構"</item>
- <item msgid="7196592230748086755">"附註"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"平板電腦中沒有相片可供選用。"</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"手機上沒有相片 。"</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"裝置上沒有相片。"</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"聯絡人相片"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"自訂標籤名稱"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"直接將來電轉到語音信箱"</string>
<string name="removePhoto" msgid="4898105274130284565">"移除相片"</string>
- <string name="noContacts" msgid="4955659076981974652">"沒有聯絡人"</string>
- <string name="noGroups" msgid="8614664663561385253">"沒有群組。"</string>
- <string name="noAccounts" msgid="7768267764545265909">"必須要有帳戶才能建立群組。"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"這個群組中沒有成員。"</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"如要新增成員,請編輯群組。"</string>
- <string name="savingContact" msgid="4075751076741924939">"正在儲存聯絡人…"</string>
+ <string name="noContacts" msgid="2228592924476426108">"您的聯絡人清單沒有任何項目"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"沒有任何聯絡人設有這個標籤"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"這個帳戶中沒有聯絡人"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人清單沒有任何項目"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"已儲存<xliff:g id="DISPLAY_NAME">%s</xliff:g>"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"聯絡人已儲存"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"已取消連結聯絡人"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"無法儲存聯絡人變更。"</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"無法取消連結聯絡人。"</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"無法連結聯絡人。"</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"儲存聯絡人時發生錯誤。"</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"無法儲存聯絡人相片變更。"</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"群組已儲存。"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"無法儲存群組變更。"</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位有電話號碼的聯絡人</item>
- <item quantity="one">1 位有電話號碼的聯絡人</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"所有聯絡人資訊中都沒有電話號碼"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
- <item quantity="one">找到 1 位聯絡人</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"無法儲存變更後的聯絡人資訊"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"無法取消連結聯絡人"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"無法連結聯絡人"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存變更後的聯絡人相片"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"已建立標籤"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"無法建立標籤"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"已更新標籤"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"已從標籤中移除"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"已新增到標籤中"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"無法儲存變更後的標籤"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"該標籤已存在"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"部分聯絡人沒有電子郵件。"</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"部分聯絡人沒有電話號碼。"</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"傳送電子郵件"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"傳送訊息"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"選擇聯絡人"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"傳送"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"沒有聯絡人"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="other">找到 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人</item>
- <item quantity="one">找到 1 位聯絡人</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"全部"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"常用聯絡人"</string>
- <string name="callBack" msgid="5498224409038809224">"回播電話"</string>
- <string name="callAgain" msgid="3197312117049874778">"重撥"</string>
- <string name="returnCall" msgid="8171961914203617813">"回電"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"要將「<xliff:g id="EMAIL">%s</xliff:g>」加到通訊錄嗎?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"聯絡人相片"</string>
- <string name="description_plus_button" msgid="515164827856229880">"加號"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人,共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
<string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"找不到可以處理這個動作的應用程式。"</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"按一下即可返回上一個畫面"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"新增電話號碼"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"新增電子郵件地址"</string>
<string name="missing_app" msgid="1466111003546611387">"找不到可以處理這個動作的應用程式。"</string>
<string name="menu_share" msgid="943789700636542260">"分享"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"新增為聯絡人"</string>
- <string name="share_via" msgid="563121028023030093">"使用下列應用程式分享聯絡人資訊:"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"選擇帳戶以建立群組"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"新增"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="other">透過下列應用程式分享聯絡人資訊:</item>
+ <item quantity="one">透過下列應用程式分享聯絡人資訊:</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"選擇帳戶"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"建立標籤"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"重新命名標籤"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"標籤名稱"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"標籤名稱"</string>
<string name="audio_chat" msgid="2535716629358298691">"語音通訊"</string>
<string name="video_chat" msgid="1872255818640336072">"語音通訊"</string>
- <string name="connections" msgid="8098440723172028350">"聯絡方式"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"加入聯絡方式"</string>
- <string name="recent" msgid="2659189233141493004">"最新"</string>
- <string name="recent_updates" msgid="4267258535615860710">"最新動態"</string>
<string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>聯絡人"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 帳戶"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"無法透過這個應用程式編輯。"</string>
- <string name="group_read_only" msgid="1061762906115697637">"無法在這個裝置上編輯。"</string>
<string name="take_photo" msgid="7496128293167402354">"拍照"</string>
<string name="take_new_photo" msgid="7341354729436576304">"拍攝新相片"</string>
<string name="pick_photo" msgid="2129509985223564942">"選擇相片"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"選取新相片"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"正在更新聯絡人清單。"</string>
<string name="search_results_searching" msgid="3984833028938569930">"搜尋中…"</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"顯示已選取的項目"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"全部顯示"</string>
- <string name="menu_select_all" msgid="621719255150713545">"全選"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"全部取消選取"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"新增"</string>
- <string name="add_organization" msgid="7311893231158291197">"填寫聯絡人任職單位"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"日期"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"群組名稱"</string>
- <string name="change_photo" msgid="8530597935483526383">"變更"</string>
- <string name="primary_photo" msgid="8517942231868516999">"主要相片"</string>
- <string name="description_star" msgid="2605854427360036550">"我的收藏"</string>
- <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要將目前聯絡人與所選聯絡人連結嗎?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"標籤"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"要切換至編輯所選聯絡人嗎?系統會為您複製目前已輸入的資訊。"</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"複製到我的通訊錄"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"新增至我的聯絡人"</string>
<string name="contact_directory_description" msgid="683398073603909119">"目錄:<xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"自訂"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"設定"</string>
<string name="menu_settings" msgid="377929915873428211">"設定"</string>
<string name="menu_help" msgid="1680178646764069976">"說明與意見回饋"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"顯示選項"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_1">%1$s</xliff:g> <xliff:g id="COMPANY_0">%2$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"電話號碼"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"新增至通訊錄"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"加入聯絡人"</string>
<string name="non_phone_close" msgid="7608506439725515667">"關閉"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"包含年份"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"聯絡人"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"載入中…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"建立新聯絡人"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"新增帳戶"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"匯入聯絡人"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"建立新群組"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"建立新群組"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> 個群組</item>
- <item quantity="one">1 個群組</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"確定要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」群組?(這樣並不會刪除各聯絡人資料)。"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="other"><xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g>中有 <xliff:g id="COUNT_2">%1$d</xliff:g> 人</item>
- <item quantity="one"><xliff:g id="ACCOUNT_TYPE_1">%2$s</xliff:g>中有 <xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> 人</item>
- <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 人</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"匯入"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"新建..."</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"要刪除「<xliff:g id="GROUP_LABEL">%1$s</xliff:g>」標籤嗎?(聯絡人本身不會遭到刪除。)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"請先輸入聯絡人姓名,才能與其他聯絡人連結。"</string>
<string name="copy_text" msgid="3257145021583508761">"複製到剪貼簿"</string>
<string name="set_default" msgid="4417505153468300351">"設為預設值"</string>
<string name="clear_default" msgid="7193185801596678067">"清除預設值"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"文字已複製"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"確定要捨棄變更並結束編輯嗎?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"要捨棄變更嗎?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"捨棄"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"繼續編輯"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"設定我的個人資料"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"輸入聯絡人的名稱"</string>
- <string name="group_name_hint" msgid="238359485263401293">"群組名稱"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要捨棄自訂設定嗎?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"搜尋聯絡人"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"移除聯絡人"</string>
<string name="local_profile_title" msgid="2021416826991393684">"我的本機個人資料"</string>
<string name="external_profile_title" msgid="8034998767621359438">"我的 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 個人資料"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"顯示所有聯絡人"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使手機遺失,聯絡人資訊依然萬無一失:與線上服務保持同步。"</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"新增帳戶"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"系統不會備份您新增的聯絡人資料。您是否要新建一個帳戶,將您的聯絡人資料另存在線上?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"請花幾分鐘時間新增帳戶,即可將您的聯絡人資料備份到 Google。"</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新聯絡人將儲存至 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"為新建立的聯絡人選擇一個預設帳戶:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"新增聯絡人"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"建立新聯絡人"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"編輯聯絡人"</string>
- <string name="keep_local" msgid="1258761699192993322">"儲存在本機中"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"僅供檢視"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"選擇要編輯的聯絡人"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"已連結的聯絡人"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"新增"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"取消連結"</string>
<string name="add_account" msgid="8201790677994503186">"新增帳戶"</string>
<string name="add_new_account" msgid="5748627740680940264">"新增帳戶"</string>
<string name="menu_export_database" msgid="2659719297530170820">"匯出資料庫檔案"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"新增聯絡人"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"建立新聯絡人"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"顯示更多"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"顯示較少"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"全部顯示"</string>
<string name="recent_card_title" msgid="8982782042698001695">"近期活動"</string>
<string name="about_card_title" msgid="2920942314212825637">"關於"</string>
- <string name="send_message" msgid="8938418965550543196">"傳送簡訊"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"正在建立個人副本..."</string>
- <string name="yesterday" msgid="6840858548955018569">"昨天"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"正在建立個人副本…"</string>
<string name="tomorrow" msgid="6241969467795308581">"明天"</string>
<string name="today" msgid="8041090779381781781">"今天"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"今天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"明天<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g><xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(未命名活動)"</string>
<string name="date_time_set" msgid="4761419824439606690">"設定"</string>
<string name="header_im_entry" msgid="3581720979640225615">"即時訊息"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"網站"</string>
<string name="header_event_entry" msgid="6738250422744401460">"活動"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"關係"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"帳戶"</string>
<string name="header_name_entry" msgid="1592791008096288306">"姓名"</string>
<string name="header_email_entry" msgid="8666093061171624478">"電子郵件"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"電話"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"相片"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"按一下即可展開聯絡人編輯器。"</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"按一下即可收合聯絡人編輯器。"</string>
<string name="content_description_directions" msgid="2686791825798189335">"規劃前往特定地點的路線"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"近期簡訊。<xliff:g id="MESSAGE_BODY">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。按一下即可回覆"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"近期簡訊。<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$s</xliff:g>。按一下即可回覆"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"來電"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"撥出通話"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"未接來電"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"近期通話。<xliff:g id="CALL_TYPE">%s</xliff:g>。<xliff:g id="PHONE_NUMBER">%s</xliff:g>。<xliff:g id="DATE">%s</xliff:g>。按一下即可回電"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"近期通話。<xliff:g id="CALL_TYPE">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$s</xliff:g>。按一下即可回電"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"您:<xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"如果您在電子郵件欄位或電話欄位中輸入聯絡人的 Hangouts 識別碼,可讓 Hangouts 的運作效能更佳。"</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"更多欄位"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"更換相片"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"無法開啟編輯器。"</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"儲存到"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"正在儲存到 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。輕觸兩下即可選擇其他帳戶。"</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g> 位)</item>
- <item quantity="one">已連結的聯絡人</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 位已連結的聯絡人"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"更多欄位"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"變更聯絡人相片"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"新增聯絡人相片"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"聯絡人相片"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"無法開啟編輯器。"</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"儲存到"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> 的聯絡人資訊不開放編輯"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連結聯絡人"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位可能重複的聯絡人</item>
- <item quantity="one">1 位可能重複的聯絡人</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位已連結的聯絡人</item>
- <item quantity="one">1 位已連結的聯絡人</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="one"></item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"這位聯絡人"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重複的聯絡人"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"這些聯絡人可能是同一人。您可以將這些聯絡人連結合併成單筆聯絡人資料。"</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"已連結的聯絡人"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"來自您的帳戶"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"拍照"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"所有相片"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"選擇相片"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"來自<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"刪除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未勾選 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"已勾選 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未勾選不明帳戶中的相片"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已勾選不明帳戶中的相片"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"正在更新聯絡人清單以反映語言變更。\n\n請稍候…"</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"建議"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新功能"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"開啟導覽匣"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"關閉導覽匣"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"「<xliff:g id="LABEL_NAME">%s</xliff:g>」標籤"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"標籤"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"帳戶"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"一併顯示紀錄"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"活動和簡訊"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"活動"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"訊息"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"建議"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"讓你的聯絡人資料井然有序又實用"</string>
+ <string name="undo" msgid="1425165101664071422">"復原"</string>
+ <string name="call_custom" msgid="6385303130912713318">"撥打<xliff:g id="CUSTOM_LABEL">%s</xliff:g>電話號碼"</string>
+ <string name="call_home" msgid="1990519474420545392">"去電住家電話"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"去電行動裝置"</string>
+ <string name="call_work" msgid="5328785911463744028">"去電公司電話"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"去電公司傳真"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"去電住家傳真"</string>
+ <string name="call_pager" msgid="9003902812293983281">"去電呼叫器"</string>
+ <string name="call_other" msgid="8563753966926932052">"通話"</string>
+ <string name="call_callback" msgid="1910165691349426858">"去電回撥號碼"</string>
+ <string name="call_car" msgid="3280537320306436445">"去電車用電話"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"去電公司代表號"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"去電 ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"去電代表號"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"撥打傳真"</string>
+ <string name="call_radio" msgid="8296755876398357063">"去電無線電"</string>
+ <string name="call_telex" msgid="2223170774548648114">"去電 Telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"去電 TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"去電公司手機"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"去電公司呼叫器"</string>
+ <string name="call_assistant" msgid="670941612175068337">"撥打<xliff:g id="CUSTOM_LABEL">%s</xliff:g>電話號碼"</string>
+ <string name="call_mms" msgid="6274041545876221437">"去電 MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (撥號)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"傳送簡訊給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>電話號碼"</string>
+ <string name="sms_home" msgid="7524332261493162995">"傳送簡訊至住家電話"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"傳送簡訊至行動裝置"</string>
+ <string name="sms_work" msgid="2269624156655267740">"傳送簡訊至公司電話"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"傳送簡訊至公司傳真"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"傳送簡訊至住家傳真"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"傳送簡訊至呼叫器"</string>
+ <string name="sms_other" msgid="806127844607642331">"傳送簡訊"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"傳送簡訊至回撥號碼"</string>
+ <string name="sms_car" msgid="7444227058437359641">"傳送簡訊至車用電話"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"傳送簡訊至公司代表號"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"傳送簡訊至 ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"傳送簡訊至代表號"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"傳送簡訊至傳真"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"傳送簡訊至無線電"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"傳送簡訊至 Telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"傳送簡訊至 TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"傳送簡訊至公司手機"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"傳送簡訊至公司呼叫器"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"傳送簡訊至<xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"向多媒體訊息電話號碼傳送文字簡訊"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (傳送簡訊)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"進行視訊通話"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"清除常用聯絡人?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"你即將清除「聯絡人」應用程式和「電話」應用程式中的常用聯絡人清單,並設定讓電子郵件應用程式重新熟悉你的寄件偏好設定。"</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"正在清除常用聯絡人…"</string>
+ <string name="status_available" msgid="5586870015822828392">"線上"</string>
+ <string name="status_away" msgid="1838861100379804730">"離開"</string>
+ <string name="status_busy" msgid="9147992455450257136">"忙碌"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"其他"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"目錄"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Work 聯絡人目錄"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"所有聯絡人"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>的快速聯絡人相片"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(無姓名)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"常用聯絡人"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"所有包含電話號碼的聯絡人資訊"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Work 設定檔聯絡人"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
+ <string name="account_phone" msgid="7128032778471187553">"裝置"</string>
+ <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"暱稱"</string>
+ <string name="name_given" msgid="4280790853455320619">"名字"</string>
+ <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
+ <string name="name_prefix" msgid="59756378548779822">"姓名前稱謂"</string>
+ <string name="name_middle" msgid="8467433655992690326">"中間名"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"姓名後稱謂"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"姓名拼音"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"名字拼音"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"中間名 (拼音)"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"姓氏拼音"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"電話"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"電子郵件"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"地址"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"即時訊息"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"機構"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"關係"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"特別的日子"</string>
+ <string name="sms" msgid="1756857139634224222">"簡訊"</string>
+ <string name="postal_address" msgid="8765560217149624536">"地址"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"公司"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"職稱"</string>
+ <string name="label_notes" msgid="8337354953278341042">"附註"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"自訂"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"網站"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"標籤"</string>
+ <string name="email_home" msgid="8573740658148184279">"傳送電子郵件至住家電子郵件地址"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"傳送電子郵件至行動裝置"</string>
+ <string name="email_work" msgid="2807430017302722689">"傳送電子郵件至公司電子郵件地址"</string>
+ <string name="email_other" msgid="3454004077967657109">"傳送電子郵件"</string>
+ <string name="email_custom" msgid="5536404237099078802">"傳送電子郵件給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>電子郵件地址"</string>
+ <string name="email" msgid="5668400997660065897">"傳送電子郵件"</string>
+ <string name="postal_street" msgid="8133143961580058972">"街道"</string>
+ <string name="postal_city" msgid="6597491300084895548">"鄉/鎮/市/區"</string>
+ <string name="postal_region" msgid="6045263193478437672">"州/省"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"郵遞區號"</string>
+ <string name="postal_country" msgid="7638264508416368690">"國家/地區"</string>
+ <string name="map_home" msgid="1243547733423343982">"檢視住家地址"</string>
+ <string name="map_work" msgid="1360474076921878088">"檢視公司地址"</string>
+ <string name="map_other" msgid="3817820803587012641">"檢視地址"</string>
+ <string name="map_custom" msgid="8761800628069473526">"查看<xliff:g id="CUSTOM_LABEL">%s</xliff:g>地址"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"使用 AIM 進行即時通訊"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"使用 Windows Live 進行即時通訊"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"使用 Yahoo 進行即時通訊"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"使用 Skype 進行即時通訊"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"使用 QQ 進行即時通訊"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"使用 Google Talk 進行即時通訊"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"使用 ICQ 進行即時通訊"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"使用 Jabber 進行即時通訊"</string>
+ <string name="chat" msgid="9025361898797412245">"即時通訊"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"刪除"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"顯示更多姓名欄位"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"收合姓名欄位"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"顯示更多姓名拼音欄位"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"收合姓名拼音欄位"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"展開"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"收合"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"已展開"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"已收合"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"所有聯絡人"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"已加星號"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"自訂"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"聯絡人"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"所有其他聯絡人"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"所有聯絡人"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"移除同步處理群組"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"新增同步處理群組"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"更多群組…"</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果停用「<xliff:g id="GROUP">%s</xliff:g>」群組的同步處理設定,也會停止同步處理任何未分組的聯絡人。"</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"正在儲存顯示選項…"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"自訂檢視"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"將匯入的聯絡人儲存到:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM 卡 <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="other">%1$d 位聯絡人</item>
+ <item quantity="one">1 位聯絡人</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> 位聯絡人 • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="one"><xliff:g id="COUNT_0">^1</xliff:g> 位聯絡人 • <xliff:g id="PHONE_NUMBER_1">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf 檔案"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"沒有任何可匯入的資料"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"要從 vCard 匯入聯絡人嗎?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"確定要取消匯入 <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"確定要取消匯出 <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"無法取消匯入/匯出 vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"不明錯誤。"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%1$s</xliff:g>」:<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"無法啟動匯出程式:<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"沒有可匯出的聯絡人。"</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"必要權限已停用。"</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"匯出時發生錯誤:<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 錯誤"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"記憶體不足,檔案可能過大。"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"不支援此格式。"</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"已完成 <xliff:g id="FILENAME">%s</xliff:g> 匯出作業。"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"聯絡人資料匯出完成。"</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"聯絡人資料匯出完成,按一下通知即可分享相關資料。"</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"輕觸即可分享聯絡人資料。"</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"已取消匯出 <xliff:g id="FILENAME">%s</xliff:g>。"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在匯出聯絡人資料"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在匯出聯絡人資料。"</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"無法取得資料庫資訊。"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"沒有聯絡人資料可供匯出。"</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 編輯器並未正確啟動。"</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"無法匯出"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"聯絡人資料未匯出。\n原因:<xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"正在匯入 <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"無法讀取 vCard 資料"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"已完成匯入 vCard 的 <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消匯入 <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯入。"</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"稍候即將匯入該檔案。"</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 匯入要求遭到拒絕,請稍後再試。"</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"即將匯出聯絡人資料。"</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 匯出要求遭到拒絕,請稍後再試。"</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"聯絡人"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"正在將 vCard 資料快取至本機暫存空間,隨即將啟動實際的匯入作業。"</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"無法匯入 vCard。"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已透過 NFC 收到聯絡人資訊"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"快取中"</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 筆資料:<xliff:g id="NAME">%3$s</xliff:g>,共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 筆資料"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"匯出成 .vcf 檔案"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序依據"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"姓名拼音"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"一律顯示"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"留空時隱藏"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"姓氏"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"姓名格式"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"名字在前"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"姓氏在前"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"帳戶"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"新聯絡人的預設帳戶"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"我的資訊"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"設定你的個人資料"</string>
+ <string name="setting_about" msgid="7014388749752042863">"關於聯絡人"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人資料"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人資料"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人資料。"</string>
+ <string name="dialog_export" msgid="1628001095187741417">"匯出聯絡人"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"聯絡人匯入來源"</string>
+ <string name="share_error" msgid="948429331673358107">"無法分享這位聯絡人。"</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"沒有任何聯絡人資料可分享。"</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"要顯示的聯絡人"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要顯示的聯絡人"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"自訂檢視"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"儲存"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"搜尋聯絡人"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的收藏"</string>
+ <string name="menu_import" msgid="6107961135813836467">"匯入"</string>
+ <string name="menu_export" msgid="2658783911863503902">"匯出"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"透過 <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜尋"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"帳戶"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"一律使用這張 SIM 卡通話"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"撥號時傳送備註"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"輸入可在撥號時傳送的備註..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"傳送並撥號"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"版本"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"開放原始碼授權"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"開放原始碼軟體的授權詳細資料"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"隱私權政策"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"服務條款"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"開放原始碼授權"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"無法開啟網址。"</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"已勾選 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"未勾選 <xliff:g id="ACCOUNT_INFO">%s</xliff:g>"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"撥打視訊通話"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"刪除"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"省略符號"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小時 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"這個捷徑已停用"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"這位聯絡人已移除"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"匯入"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"選取聯絡人"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"你的 SIM 卡上沒有聯絡人資料"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"你的聯絡人清單中已有這位聯絡人"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="other">已匯入 <xliff:g id="COUNT">%d</xliff:g> 位 SIM 卡聯絡人</item>
+ <item quantity="one">已匯入 1 位 SIM 卡聯絡人</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"無法匯入 SIM 卡聯絡人"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"從 SIM 卡匯入"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"取消"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"自動同步功能已關閉。輕觸即可開啟。"</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"關閉"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"帳戶同步功能已關閉。輕觸即可開啟。"</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"要啟用自動同步功能嗎?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"你對所有應用程式和帳戶 (不限於 Google 聯絡人) 所做的變更都會在網路和你的裝置之間保持同步。"</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"開啟"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"沒有網路連線"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"SIM 卡"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"顯示更多"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 卡資料匯入完成"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"匯入失敗"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"無法從 SIM 卡匯入聯絡人資料"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在匯入 SIM 卡資料"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"通知"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 6c9f01775..60fc11352 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -17,31 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="applicationLabel" msgid="3906689777043645443">"Oxhumana nabo"</string>
- <string name="launcherActivityLabel" msgid="6497230399032392417">"Oxhumana nabo"</string>
- <string name="quickContactActivityLabel" msgid="7985456650689347268">"Buka oxhumana naye"</string>
- <string name="editContactActivityLabel" msgid="1129944572070802839">"Hlela Othintana Naye"</string>
<string name="contactsList" msgid="8661624236494819731">"Othi tana nabo"</string>
+ <string name="shortcut_add_contact" msgid="7476283631356909204">"Faka oxhumana naye"</string>
<string name="shortcutContact" msgid="749243779392912958">"Othintana naye"</string>
<string name="shortcutDialContact" msgid="746622101599186779">"Ukudayela okuqondile"</string>
<string name="shortcutMessageContact" msgid="2460337253595976198">"Umyalezo oqondile"</string>
- <string name="shortcutActivityTitle" msgid="6642877210643565436">"Khetha isinqamuleli sothintana naye"</string>
- <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Khetha inombolo ozoyishayela"</string>
- <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Khetha inombolo kumyalezo"</string>
+ <string name="shortcutActivityTitle" msgid="1504383567778497348">"Khetha oxhumana naye"</string>
<string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Faka koxhumana nabo"</string>
<string name="contactPickerActivityTitle" msgid="4301062192337417640">"Khetha oxhumana naye"</string>
+ <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Khetha"</string>
<string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Dala othintana naye omusha"</string>
- <string name="starredList" msgid="4817256136413959463">"Okunenkanyezi"</string>
- <string name="frequentList" msgid="7154768136473953056">"Okuvamile"</string>
- <string name="strequentList" msgid="5640192862059373511">"Izintandokazi"</string>
- <string name="viewContactTitle" msgid="7989394521836644384">"Imininingwane yothintana naye"</string>
- <string name="editContactDescription" msgid="2947202828256214947">"Hlela othintana naye"</string>
- <string name="insertContactDescription" msgid="4709878105452681987">"Dala othintana naye"</string>
- <string name="editGroupDescription" msgid="6321161304201540561">"Hlela isigcawu"</string>
- <string name="insertGroupDescription" msgid="5658512271662210139">"Dala isigcawu"</string>
- <string name="contactDetailAbout" msgid="5430408883907061400">"Mayelana"</string>
- <string name="contactDetailUpdates" msgid="3780588624763446941">"Izibuyekezo"</string>
<string name="searchHint" msgid="8482945356247760701">"Sesha othintana nabo"</string>
- <string name="menu_viewContact" msgid="2795575601596468581">"Buka othintana naye"</string>
<string name="menu_addStar" msgid="2908478235715404876">"Engeza ezintandokazini"</string>
<string name="menu_removeStar" msgid="5844227078364227030">"Susa ezintandokazini"</string>
<string name="description_action_menu_remove_star" msgid="4699640108012265178">"Kukhishiwe kusuka kuzintandokazi"</string>
@@ -49,40 +35,56 @@
<string name="menu_editContact" msgid="9042415603857662633">"Hlela"</string>
<string name="menu_deleteContact" msgid="6788644058868189393">"Susa"</string>
<string name="menu_change_photo" msgid="7769177631511496210">"Guqula isithombe"</string>
- <string name="menu_create_contact_shortcut" msgid="1217971915748509640">"Indawo esikrinini sekhaya"</string>
- <string name="menu_call" msgid="3992595586042260618">"Shayela othintana naye"</string>
- <string name="menu_sendSMS" msgid="5535886767547006515">"Bhalela othintana naye"</string>
+ <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Dala isinqamuleli"</string>
<string name="menu_splitAggregate" msgid="2627252205317945563">"Susa ukuxhumanisa"</string>
- <string name="menu_editGroup" msgid="5062005185370983720">"Hlela"</string>
- <string name="menu_deleteGroup" msgid="3486380004411482874">"Susa"</string>
- <string name="menu_new_contact_action_bar" msgid="7263362129442119188">"Faka oxhumana naye"</string>
- <string name="menu_new_group_action_bar" msgid="3520232877587377175">"Engeza iqembu"</string>
+ <string name="menu_editGroup" msgid="6696843438454341063">"Susa oxhumana nabo"</string>
+ <string name="menu_renameGroup" msgid="7169512355179757182">"Qamba kabusha ilebula"</string>
+ <string name="menu_deleteGroup" msgid="1126469629233412249">"Susa ilebula"</string>
+ <string name="menu_addToGroup" msgid="3267409983764370041">"Engeza oxhumana naye"</string>
+ <string name="menu_selectForGroup" msgid="3999234528229376098">"Khetha oxhumana nabo"</string>
+ <string name="menu_addContactsToGroup" msgid="655196688840626483">"Engeza oxhumana nabo"</string>
+ <string name="menu_removeFromGroup" msgid="6720354305399961978">"Susa kusuka kulebula"</string>
+ <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Dala ilebula"</string>
<string name="splitConfirmation" msgid="7342030840130187290">"Susa ukuxhumanisa lo oxhumana naye umfake koxhumana nabo abaningi?"</string>
<string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Susa ukuxhumanisa"</string>
<string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ungathanda ukulondoloza ushintsho osuvele ulwenzile uphinde ususe ukuxhumana kwalo oxhumana naye kwiningi loxhumana nabo?"</string>
<string name="splitConfirmationWithPendingChanges_positive_button" msgid="9073444264887244032">"Londoloza uphinde ususe ukuxhumanisa"</string>
<string name="joinConfirmation" msgid="8262614843581924365">"Ungathanda ukulondoloza ushintsho osuvele ulwenzile uphinde uxhumane noxhumana naye okhethiwe?"</string>
<string name="joinConfirmation_positive_button" msgid="4573092849769149516">"Londoloza uphinde uxhumanise"</string>
+ <string name="contacts_linking_progress_bar" msgid="2846494347384549277">"Iyaxhuma"</string>
+ <string name="contacts_unlinking_progress_bar" msgid="5989310198163726929">"Isusa ukuxhumanisa"</string>
<string name="menu_joinAggregate" msgid="3599512127797513606">"Isixhumanisi"</string>
+ <string name="menu_linkedContacts" msgid="400444389718855621">"Buka oxhumana nabo abaxhunyiwe"</string>
<string name="menu_save" msgid="1727844363591825909">"Londoloza"</string>
<string name="titleJoinContactDataWith" msgid="6825255752748313944">"Xhumanisa oxhumana nabo"</string>
<string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Khetha oxhumana naye ofuna ukumxhuma no-<xliff:g id="NAME">%s</xliff:g>:"</string>
- <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Bonakalisa bonke othintana nabo"</string>
<string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Othintana nabo abasikiselwayo"</string>
<string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bonke othintana nabo"</string>
+ <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> uxhunyiwe"</string>
<string name="contactsJoinedMessage" msgid="3343535986195643136">"Oxhumana nabo baxhunyiwe"</string>
+ <string name="contacts_deleted_one_named_toast" msgid="2252551736301363193">"<xliff:g id="NAME">%1$s</xliff:g> kususiwe"</string>
+ <string name="contacts_deleted_two_named_toast" msgid="3642082931473111791">"<xliff:g id="NAME_0">%1$s</xliff:g> no-<xliff:g id="NAME_1">%2$s</xliff:g> basusiwe"</string>
+ <string name="contacts_deleted_many_named_toast" msgid="7731565342428031249">"<xliff:g id="NAME_0">%1$s</xliff:g>, <xliff:g id="NAME_1">%2$s</xliff:g>, <xliff:g id="NAME_2">%3$s</xliff:g>… basusiwe"</string>
<plurals name="contacts_deleted_toast" formatted="false" msgid="1477708624197262295">
<item quantity="one">Oxhumana nabo basusiwe</item>
<item quantity="other">Oxhumana nabo basusiwe</item>
</plurals>
+ <plurals name="contacts_count" formatted="false" msgid="8696793457340503668">
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> oxhumana nabo</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> oxhumana nabo</item>
+ </plurals>
+ <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
+ <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+ </plurals>
+ <string name="title_from_google" msgid="4664084747121207202">"Kusukela ku-Google"</string>
+ <string name="title_from_other_accounts" msgid="8307885412426754288">"Kusuka ku-<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
<string name="menu_set_ring_tone" msgid="8728345772068064946">"Hlela iringithoni"</string>
- <string name="menu_redirect_calls_to_vm" msgid="4181789196416396656">"Wonke amakholi aya kwimeyili yezwi"</string>
- <string name="readOnlyContactWarning" msgid="5526727661978307833">"Oxhumana nabo kusukela kuma-akhawunti wakho wokufunda kuphela abakwazi ukususwa, kodwa bangafihlwa."</string>
- <string name="readOnlyContactWarning_positive_button" msgid="6541862607313811926">"Fihla"</string>
- <string name="readOnlyContactDeleteConfirmation" msgid="8782086424739664753">"Oxhumana naye ozosuswa unemininingwane kusukela kuma-akhawunti amaningi. Imininingwane esuka kuma-akhawunti wokufunda kuphela azofihlwa, ngeke asuswe."</string>
- <string name="batch_link_single_contact_warning" msgid="1346058571502058767">"Udinga okungenani oxhumana nabo ababili abakhethiwe ukuze wenze ukuxhumanisa."</string>
- <string name="batch_link_confirmation" msgid="5845237114309114908">"Xhumanisa oxhumana nabo abakhethiwe?"</string>
- <string name="batch_link_confirmation_positive_button" msgid="5018899675473363525">"Isixhumanisi"</string>
+ <string name="menu_redirect_calls_to_vm" msgid="83331924006712755">"Faka umzila wevoyisimeyili"</string>
+ <string name="menu_unredirect_calls_to_vm" msgid="8725542534701811737">"Susa umzila wevoyisimeyili"</string>
+ <string name="readOnlyContactWarning" msgid="7514475664695089411">"Lo oxhumana naye ufundeka kuphela. Angasuswa, kodwa akakwazi ukufihlwa."</string>
+ <string name="readOnlyContactWarning_positive_button" msgid="8914797212167683673">"Fihla oxhumana naye"</string>
+ <string name="readOnlyContactDeleteConfirmation" msgid="4717023505914239809">"Ama-akhawunti okufunda kuphela azofihlwa, ngeke asulwe."</string>
<string name="single_delete_confirmation" msgid="3106905986948679720">"Susa lo oxhumana naye?"</string>
<string name="batch_delete_confirmation" msgid="3984346060324014108">"Susa oxhumana nabo abakhethiwe?"</string>
<string name="batch_delete_read_only_contact_confirmation" msgid="8411117621035639964">"Oxhumana nabo kusukela kuma-akhawunti wakho wokufunda kuphela abakwazi ukususwa, kodwa bangafihlwa."</string>
@@ -90,177 +92,124 @@
<string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ukususa lo oxhumana naye kuzosusa iminingwane kusukela kuma-akhawunti amaningi."</string>
<string name="deleteConfirmation" msgid="3512271779086656043">"Susa lo oxhumana naye?"</string>
<string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Susa"</string>
- <string name="menu_discard" msgid="6854657936970228164">"Lahla izinguquko"</string>
<string name="invalidContactMessage" msgid="8215051456181842274">"Oxhumana naye akekho."</string>
<string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Oxhumana naye ungezwe kusikrini sasekhaya."</string>
<string name="createContactShortcutSuccessful" msgid="953651153238790069">"U-<xliff:g id="NAME">%s</xliff:g> ungezwe kusikrini sasekhaya."</string>
- <string name="pickerNewContactHeader" msgid="7750705279843568147">"Dala othintana naye omusha"</string>
- <string name="pickerNewContactText" msgid="6166997164401048211">"Dala othintana naye omusha"</string>
- <string-array name="otherLabels">
- <item msgid="8287841928119937597">"Inhlangano"</item>
- <item msgid="7196592230748086755">"Yazi"</item>
- </string-array>
- <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Azikho izithombe ezitholakalayo kwithebhulethi."</string>
- <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Azikho izithombe ezitholakalayo kwifoni."</string>
+ <string name="photoPickerNotFoundText" msgid="2052542573853433204">"Azikho izithombe ezitholakala kudivayisi."</string>
<string name="attach_photo_dialog_title" msgid="5599827035558557169">"Isithombe sothintana naye"</string>
<string name="customLabelPickerTitle" msgid="1081475101983255212">"Igama lelebula efiswayo"</string>
- <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Thumela ngokuqondile amakholi emyalezwini wezwi"</string>
<string name="removePhoto" msgid="4898105274130284565">"Khipha isithombe"</string>
- <string name="noContacts" msgid="4955659076981974652">"Abekho othintana nabo"</string>
- <string name="noGroups" msgid="8614664663561385253">"Awekho amaqembu."</string>
- <string name="noAccounts" msgid="7768267764545265909">"Ukuze wakhe iqembu udinga i-akhawunti"</string>
- <string name="emptyGroup" msgid="7502116218697177370">"Akunabanti kuleli qembu."</string>
- <string name="addPeopleToGroup" msgid="7879585947222263516">"Ukungeza okunye, hlela iqembu."</string>
- <string name="savingContact" msgid="4075751076741924939">"Igcina othintana naye..."</string>
+ <string name="noContacts" msgid="2228592924476426108">"Uhlu lwakho loxhumana nabo alunalutho"</string>
+ <string name="emptyGroup" msgid="5102411903247859575">"Abekho oxhumana nabo abanale lebula"</string>
+ <string name="emptyAccount" msgid="6873962901497975964">"Abekho oxhumana nabo kule akhawunti"</string>
+ <string name="emptyMainList" msgid="2772242747899664460">"Uhlu lwakho loxhumana nabo alunalutho"</string>
+ <string name="contactSavedNamedToast" msgid="895136068894549611">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> kulondoloziwe"</string>
<string name="contactSavedToast" msgid="9171862279493213075">"Oxhumana naye olondoloziwe"</string>
<string name="contactUnlinkedToast" msgid="7122823195786012553">"Oxhumana nabo basuswe ukuxhumana"</string>
- <string name="contactSavedErrorToast" msgid="3207250533172944892">"Yehlulekile ukulondoloza izinguquko zoxhumana nabo."</string>
- <string name="contactUnlinkErrorToast" msgid="2758070702785994171">"Ayikwazanga ukususa isixhumanisi koxhumana naye."</string>
- <string name="contactJoinErrorToast" msgid="3977932531264809035">"Ayikwazanga ukuxhuma oxhumana naye."</string>
- <string name="contactGenericErrorToast" msgid="7774911165341591714">"Iphutha lokulondoloza oxhumana naye."</string>
- <string name="contactPhotoSavedErrorToast" msgid="4079032272022979114">"Ayikwazanga ukulondoloza izinguquko zesithombe sokuxhumana."</string>
- <string name="groupSavedToast" msgid="1168756874239833756">"Isigcawu silondiwe"</string>
- <string name="groupSavedErrorToast" msgid="7984466936615304740">"Yehlulekile ukulana izinguquko zeqembu."</string>
- <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abanezinombolo zefoni</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abanezinombolo zefoni</item>
- </plurals>
- <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Abekho othintana nabo abanezinombolo zocingo"</string>
- <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
- </plurals>
+ <string name="contactSavedErrorToast" msgid="4827033473908688031">"Ayikwazanga ukulondoloza ushintsho loxhumana naye"</string>
+ <string name="contactUnlinkErrorToast" msgid="2706297508166952431">"Ayikwazanga ukususa ukuxhumanisa oxhumana naye"</string>
+ <string name="contactJoinErrorToast" msgid="5735129234573327701">"Ayikwazanga ukuxhumanisa oxhumana naye"</string>
+ <string name="contactGenericErrorToast" msgid="3885457515665783976">"Iphutha lokulondoloza oxhumana naye"</string>
+ <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ayikwazanga ukulondoloza ushintsho lwesithombe loxhumana naye"</string>
+ <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yehlulekile ukulayisha ilebula"</string>
+ <string name="groupDeletedToast" msgid="520896687873262027">"Ilebula isusiwe"</string>
+ <string name="groupCreatedToast" msgid="1924195126172834870">"Ilebula idaliwe"</string>
+ <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ayikwazi ukudala ilebuli"</string>
+ <string name="groupUpdatedToast" msgid="3667977658676267687">"Ilebula libuyekeziwe"</string>
+ <string name="groupMembersRemovedToast" msgid="3510563559799376603">"Kususiwe kulebula"</string>
+ <string name="groupMembersAddedToast" msgid="4824834898718972768">"Kungeziwe kulebuli"</string>
+ <string name="groupSavedErrorToast" msgid="2355891714292740162">"Ayikwazanga ukulondoloza ushintsho lwelebula"</string>
+ <string name="groupExistsErrorMessage" msgid="5196811283836946189">"Leyo lebuli isivele ikhona"</string>
+ <string name="groupSomeContactsNoEmailsToast" msgid="8211161470235548732">"Abanye oxhumana nabo abanawo amakheli e-imeyili."</string>
+ <string name="groupSomeContactsNoPhonesToast" msgid="5530760834827530509">"Abanye oxhumana nabo abanazo izinombolo zefoni."</string>
+ <string name="menu_sendEmailOption" msgid="5978319931321657780">"Thumela i-imeyli"</string>
+ <string name="menu_sendMessageOption" msgid="8850168125274916426">"Thumela umlayezo"</string>
+ <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Khetha Oxhumana Nabo"</string>
+ <string name="send_to_selection" msgid="2251339182881603540">"Thumela"</string>
<string name="listFoundAllContactsZero" msgid="922980883593159444">"Abekho oxhumana nabo"</string>
- <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> abatholakele</item>
- </plurals>
- <string name="all_contacts_tab_label" msgid="5948889261993124839">"Konke"</string>
- <string name="favorites_tab_label" msgid="1524869648904016414">"Izintandokazi"</string>
- <string name="callBack" msgid="5498224409038809224">"Phinda ushayele"</string>
- <string name="callAgain" msgid="3197312117049874778">"Shayela futhi"</string>
- <string name="returnCall" msgid="8171961914203617813">"Buyisela ikholi"</string>
<string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Faka \"<xliff:g id="EMAIL">%s</xliff:g>\" kothintana nabo?"</string>
- <string name="description_contact_photo" msgid="3387458082667894062">"isithombe sothintana naye"</string>
- <string name="description_plus_button" msgid="515164827856229880">"kuhlanganise"</string>
- <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> kothintana nabo abangu-<xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
<string name="search_settings_description" msgid="2675223022992445813">"Amagama othintana nabo"</string>
- <string name="quickcontact_missing_app" msgid="358168575340921552">"Ayikho uhlelo lokusebenza etholakele ukubhekana nalengxenye."</string>
<string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Chofoza ukuze ubuyele kusikrini sangaphambilini"</string>
<string name="quickcontact_add_phone_number" msgid="731665835910658965">"Engeza inombolo yefoni"</string>
<string name="quickcontact_add_email" msgid="739298028384348482">"Engeza i-imeyili"</string>
<string name="missing_app" msgid="1466111003546611387">"Alukho uhlelo lokusebenza olutholakalele ukuphatha lesi senzo."</string>
<string name="menu_share" msgid="943789700636542260">"Yabelana"</string>
<string name="menu_add_contact" msgid="3198704337220892684">"Engeza koxhumana nabo"</string>
- <string name="share_via" msgid="563121028023030093">"Abelana nothintana naye nge"</string>
- <string name="dialog_new_group_account" msgid="2318032089273496830">"Yenza isigcawu ngaphansi kwe-akhawunti"</string>
+ <string name="menu_add_contacts" msgid="4465646512002163011">"Yengeza"</string>
+ <plurals name="title_share_via" formatted="false" msgid="5886112726191455415">
+ <item quantity="one">Yabelana oxhumana nabo nge-</item>
+ <item quantity="other">Yabelana oxhumana nabo nge-</item>
+ </plurals>
+ <string name="dialog_new_group_account" msgid="3451312333591556651">"Khetha i-akhawunti"</string>
+ <string name="group_name_dialog_insert_title" msgid="2668452090427027941">"Dala ilebula"</string>
+ <string name="group_name_dialog_update_title" msgid="6328021162869677383">"Qamba kabusha ilebula"</string>
+ <string name="group_name_dialog_hint" msgid="7624523157537700160">"Igama lelebula"</string>
+ <string name="label_name_dialog_hint" msgid="1276051790427638142">"Igama lelebula"</string>
<string name="audio_chat" msgid="2535716629358298691">"Ingxoxo yezw"</string>
<string name="video_chat" msgid="1872255818640336072">"Ingxoxo yevidiyo"</string>
- <string name="connections" msgid="8098440723172028350">"Oxhumana nabo"</string>
- <string name="add_connection_button" msgid="4861308615789601727">"Yengeza oxhumana nabo"</string>
- <string name="recent" msgid="2659189233141493004">"Okwakamuva"</string>
- <string name="recent_updates" msgid="4267258535615860710">"Izibuyekezo zamanje"</string>
<string name="account_type_format" msgid="718948015590343010">"Othintana naye nge-<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
<string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> i-akhawunti"</string>
- <!-- no translation found for from_account_format (4469138575127580203) -->
- <skip />
- <string name="contact_read_only" msgid="7421346527289472273">"Ayihleleki kulensiza"</string>
- <string name="group_read_only" msgid="1061762906115697637">"Ayihleleki kuledivayisi"</string>
<string name="take_photo" msgid="7496128293167402354">"Thatha isithombe"</string>
<string name="take_new_photo" msgid="7341354729436576304">"Thatha isithombe esisha"</string>
<string name="pick_photo" msgid="2129509985223564942">"Khetha isithombe"</string>
<string name="pick_new_photo" msgid="9122450996263688237">"Khetha isithombe"</string>
- <string name="upgrade_in_progress" msgid="474511436863451061">"Uhlu lothintana naye luyabuyekezwa."</string>
<string name="search_results_searching" msgid="3984833028938569930">"Iyasesha..."</string>
- <string name="menu_display_selected" msgid="6470001164297969034">"Khetha okukhethiwe"</string>
- <string name="menu_display_all" msgid="8887488642609786198">"Bonisa konke"</string>
- <string name="menu_select_all" msgid="621719255150713545">"Khetha konke"</string>
- <string name="menu_select_none" msgid="7093222469852132345">"Ungakhethi konke"</string>
- <string name="add_new_entry_for_section" msgid="5223080690667565044">"Faka okusha"</string>
- <string name="add_organization" msgid="7311893231158291197">"Ngeza inhlangano"</string>
<string name="event_edit_field_hint_text" msgid="5794424930242630477">"Idethi"</string>
- <string name="group_edit_field_hint_text" msgid="3966441850870457808">"Igama leqembu"</string>
- <string name="change_photo" msgid="8530597935483526383">"Guqula"</string>
- <string name="primary_photo" msgid="8517942231868516999">"Isithombe esiyinhloko"</string>
- <string name="description_star" msgid="2605854427360036550">"intandokazi"</string>
- <string name="edit_contact" msgid="7529281274005689512">"Hlela othintana naye"</string>
- <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Xhuma oxhumana naye wamanje noxhumana naye okhethiwe?"</string>
+ <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ilebula"</string>
+ <string name="cancel_button_content_description" msgid="1288652456274531846">"Khansela"</string>
+ <string name="back_arrow_content_description" msgid="4355362760545735065">"Phindela emuva"</string>
+ <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"vala"</string>
<string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Shintshela ekuhleleni othintana naye okhethiwe? Ulwazi olufakile kuze kube manje luzokopishwa."</string>
- <string name="menu_copyContact" msgid="1573960845106822639">"Kopisha kwengithintana nabo"</string>
- <string name="add_to_my_contacts" msgid="1068274916793627723">"Faka Kothintana Nabo"</string>
<string name="contact_directory_description" msgid="683398073603909119">"Uhla lwemibhalo <xliff:g id="TYPE">%1$s</xliff:g>"</string>
- <string name="list_filter_custom" msgid="8910173055702057002">"Ngokwezifiso"</string>
<string name="activity_title_settings" msgid="5464130076132770781">"Izilungiselelo"</string>
<string name="menu_settings" msgid="377929915873428211">"Izilungiselelo"</string>
<string name="menu_help" msgid="1680178646764069976">"Usizo nempendulo"</string>
- <string name="preference_displayOptions" msgid="1341720270148252393">"Izinketho zokubonisa"</string>
<string name="organization_company_and_title" msgid="6718207751363732025">"<xliff:g id="COMPANY_0">%2$s</xliff:g>, <xliff:g id="COMPANY_1">%1$s</xliff:g>"</string>
<string name="non_phone_caption" msgid="1541655052330027380">"Inombolo yefoni"</string>
<string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Yengeza kothintana nabo"</string>
- <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Faka koxhumana nabo"</string>
<string name="non_phone_close" msgid="7608506439725515667">"Vala"</string>
- <string name="widget_name_and_phonetic" msgid="8739586586600099979">"<xliff:g id="DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="PHONETIC_NAME">%2$s</xliff:g>)"</string>
<string name="date_year_toggle" msgid="7122002148518724139">"Faka unyaka"</string>
- <string name="social_widget_label" msgid="6378905543028924592">"Othintana nabo"</string>
- <string name="social_widget_loading" msgid="5327336597364074608">"Iyalayisha…"</string>
- <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Dala othintana naye omusha"</string>
<string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Engeza i-akhawunti"</string>
- <string name="contacts_unavailable_import_contacts" msgid="4957393255392437529">"Ngenisa othintana nabo"</string>
- <string name="create_group_dialog_title" msgid="6874527142828424475">"Dala iqembu elisha"</string>
- <string name="create_group_item_label" msgid="4411981763169654825">"Dala iqembu elisha"</string>
- <plurals name="num_groups_in_account" formatted="false" msgid="6189297639209663469">
- <item quantity="one"><xliff:g id="COUNT">%0$d</xliff:g> amaqembu</item>
- <item quantity="other"><xliff:g id="COUNT">%0$d</xliff:g> amaqembu</item>
- </plurals>
- <string name="delete_group_dialog_message" msgid="7586856514337560529">"Susa leliqembu \"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (oxhumana nabo ngeke basuseke.)"</string>
- <plurals name="num_contacts_in_group" formatted="false" msgid="5520734553286350341">
- <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> abantu kusuka ku-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> abantu kusuka ku-<xliff:g id="ACCOUNT_TYPE_3">%2$s</xliff:g></item>
- </plurals>
- <plurals name="group_list_num_contacts_in_group" formatted="false" msgid="8240460423614369023">
- <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> abantu</item>
- <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> abantu</item>
- </plurals>
+ <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Ngenisa"</string>
+ <string name="create_group_item_label" msgid="3263064599743742865">"Dala amasha…"</string>
+ <string name="delete_group_dialog_message" msgid="335713829185261371">"Susa ilebula engu-\"<xliff:g id="GROUP_LABEL">%1$s</xliff:g>\"? (Oxhumana nabo ngokwabo ngeke baze basuswe.)"</string>
<string name="toast_join_with_empty_contact" msgid="1215465657839085613">"Bhala igama lomuntu oxhumana naye ngaphambili kokujoyina nomunye."</string>
<string name="copy_text" msgid="3257145021583508761">"Kopisha ku-clipboard"</string>
<string name="set_default" msgid="4417505153468300351">"Hlela okuzenzakalelayo"</string>
<string name="clear_default" msgid="7193185801596678067">"Sula okuzenzakalelayo"</string>
<string name="toast_text_copied" msgid="5143776250008541719">"Umbhalo okopishiwe"</string>
- <string name="cancel_confirmation_dialog_message" msgid="5058226498605989285">"Lahla izinguquko zakho bese uyeke ukuhlela?"</string>
+ <string name="cancel_confirmation_dialog_message" msgid="9008214737653278989">"Lahla ushintsho?"</string>
<string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Lahla"</string>
- <string name="cancel_confirmation_dialog_keep_editing_button" msgid="7737724111972855348">"Qhubeka uhlela"</string>
- <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
- <string name="profile_display_name" msgid="4127389543625918771">"Misa iphrofayli yami"</string>
- <string name="enter_contact_name" msgid="1738391320566349924">"Thayipha igama lomuntu"</string>
- <string name="group_name_hint" msgid="238359485263401293">"Igama leqemnbu"</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Khansela"</string>
+ <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Lahla ukwenza ngezifiso?"</string>
+ <string name="enter_contact_name" msgid="4594274696120278368">"Sesha oxhumana nabo"</string>
+ <string name="title_edit_group" msgid="8602752287270586734">"Susa oxhumana nabo"</string>
<string name="local_profile_title" msgid="2021416826991393684">"Imininingwane yami yakuleli"</string>
<string name="external_profile_title" msgid="8034998767621359438">"Imininingwane <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> yami"</string>
- <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ibonisa bonke abathintwayo"</string>
- <string name="generic_no_account_prompt" msgid="7218827704367325460">"Gcina oxhumana nabo bephephile noma ngabe ulahlekelwa yiselula yakho: lungelanisa nensiza yokusebenzisa i-inthanethi."</string>
- <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Yengeza i-akhawunti"</string>
- <string name="contact_editor_prompt_zero_accounts" msgid="1785345895691886499">"Umxhumani wakho omusha akalondolozeki. Yngeza i-akhawunti ekwazi ukulondoloza abaxhumani emoyeni?"</string>
+ <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Thatha iminithi ukungeza i-akhawunti ezokwenza isipele oxhumana nabo ku-Google."</string>
<string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Oxhumana nabo bazolondolozwa ku-<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
<string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Khetha i-akhawunti ezenzakalelayo yoxhumana nabo abasha:"</string>
- <string name="contact_editor_title_new_contact" msgid="7192223018128934940">"Engeza oxhumana naye omusha"</string>
+ <string name="contact_editor_title_new_contact" msgid="3042788718983070111">"Dala othintana naye omusha"</string>
<string name="contact_editor_title_existing_contact" msgid="4898475703683187798">"Hlela oxhumana naye"</string>
- <string name="keep_local" msgid="1258761699192993322">"Gcina kuseduze"</string>
+ <string name="contact_editor_title_read_only_contact" msgid="2443496574528842237">"Buka kuphela"</string>
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title" msgid="4186699385645902152">"Khetha oxhumana naye ongamhlela"</string>
+ <string name="contact_editor_pick_linked_contact_dialog_title" msgid="4618465940423857694">"Oxhumana nabo abaxhunyiwe"</string>
+ <string name="contact_editor_add_linked_contact" msgid="426142748048816297">"Engeza"</string>
+ <string name="contact_editor_unlink_contacts" msgid="4525214336177236653">"Susa ukuxhumanisa"</string>
<string name="add_account" msgid="8201790677994503186">"Engeza i-akhawunti"</string>
<string name="add_new_account" msgid="5748627740680940264">"Yengeza i-akhawunti enthsha"</string>
<string name="menu_export_database" msgid="2659719297530170820">"Khipha amafayela emininingo egciniwe"</string>
- <string name="action_menu_add_new_contact_button" msgid="3180222523336380017">"engeza oxhumana naye omusha"</string>
+ <string name="action_menu_add_new_contact_button" msgid="5506832825256203208">"Dala othintana naye omusha"</string>
<string name="expanding_entry_card_view_see_more" msgid="3779194067124758079">"Buka okuningi"</string>
<string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Buka okuncane"</string>
- <string name="expanding_entry_card_view_see_all" msgid="3845258737661412627">"Buka konke"</string>
<string name="recent_card_title" msgid="8982782042698001695">"Okwakamuva"</string>
<string name="about_card_title" msgid="2920942314212825637">"Mayelana"</string>
- <string name="send_message" msgid="8938418965550543196">"Thumela umlayezo"</string>
- <string name="toast_making_personal_copy" msgid="6137651078366797938">"Idala ikhophi yomuntu siqu..."</string>
- <string name="yesterday" msgid="6840858548955018569">"Izolo"</string>
+ <string name="toast_making_personal_copy" msgid="288549957278065542">"Idala ikhophi yomuntu siqu"</string>
<string name="tomorrow" msgid="6241969467795308581">"Kusasa"</string>
<string name="today" msgid="8041090779381781781">"Namhlanje"</string>
<string name="today_at_time_fmt" msgid="605665249491030460">"Namhlanje ngo-<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
<string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Kusasa ngo-<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
- <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g>, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+ <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
<string name="untitled_event" msgid="3484859385405939366">"(Umcimbi ongenasihloko)"</string>
<string name="date_time_set" msgid="4761419824439606690">"Setha"</string>
<string name="header_im_entry" msgid="3581720979640225615">"I-IM"</string>
@@ -270,62 +219,314 @@
<string name="header_website_entry" msgid="1411467850000824745">"Iwebhusayithi"</string>
<string name="header_event_entry" msgid="6738250422744401460">"Umcimbi"</string>
<string name="header_relation_entry" msgid="1520292958088146460">"Ubudlelwano"</string>
- <string name="header_account_entry" msgid="2684318506427891827">"I-Akhawunti"</string>
<string name="header_name_entry" msgid="1592791008096288306">"Igama"</string>
<string name="header_email_entry" msgid="8666093061171624478">"I-imeyili"</string>
<string name="header_phone_entry" msgid="8450980572274173570">"Ifoni"</string>
- <string name="header_photo_entry" msgid="4438023151411853238">"Isithombe"</string>
- <string name="content_description_expand_editor" msgid="1111381475901897470">"Chofoza ukuze unwebe isihleli soxhumana naye."</string>
- <string name="content_description_collapse_editor" msgid="7598061318022977825">"Chofoza ukuze ugoqe isihleli soxhumana naye."</string>
<string name="content_description_directions" msgid="2686791825798189335">"izikhombisi-ndlela eziya endaweni"</string>
- <string name="content_description_recent_sms" msgid="1666389577263317445">"i-sms yakamuva. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. chofoza ukuze uphendule"</string>
+ <string name="content_description_recent_sms" msgid="1666389577263317445">"i-sms yakamuva. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. chofoza ukuze uphendule"</string>
<string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"angenayo"</string>
<string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"aphumayo"</string>
<string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"akuphuthele"</string>
- <string name="content_description_recent_call" msgid="5183800406316723676">"ikholi yakamuva. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. chofoza ukuze uphinde ushaye"</string>
+ <string name="content_description_recent_call" msgid="5183800406316723676">"ikholi yakamuva. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. chofoza ukuze uphinde ushaye"</string>
<string name="message_from_you_prefix" msgid="7180706529908434482">"Wena: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
- <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"I-Hangouts isebenza kangcono uma ufaka isikhombi somuntu se-Hangouts kunkambu ye-imeyili noma kunkambu yefoni."</string>
- <string name="compact_editor_more_fields" msgid="5987638193568699600">"Izinkambu eziningi"</string>
- <string name="compact_editor_change_photo_content_description" msgid="5495487714301211540">"Guqula isithombe"</string>
- <string name="compact_editor_failed_to_load" msgid="4557094426388044958">"Yehlulekile ukuvula umhleli."</string>
- <string name="compact_editor_account_selector_title" msgid="5119592614151786601">"Ukulondoloza ku-"</string>
- <string name="compact_editor_account_selector_description" msgid="2127184829759350507">"Okwamanje ilondoloza ku-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Thepha kabili ukuze ukhethe i-akhawunti ehlukile."</string>
- <plurals name="compact_editor_linked_contacts_selector_title" formatted="false" msgid="9156207930915878316">
- <item quantity="one">Oxhumana nabo abaxhunyiwe (<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">Oxhumana nabo abaxhunyiwe (<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe"</string>
- <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
+ <string name="editor_more_fields" msgid="3630987771304393421">"Izinkambu eziningi"</string>
+ <string name="editor_change_photo_content_description" msgid="820879708069864340">"Shintsha isithombe soxhumana naye"</string>
+ <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Engeza isithombe soxhumana naye"</string>
+ <string name="editor_contact_photo_content_description" msgid="8571975622926162369">"Isithombe sothintana naye"</string>
+ <string name="editor_failed_to_load" msgid="1623639078580475818">"Yehlulekile ukuvula umhleli."</string>
+ <string name="editor_account_selector_title" msgid="4426337993307015833">"Ukulondoloza ku-"</string>
+ <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ulwazi loxhumana naye kusuka ku-<xliff:g id="ACCOUNT">%s</xliff:g> aluhleleki"</string>
<string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"XHUMANISA AMA-AKHAWUNTI"</string>
<string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KHANSELA"</string>
- <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> Izimpinda ezingenzeka</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Izimpinda ezingenzeka</item>
- </plurals>
- <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe</item>
- </plurals>
- <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
- <item quantity="one">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
- </plurals>
- <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
<string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Lo oxhumana naye"</string>
<string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Izimpinda ezingenzeka"</string>
<string name="suggestion_card_help_message" msgid="4474061044387181093">"Laba oxhumana nabo kungaba umuntu ofanayo. Ungabaxhumanisa ndawonye njengoxhumana naye oyedwa."</string>
- <string name="compact_editor_linked_contacts_title" msgid="4417919183651782674">"Oxhumana nabo abaxhunyiwe"</string>
- <string name="from_your_accounts" msgid="1746293107836889912">"Kusuka kuma-akhawunti wakho"</string>
- <string name="take_a_photo_button" msgid="6268693854069113488">"Thatha isithombe"</string>
- <string name="all_photos_button" msgid="1943122929420111351">"Zonke izithombe"</string>
- <string name="photo_picker_title" msgid="5272832995550042801">"Khetha isithombe"</string>
- <string name="contact_from_account_name" msgid="2078526819634079406">"Kusuka ku-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
- <string name="editor_delete_view_description" msgid="8583095381562991959">"Susa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+ <string name="editor_delete_view_description" msgid="8583095381562991959">"Susa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
<string name="editor_delete_view_description_short" msgid="7335518371270844912">"Susa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
- <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Isithombe kusuka ku-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>asimakiwe"</string>
- <string name="photo_view_description_checked" msgid="3906597168607472795">"Isithombe kusuka ku-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>simakiwe"</string>
- <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Isithombe esivela ku-akhawunti engaziwa asithikhiwe"</string>
- <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Isithombe esivela ku-akhawunti engaziwa sithikhiwe"</string>
- <string name="locale_change_in_progress" msgid="1124266507671178413">"Uhlu lothintana naye luyabuyekezwa ukubonisa ushintsho lolimi.\n\nSicela ulinde..."</string>
+ <string name="menu_assistant" msgid="5760693735722052454">"Iziphakamiso"</string>
+ <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Okusha"</string>
+ <string name="navigation_drawer_open" msgid="1126498472143250642">"Vula ikhabethe lokuzulazula"</string>
+ <string name="navigation_drawer_close" msgid="4137416137011817930">"Vala ikhabethe lokuzulazula"</string>
+ <string name="navigation_drawer_label" msgid="4154758025620107419">"<xliff:g id="LABEL_NAME">%s</xliff:g> ilebuli"</string>
+ <string name="menu_title_groups" msgid="8356921831150278868">"Amalebula"</string>
+ <string name="menu_title_filters" msgid="8210922220185114527">"Ama-Akhawunti"</string>
+ <string name="permission_explanation_header" msgid="5739405825039695327">"Bona umlando wakho ndawonye"</string>
+ <string name="permission_explanation_subheader_calendar_and_SMS" msgid="5411144298889835768">"Imicimbi nemilayezo"</string>
+ <string name="permission_explanation_subheader_calendar" msgid="8785323496211704613">"Imicimbi"</string>
+ <string name="permission_explanation_subheader_SMS" msgid="1904552086449525567">"Imilayezo"</string>
+ <string name="hamburger_feature_highlight_header" msgid="5762679188565585072">"Iziphakamiso"</string>
+ <string name="hamburger_feature_highlight_body" msgid="4403398269286898733">"Gcina oxhumana nabo bahleliwe futhi basebenziseka"</string>
+ <string name="undo" msgid="1425165101664071422">"Hlehlisa"</string>
+ <string name="call_custom" msgid="6385303130912713318">"Shayela ku-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_home" msgid="1990519474420545392">"Shayela ekhaya"</string>
+ <string name="call_mobile" msgid="7502236805487609178">"Shayela ifoni"</string>
+ <string name="call_work" msgid="5328785911463744028">"Shayela emsebenzini"</string>
+ <string name="call_fax_work" msgid="7467763592359059243">"Shayela ifeksi yasemsebenzini"</string>
+ <string name="call_fax_home" msgid="8342175628887571876">"Shayela ifeksi yasekhaya"</string>
+ <string name="call_pager" msgid="9003902812293983281">"Shayela isicingo"</string>
+ <string name="call_other" msgid="8563753966926932052">"Shayela"</string>
+ <string name="call_callback" msgid="1910165691349426858">"Shayela ukuphinda ushaye"</string>
+ <string name="call_car" msgid="3280537320306436445">"Shayela imoto"</string>
+ <string name="call_company_main" msgid="6105120947138711257">"Shayela isisekelo senkampani"</string>
+ <string name="call_isdn" msgid="1541590690193403411">"Shayela i-ISDN"</string>
+ <string name="call_main" msgid="6082900571803441339">"Shayela isisekelo"</string>
+ <string name="call_other_fax" msgid="5745314124619636674">"Shayela ifeksi"</string>
+ <string name="call_radio" msgid="8296755876398357063">"Shayela umsakazo"</string>
+ <string name="call_telex" msgid="2223170774548648114">"Shayela i-telex"</string>
+ <string name="call_tty_tdd" msgid="8951266948204379604">"Shayela i-TTY/TDD"</string>
+ <string name="call_work_mobile" msgid="8707874281430105394">"Shayela ifoni yasemsebenzini"</string>
+ <string name="call_work_pager" msgid="3419348514157949008">"Shayela isicingo sasemsebenzini"</string>
+ <string name="call_assistant" msgid="670941612175068337">"Shayela ku-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="call_mms" msgid="6274041545876221437">"Shayela i-MMS"</string>
+ <string name="call_by_shortcut" msgid="2566802538698913124">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Ikholi)"</string>
+ <string name="sms_custom" msgid="415060214233647603">"Thumela umbhalo ku-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="sms_home" msgid="7524332261493162995">"Ikhaya lombhalo"</string>
+ <string name="sms_mobile" msgid="5200107250451030769">"Umbhalo wefoni"</string>
+ <string name="sms_work" msgid="2269624156655267740">"Bhalela emsebenzini"</string>
+ <string name="sms_fax_work" msgid="8028189067816907075">"Bhalela ifeksi yasemsebenzini"</string>
+ <string name="sms_fax_home" msgid="9204042076306809634">"Bhalela ifeksi yasekhaya"</string>
+ <string name="sms_pager" msgid="7730404569637015192">"Bhalela isicingo"</string>
+ <string name="sms_other" msgid="806127844607642331">"Umbhalo"</string>
+ <string name="sms_callback" msgid="5004824430094288752">"Bhalela ukuphinda ukushayela"</string>
+ <string name="sms_car" msgid="7444227058437359641">"Bhalela imoto"</string>
+ <string name="sms_company_main" msgid="118970873419678087">"Bhalela isisekelo senkampani"</string>
+ <string name="sms_isdn" msgid="8153785037515047845">"Bhalela i-ISDN"</string>
+ <string name="sms_main" msgid="8621625784504541679">"Bhalela isisekelo"</string>
+ <string name="sms_other_fax" msgid="3888842199855843152">"Ifeksi yombhalo"</string>
+ <string name="sms_radio" msgid="3329166673433967820">"Bhalela umsakazo"</string>
+ <string name="sms_telex" msgid="9034802430065267848">"Bhalela i-telex"</string>
+ <string name="sms_tty_tdd" msgid="6782284969132531532">"Bhalela i-TTY/TDD"</string>
+ <string name="sms_work_mobile" msgid="2459939960512702560">"Bhalela ifoni yasemsebenzini"</string>
+ <string name="sms_work_pager" msgid="5566924423316960597">"Bhalela isicingo sasemsebenzini"</string>
+ <string name="sms_assistant" msgid="2773424339923116234">"Okubhaliwe<xliff:g id="ASSISTANT">%s</xliff:g>"</string>
+ <string name="sms_mms" msgid="4069352461380762677">"Bhala i-MMS"</string>
+ <string name="sms_by_shortcut" msgid="7741770672976099517">"<xliff:g id="CONTACT_NAME">%s</xliff:g> (Umlayezo)"</string>
+ <string name="description_video_call" msgid="7120921378651700947">"Yenza ikholi yevidiyo"</string>
+ <string name="clearFrequentsConfirmation_title" msgid="766292372438450432">"Sula oxhumana nabo njalo?"</string>
+ <string name="clearFrequentsConfirmation" msgid="2270554975938265734">"Uzosula uhlu loxhumana nabo kakhulu kuzinhelo zokusebenza zokuxhumana noma zefoni, futhi uphoqelele izinhlelo zokusebenza ze-imeyili ukufunda izintandokazi zakho zekheli kusuka ekuqaleni."</string>
+ <string name="clearFrequentsProgress_title" msgid="5157001637482794212">"Isula oxhumana nabo njalo…"</string>
+ <string name="status_available" msgid="5586870015822828392">"Yatholakala"</string>
+ <string name="status_away" msgid="1838861100379804730">"Akekho"</string>
+ <string name="status_busy" msgid="9147992455450257136">"Matasa"</string>
+ <string name="local_invisible_directory" msgid="6046691709127661065">"Okunye"</string>
+ <string name="directory_search_label" msgid="1887759056597975053">"Uhla lwemibhalo"</string>
+ <string name="directory_search_label_work" msgid="8618292129829443176">"Uhla lwemibhalo lomsebenzi"</string>
+ <string name="local_search_label" msgid="2551177578246113614">"Bonke oxhumana nabo"</string>
+ <string name="description_quick_contact_for" msgid="6737516415168327789">"Oxhumene naye ngokushesha ku <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="missing_name" msgid="8745511583852904385">"(alikho igama)"</string>
+ <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Abathintwa njalo"</string>
+ <string name="list_filter_phones" msgid="735313795643493365">"Bonke othintana nabo kanye nezinombolo zabo zocingo"</string>
+ <string name="list_filter_phones_work" msgid="1470173699551475015">"Oxhumana nabo bephrofayela yomsebenzi"</string>
+ <string name="view_updates_from_group" msgid="1782685984905600034">"Buka Okwenziwe Kabusha"</string>
+ <string name="account_phone" msgid="7128032778471187553">"Idivayisi"</string>
+ <string name="account_sim" msgid="6519016427905087952">"I-SIM"</string>
+ <string name="nameLabelsGroup" msgid="2034640839640477827">"Igama"</string>
+ <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Igama lokudlala"</string>
+ <string name="name_given" msgid="4280790853455320619">"Igama"</string>
+ <string name="name_family" msgid="7466985689626017037">"Isibongo"</string>
+ <string name="name_prefix" msgid="59756378548779822">"Qamba isiqalo"</string>
+ <string name="name_middle" msgid="8467433655992690326">"Igama"</string>
+ <string name="name_suffix" msgid="3855278445375651441">"Qamba isijobelelo"</string>
+ <string name="name_phonetic" msgid="4259595234312430484">"Igama leFonethikhi"</string>
+ <string name="name_phonetic_given" msgid="8723179018384187631">"Igama lokuqala lefonethiki"</string>
+ <string name="name_phonetic_middle" msgid="8643721493320405200">"Igama lefonethikhi"</string>
+ <string name="name_phonetic_family" msgid="2640133663656011626">"Isibongo sefonethiki"</string>
+ <string name="phoneLabelsGroup" msgid="6468091477851199285">"Ifoni"</string>
+ <string name="emailLabelsGroup" msgid="8389931313045344406">"I-imeyli"</string>
+ <string name="postalLabelsGroup" msgid="3487738141112589324">"Ikheli"</string>
+ <string name="imLabelsGroup" msgid="3898238486262614027">"IM"</string>
+ <string name="organizationLabelsGroup" msgid="2478611760751832035">"Inhlangano"</string>
+ <string name="relationLabelsGroup" msgid="1854373894284572781">"Ubudlelwano"</string>
+ <string name="eventLabelsGroup" msgid="7960408705307831289">"Idethi ekhethekile"</string>
+ <string name="sms" msgid="1756857139634224222">"Umlayezo wombhalo"</string>
+ <string name="postal_address" msgid="8765560217149624536">"Ikheli"</string>
+ <string name="ghostData_company" msgid="5414421120553765775">"Inkampani"</string>
+ <string name="ghostData_title" msgid="7496735200318496110">"Isihloko"</string>
+ <string name="label_notes" msgid="8337354953278341042">"Imibhalo"</string>
+ <string name="label_custom_field" msgid="1994056912242214426">"Ngokwezifiso"</string>
+ <string name="label_sip_address" msgid="7252153678613978127">"I-SIP"</string>
+ <string name="websiteLabelsGroup" msgid="4202998982804009261">"Iwebhusayithi"</string>
+ <string name="groupsLabel" msgid="7000816729542098972">"Amalebula"</string>
+ <string name="email_home" msgid="8573740658148184279">"Ikhaya le-imeyili"</string>
+ <string name="email_mobile" msgid="2042889209787989814">"Imeyla ifoni"</string>
+ <string name="email_work" msgid="2807430017302722689">"Imeyila emsebenzini"</string>
+ <string name="email_other" msgid="3454004077967657109">"I-imeyli"</string>
+ <string name="email_custom" msgid="5536404237099078802">"Thumela i-imeyili ku-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="email" msgid="5668400997660065897">"I-imeyili"</string>
+ <string name="postal_street" msgid="8133143961580058972">"Isitaladi"</string>
+ <string name="postal_city" msgid="6597491300084895548">"Idolobha"</string>
+ <string name="postal_region" msgid="6045263193478437672">"Idolobha"</string>
+ <string name="postal_postcode" msgid="572136414136673751">"Ikhodi ye-ZIP"</string>
+ <string name="postal_country" msgid="7638264508416368690">"Izwe"</string>
+ <string name="map_home" msgid="1243547733423343982">"Vuka ikheli lasekhaya"</string>
+ <string name="map_work" msgid="1360474076921878088">"Buka ikheli lasemsebenzini"</string>
+ <string name="map_other" msgid="3817820803587012641">"Buka ikheli"</string>
+ <string name="map_custom" msgid="8761800628069473526">"Buka ikheli lika-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
+ <string name="chat_aim" msgid="2588492205291249142">"Xoxa usebenzisa i-AIM"</string>
+ <string name="chat_msn" msgid="8041633440091073484">"Xoxa usebenzisa i-Windows Live"</string>
+ <string name="chat_yahoo" msgid="6629211142719943666">"Xoxa usebenzisa i-Yahoo"</string>
+ <string name="chat_skype" msgid="1210045020427480566">"Xoxa usebenzisa i-Skype"</string>
+ <string name="chat_qq" msgid="4294637812847719693">"Xoxa usebenzisa i-QQ"</string>
+ <string name="chat_gtalk" msgid="981575737258117697">"Xoxa usebenzisa i-Google Talk"</string>
+ <string name="chat_icq" msgid="8438405386153745775">"Xoxa usebenzisa i-ICQ"</string>
+ <string name="chat_jabber" msgid="7561444230307829609">"Xoxa usebenzisa i-Jabber"</string>
+ <string name="chat" msgid="9025361898797412245">"Xoxa"</string>
+ <string name="description_minus_button" msgid="6908099247930477551">"susa"</string>
+ <string name="expand_name_fields_description" msgid="6948274252874552543">"Bonisa izinkambu eziningi zegama"</string>
+ <string name="collapse_name_fields_description" msgid="4757877385895561556">"Goqa izinkambu zegama"</string>
+ <string name="expand_phonetic_name_fields_description" msgid="9133052674087187927">"Bonisa izinkambu eziningi zefonotiki"</string>
+ <string name="collapse_phonetic_name_fields_description" msgid="9102249481855019452">"Goqa izinkambu zegama lefonetiki"</string>
+ <string name="expand_fields_description" msgid="8129294181216760037">"Nweba"</string>
+ <string name="collapse_fields_description" msgid="1884143625854637874">"Goqa"</string>
+ <string name="announce_expanded_fields" msgid="1075947220478530622">"Kunwetshiwe"</string>
+ <string name="announce_collapsed_fields" msgid="6414231530177338704">"Kugoqiwe"</string>
+ <string name="list_filter_all_accounts" msgid="8908683398914322369">"Bonke othintana nabo"</string>
+ <string name="list_filter_all_starred" msgid="5031734941601931356">"Okunenkanyezi"</string>
+ <string name="list_filter_customize" msgid="4789963356004169321">"Enza ngendlela oyifisayo"</string>
+ <string name="list_filter_single" msgid="5871400283515893087">"Othintana nabo"</string>
+ <string name="display_ungrouped" msgid="6885954210243119591">"Bonke Abanye Othintana Nabo"</string>
+ <string name="display_all_contacts" msgid="2031647544742889505">"Bonke oxhumana nabo"</string>
+ <string name="menu_sync_remove" msgid="3266725887008450161">"Khipha iqembu lokuvumelanisa"</string>
+ <string name="dialog_sync_add" msgid="8267045393119375803">"Ngeza iqembu lokuvumelanisa"</string>
+ <string name="display_more_groups" msgid="2682547080423434170">"Amanye amaqembu..."</string>
+ <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Iyasusa \"<xliff:g id="GROUP">%s</xliff:g>\" kokuvumelanisiwe izophinde isuse nanoma ibaphi oxhumana nabo abangelona iqoqo."</string>
+ <string name="savingDisplayGroups" msgid="2133152192716475939">"Ilondoloza izinketho zokubonisa"</string>
+ <string name="listCustomView" msgid="1840624396582117590">"Ukubuka okungokwezifiso"</string>
+ <string name="dialog_new_contact_account" msgid="4969619718062454756">"Londoloza oxhumana nabo abangenisiwe ku-:"</string>
+ <string name="import_from_sim" msgid="6912071635295799131">"I-SIM card"</string>
+ <string name="import_from_sim_summary_fmt" msgid="5169032449686348118">"SIM <xliff:g id="SIM_NAME">%1$s</xliff:g>"</string>
+ <plurals name="import_from_sim_secondary_contact_count_fmt" formatted="false" msgid="5821095773211149295">
+ <item quantity="one">%d oxhumana nabo</item>
+ <item quantity="other">%d oxhumana nabo</item>
+ </plurals>
+ <plurals name="import_from_sim_secondary_template" formatted="false" msgid="2484832025802907060">
+ <item quantity="one"><xliff:g id="COUNT_2">^1</xliff:g> oxhumana nabo • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="COUNT_2">^1</xliff:g> oxhumana nabo • <xliff:g id="PHONE_NUMBER_3">^2</xliff:g></item>
+ </plurals>
+ <string name="import_from_vcf_file" msgid="8662528435646418203">".vcf file"</string>
+ <string name="nothing_to_import_message" msgid="1651921906873335656">"Akukho okungangeniswa"</string>
+ <string name="import_from_vcf_file_confirmation_message" msgid="967723361108008345">"Ngenisa oxhumana nabo kusukela ku-vCard?"</string>
+ <string name="cancel_import_confirmation_message" msgid="3929951040347726757">"Misa ukulndwa kwe <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Misa ukulandwa kwe <xliff:g id="FILENAME">%s</xliff:g>?"</string>
+ <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Yehlulekile ukukhansela ukungenisa/thekelisa i-vCard"</string>
+ <string name="fail_reason_unknown" msgid="1714092345030570863">"Iphutha elingaziwa"</string>
+ <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ayikwazi ukuvula \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
+ <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ayikwazanga ukuqalisa isithekelisi: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
+ <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Abekho othintana nabo abathumelekayo."</string>
+ <string name="missing_required_permission" msgid="5865884842972833120">"Ukhubaze imvume edingekayo."</string>
+ <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Kube khona iphutha ngesikhathi kuthunyelwa: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
+ <string name="fail_reason_io_error" msgid="6748358842976073255">"Iphutha le-I/O"</string>
+ <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Isikhala asanele (kungenzeka ifayela ibe nkulu kakhulu)"</string>
+ <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ifomethi ayisekelwe."</string>
+ <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Iqedile ukuthumela kwenye indawo <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Iqedile ukukhipha oxhumana nabo."</string>
+ <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Iqedile ukuthumela oxhumana nabo, chofoza isaziso ukuze wabelane ngoxhumana nabo."</string>
+ <string name="touch_to_share_contacts" msgid="4882485525268469736">"Thepha ukuze wabelane ngoxhumana nabo."</string>
+ <string name="exporting_vcard_canceled_title" msgid="2652222370493306887">"Ukulandwa <xliff:g id="FILENAME">%s</xliff:g> kumisiwe"</string>
+ <string name="exporting_contact_list_title" msgid="9072240631534457415">"Ithekelisa idatha yothintana naye"</string>
+ <string name="exporting_contact_list_message" msgid="3367949209642931952">"Idatha yoxhumana nabo iyathunyelwa."</string>
+ <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Yehlulekile ukuthola ulwazi lwemininingo egciniwe"</string>
+ <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Abekho oxhumana nabo abangathunyelwa."</string>
+ <string name="composer_not_initialized" msgid="2321648986367005254">"Umqambi we-Vcard akazange aqale ngendlela efanele."</string>
+ <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Yehlulekile ukuthumela"</string>
+ <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Imininingwane yoxhumana naye ayizange ithunyelwe.\nIsizathu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
+ <string name="importing_vcard_description" msgid="4245275224298571351">"Iyangenisa <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Yehlulekile ukufunda imininingo ye-vCard"</string>
+ <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Iqedile ukungenisa i-vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
+ <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Ukulandwa <xliff:g id="FILENAME">%s</xliff:g> kukhanseliwe"</string>
+ <string name="vcard_import_will_start_message" msgid="2804911199145873396">"i-<xliff:g id="FILENAME">%s</xliff:g> izongeniswa maduze nje."</string>
+ <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ifayela izongeniswa maduze nje."</string>
+ <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Isicelo sokungenisa i-vCard sinqatshelwe. Sicela uzame futhi emva kwesikhathi."</string>
+ <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Oxhumana nabo bazothunyelwa maduze."</string>
+ <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Isicelo sokuthekelisa i-vCard sinqatshelwe. Sicela uzame futhi emva kwesikhathi."</string>
+ <string name="vcard_unknown_filename" msgid="7171709890959915954">"othintana nabo"</string>
+ <string name="caching_vcard_message" msgid="4926308675041506756">"Ifihla i-vCard/ama-vCard endaweni yokugcina eseduze. Ukulandwa kwangampela kuzoqala khona maduze."</string>
+ <string name="vcard_import_failed" msgid="5223531255894842406">"Yehlulekile ukulanda i-vCard"</string>
+ <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Othintana naye utholakale nge-NFC"</string>
+ <string name="caching_vcard_title" msgid="1226272312940516605">"Ukulondoloza isikhashana..."</string>
+ <string name="progress_notifier_message" msgid="2311011466908220528">"Ingenisa <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
+ <string name="export_to_vcf_file" msgid="4407527157056120858">"Thumela kufayela le-.vcf"</string>
+ <string name="display_options_sort_list_by" msgid="7028809117272018712">"Hlunga nge-"</string>
+ <string name="display_options_phonetic_name_fields" msgid="3771577099236534776">"Igama lefonethikhi"</string>
+ <string name="editor_options_always_show_phonetic_names" msgid="7253911385818398903">"Bonisa njalo"</string>
+ <string name="editor_options_hide_phonetic_names_if_empty" msgid="2672008764795671104">"Fihla uma kungenalutho"</string>
+ <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Igama"</string>
+ <string name="display_options_sort_by_family_name" msgid="2684905041926954793">"Isibongo"</string>
+ <string name="display_options_view_names_as" msgid="6514632499276563482">"Ifomethi yegama"</string>
+ <string name="display_options_view_given_name_first" msgid="3616004640258761473">"Igama lokuqala kuqala"</string>
+ <string name="display_options_view_family_name_first" msgid="956445100777296467">"Isibongo kuqala"</string>
+ <string name="settings_accounts" msgid="350219740670774576">"Ama-akhawunti"</string>
+ <string name="default_editor_account" msgid="699591683362420991">"I-akhawunti ezenzakalelayo yoxhumana nabo abasha"</string>
+ <string name="settings_my_info_title" msgid="1534272456405343119">"Ulwazi lwami"</string>
+ <string name="set_up_profile" msgid="7370213843590143771">"Setha iphrofayela yakho"</string>
+ <string name="setting_about" msgid="7014388749752042863">"Mayelana noxhumana nabo"</string>
+ <string name="share_favorite_contacts" msgid="4280926751003081042">"Yabelana ngoxhumana nabo obathandayo"</string>
+ <string name="share_contacts" msgid="8109287987498711664">"Yabelana bonke oxhumana nabo"</string>
+ <string name="share_contacts_failure" msgid="1216431977330560559">"Yehlulekile ukwabelana ngoxhumana nabo."</string>
+ <string name="dialog_export" msgid="1628001095187741417">"Thekelisa othintana nabo"</string>
+ <string name="dialog_import" msgid="2423592905927819672">"Ngenisa oxhumana nabo kusuka ku-"</string>
+ <string name="share_error" msgid="948429331673358107">"Lona oxhumana naye ngeke ukwazi ukwabelana ngaye."</string>
+ <string name="no_contact_to_share" msgid="1276397530378323033">"Abekho oxhumana nabo ongabelana nabo."</string>
+ <string name="menu_contacts_filter" msgid="2165153460860262501">"Othintana nabo abazoboniswa"</string>
+ <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Othintana nabo abazoboniswa"</string>
+ <string name="custom_list_filter" msgid="9048525797111024204">"Enza ngendlela ofisa ngayo ukubuka"</string>
+ <string name="menu_custom_filter_save" msgid="2679793632208086460">"Londoloza"</string>
+ <string name="hint_findContacts" msgid="7128627979899070325">"Sesha oxhumana nabo"</string>
+ <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izintandokazi"</string>
+ <string name="menu_import" msgid="6107961135813836467">"Ngenisa"</string>
+ <string name="menu_export" msgid="2658783911863503902">"Hambisa"</string>
<string name="menu_blocked_numbers" msgid="5272951629083025995">"Izinombolo ezivinjiwe"</string>
+ <string name="contact_status_update_attribution" msgid="752179367353018597">"nge <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
+ <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nge- <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
+ <string name="action_menu_back_from_search" msgid="8793348588949233348">"misa ukusesha"</string>
+ <string name="description_clear_search" msgid="688023606766232904">"Sula usesho"</string>
+ <string name="select_account_dialog_title" msgid="5478489655696599219">"I-Akhawunti"</string>
+ <string name="set_default_account" msgid="4311613760725609801">"Njalo sebenzisa lokhu kumakholi"</string>
+ <string name="call_with_a_note" msgid="8389827628360791676">"Shaya ngenothi"</string>
+ <string name="call_subject_hint" msgid="3043028982108363572">"Thayipha inothi ukuze uthumele ngekholi..."</string>
+ <string name="send_and_call_button" msgid="7740295432834590737">"THUMELA FUTHI USHAYE"</string>
+ <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
+ <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
+ <string name="about_build_version" msgid="1765533099416999801">"Yakha inguqulo"</string>
+ <string name="about_open_source_licenses" msgid="6479990452352919641">"Amalayisense womthombo ovulekile"</string>
+ <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Iminingwane yelayisensi yesofthiwe yomthombo ovulelekile"</string>
+ <string name="about_privacy_policy" msgid="3705518622499152626">"Inqubomgomo yemfihlo"</string>
+ <string name="about_terms_of_service" msgid="4642400812150296723">"Imigomo yesevisi"</string>
+ <string name="activity_title_licenses" msgid="5467767062737708066">"Amalayisense womthombo ovulekile"</string>
+ <string name="url_open_error_toast" msgid="452592089815420457">"Yehlulekile ukuvula i-url."</string>
+ <string name="account_filter_view_checked" msgid="6696859503887762213">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> kuhloliwe"</string>
+ <string name="account_filter_view_not_checked" msgid="2248684521205038389">"<xliff:g id="ACCOUNT_INFO">%s</xliff:g> akuhloliwe"</string>
+ <string name="description_search_video_call" msgid="5841525580339803272">"Yenza ikholi yevidiyo"</string>
+ <string name="description_delete_contact" msgid="53835657343783663">"Susa"</string>
+ <string name="description_no_name_header" msgid="8884991311595943271">"Isiyingi"</string>
+ <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
+ <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> iminithi <xliff:g id="SECONDS">%2$s</xliff:g> isekhondi"</string>
+ <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ihora <xliff:g id="MINUTES_1">%2$s</xliff:g> iminithi <xliff:g id="SECONDS">%3$s</xliff:g> isekhondi"</string>
+ <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Lesi sinqamuleli sikhutshaziwe"</string>
+ <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Oxhumana naye ususiwe"</string>
+ <string name="sim_import_button_text" msgid="4270841592496619317">"Ngenisa"</string>
+ <string name="sim_import_title_none_selected" msgid="6910517331401970693">"Khetha oxhumana nabo"</string>
+ <string name="sim_import_empty_message" msgid="7743815244380189651">"Abekho oxhumana nabo kukhadi lakho le-SIM"</string>
+ <string name="sim_import_contact_exists_toast" msgid="1503743663717316732">"Oxhumana naye usuvele ulondoloziwe kuhlu lwakho"</string>
+ <plurals name="sim_import_success_toast_fmt" formatted="false" msgid="8572156521110906443">
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo be-SIM bangenisiwe</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo be-SIM bangenisiwe</item>
+ </plurals>
+ <string name="sim_import_failed_toast" msgid="5559267299793622705">"Yehlulekile ukungenisa oxhumana nabo be-SIM"</string>
+ <string name="sim_import_title" msgid="2511154832820812822">"Ngenisa kusuka ku-SIM"</string>
+ <string name="sim_import_cancel_content_description" msgid="1619832410253424452">"Khansela"</string>
+ <string name="auto_sync_off" msgid="2180147284456026587">"Ukuvumelanisa okuzenzekelelayo kuvaliwe.Thepha ukuze uvule."</string>
+ <string name="dismiss_sync_alert" msgid="8941131776605093596">"Cashisa"</string>
+ <string name="account_sync_off" msgid="7646143254066243924">"Ukuvumelanisa i-akhawunti kuvaliwe. Thepha ukuze ukuvule."</string>
+ <string name="turn_auto_sync_on_dialog_title" msgid="333965456829670541">"Vula ukuvumelanisa okuzenzakalelayo?"</string>
+ <string name="turn_auto_sync_on_dialog_body" msgid="5025336917533693997">"Izinguquko ozenzayo kuzo zonke izinhlelo zokusebenza nama-akhawunti, hhayi oxhumana nabo nje kuphela, zizohlala zibuyekezwa phakathi kwewebhu namadivayisi akho."</string>
+ <string name="turn_auto_sync_on_dialog_confirm_btn" msgid="1070332014838295599">"Vula"</string>
+ <string name="connection_error_message" msgid="7046408921529247089">"Akukho ukuxhumana"</string>
+ <string name="single_sim_display_label" msgid="6985770499439371497">"I-SIM"</string>
+ <string name="show_more_content_description" msgid="4277410425912984722">"Bonisa okuningi"</string>
+ <string name="importing_sim_finished_title" msgid="5196369441294050721">"Iqedile ukungenisa ikhadi le-SIM"</string>
+ <string name="importing_sim_failed_title" msgid="39706901030537985">"Ukungenisa kuhlulekile"</string>
+ <string name="importing_sim_failed_message" msgid="3345258302998021066">"Ayikwazanga ukungenisa oxhumana nabo kusukela ku-SIM card"</string>
+ <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Ingenisa i-SIM"</string>
+ <string name="contacts_default_notification_channel" msgid="4754058700611188581">"Izaziso"</string>
</resources>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
new file mode 100644
index 000000000..39f6ba6af
--- /dev/null
+++ b/res/values/animation_constants.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2014 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+<resources>
+ <integer name="floating_action_button_animation_duration">175</integer>
+</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 6da3b94c3..e97961152 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -20,8 +20,6 @@
<attr name="mimeType" format="string"/>
<!-- RemoteViews XML that should be used to format this data -->
<attr name="remoteViews" format="reference"/>
- <!-- Icon that should be used to represent this data -->
- <attr name="icon" format="reference"/>
<!-- Column in data table to summarize this data -->
<attr name="summaryColumn" format="string"/>
<!-- Column in data table to show details of this data -->
@@ -51,4 +49,71 @@
<attr name="layout_widePaddingRight" format="dimension"/>
</declare-styleable>
+ <declare-styleable name="Theme">
+ <attr name="android:textColorSecondary" />
+ </declare-styleable>
+
+ <declare-styleable name="ContactsDataKind">
+ <!-- Mime-type handled by this mapping. -->
+ <attr name="android:mimeType" />
+ <!-- Icon used to represent data of this kind. -->
+ <attr name="android:icon" />
+ <!-- Column in data table that summarizes this data. -->
+ <attr name="android:summaryColumn" />
+ <!-- Column in data table that contains details for this data. -->
+ <attr name="android:detailColumn" />
+ <!-- Flag indicating that detail should be built from SocialProvider. -->
+ <attr name="android:detailSocialSummary" />
+ <!-- Resource representing the term "All Contacts" (e.g. "All Friends" or
+ "All connections"). Optional (Default is "All Contacts"). -->
+ <attr name="android:allContactsName" />
+ </declare-styleable>
+
+ <declare-styleable name="ContactListItemView">
+ <attr name="list_item_height" format="dimension"/>
+ <attr name="list_section_header_height" format="dimension"/>
+ <attr name="activated_background" format="reference"/>
+ <attr name="section_header_background" format="reference"/>
+ <attr name="list_item_padding_top" format="dimension"/>
+ <attr name="list_item_padding_right" format="dimension"/>
+ <attr name="list_item_padding_bottom" format="dimension"/>
+ <attr name="list_item_padding_left" format="dimension"/>
+ <attr name="list_item_gap_between_image_and_text" format="dimension"/>
+ <attr name="list_item_gap_between_indexer_and_image" format="dimension"/>
+ <attr name="list_item_gap_between_label_and_data" format="dimension"/>
+ <attr name="list_item_presence_icon_margin" format="dimension"/>
+ <attr name="list_item_presence_icon_size" format="dimension"/>
+ <attr name="list_item_photo_size" format="dimension"/>
+ <attr name="list_item_profile_photo_size" format="dimension"/>
+ <attr name="list_item_prefix_highlight_color" format="color"/>
+ <attr name="list_item_background_color" format="color"/>
+ <attr name="list_item_header_text_indent" format="dimension"/>
+ <attr name="list_item_header_text_color" format="color"/>
+ <attr name="list_item_header_text_size" format="dimension"/>
+ <attr name="list_item_header_height" format="dimension"/>
+ <attr name="list_item_name_text_color" format="color"/>
+ <attr name="list_item_name_text_size" format="dimension"/>
+ <attr name="list_item_text_indent" format="dimension"/>
+ <attr name="list_item_text_offset_top" format="dimension"/>
+ <attr name="list_item_avatar_offset_top" format="dimension"/>
+ <attr name="list_item_data_width_weight" format="integer"/>
+ <attr name="list_item_label_width_weight" format="integer"/>
+ <attr name="list_item_video_call_icon_size" format="dimension"/>
+ <attr name="list_item_video_call_icon_margin" format="dimension"/>
+ </declare-styleable>
+
+ <declare-styleable name="ContactBrowser">
+ <attr name="contact_browser_list_padding_left" format="dimension"/>
+ <attr name="contact_browser_list_padding_right" format="dimension"/>
+ <attr name="contact_browser_background" format="reference"/>
+ </declare-styleable>
+
+ <declare-styleable name="ProportionalLayout">
+ <attr name="direction" format="string"/>
+ <attr name="ratio" format="float"/>
+ </declare-styleable>
+
+ <declare-styleable name="Favorites">
+ <attr name="favorites_padding_bottom" format="dimension"/>
+ </declare-styleable>
</resources>
diff --git a/res/values/bools.xml b/res/values/bools.xml
index eef380805..175aeb1b4 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -16,7 +16,6 @@
<resources>
<bool name="quickcontact_two_panel">false</bool>
- <bool name="contact_all_list_show_card_frame">false</bool>
<bool name="contacteditor_two_panel">false</bool>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 0025a417a..1aa84c63c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -14,27 +14,38 @@
limitations under the License.
-->
<resources>
+ <!-- Adaptive icon background layer color -->
+ <color name="ic_contacts_launcher_background">#2458CA</color>
+
+ <!-- 87% black -->
+ <color name="quantum_black_text">#dd000000</color>
+
+ <!-- 54% black -->
+ <color name="quantum_black_secondary_text">#89000000</color>
+
+ <!-- 38% black -->
+ <color name="quantum_black_hint_text">#61000000</color>
- <color name="quickcontact_name_detail_background">#66000000</color>
<color name="quickcontact_entry_sub_header_text_color">#737373</color>
<color name="quickcontact_entry_header_text_color">#202020</color>
- <color name="background_social_updates">#ffeeeeee</color>
+ <color name="action_bar_background">#2a56c6</color>
+
+ <color name="nav_item_selected_background">#0f000000</color>
- <!-- TODO: remove these colors once we delete the group code (b/16522929) -->
- <color name="action_bar_background">#0288d1</color>
- <color name="action_bar_background_highlight">#cecece</color>
<color name="action_bar_button_text_color">#FFFFFF</color>
<color name="actionbar_background_color">@color/primary_color</color>
- <color name="actionbar_background_color_dark">@color/primary_color_dark</color>
- <color name="contextual_selection_bar_color">#616161</color>
+ <color name="contextual_selection_bar_color">#f6f6f6</color>
<!-- Color of the status bar above the contextual selection bar. -->
- <color name="contextual_selection_bar_status_bar_color">#424242</color>
+ <color name="contextual_selection_bar_status_bar_color">#bababa</color>
- <color name="primary_color_dark">#0277bd</color>
- <color name="primary_color">#0288d1</color>
+ <color name="primary_color_dark">#1c3aa9</color>
+ <color name="primary_color">#2a56c6</color>
+
+ <color name="group_primary_color_dark">#546E7A</color>
+ <color name="group_primary_color">#607D8B</color>
<!-- Color of the selected tab underline -->
<color name="contacts_accent_color">#FFFFFF</color>
@@ -65,15 +76,185 @@
<!-- Color of disabled text and unfocused hint text inside the contact editor. 25% black. -->
<color name="editor_disabled_text_color">#40000000</color>
- <!-- Color of button background in compact photo picker. -->
- <color name="google_grey_600">#757575</color>
-
- <!-- Color of button text in compact photo picker, 85% white. -->
- <color name="photo_action_button_color">#D9FFFFFF</color>
-
<!-- Color of text on disabled link contacts button, 25% black. -->
<color name="disabled_button_text">#40000000</color>
<!-- Color of background of disabled link contacts button, 15% black. -->
<color name="disabled_button_background">#26000000</color>
+
+ <!-- Color of text of people names in contact list when item is disabled. 30% black -->
+ <color name="disabled_contact_list_name_text">#4D000000</color>
+
+ <!-- Color of background of all empty states. -->
+ <color name="empty_state_background">#efefef</color>
+
+ <!-- Colors of swipeRefreshLayout's spinning circle. -->
+ <color name="swipe_refresh_color1">#0f9d58</color>
+ <color name="swipe_refresh_color2">#dd4b37</color>
+ <color name="swipe_refresh_color3">#4285f4</color>
+ <color name="swipe_refresh_color4">#f4b400</color>
+
+ <!-- Color of ripples used for views with dark backgrounds -->
+ <color name="ripple_material_dark">#a0ffffff</color>
+
+ <!-- Divider color for header separator -->
+ <color name="primary_text_color">#363636</color>
+
+ <color name="secondary_text_color">@color/dialtacts_secondary_text_color</color>
+
+ <!-- Text color for section header. -->
+ <color name="section_header_text_color">@color/dialtacts_theme_color</color>
+
+ <!-- Color of the theme of the People app -->
+ <color name="people_app_theme_color">#363636</color>
+
+ <!-- Color of the theme of the Dialer app -->
+ <color name="dialtacts_theme_color">#2a56c6</color>
+
+ <!-- Color of image view placeholder. -->
+ <color name="image_placeholder">#DDDDDD</color>
+
+ <!-- Primary text color in the Phone app -->
+ <color name="dialtacts_primary_text_color">#333333</color>
+
+ <!-- Secondary text color in the Phone app -->
+ <color name="dialtacts_secondary_text_color">#737373</color>
+
+ <color name="shortcut_overlay_text_background">#7f000000</color>
+
+ <color name="textColorIconOverlay">#fff</color>
+ <color name="textColorIconOverlayShadow">#000</color>
+
+ <!-- Background colors for LetterTileDrawables. This set of colors is a subset of
+ https://spec.googleplex.com/quantumpalette#extended which passes Google Accessibility
+ Requirements for the color in question on white with >= 3.0 contrast. We used
+ http://leaverou.github.io/contrast-ratio/#white-on-%23db4437 to double-check the contrast.
+
+ These colors are also used by MaterialColorMapUtils to generate primary activity colors.
+ -->
+ <array name="letter_tile_colors">
+ <item>#DB4437</item>
+ <item>#E91E63</item>
+ <item>#9C27B0</item>
+ <item>#673AB7</item>
+ <item>#3F51B5</item>
+ <item>#4285F4</item>
+ <item>#039BE5</item>
+ <item>#0097A7</item>
+ <item>#009688</item>
+ <item>#0F9D58</item>
+ <item>#689F38</item>
+ <item>#EF6C00</item>
+ <item>#FF5722</item>
+ <item>#757575</item>
+ </array>
+
+ <!-- Darker versions of letter_tile_colors, two shades darker. These colors are used
+ for settings secondary activity colors. -->
+ <array name="letter_tile_colors_dark">
+ <item>#C53929</item>
+ <item>#C2185B</item>
+ <item>#7B1FA2</item>
+ <item>#512DA8</item>
+ <item>#303F9F</item>
+ <item>#3367D6</item>
+ <item>#0277BD</item>
+ <item>#006064</item>
+ <item>#00796B</item>
+ <item>#0B8043</item>
+ <item>#33691E</item>
+ <item>#E65100</item>
+ <item>#E64A19</item>
+ <item>#424242</item>
+ </array>
+
+ <!-- The default color used for tinting photos when no color can be extracted via Palette,
+ this is Blue Grey 500 -->
+ <color name="quickcontact_default_photo_tint_color">#607D8B</color>
+ <!-- The default secondary color when no color can be extracted via Palette,
+ this is Blue Grey 700 -->
+ <color name="quickcontact_default_photo_tint_color_dark">#455A64</color>
+
+
+ <color name="letter_tile_default_color">#cccccc</color>
+
+ <color name="letter_tile_font_color">#ffffff</color>
+
+ <!-- Color for icons in the actionbar -->
+ <color name="actionbar_icon_color">#ffffff</color>
+
+ <!-- Color of the title to the Frequently Contacted section -->
+ <color name="frequently_contacted_title_color">@color/actionbar_background_color</color>
+
+ <!-- Color of action bar text. Ensure this stays in sync with packages/Telephony
+ phone_settings_actionbar_text_color-->
+ <color name="actionbar_text_color">#ffffff</color>
+ <!-- 54% black for icons -->
+ <color name="actionbar_icon_color_grey">#8C000000</color>
+ <!-- 87% black for actionbar text -->
+ <color name="actionbar_text_color_black">#DF000000</color>
+ <!-- Solid grey for status bar overlay-->
+ <color name="actionbar_color_grey_solid">#777777</color>
+
+ <!-- Text color of the search box text as entered by user -->
+ <color name="searchbox_text_color">#000000</color>
+ <!-- Background color of the search box -->
+ <color name="searchbox_background_color">#ffffff</color>
+
+ <color name="searchbox_hint_text_color">#66000000</color>
+
+ <color name="search_shortcut_icon_color">@color/dialtacts_theme_color</color>
+
+ <!-- Color of the background of the contact detail and editor pages -->
+ <color name="background_primary">#f9f9f9</color>
+ <color name="contact_all_list_background_color">#FFFFFF</color>
+
+ <!-- Text color used for character counter when the max limit has been exceeded -->
+ <color name="call_subject_limit_exceeded">#d1041c</color>
+
+ <!-- Tint color for the call subject history icon. -->
+ <color name="call_subject_history_icon">#000000</color>
+
+ <!-- Divider line on the call subject dialog. -->
+ <color name="call_subject_divider">#d8d8d8</color>
+
+ <!-- Text color for the SEND & CALL button on the call subject dialog. -->
+ <color name="call_subject_button">#00c853</color>
+
+ <!-- Background color for the call subject history view. -->
+ <color name="call_subject_history_background">#ffffff</color>
+ <color name="search_video_call_icon_tint">@color/searchbox_hint_text_color</color>
+
+ <!-- Text color for an action in a snackbar. -->
+ <color name="snackbar_action_text">#ffffff</color>
+ <!-- Background color for a snackbar. -->
+ <color name="snackbar_background">#333333</color>
+
+ <!-- Color of account/custom filters -->
+ <color name="account_filter_text_color">@color/actionbar_text_color_black</color>
+ <color name="custom_filter_divider">#dbdbdb</color>
+
+ <color name="material_star_pink">#f50057</color>
+
+ <!-- Primary text color in Contacts app -->
+ <color name="contacts_text_color">#333333</color>
+
+ <!-- tint color for device account icons -->
+ <color name="device_account_tint_color">#7f7f7f</color>
+
+ <!-- Background color for sync-off alert. -->
+ <color name="alert_background">#e0e0e0</color>
+
+ <!-- Divider color in navigation drawer -->
+ <color name="drawer_divider_color">#E5E5E5</color>
+
+ <!-- Background color for the navigation drawer -->
+ <color name="navigation_drawer_background_color">#FAFAFA</color>
+
+ <!-- Background color for the current selected item in the navigation drawer -->
+ <color name="drawer_selected_color">#E8E8E8</color>
+
+ <!-- Highlight color used in places such as ripples -->
+ <color name="control_highlight_color">#1A000000</color>
+
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e18156f1e..e9fe2ada5 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -14,10 +14,10 @@
limitations under the License.
-->
<resources>
- <dimen name="account_selector_popup_width">400dip</dimen>
-
- <!-- Account info left margin in Compact editor. -->
- <dimen name="compact_editor_account_left_margin">4dp</dimen>
+ <!-- Copied from java/com/google/android/assets/launchscreens/res/values-port-v21/dimens.xml -->
+ <!-- Values adjusted for nav bar size due to windowDrawsSystemBarBackgrounds -->
+ <dimen name="launchscreens_product_logo_bottom">64dp</dimen>
+ <dimen name="launchscreens_google_logo_bottom">104dp</dimen>
<!-- Initial height of transparent space above QuickContacts -->
<dimen name="quickcontact_starting_empty_height">150dp</dimen>
@@ -40,7 +40,16 @@
snaps to the top of the window. -->
<dimen name="quickcontact_snap_to_top_slop_height">33dp</dimen>
- <!-- The ratio of width:height (360:184) for the compact editor contact photo in portrait -->
+ <!-- Account info left margin in editor. -->
+ <dimen name="editor_account_left_margin">4dp</dimen>
+
+ <!-- Margin between name field and whatever fields are above it. -->
+ <dimen name="editor_name_top_margin">8dp</dimen>
+
+ <!-- Top margin for "Saving to" account header text field. -->
+ <dimen name="editor_account_header_top_margin">3dp</dimen>
+
+ <!-- The ratio of width:height (360:184) for the editor contact photo in portrait -->
<item name="editor_portrait_photo_ratio" type="dimen" format="float">1.96</item>
<!-- Padding of the rounded plus/minus/expand/collapse buttons in the editor -->
@@ -53,9 +62,6 @@
including the "More fields" button/row. -->
<dimen name="editor_min_line_item_height">54dp</dimen>
- <!-- Width of the delete button (X) in the raw contact editor -->
- <dimen name="editor_delete_button_width">48dp</dimen>
-
<!-- The height and width of the delete button should be the same size as an editor row -->
<dimen name="editor_delete_button_size">@dimen/editor_min_line_item_height</dimen>
@@ -76,9 +82,6 @@
<!-- Size of input form text inside the contact editor -->
<dimen name="editor_form_text_size">16sp</dimen>
- <!-- Width and height of the mime-type icons inside the editor -->
- <dimen name="editor_kind_icon_size">24dp</dimen>
-
<!-- Total width of data-kind icon, including its start and end padding -->
<dimen name="editor_kind_icon_total_width">68dp</dimen>
@@ -90,110 +93,32 @@
padding between TextView's in the readonly Raw Contact Editor. -->
<dimen name="editor_padding_between_read_only_editor_views">9dp</dimen>
- <!-- Padding above and below the photo editor. This value is chosen to give 19dp of apparent
- padding between TextView's and the photo's ImageView. -->
- <dimen name="editor_padding_around_read_only_photo_editor">15dp</dimen>
-
- <!-- Padding below the photo editor. This value is larger than
- editor_padding_between_editor_views, since ImageView's don't have space between the bottom
- of their visual bottom, like an EditText does. -->
- <dimen name="editor_padding_below_photo">9dp</dimen>
-
<!-- Width of the Type-Label in the Editor -->
<dimen name="editor_type_label_width">150dip</dimen>
- <!-- Width of the drop down that appears when you click on the Type-Label spinner in the editor -->
- <dimen name="editor_type_label_dropdown_width">150dp</dimen>
-
- <!-- Left padding of the label in the add field button for the contact editor -->
- <dimen name="editor_add_field_label_left_padding">16dip</dimen>
-
- <!-- Top margin for the first field of the compact contact editor -->
- <dimen name="editor_compact_first_field_padding">10dp</dimen>
-
- <!-- Top and bottom padding for the two text views in editor account header expandable -->
- <dimen name="editor_account_header_expandable_top_bottom_padding">24dp</dimen>
-
- <!-- left padding for the two text views in editor account header expandable -->
- <dimen name="editor_account_header_expandable_left_padding">4dp</dimen>
-
- <!-- Width and height of the expanded contact photo on the contact detail page -->
- <dimen name="detail_contact_photo_expanded_size">400dip</dimen>
-
- <!-- This is the minimum amount of space to leave underneath an expanded contact detail
- photo -->
- <dimen name="expanded_photo_height_offset">100dip</dimen>
-
<!-- Minimum width for the photo action popup options -->
<dimen name="photo_action_popup_min_width">300dip</dimen>
- <!-- Top and bottom padding for a contact detail item -->
- <dimen name="detail_item_vertical_margin">8dip</dimen>
-
- <!-- Minimum height of a row in the contact detail -->
- <dimen name="detail_min_line_item_height">48dip</dimen>
-
- <!-- Font size used for the contact name in the widget -->
- <dimen name="widget_text_size_name">14sp</dimen>
-
- <!-- Font size used for the social status in the widget -->
- <dimen name="widget_text_size_snippet">13sp</dimen>
-
- <!-- Height of list sections (A, B, C) that show the first character of the contacts -->
- <dimen name="list_section_height">25dip</dimen>
-
- <!-- Account title left padding -->
- <dimen name="account_container_left_padding">16dip</dimen>
-
- <!-- Left padding for a group member list item -->
- <dimen name="group_member_item_left_padding">4dip</dimen>
-
- <!-- Left and right padding for the group editor view -->
- <dimen name="group_editor_side_padding">16dip</dimen>
+ <!-- Minimum width for the custom label edit dialog -->
+ <dimen name="custom_dialog_min_width">300dip</dimen>
- <!-- Left margin for the group member list to match the built in margin in the autocomplete asset -->
- <dimen name="group_editor_member_list_left_margin">4dip</dimen>
+ <!-- Custom dialog padding dimens -->
+ <dimen name="custom_dialog_layout_padding">24dip</dimen>
- <!-- Right margin for the group member list to match the built in margin in the autocomplete asset -->
- <dimen name="group_editor_member_list_right_margin">4dip</dimen>
-
- <!-- Left padding of the auto complete field to line hint text up with member list -->
- <dimen name="group_editor_autocomplete_left_padding">8dip</dimen>
-
- <!-- Border padding for the group detail fragment -->
- <dimen name="group_detail_border_padding">0dip</dimen>
-
- <!-- Height of the quick contact photo container (for screens that are too large to use the screen width/height as a constraint)-->
- <dimen name="quick_contact_photo_container_height">180dip</dimen>
-
- <!-- Width of search view in action bar. Use 0dip for MATCH_PARENT -->
- <dimen name="search_view_width">0dip</dimen>
+ <!-- Custom dialog layout dimens -->
+ <dimen name="custom_dialog_layout">4dip</dimen>
<!-- For join screen. Mainly for tablet. -->
<dimen name="join_header_left_margin">@dimen/contact_browser_list_header_left_margin</dimen>
<dimen name="join_header_right_margin">@dimen/contact_browser_list_header_right_margin</dimen>
- <dimen name="join_header_top_margin">16dip</dimen>
- <dimen name="join_header_bottom_margin">0dip</dimen>
-
- <dimen name="no_accounts_message_margin">20dip</dimen>
+ <dimen name="join_header_top_margin">12dip</dimen>
+ <dimen name="join_header_bottom_margin">12dip</dimen>
<dimen name="contact_filter_header_min_height">24dip</dimen>
- <!-- Max width of the SearchView when the contact picker is a dialog (on wide
- screen devices). -->
- <dimen name="contact_picker_search_view_max_width">550dip</dimen>
-
- <!-- Min height of the list of contacts when the contact picker is a dialog (on
- wide screen devices). -->
- <dimen name="contact_picker_contact_list_min_height">550dip</dimen>
-
-
<!-- Margins for ExpandingEntryCardView -->
<dimen name="expanding_entry_card_marginStartEnd">8dp</dimen>
<dimen name="expanding_entry_card_marginBottom">12dp</dimen>
- <!-- Width of the grey border surrounding the expanding entry cards. If we ever add
- a rounded corner to the expanding entry cards, than we will need to increase this value -->
- <dimen name="expanding_entry_card_border_width">12dp</dimen>
<!-- Top margin for the communication card, used to add space from header. -->
<dimen name="first_card_marginTop">12dp</dimen>
@@ -234,7 +159,6 @@
<dimen name="expanding_entry_card_item_icon_margin_right">12dp</dimen>
<dimen name="expanding_entry_card_item_header_only_margin_top">6dp</dimen>
- <dimen name="expanding_entry_card_badge_separator_margin">8dp</dimen>
<dimen name="expanding_entry_card_card_corner_radius">2dp</dimen>
<dimen name="expanding_entry_card_header_margin_bottom">2dp</dimen>
<!-- The top margin when the sub header and text views are both gone -->
@@ -245,7 +169,6 @@
<dimen name="quickcontact_suggestion_card_icon_width">40dp</dimen>
<dimen name="quickcontact_suggestion_card_image_spacing">20dp</dimen>
<dimen name="quickcontact_suggestion_card_layout_margin">8dp</dimen>
- <dimen name="quickcontact_suggestion_card_checkbox_right_margin">16dp</dimen>
<dimen name="quickcontact_collapse_view_height">48dp</dimen>
<dimen name="quickcontact_collapse_icon_size">24dp</dimen>
<dimen name="quickcontact_collapse_text_padding">12dp</dimen>
@@ -253,42 +176,212 @@
<dimen name="quickcontact_expanding_help_text_size">14sp</dimen>
<dimen name="quickcontact_expanding_button_right_padding">16dp</dimen>
<dimen name="quickcontact_expanding_item_height">72dp</dimen>
- <dimen name="quickcontact_expanding_item_padding">8dp</dimen>
<dimen name="quickcontact_expanding_item_image_padding">12dp</dimen>
<dimen name="quickcontact_expanding_button_section_height">48dp</dimen>
<dimen name="quickcontact_expanding_button_section_padding">8dp</dimen>
- <!-- The width the that the tabs occupy in the ActionBar when in landscape mode.
- 426dp is the height of a "small" screen. We should leave 240dp for
- the title and menu items -->
- <dimen name="people_activity_landscape_tabs_width">186dip</dimen>
- <!-- The size of the text displayed in the ActionBar tabs in landscape mode.
- Text in the tabs should must be width dependent, otherwise it won't fit in the tabs.
- In portrait mode, the tabs look okay when overflowing their allocated space.
- We have to be more careful in landscape. -->
- <dimen name="people_activity_landscape_tabs_text_size">8dp</dimen>
-
- <dimen name="update_contact_list_top_margin">120dp</dimen>
-
<dimen name="expanding_entry_card_item_icon_height">24dp</dimen>
<dimen name="expanding_entry_card_item_icon_width">24dp</dimen>
- <!-- Width of the box around a tab when the tab has focus -->
- <dimen name="tab_focused_stroke_width">1dp</dimen>
+ <dimen name="contact_browser_list_item_padding_top_or_bottom">7dp</dimen>
- <!-- This value should be kept at (?android:attr/listPreferredItemHeight -
- @dimen/contact_browser_list_item_photo_size) / 2 or greater. Otherwise, this padding
- will never take affect inside list items. As a result, the padding at the very top
- of ListView's will not match the padding inside list items -->
- <dimen name="contact_browser_list_item_padding_top_or_bottom">12dp</dimen>
+ <dimen name="contact_browser_list_item_height">56dp</dimen>
- <!-- Ideal item width in photo picker -->
- <dimen name="photo_picker_item_ideal_width">135dp</dimen>
+ <!-- Navigation drawer header height, the same as the status bar in landscape and portrait modes -->
+ <dimen name="nav_header_height">24dp</dimen>
- <!-- Margin between name field and whatever fields are above it. -->
- <dimen name="compact_editor_name_top_margin">8dp</dimen>
+ <!-- Default activity margins, per the Android Material Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
- <!-- Top margin for "Saving to" account header text field. -->
- <dimen name="compact_editor_account_header_top_margin">3dp</dimen>
+ <dimen name="nav_new_badge_corners">3dp</dimen>
+ <dimen name="nav_new_badge_vertical_pad">2dp</dimen>
+ <dimen name="nav_new_badge_horizontal_pad">5dp</dimen>
+ <dimen name="nav_new_badge_font_size">11sp</dimen>
+
+ <!-- Top padding for the image for empty group view-->
+ <dimen name="empty_group_view_image_padding_top">0dp</dimen>
+
+ <!-- Height for the image for empty group and main view-->
+ <dimen name="empty_view_image_height">150dp</dimen>
+
+ <!-- Top padding for the text for empty group view-->
+ <dimen name="empty_group_view_text_padding_top">14dp</dimen>
+
+ <!-- Top padding for the text for empty account view -->
+ <dimen name="empty_account_view_text_padding_top">24dp</dimen>
+
+ <!-- End margin of edit group title -->
+ <dimen name="edit_group_end_margin">72dp</dimen>
+
+ <!-- Minimum height for group name EditText -->
+ <dimen name="dialog_edit_text_min_height">48dp</dimen>
+
+ <!-- Distance to pull down before causing a refresh. -->
+ <dimen name="pull_to_refresh_distance">40dp</dimen>
+
+ <!-- Elevation of contact list header -->
+ <dimen name="contact_list_header_elevation">2dp</dimen>
+
+ <!-- Gap b/w image view and top of the screen in empty main view -->
+ <dimen name="empty_home_view_image_offset">210dp</dimen>
+
+ <!-- Top padding for the text for empty main view -->
+ <dimen name="empty_home_view_text_padding_top">32dp</dimen>
+
+ <!-- Extra margin above image in empty account view -->
+ <dimen name="empty_account_view_image_offset">30dp</dimen>
+
+ <!-- Margin offset b/w the image top and app bar bottom for no account empty view -->
+ <dimen name="contacts_no_account_empty_image_offset">230dp</dimen>
+
+ <!-- Width for the image for contacts no account empty view -->
+ <dimen name="contacts_no_account_empty_image_width">180dp</dimen>
+
+ <!-- Top padding for the text for no account empty view -->
+ <dimen name="contacts_no_account_empty_text_padding_top">32dp</dimen>
+
+ <!-- Top padding for add account button for no account empty view -->
+ <dimen name="contacts_no_account_empty_button_padding_top">16dp</dimen>
+
+ <!-- Margin b/w add account button and import contacts button for no account empty view -->
+ <dimen name="contacts_no_account_buttons_margin">8dp</dimen>
+
+ <!-- Padding between the action bar's bottom edge and the first header
+ in contacts/group lists. -->
+ <dimen name="list_header_extra_top_padding">0dip</dimen>
+
+ <dimen name="list_section_divider_min_height">32dip</dimen>
+
+ <dimen name="directory_header_extra_top_padding">18dp</dimen>
+ <dimen name="directory_header_extra_bottom_padding">8dp</dimen>
+ <dimen name="directory_header_left_padding">16dp</dimen>
+
+ <!-- Horizontal padding in between contact tiles -->
+ <dimen name="contact_tile_divider_padding">23dip</dimen>
+ <!-- Horizontal whitespace (both padding and margin) before the first tile and after the last tile -->
+ <dimen name="contact_tile_start_end_whitespace">16dip</dimen>
+
+ <!-- For contact filter setting screens -->
+ <dimen name="contact_filter_left_margin">8dp</dimen>
+ <dimen name="contact_filter_right_margin">16dip</dimen>
+ <dimen name="contact_filter_item_min_height">48dip</dimen>
+ <dimen name="contact_filter_icon_size">32dip</dimen>
+ <dimen name="contact_filter_list_item_height">56dp</dimen>
+ <dimen name="contact_filter_list_item_padding_start">16dp</dimen>
+ <!-- contact_filter_indicator is the arrow in expandable list view -->
+ <dimen name="contact_filter_indicator_padding_start">6dp</dimen>
+ <dimen name="contact_filter_indicator_padding_end">46dp</dimen>
+ <dimen name="contact_filter_action_button_width">72dp</dimen>
+
+ <!-- Padding to be used between a visible scrollbar and the contact list -->
+ <dimen name="list_visible_scrollbar_padding">32dip</dimen>
+
+ <dimen name="contact_browser_list_header_icon_left_margin">16dp</dimen>
+ <dimen name="contact_browser_list_header_icon_right_margin">14dp</dimen>
+ <dimen name="contact_browser_list_header_icon_left_margin_alt">18dp</dimen>
+ <dimen name="contact_browser_list_header_icon_right_margin_alt">16dp</dimen>
+ <dimen name="contact_browser_list_header_left_margin">16dip</dimen>
+ <dimen name="contact_browser_list_header_right_margin">@dimen/list_visible_scrollbar_padding</dimen>
+ <dimen name="contact_browser_list_item_text_indent">8dip</dimen>
+ <dimen name="contact_browser_list_header_height">48dp</dimen>
+ <dimen name="contact_browser_list_header_icon_size">24dp</dimen>
+ <dimen name="contact_browser_list_header_icon_size_alt">20dp</dimen>
+ <dimen name="contact_browser_list_header_text_margin">10dp</dimen>
+ <!-- Width of a contact list item section header. -->
+ <dimen name="contact_list_section_header_width">56dp</dimen>
+
+ <!-- Size of the shortcut icon. 0dip means: use the system default -->
+ <dimen name="shortcut_icon_size">0dip</dimen>
+
+ <!-- Text size of shortcut icon overlay text -->
+ <dimen name="shortcut_overlay_text_size">12dp</dimen>
+
+ <!-- Extra vertical padding for darkened background behind shortcut icon overlay text -->
+ <dimen name="shortcut_overlay_text_background_padding">1dp</dimen>
+
+ <!-- Width of height of an icon from a third-party app in the networks section of the contact card. -->
+ <dimen name="detail_network_icon_size">40dp</dimen>
+
+ <!-- contact browser list margins -->
+ <dimen name="contact_browser_list_item_text_size">16sp</dimen>
+ <dimen name="contact_browser_list_item_photo_size">40dp</dimen>
+ <dimen name="contact_browser_list_item_gap_between_image_and_text">15dp</dimen>
+ <dimen name="contact_browser_list_item_gap_between_indexer_and_image">16dp</dimen>
+
+ <!-- Dimensions for contact letter tiles -->
+ <item name="letter_to_tile_ratio" type="dimen">67%</item>
+
+ <!-- Height of the floating action button -->
+ <dimen name="floating_action_button_height">56dp</dimen>
+ <!-- Width of the floating action button -->
+ <dimen name="floating_action_button_width">56dp</dimen>
+ <!-- Z translation of the floating action button -->
+ <dimen name="floating_action_button_translation_z">8dp</dimen>
+ <!-- Padding to be applied to the bottom of lists to make space for the floating action
+ button -->
+ <dimen name="floating_action_button_list_bottom_padding">88dp</dimen>
+ <!-- Right margin of the floating action button -->
+ <dimen name="floating_action_button_margin_right">16dp</dimen>
+ <!-- Bottom margin of the floating action button -->
+ <dimen name="floating_action_button_margin_bottom">16dp</dimen>
+
+ <!-- Size of text in tabs. -->
+ <dimen name="tab_elevation">2dp</dimen>
+
+ <!-- Size of the icon (voice search, back arrow) in the search box. -->
+ <dimen name="search_box_icon_size">56dp</dimen>
+ <!-- Size of the close icon.-->
+ <dimen name="search_box_close_icon_size">56dp</dimen>
+ <!-- Padding around the close button. It's visible size without padding is 24dp. -->
+ <dimen name="search_box_close_icon_padding">16dp</dimen>
+ <!-- End margin of the back arrow icon in the search box -->
+ <dimen name="search_box_navigation_icon_margin">8dp</dimen>
+ <!-- Left margin of the text field in the search box. -->
+ <dimen name="search_box_text_left_margin">8dp</dimen>
+ <!-- Search box text size -->
+ <dimen name="search_text_size">16sp</dimen>
+
+ <!-- Size of the close icon in selection bar.-->
+ <dimen name="selection_bar_close_icon_size">56dp</dimen>
+
+ <!-- Top margin for the Frequently Contacted section title -->
+ <dimen name="frequently_contacted_title_top_margin_when_first_row">16dp</dimen>
+ <!-- Top margin for the Frequently Contacted section title, when the title is the first
+ item in the list -->
+ <dimen name="frequently_contacted_title_top_margin">57dp</dimen>
+
+ <dimen name="frequently_contacted_title_text_size">24sp</dimen>
+
+ <!-- Padding used around the periphery of the call subject dialog, as well as in between the
+ items. -->
+ <dimen name="call_subject_dialog_margin">20dp</dimen>
+ <!-- Padding used between lines of text in the call subject dialog. -->
+ <dimen name="call_subject_dialog_between_line_margin">8dp</dimen>
+ <!-- Size of the contact photo in the call subject dialog. -->
+ <dimen name="call_subject_dialog_contact_photo_size">50dp</dimen>
+ <!-- Margin above the edit text in the call subject dialog. -->
+ <dimen name="call_subject_dialog_edit_spacing">60dp</dimen>
+ <!-- Size of primary text in the call subject dialog. -->
+ <dimen name="call_subject_dialog_primary_text_size">16sp</dimen>
+ <!-- Size of secondary text in the call subject dialog. -->
+ <dimen name="call_subject_dialog_secondary_text_size">14sp</dimen>
+ <!-- Row padding for call subject history items. -->
+ <dimen name="call_subject_history_item_padding">15dp</dimen>
+
+ <!-- The width of the drawer -->
+ <dimen name="drawer_width">320dp</dimen>
+ <!-- Minimum height of items in navigation drawer -->
+ <dimen name="drawer_item_fixed_height">48dp</dimen>
+ <!-- Side padding within the navigation drawer -->
+ <dimen name="drawer_side_padding">16dp</dimen>
+ <!-- Size of the icon in navigation drawer -->
+ <dimen name="drawer_item_icon_size">32dp</dimen>
+ <!-- The side margin of the item text in navigation drawer -->
+ <dimen name="drawer_item_text_margin">32dp</dimen>
+ <!-- The height of the spacer in navigation drawer -->
+ <dimen name="nav_drawer_spacer_height">8dp</dimen>
+ <!-- Side padding within the navigation drawer -->
+ <dimen name="drawer_label_header_end_padding">24dp</dimen>
</resources>
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index 1c776ab0e..2dd0e7381 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -19,33 +19,60 @@
<resources>
- <!-- If true, phonetic name is included in the contact editor by default -->
- <bool name="config_editor_include_phonetic_name">false</bool>
-
- <!-- If true, the "home" icon on the action bar will be shown. -->
- <bool name="show_home_icon">false</bool>
-
- <!--
- If true, the "view updates from group" button in the action bar will be
- shown. Otherwise it will be part of the content on the group detail page.
- -->
- <bool name="config_show_group_action_in_action_bar">false</bool>
-
<!-- Help URL pointing to main TOC for People. This is intentionally empty because
the overlay will fill this in during build time. -->
<string name="help_url_people_main"></string>
- <!-- Help URL pointing to adding contacts in People. This is intentionally empty because
- the overlay will fill this in during build time. -->
- <string name="help_url_people_add"></string>
-
- <!-- Help URL pointing to editing contacts in People. This is intentionally empty because
- the overlay will fill this in during build time. -->
- <string name="help_url_people_edit"></string>
-
<!-- File Authority for the photo picker -->
<string name="photo_file_provider_authority">com.android.contacts.files</string>
<!-- File Authority for AOSP Contacts files -->
<string name="contacts_file_provider_authority">com.android.contacts.files</string>
+ <!-- Flag indicating whether Contacts app is allowed to import contacts -->
+ <bool name="config_allow_import_from_vcf_file">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a sort order -->
+ <bool name="config_sort_order_user_changeable">true</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_sort_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a name display order -->
+ <bool name="config_display_order_user_changeable">true</bool>
+
+ <!-- If true, the default sort order is primary (i.e. by given name) -->
+ <bool name="config_default_display_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a phonetic name display preference -->
+ <bool name="config_phonetic_name_display_user_changeable">true</bool>
+
+ <!-- If true, phonetic name fields are not visible when empty -->
+ <bool name="config_default_hide_phonetic_name_if_empty">true</bool>
+
+ <!-- If true, the order of name fields in the editor is primary (i.e. given name first) -->
+ <bool name="config_editor_field_order_primary">true</bool>
+
+ <!-- If true, an option is shown in Display Options UI to choose a default account -->
+ <bool name="config_default_account_user_changeable">true</bool>
+
+ <!-- Contacts preferences key for contact editor default account -->
+ <string name="contact_editor_default_account_key">ContactEditorUtils_default_account</string>
+
+ <!-- The type of VCard for export. If you want to let the app emit vCard which is
+ specific to some vendor (like DoCoMo), specify this type (e.g. "docomo") -->
+ <string name="config_export_vcard_type" translatable="false">default</string>
+
+ <!-- The filename that is suggested that users use when exporting vCards. Should include the .vcf extension. -->
+ <string name="exporting_vcard_filename" translatable="false">contacts.vcf</string>
+
+ <!-- Flag indicating whether Contacts app is allowed to export contacts -->
+ <bool name="config_allow_export">true</bool>
+
+ <!-- Flag indicating whether Contacts app is allowed to share contacts with devices outside -->
+ <bool name="config_allow_share_contacts">true</bool>
+
+ <string name="pref_build_version_key">pref_build_version</string>
+ <string name="pref_open_source_licenses_key">pref_open_source_licenses</string>
+ <string name="pref_privacy_policy_key">pref_privacy_policy</string>
+ <string name="pref_terms_of_service_key">pref_terms_of_service</string>
</resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 7f6a51fcc..a4b8b4b0f 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -43,4 +43,59 @@
<!-- An ID to be used for contents of a custom dialog so that its state be preserved -->
<item type="id" name="custom_dialog_content" />
+
+ <!-- Menu group ID for settings and help & feedback -->
+ <item type="id" name="nav_misc" />
+
+ <!-- Menu ID for Contacts menu -->
+ <item type="id" name="nav_all_contacts" />
+
+ <!-- Menu ID for Suggestions menu -->
+ <item type="id" name="nav_assistant" />
+
+ <!-- Menu ID for group header -->
+ <item type="id" name="nav_groups" />
+
+ <!-- Menu ID for each group menu item -->
+ <item type="id" name="nav_group" />
+
+ <!-- Menu ID for create label menu item -->
+ <item type="id" name="nav_create_label" />
+
+ <!-- Menu ID for filter header -->
+ <item type="id" name="nav_filters" />
+
+ <!-- Menu ID for each filter menu item -->
+ <item type="id" name="nav_filter" />
+
+ <!-- Menu ID for Settings menu -->
+ <item type="id" name="nav_settings" />
+
+ <!-- Menu ID for help & feedback menu -->
+ <item type="id" name="nav_help" />
+
+ <!-- For vcard.ImportVCardActivity -->
+ <item type="id" name="dialog_cache_vcard"/>
+ <item type="id" name="dialog_error_with_message"/>
+
+ <!-- For vcard.CancelActivity -->
+ <item type="id" name="dialog_cancel_confirmation"/>
+ <item type="id" name="dialog_cancel_failed"/>
+
+ <!-- For ExportVCardActivity -->
+ <item type="id" name="dialog_exporting_vcard"/>
+ <item type="id" name="dialog_fail_to_export_with_reason"/>
+
+ <!-- For Debug Purpose -->
+ <item type="id" name="cliv_name_textview"/>
+ <item type="id" name="cliv_phoneticname_textview"/>
+ <item type="id" name="cliv_label_textview"/>
+ <item type="id" name="cliv_data_view"/>
+
+ <!-- For tag ids used by ContactPhotoManager to tag views with contact details -->
+ <item type="id" name="tag_display_name"/>
+ <item type="id" name="tag_identifier"/>
+ <item type="id" name="tag_contact_type"/>
+
+ <item type="id" name="menu_save"/>
</resources>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 86a8e2697..718e4f6d2 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -15,16 +15,41 @@
-->
<resources>
- <!-- Determines the number of columns in a ContactTileRow in the favorites tab -->
- <integer name="contact_tile_column_count_in_favorites">3</integer>
-
- <!-- Determines the number of columns in a ContactTileRow -->
- <integer name="contact_tile_column_count">2</integer>
<!-- Number of lines the QuickContact title can have -->
<integer name="quickcontact_title_lines">1</integer>
- <!-- Max suggestions limit showing in quick contact suggestion card [CHAR LIMIT=30]-->
- <integer name="quickcontact_suggestions_limit">10</integer>
+ <!-- The maximum allowed group name length -->
+ <integer name="group_name_max_length">40</integer>
+
+ <!-- Fade in/out duration of search and selection -->
+ <integer name="action_bar_animation_duration">195</integer>
+
+ <!-- Top margin ratio for the image for empty group view -->
+ <integer name="empty_group_view_image_margin_divisor">6</integer>
+
+ <!-- Top margin ratio for the image for empty account view -->
+ <integer name="empty_account_view_image_margin_divisor">4</integer>
+
+ <!-- Top margin ratio for the image for empty contacts view-->
+ <integer name="contacts_no_account_empty_image_margin_divisor">2</integer>
+
+ <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
+ <integer name="snippet_length_before_tokenize">30</integer>
+
+ <!-- Layout weight of space elements in contact list view.
+ Default to 0 to indicate no padding-->
+ <integer name="contact_list_space_layout_weight">0</integer>
+ <!-- Layout weight of card in contact list view.
+ Default to 0 to indicate no padding -->
+ <integer name="contact_list_card_layout_weight">0</integer>
+
+ <!-- Duration of the animations on the call subject dialog. -->
+ <integer name="call_subject_animation_duration">250</integer>
+
+ <!-- A big number to make sure "About contacts" always showing at the bottom of Settings.-->
+ <integer name="about_contacts_order_number">100</integer>
+ <!-- Duration of the animations when a contact list loads. -->
+ <integer name="lists_on_load_animation_duration">190</integer>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d8bcd57a1..1ea970845 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -19,19 +19,12 @@
that don't specify a label. -->
<string name="applicationLabel">Contacts</string>
- <!-- Title for the activity that launches Contacts. This is the name
- used in the Launcher icon. -->
- <string name="launcherActivityLabel">Contacts</string>
-
- <!-- Title for Quick Contact activity. -->
- <string name="quickContactActivityLabel">View Contact</string>
-
- <!-- Title for Edit Contact activity. -->
- <string name="editContactActivityLabel">Edit Contact</string>
-
<!-- Directory partition name -->
<string name="contactsList">Contacts</string>
+ <!-- Name of the dynamic shortcut that creates a new contact [CHAR LIMIT=30] -->
+ <string name="shortcut_add_contact">Add contact</string>
+
<!-- Name of activity that allows users to create shortcuts on the home screen to a contact.
This shows up in a list of things like bookmark, folder, music playlist, etc -->
<string name="shortcutContact">Contact</string>
@@ -45,13 +38,7 @@
<string name="shortcutMessageContact">Direct message</string>
<!-- Activity title when the user is selecting a contact for a shortcut. -->
- <string name="shortcutActivityTitle">Choose a contact shortcut</string>
-
- <!-- Activity title when the user is selecting a contact for a direct dial shortcut. -->
- <string name="callShortcutActivityTitle">Choose a number to call</string>
-
- <!-- Activity title when the user is selecting a contact for a direct message shortcut. -->
- <string name="messageShortcutActivityTitle">Choose a number to message</string>
+ <string name="shortcutActivityTitle">Choose contact</string>
<!-- Activity title when the user is inserting into an existing contact, or creating a new one. [CHAR LIMIT=128] -->
<string name="contactInsertOrEditActivityTitle">Add to contact</string>
@@ -59,50 +46,15 @@
<!-- Activity title when the user is selecting a contact. [CHAR LIMIT=128] -->
<string name="contactPickerActivityTitle">Choose a contact</string>
+ <!-- Activity title when the user is selecting a new label member. [CHAR LIMIT=128] -->
+ <string name="groupMemberPickerActivityTitle">Select</string>
+
<!-- Entry that prompts user to select a newly created contact. [CHAR LIMIT=30] -->
<string name="header_entry_contact_list_adapter_header_title">Create new contact</string>
- <!-- Title for the activity that shows only starred contacts -->
- <string name="starredList">Starred</string>
-
- <!-- Title for the activity that shows only frequently contacted contacts -->
- <string name="frequentList">Frequent</string>
-
- <!-- Title for the activity that shows a mix of starred contacts and frequently contacted
- contacts. -->
- <string name="strequentList">Favorites</string>
-
- <!-- The title bar when viewing the contact details activity -->
- <string name="viewContactTitle">Contact details</string>
-
- <!-- The description presented to the user in the Intent choose when there are multiple activities that allow
- editing a contact. This string represents the built in way to edit the contact. -->
- <string name="editContactDescription">Edit contact</string>
-
- <!-- The description presented to the user in the Intent choose when there are multiple activities that allow
- creating a new contact. This string represents the built in way to create the contact. -->
- <string name="insertContactDescription">Create contact</string>
-
- <!-- The description presented to the user in the Intent choose when there are multiple activities that allow
- editing a group. This string represents the built in way to edit the group. [CHAR LIMIT=NONE] -->
- <string name="editGroupDescription">Edit group</string>
-
- <!-- The description presented to the user in the Intent choose when there are multiple activities that allow
- creating a new group. This string represents the built in way to create the group. [CHAR LIMIT=NONE] -->
- <string name="insertGroupDescription">Create group</string>
-
- <!-- The tab label for the contact detail activity that displays information about the contact [CHAR LIMIT=15] -->
- <string name="contactDetailAbout">About</string>
-
- <!-- The tab label for the contact detail activity that displays information about the contact [CHAR LIMIT=15] -->
- <string name="contactDetailUpdates">Updates</string>
-
<!-- Hint text in the search box when the user hits the Search key while in the contacts app -->
<string name="searchHint">Search contacts</string>
- <!-- Menu item used to view the details for a specific contact -->
- <string name="menu_viewContact">View contact</string>
-
<!-- Menu item used to add a star to a contact, which makes that contact show up at the top of favorites -->
<string name="menu_addStar">Add to favorites</string>
@@ -124,28 +76,34 @@
<string name="menu_change_photo">Change photo</string>
<!-- Menu item used to create a contact shortcut when viewing contact details. [CHAR LIMIT=30] -->
- <string name="menu_create_contact_shortcut">Place on Home screen</string>
-
- <!-- Menu item used to call a specific contact when viewing the details of that contact. -->
- <string name="menu_call">Call contact</string>
-
- <!-- Menu item used to send an SMS or MMS message to a specific phone number or a contacts default phone number -->
- <string name="menu_sendSMS">Text contact</string>
+ <string name="menu_create_contact_shortcut">Create shortcut</string>
<!-- Menu item that splits an item from the contact detail into a separate aggregate -->
<string name="menu_splitAggregate">Unlink</string>
- <!-- Menu item that edits the currently selected group [CHAR LIMIT=30] -->
- <string name="menu_editGroup">Edit</string>
+ <!-- Menu item that edits the currently selected label [CHAR LIMIT=30] -->
+ <string name="menu_editGroup">Remove contacts</string>
+
+ <!-- Menu item to rename the currently selected label [CHAR LIMIT=30] -->
+ <string name="menu_renameGroup">Rename label</string>
+
+ <!-- Menu item that deletes the currently selected label [CHAR LIMIT=30] -->
+ <string name="menu_deleteGroup">Delete label</string>
- <!-- Menu item that deletes the currently selected group [CHAR LIMIT=30] -->
- <string name="menu_deleteGroup">Delete</string>
+ <!-- Menu item to search for contacts to add to the currently selected label. CHAR LIMIT=30] -->
+ <string name="menu_addToGroup">Add contact</string>
- <!-- Menu item (in the action bar) that creates a new contact [CHAR LIMIT=30] -->
- <string name="menu_new_contact_action_bar">Add Contact</string>
+ <!-- Menu item to select multiple contacts to add to the currently selected label. CHAR LIMIT=30] -->
+ <string name="menu_selectForGroup">Select contacts</string>
- <!-- Menu item (in the action bar) that creates a new group [CHAR LIMIT=30] -->
- <string name="menu_new_group_action_bar">Add Group</string>
+ <!-- Menu item to add selected contacts to the currently selected label. CHAR LIMIT=30] -->
+ <string name="menu_addContactsToGroup">Add contacts</string>
+
+ <!-- Menu item to remove the currently selected contacts from the currently selected label. [CHAR LIMIT=60] -->
+ <string name="menu_removeFromGroup">Remove from label</string>
+
+ <!-- Menu item (in the action bar) that creates a new label [CHAR LIMIT=30] -->
+ <string name="menu_new_group_action_bar">Create label</string>
<!-- Confirmation dialog for unlinking contacts into multiple instances [CHAR LIMIT=NONE] -->
<string name="splitConfirmation">Unlink this contact into multiple contacts?</string>
@@ -165,9 +123,20 @@
<!-- Positive button text from the confirmation dialog for joining contacts when there are unsaved changes. [CHAR LIMIT = 60] -->
<string name="joinConfirmation_positive_button">Save and Link</string>
+ <!-- The text to show on on a ProgressDialog indicating we're currently linking
+ contacts [CHAR LIMIT=30]-->
+ <string name="contacts_linking_progress_bar">Linking</string>
+
+ <!-- The text to show on on a ProgressDialog indicating we're currently unlinking
+ contacts [CHAR LIMIT=30]-->
+ <string name="contacts_unlinking_progress_bar">Unlinking</string>
+
<!-- Menu item that links an aggregate with another aggregate -->
<string name="menu_joinAggregate">Link</string>
+ <!-- Menu item that opens a dialog that shows all linked contacts that make up this one. [CHAR LIMIT=35] -->
+ <string name="menu_linkedContacts">View linked contacts</string>
+
<!-- Menu item (in the action bar) to indicate that changes should be saved [CHAR LIMIT=20] -->
<string name="menu_save">Save</string>
@@ -178,47 +147,69 @@
<string name="blurbJoinContactDataWith">Choose the contact you want to link with <xliff:g
id="name">%s</xliff:g>:</string>
- <!-- An item in the Join Contact activity that opens up the full contact A-Z list -->
- <string name="showAllContactsJoinItem">Show all contacts</string>
-
<!-- List separator for the Join Contact list: Suggestions -->
<string name="separatorJoinAggregateSuggestions">Suggested contacts</string>
<!-- List separator for the Join Contact list: A-Z -->
<string name="separatorJoinAggregateAll">All contacts</string>
- <!-- Toast shown after two contacts have been linked by a user action. [CHAR LIMIT=NONE] -->
+ <!-- Toast shown after two contacts have been linked by a user action with a name. [CHAR LIMIT=NONE] -->
+ <string name="contactsJoinedNamedMessage"><xliff:g id="name">%s</xliff:g> linked</string>
+
+ <!-- Toast shown after two contacts have been linked by a user action without a name. [CHAR LIMIT=NONE] -->
<string name="contactsJoinedMessage">Contacts linked</string>
+ <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
+ <string name="contacts_deleted_one_named_toast"><xliff:g id="name">%1$s</xliff:g> deleted</string>
+
+ <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
+ <string name="contacts_deleted_two_named_toast"><xliff:g id="name">%1$s</xliff:g> and <xliff:g id="name">%2$s</xliff:g> deleted</string>
+
+ <!-- Toast shown with names after user selected contacts are deleted by user action. [CHAR LIMIT=50] -->
+ <string name="contacts_deleted_many_named_toast"><xliff:g id="name">%1$s</xliff:g>, <xliff:g id="name">%2$s</xliff:g>, <xliff:g id="name">%3$s</xliff:g>\u2026 deleted</string>
+
<!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=30] -->
<plurals name="contacts_deleted_toast">
<item quantity="one">Contact deleted</item>
<item quantity="other">Contacts deleted</item>
</plurals>
- <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=15] -->
- <string name="menu_set_ring_tone">Set ringtone</string>
+ <!-- List header indicating the number of contacts in the list [CHAR LIMIT=30] -->
+ <plurals name="contacts_count">
+ <item quantity="one"><xliff:g id="count">%d</xliff:g> contact</item>
+ <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts</item>
+ </plurals>
- <!-- Menu item that opens the Options activity for a given contact [CHAR LIMIT=30] -->
- <string name="menu_redirect_calls_to_vm">All calls to voicemail</string>
+ <!-- List header indicating the number of contacts and account name in the list [CHAR LIMIT=30] -->
+ <plurals name="contacts_count_with_account">
+ <item quantity="one"><xliff:g id="count">%1$d</xliff:g> contact · <xliff:g id="account">%2$s</xliff:g></item>
+ <item quantity="other"><xliff:g id="count">%1$d</xliff:g> contacts · <xliff:g id="account">%2$s</xliff:g></item>
+ </plurals>
- <!-- Warning dialog contents after users select to delete a ReadOnly contact. [CHAR LIMIT=NONE] -->
- <string name="readOnlyContactWarning">Contacts from your read-only accounts cannot be deleted, but they can be hidden.</string>
+ <!-- Activity title indicating contacts are from a Google account [CHAR LIMIT=30] -->
+ <string name="title_from_google">From Google</string>
- <!-- Positive button text of the warning dialog contents after users select to delete a ReadOnly contact. [CHAR LIMIT=30]-->
- <string name="readOnlyContactWarning_positive_button">Hide</string>
+ <!-- Activity title indicating contacts are from a specific account [CHAR LIMIT=15] -->
+ <string name="title_from_other_accounts">From <xliff:g id="account">%s</xliff:g></string>
+
+ <!-- Menu item to set ring tone for a given contact [CHAR LIMIT=15] -->
+ <string name="menu_set_ring_tone">Set ringtone</string>
- <!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable sources. [CHAR LIMIT=NONE]-->
- <string name="readOnlyContactDeleteConfirmation">The contact to be deleted has details from multiple accounts. Details from read-only accounts will be hidden, not deleted.</string>
+ <!-- Menu item to route all calls from a given contact to voice mail [CHAR LIMIT=30] -->
+ <string name="menu_redirect_calls_to_vm">Route to voicemail</string>
- <!-- Warning dialog. Shown if user selects a single contact to link. [CHAR LIMIT=NONE] -->
- <string name="batch_link_single_contact_warning">You need at least two contacts selected to perform a link.</string>
+ <!-- Menu item to unroute all calls from a given contact to voice mail [CHAR LIMIT=30] -->
+ <string name="menu_unredirect_calls_to_vm">Unroute to voicemail</string>
- <!-- Confirmation dialog. Shown after user selects to link contacts. [CHAR LIMIT=NONE] -->
- <string name="batch_link_confirmation">Link selected contacts?</string>
+ <!-- Warning dialog contents after users select to delete a ReadOnly contact. [CHAR LIMIT=NONE] -->
+ <string name="readOnlyContactWarning">This contact is read-only. It can\'t be deleted, but you can hide it.</string>
- <!-- Positive button text from confirmation dialog. Shown after user selects to link contacts. [CHAR LIMIT=40] -->
- <string name="batch_link_confirmation_positive_button">Link</string>
+ <!-- Positive button text of the warning dialog contents after users select to delete a ReadOnly contact. [CHAR LIMIT=30]-->
+ <string name="readOnlyContactWarning_positive_button">Hide Contact</string>
+
+ <!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable data sources.
+ Tells the user that data from the read-only accounts will be hidden and not deleted. [CHAR LIMIT=NONE]-->
+ <string name="readOnlyContactDeleteConfirmation">Read-only accounts in this contact will be hidden, not deleted.</string>
<!-- Confirmation dialog. Shown after user selects to delete one writable contact [CHAR LIMIT=NONE] -->
<string name="single_delete_confirmation">Delete this contact?</string>
@@ -241,9 +232,6 @@
<!-- Positive button text of confirmation dialog contents after users selects to delete a Writable contact. [CHAR LIMIT=30] -->
<string name="deleteConfirmation_positive_button">Delete</string>
- <!-- Menu item to indicate you want to stop editing a contact and NOT save the changes you've made [CHAR LIMIT=30] -->
- <string name="menu_discard">Discard changes</string>
-
<!-- Message displayed in a toast when you try to view the details of a contact that
for some reason doesn't exist anymore. [CHAR LIMIT=NONE]-->
<string name="invalidContactMessage">The contact doesn\'t exist.</string>
@@ -254,29 +242,11 @@
<!-- Message with name displayed in a toast after you create a contact shortcut in the launcher [CHAR LIMIT=NONE]-->
<string name="createContactShortcutSuccessful"><xliff:g id="name">%s</xliff:g> added to Home screen.</string>
- <!-- When picking a contact from a list of all contacts there is an entry at the top of the
- list that allows the user to create a new contact, which this string is used for -->
- <string name="pickerNewContactHeader">Create new contact</string>
-
- <!-- Text for a "create new contact" button on the bottom of the contact picker screen.
- The text will be all capitalized.
- [CHAR LIMIT=30] -->
- <string name="pickerNewContactText">Create new contact</string>
-
<!-- The order of the items below is important, don't reorder without changing EditContactActivity.java -->
<skip/>
- <!-- The labels that are under the otherLabelsGroup when editing a contact. [CHAR LIMIT=20] -->
- <string-array name="otherLabels">
- <!-- An organization associated with a contact -->
- <item>Organization</item>
- <!-- A note associated with a contact -->
- <item>Note</item>
- </string-array>
<!-- Description in the dialog that appears if there are no pictures from which to create an icon for a contact -->
- <string name="photoPickerNotFoundText" product="tablet">No pictures are available on the tablet.</string>
- <!-- Description in the dialog that appears if there are no pictures from which to create an icon for a contact -->
- <string name="photoPickerNotFoundText" product="default">No pictures are available on the phone.</string>
+ <string name="photoPickerNotFoundText">No pictures are available on the device.</string>
<!-- Description used in the attach photo Intent from third party apps [CHAR LIMIT=50] -->
<string name="attach_photo_dialog_title">Contact photo</string>
@@ -285,29 +255,23 @@
For example, this may be used to set a phone number's label to "Vaction house" -->
<string name="customLabelPickerTitle">Custom label name</string>
- <!-- Check box label that allows calls to the contact to be sent directly to voicemail -->
- <string name="send_to_voicemail_checkbox">Send calls directly to voicemail</string>
-
<!-- The menu item that allows you to remove a photo from a contact [CHAR LIMIT=50] -->
<string name="removePhoto">Remove photo</string>
<!-- The text displayed when the contacts list is empty while displaying all contacts [CHAR LIMIT=NONE] -->
- <string name="noContacts">No contacts</string>
-
- <!-- The text displayed when the groups list is empty while displaying all groups [CHAR LIMIT=NONE] -->
- <string name="noGroups">No groups.</string>
+ <string name="noContacts">Your contacts list is empty</string>
- <!-- The text displayed when the groups list is empty and no accounts are set on the device while displaying all groups [CHAR LIMIT=NONE] -->
- <string name="noAccounts">To create groups you need an account.</string>
+ <!-- The text displayed when there are no members that have this label while displaying the label detail page [CHAR LIMIT=70] -->
+ <string name="emptyGroup">No contacts with this label</string>
- <!-- The text displayed when there are no members in the group while displaying the group detail page [CHAR LIMIT=40] -->
- <string name="emptyGroup">No people in this group.</string>
+ <!-- The text displayed when there's no contacts in this account [CHAR LIMIT=70] -->
+ <string name="emptyAccount">No contacts in this account</string>
- <!-- The text displayed to instruct users to add members to a group (when viewing a group detail page for a group with no members) [CHAR LIMIT=50] -->
- <string name="addPeopleToGroup">To add some, edit the group.</string>
+ <!-- The text displayed when there's no contacts in the main contacts list [CHAR LIMIT=70] -->
+ <string name="emptyMainList">Your contacts list is empty</string>
- <!-- Displayed in a spinner dialog after the user creates a contact and it's being saved to the database -->
- <string name="savingContact">Saving contact\u2026</string>
+ <!-- Toast displayed when a contact is saved [CHAR LIMIT=30] -->
+ <string name="contactSavedNamedToast"><xliff:g id="display_name">%s</xliff:g> saved</string>
<!-- Toast displayed when a contact is saved [CHAR LIMIT=NONE] -->
<string name="contactSavedToast">Contact saved</string>
@@ -316,90 +280,75 @@
<string name="contactUnlinkedToast">Contacts unlinked</string>
<!-- Toast displayed when saving a contact failed. [CHAR LIMIT=NONE] -->
- <string name="contactSavedErrorToast">Couldn\'t save contact changes.</string>
+ <string name="contactSavedErrorToast">Couldn\'t save contact changes</string>
<!-- Toast displayed when unlinking a contact failed. [CHAR LIMIT=NONE] -->
- <string name="contactUnlinkErrorToast">Couldn\'t unlink contact.</string>
+ <string name="contactUnlinkErrorToast">Couldn\'t unlink contact</string>
<!-- Toast displayed when linking a contact failed. [CHAR LIMIT=NONE] -->
- <string name="contactJoinErrorToast">Couldn\'t link contact.</string>
+ <string name="contactJoinErrorToast">Couldn\'t link contact</string>
<!-- Generic error default clause displayed when saving a contact failed. [CHAR LIMIT=NONE] -->
- <string name="contactGenericErrorToast">Error saving contact.</string>
+ <string name="contactGenericErrorToast">Error saving contact</string>
<!-- Toast displayed when saving a contact photo failed. [CHAR LIMIT=NONE] -->
- <string name="contactPhotoSavedErrorToast">Couldn\'t save contact photo changes.</string>
+ <string name="contactPhotoSavedErrorToast">Couldn\'t save contact photo changes</string>
- <!-- Toast displayed when a group is saved [CHAR LIMIT=NONE] -->
- <string name="groupSavedToast">Group saved.</string>
+ <!-- Toast displayed when something goes wrong while loading a label. [CHAR LIMIT=70] -->
+ <string name="groupLoadErrorToast">Failed to load label</string>
- <!-- Toast displayed when saving a group failed [CHAR LIMIT=NONE] -->
- <string name="groupSavedErrorToast">Couldn\'t save group changes.</string>
+ <!-- Toast or snackbar displayed when a label name is deleted. [CHAR LIMIT=50] -->
+ <string name="groupDeletedToast">Label deleted</string>
- <!-- Displayed at the top of the contacts showing the total number of contacts visible when "Only contacts with phones" is selected -->
- <plurals name="listTotalPhoneContacts">
- <item quantity="one">1 contact with phone number</item>
- <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts with phone numbers</item>
- </plurals>
+ <!-- Toast displayed when a new label name is created. [CHAR LIMIT=50] -->
+ <string name="groupCreatedToast">Label created</string>
- <!-- Displayed at the top of the contacts showing the zero as total number of contacts visible when "Only contacts with phones" is selected [CHAR LIMIT=64]-->
- <string name="listTotalPhoneContactsZero">No contacts with phone numbers</string>
+ <!-- Toast displayed when a new label name cannot be created. [CHAR LIMIT=50] -->
+ <string name="groupCreateFailedToast">Can\'t create label</string>
- <!-- Displayed at the top of the contacts showing the total number of contacts found when "Only contacts with phones" not selected [CHAR LIMIT=30] -->
- <plurals name="listFoundAllContacts">
- <item quantity="one">1 found</item>
- <item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
- </plurals>
+ <!-- Toast displayed when a new label is created. [CHAR LIMIT=50] -->
+ <string name="groupUpdatedToast">Label updated</string>
- <!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected. [CHAR LIMIT=30] -->
- <string name="listFoundAllContactsZero">No contacts</string>
+ <!-- Toast displayed when contacts are removed from a label. [CHAR LIMIT=50] -->
+ <string name="groupMembersRemovedToast">Removed from label</string>
- <!-- Displayed at the top of the contacts showing the total number of contacts found when typing search query -->
- <plurals name="searchFoundContacts">
- <item quantity="one">1 found</item>
- <item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
- </plurals>
+ <!-- Toast displayed when one or more contacts is added to a label. [CHAR LIMIT=50] -->
+ <string name="groupMembersAddedToast">Added to label</string>
- <!-- The title of "all contacts" tab. [CHAR LIMIT=14] -->
- <string name="all_contacts_tab_label">All</string>
+ <!-- Toast displayed when saving a label failed [CHAR LIMIT=70] -->
+ <string name="groupSavedErrorToast">Couldn\'t save label changes</string>
- <!-- The title of "favorites" tab. [CHAR LIMIT=14] -->
- <string name="favorites_tab_label">Favorites</string>
+ <!-- Message displayed when creating a group with the same name as an existing group -->
+ <string name="groupExistsErrorMessage">That label already exists</string>
- <!-- Action string for calling back a number in the call log -->
- <string name="callBack">Call back</string>
+ <!-- Toast displayed when some group contacts do not have any emails (for group send) [CHAR LIMIT=50] -->
+ <string name="groupSomeContactsNoEmailsToast">Some contacts do not have emails.</string>
- <!-- Action string for calling a number in the call log again -->
- <string name="callAgain">Call again</string>
+ <!-- Toast displayed when some group contacts do not have any phone numbers (for group send) [CHAR LIMIT=50] -->
+ <string name="groupSomeContactsNoPhonesToast">Some contacts do not have phone numbers.</string>
- <!-- Action string for returning a missed call in the call log -->
- <string name="returnCall">Return call</string>
+ <!-- Option name to send email to all members of a group/selection [CHAR LIMIT=30] -->
+ <string name="menu_sendEmailOption">Send email</string>
- <!-- Dialog message when prompting before creating a contact. Includes
- the email address, e.g. "Add xyz@foo.com to contacts?" -->
- <string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
+ <!-- Option name to send message to all members of a group/selection [CHAR LIMIT=30] -->
+ <string name="menu_sendMessageOption">Send message</string>
- <!-- String describing the Contact Photo Image
+ <!-- Activity title when the user is selecting items [CHAR LIMIT=40] -->
+ <string name="pickerSelectContactsActivityTitle">Choose Contacts</string>
- Used by AccessibilityService to announce the purpose of the view.
- -->
- <string name="description_contact_photo">contact photo</string>
+ <!-- The menu item to send the currently selected contacts to selected items [CHAR LIMIT=10] -->
+ <string name="send_to_selection">Send</string>
- <!-- String describing the Contact Editor Plus button
-
- Used by AccessibilityService to announce the purpose of the button.
- -->
- <string name="description_plus_button">plus</string>
+ <!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected. [CHAR LIMIT=30] -->
+ <string name="listFoundAllContactsZero">No contacts</string>
- <!-- Message in progress bar while exporting contact list to a file "(current number) of (total number) contacts" The order of "current number" and "total number" cannot be changed (like "total: (total number), current: (current number)")-->
- <string name="exporting_contact_list_progress"><xliff:g id="current_number">%s</xliff:g> of <xliff:g id="total_number">%s</xliff:g> contacts</string>
+ <!-- Dialog message when prompting before creating a contact. Includes
+ the email address, e.g. "Add xyz@foo.com to contacts?" -->
+ <string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
<!-- The string used to describe Contacts as a searchable item within system search settings. -->
<string name="search_settings_description">Names of your contacts</string>
- <!-- Shown as a toast when the user taps on a QuickContact icon, and no application
- was found that could perform the selected action. [CHAR LIMIT=NONE] -->
- <string name="quickcontact_missing_app">No app was found to handle this action.</string>
<!-- Content description for the transparent views around the visible section of QuickContacts.
Clicking this view causes Quick Contacts to close. [CHAR LIMIT=NONE] -->
<string name="quickcontact_transparent_view_description">Click to return to previous screen</string>
@@ -420,28 +369,34 @@
<!-- The menu item to add the the currently viewed contact to your contacts [CHAR LIMIT=30] -->
<string name="menu_add_contact">Add to contacts</string>
- <!-- Dialog title when picking the application to share a contact with. -->
- <string name="share_via">Share contact via</string>
+ <!-- The menu item to add the the currently selected contacts to a label [CHAR LIMIT=10] -->
+ <string name="menu_add_contacts">Add</string>
- <!-- Title for the disambiguation dialog that requests the user choose an account for the new group to be created under [CHAR LIMIT=NONE] -->
- <string name="dialog_new_group_account">Create group under account</string>
+ <!-- Dialog title when picking the application to share one or multiple contacts with. [CHAR LIMIT=40] -->
+ <plurals name="title_share_via">
+ <item quantity="one">Share contact via</item>
+ <item quantity="other">Share contacts via</item>
+ </plurals>
- <!-- Generic action string for starting an audio chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
- <string name="audio_chat">Voice chat</string>
- <!-- Generic action string for starting a video chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
- <string name="video_chat">Video chat</string>
+ <!-- Title for the disambiguation dialog that requests the user choose an account for the new label to be created under [CHAR LIMIT=NONE] -->
+ <string name="dialog_new_group_account">Choose account</string>
- <!-- Title for the list of all contact details that come from third-party sources (including a corporate directory) [CHAR LIMIT=20] -->
- <string name="connections">Connections</string>
+ <!-- Title for the create new label dialog. CHAR LIMIT=40] -->
+ <string name="group_name_dialog_insert_title">Create label</string>
- <!-- Label of the button to open the "add connection" popup where the user can invite a contact to other social networks or services [CHAR LIMIT=32] -->
- <string name="add_connection_button">Add connection</string>
+ <!-- Title for the update label dialog. CHAR LIMIT=40] -->
+ <string name="group_name_dialog_update_title">Rename label</string>
- <!-- Section title for the page containing the contact's social updates on the contact card (this abbreviated version of "Recent updates" is used when "updates" is already shown as the title of the page) [CHAR LIMIT=20]-->
- <string name="recent" msgid="2062236709538790412">Recent</string>
+ <!-- Hint for the label name input field on the insert and update label dialogs [CHAR LIMIT=15] -->
+ <string name="group_name_dialog_hint">Label name</string>
- <!-- Section title for the page containing the contact's social updates on the contact card [CHAR LIMIT=20]-->
- <string name="recent_updates" msgid="2018245636796411442">Recent updates</string>
+ <!-- Hint for the custom label name input filed on dialogs [CHAR LIMIT=15] -->
+ <string name="label_name_dialog_hint">Label name</string>
+
+ <!-- Generic action string for starting an audio chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
+ <string name="audio_chat">Voice chat</string>
+ <!-- Generic action string for starting a video chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
+ <string name="video_chat">Video chat</string>
<!-- String describing which account type a contact came from when editing it -->
<string name="account_type_format"><xliff:g id="source" example="Gmail">%1$s</xliff:g> contact</string>
@@ -449,15 +404,6 @@
<!-- String describing that a contact came from the google account type when editing it. -->
<string name="google_account_type_format"><xliff:g id="source" example="Google">%1$s</xliff:g> account</string>
- <!-- String describing which account a contact came from when editing it -->
- <string name="from_account_format"><xliff:g id="source" example="user@gmail.com">%1$s</xliff:g></string>
-
- <!-- Text used to explain that a contact cannot be edited from the People application since the data is read only [CHAR LIMIT=40] -->
- <string name="contact_read_only">Not editable from this app.</string>
-
- <!-- Text used to explain that a group cannot be edited since the data is read only [CHAR LIMIT=40] -->
- <string name="group_read_only">Not editable on this device.</string>
-
<!-- An option in the 'Contact photo' dialog, if there is no photo yet [CHAR LIMIT=50] -->
<string name="take_photo">Take photo</string>
@@ -470,76 +416,33 @@
<!-- An option in the 'Contact photo' dialog, if there is already a photo [CHAR LIMIT=50] -->
<string name="pick_new_photo">Select new photo</string>
- <!-- Text shown in the contacts app while the background process updates contacts after a system upgrade [CHAR LIMIT=300] -->
- <string name="upgrade_in_progress">Contact list is being updated.</string>
-
<!-- Title shown in the search result activity of contacts app while searching. [CHAR LIMIT=20] -->
<string name="search_results_searching">Searching\u2026</string>
- <!-- Label to display only selection in multiple picker -->
- <string name="menu_display_selected">"Show selected"</string>
-
- <!-- Label to display all recipients in multiple picker -->
- <string name="menu_display_all">"Show all"</string>
-
- <!-- Label to select all contacts in multiple picker -->
- <string name="menu_select_all">"Select all"</string>
-
- <!-- Label to clear all selection in multiple picker -->
- <string name="menu_select_none">"Unselect all"</string>
-
- <!-- The button to add another entry of a specific data type (i.e. email, phone, address) to a contact in the Raw Contact Editor [CHAR LIMIT=22] -->
- <string name="add_new_entry_for_section">Add new</string>
-
- <!-- The button to add an organization field to a contact in the Raw Contact Editor [CHAR LIMIT=22] -->
- <string name="add_organization">Add organization</string>
-
<!-- The button to add an organization field to a contact in the Raw Contact Editor [CHAR LIMIT=12] -->
<string name="event_edit_field_hint_text">Date</string>
- <!-- The button to add an organization field to a contact in the Raw Contact Editor [CHAR LIMIT=15] -->
- <string name="group_edit_field_hint_text">Group name</string>
+ <!-- The button to add an label field to a contact in the Raw Contact Editor [CHAR LIMIT=15] -->
+ <string name="group_edit_field_hint_text">Label</string>
- <!-- Button used for changing a photo in the Raw Contact Editor [CHAR LIMIT=15] -->
- <string name="change_photo">Change</string>
+ <!-- Content description for a cancel button. [CHAR LIMIT=NONE] -->
+ <string name="cancel_button_content_description">Cancel</string>
- <!-- RadioButton that determines whether a raw contact's photo should be used for the entire contact [CHAR LIMIT=25] -->
- <string name="primary_photo">Primary photo</string>
+ <!-- Content description for a back button. [CHAR LIMIT=NONE] -->
+ <string name="back_arrow_content_description">Back</string>
- <!-- String describing the Star/Favorite checkbox
-
- Used by AccessibilityService to announce the purpose of the view.
- -->
- <string name="description_star">favorite</string>
-
- <!-- The title of the Edit-Contact screen -->
- <string name="edit_contact">Edit contact</string>
-
- <!-- The message in a confirmation dialog shown when the user selects a
- contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
- <string name="aggregation_suggestion_join_dialog_message">Link
- the current contact with the selected contact?</string>
+ <!-- Content description for the fake action menu up button as used
+ inside edit or select. [CHAR LIMIT=NONE] -->
+ <string name="action_menu_back_from_edit_select">close</string>
<!-- The message in a confirmation dialog shown when the user selects a
contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
<string name="aggregation_suggestion_edit_dialog_message">Switch to editing
the selected contact? Information you entered so far will be copied.</string>
- <!-- The button that creates a local copy of a corporate contact. [CHAR LIMIT=40]-->
- <string name="menu_copyContact">Copy to My Contacts</string>
-
- <!-- The button that adds a contact to the predefined group "My Contacts" (as this is
- mostly interesting for Google-contacts, this should have the same description as the
- function of GMail/Contacts on the Web
- [CHAR LIMIT=40] -->
- <string name="add_to_my_contacts">Add to My Contacts</string>
-
<!-- The description of the directory where the contact was found [CHAR LIMIT=100]-->
<string name="contact_directory_description">Directory <xliff:g id="type" example="Corporate Directory">%1$s</xliff:g></string>
- <!-- Contact list filter indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
- <string name="list_filter_custom">Custom</string>
-
<!-- Title of the settings activity [CHAR LIMIT=64] -->
<string name="activity_title_settings">Settings</string>
@@ -549,9 +452,6 @@
<!-- Menu item for invoking contextual Help & Feedback [CHAR LIMIT=64] -->
<string name="menu_help">Help &amp; feedback</string>
- <!-- The preference section title for contact display options [CHAR LIMIT=128] -->
- <string name="preference_displayOptions">Display options</string>
-
<!-- Text used to show a organization that has both a company and title. This is used in the Detail-View
of a Contact. This is mostly about the formatting of the two elements, so it should be kept small [CHAR LIMIT=79] -->
<string name="organization_company_and_title"><xliff:g id="company" example="Technical Program Manager">%2$s</xliff:g>, <xliff:g id="company" example="Google Inc.">%1$s</xliff:g></string>
@@ -562,66 +462,29 @@
<!-- Button to add a phone number to contacts [CHAR LIMIT=25] -->
<string name="non_phone_add_to_contacts">Add to contacts</string>
- <!-- Title of the activity that allows the user to confirm the addition of a detail to 1 existing contact [CHAR LIMIT=25] -->
- <string name="activity_title_confirm_add_detail">Add to contact</string>
-
<!-- Button to close without add a phone number to contacts [CHAR LIMIT=25] -->
<string name="non_phone_close">Close</string>
- <!-- Format string that combines the name and the phonetic name for the widget. if the phonetic name is empty, only the display name is used instead [CHAR LIMIT=25] -->
- <string name="widget_name_and_phonetic"><xliff:g id="display_name" example="John Huber">%1$s</xliff:g> (<xliff:g id="phonetic_name">%2$s</xliff:g>)</string>
-
<!-- Checkbox whether to include a year for a birthday [CHAR LIMIT=30] -->
<string name="date_year_toggle">Include year</string>
- <!-- Label for the widget that shows picture and social status of a contact [CHAR LIMIT=20] -->
- <string name="social_widget_label">Contact</string>
-
- <!-- Message of widget while it is loading data [CHAR LIMIT=20] -->
- <string name="social_widget_loading">Loading\u2026</string>
-
- <!-- Button shown on the main contacts screen when there are no contacts on the device.
- Creates a new contact. [CHAR LIMIT=128] -->
- <string name="contacts_unavailable_create_contact">Create a new contact</string>
-
<!-- Button shown on the main contacts screen when there are no contacts on the device.
Navigates to account setup [CHAR LIMIT=128] -->
<string name="contacts_unavailable_add_account">Add account</string>
<!-- Button shown on the main contacts screen when there are no contacts on the device.
Initiates a contact import dialog [CHAR LIMIT=128] -->
- <string name="contacts_unavailable_import_contacts">Import contacts</string>
-
- <!-- Title of the dialog that allows creation of a contact group [CHAR LIMIT=128] -->
- <string name="create_group_dialog_title">Create new group</string>
+ <string name="contacts_unavailable_import_contacts">Import</string>
- <!-- An item in the popup list of groups that triggers creation of a contact group [CHAR LIMIT=128] -->
- <string name="create_group_item_label">Create new group</string>
+ <!-- An item in the popup list of labels that triggers creation of a contact label [CHAR LIMIT=128] -->
+ <string name="create_group_item_label">Create new&#8230;</string>
- <!-- Shows how many groups are from the specified account [CHAR LIMIT=15] -->
- <plurals name="num_groups_in_account">
- <item quantity="one">1 group</item>
- <item quantity="other"><xliff:g id="count">%0$d</xliff:g> groups</item>
- </plurals>
-
- <!-- Confirmation message of the dialog that allows deletion of a contact group [CHAR LIMIT=256] -->
- <string name="delete_group_dialog_message">Delete the group
+ <!-- Confirmation message of the dialog that allows deletion of a contact label [CHAR LIMIT=256] -->
+ <string name="delete_group_dialog_message">Delete the label
\"<xliff:g id="group_label" example="Friends">%1$s</xliff:g>\"?
(Contacts themselves will not be deleted.)
</string>
- <!-- Subtitle of the group detail page that describes how many people are in the current group [CHAR LIMIT=30] -->
- <plurals name="num_contacts_in_group">
- <item quantity="one"><xliff:g id="count">%1$d</xliff:g> person from <xliff:g id="account_type">%2$s</xliff:g></item>
- <item quantity="other"><xliff:g id="count">%1$d</xliff:g> people from <xliff:g id="account_type">%2$s</xliff:g></item>
- </plurals>
-
- <!-- Subtitle of a group (in the group list) that describes how many people are in the current group [CHAR LIMIT=30] -->
- <plurals name="group_list_num_contacts_in_group">
- <item quantity="one"><xliff:g id="count">%1$d</xliff:g> person</item>
- <item quantity="other"><xliff:g id="count">%1$d</xliff:g> people</item>
- </plurals>
-
<!-- Toast displayed when the user creates a new contact and attempts to link it
with another before entering any data [CHAR LIMIT=256] -->
<string name="toast_join_with_empty_contact">Type contact name before linking
@@ -641,7 +504,7 @@
<string name="toast_text_copied">Text copied</string>
<!-- Contents of the alert dialog when the user hits the Cancel button in the editor [CHAR LIMIT=128] -->
- <string name="cancel_confirmation_dialog_message">Discard your changes and quit editing?</string>
+ <string name="cancel_confirmation_dialog_message">Discard changes?</string>
<!-- Positive button text for the cancel editing confirmation dialog.
Pushing this button indicates that the user wishes to discard the changes they have already
@@ -651,22 +514,16 @@
<!-- Negative button text for the cancel editing confirmation dialog.
Pushing this button indicates that the user wishes to continue editing
and return to the editor [CHAR LIMIT=30] -->
- <string name="cancel_confirmation_dialog_keep_editing_button">Keep editing</string>
+ <string name="cancel_confirmation_dialog_keep_editing_button">Cancel</string>
- <!-- Description of a call log entry, made of a call type and a date -->
- <string name="call_type_and_date">
- <xliff:g id="call_type" example="Friends">%1$s</xliff:g> <xliff:g id="call_short_date" example="Friends">%2$s</xliff:g>
- </string>
-
- <!-- Text displayed in place of the display name for the contact that represents the user's
- personal profile entry [CHAR LIMIT=64] -->
- <string name="profile_display_name">Set up my profile</string>
+ <!-- Contents of the alert dialog when the user hits the Cancel button in the customize screen [CHAR LIMIT=128] -->
+ <string name="leave_customize_confirmation_dialog_message">Discard customizations?</string>
<!-- Label to instruct the user to type in a contact's name to add the contact as a member of the current group. [CHAR LIMIT=64] -->
- <string name="enter_contact_name">Type person\'s name</string>
+ <string name="enter_contact_name">Search contacts</string>
- <!-- Hint text in the group name box in the edit group view. [CHAR LIMIT=20]-->
- <string name="group_name_hint">Group\'s name</string>
+ <!-- Title of the edit label view in selection mode when contacts are being selected for removal.[CHAR LIMIT=40] -->
+ <string name="title_edit_group">Remove contacts</string>
<!-- Header label in the contact editor for a profile that is local to the device only (and not associated with any account) [CHAR LIMIT=25] -->
<string name="local_profile_title">My local profile</string>
@@ -674,18 +531,8 @@
<!-- Header label in the contact editor for a profile that comes from an external third-party app whose name is given by source [CHAR LIMIT=20] -->
<string name="external_profile_title">My <xliff:g id="external_source">%1$s</xliff:g> profile</string>
- <!-- Toast shown when the app starts showing all contacts regardless of its current
- contact filter state. [CHAR LIMIT=64] -->
- <string name="toast_displaying_all_contacts">Displaying all contacts</string>
-
- <!-- Message in the standard "no account" prompt that encourages the user to add any account (non Google-specific) before continuing to use the People app [CHAR LIMIT=NONE] -->
- <string name="generic_no_account_prompt">Keep your contacts safe even if you lose your phone: synchronize with an online service.</string>
-
- <!-- Title of the screen that encourages the user to add any account (non Google-specific) for a better Contacts app experience [CHAR LIMIT=20] -->
- <string name="generic_no_account_prompt_title">Add an account</string>
-
<!-- Message in the contact editor prompt that notifies the user that the newly created contact will not be saved to any account, and prompts addition of an account [CHAR LIMIT=NONE] -->
- <string name="contact_editor_prompt_zero_accounts">Your new contact won\'t be backed up. Add an account that backs up contacts online?</string>
+ <string name="contact_editor_prompt_zero_accounts">Take a minute to add an account that will back up your contacts to Google.</string>
<!-- Message in the contact editor prompt that asks the user if it's okay to save the newly created contact to the account shown. [CHAR LIMIT=NONE] -->
<string name="contact_editor_prompt_one_account">New contacts will be saved to <xliff:g id="account_name">%1$s</xliff:g>.</string>
@@ -693,18 +540,32 @@
<!-- Message in the contact editor prompt that asks the user which account they want to save the newly created contact to. [CHAR LIMIT=NONE] -->
<string name="contact_editor_prompt_multiple_accounts">Choose a default account for new contacts:</string>
- <!-- Title of the ContactEditorActivity when creating a new contact. The char
+ <!-- Title of the editor activity when creating a new contact. The char
limit is short and cannot be increased, since this needs to be displayed in a single line
at a pre-determined text size. [CHAR LIMIT=20] -->
- <string name="contact_editor_title_new_contact">Add new contact</string>
+ <string name="contact_editor_title_new_contact">Create new contact</string>
- <!-- Title of the ContactEditorActivity when editing a contact that already exists. The char
+ <!-- Title of the editor activity when editing a contact that already exists. The char
limit is short and cannot be increased, since this needs to be displayed in a single line
at a pre-determined text size. [CHAR LIMIT=20] -->
<string name="contact_editor_title_existing_contact">Edit contact</string>
- <!-- Button label to indicate that the user wants to save the newly created contact locally (instead of backing it up online) [CHAR LIMIT=20] -->
- <string name="keep_local">Keep local</string>
+ <!-- Title of the editor activity when viewing a read-only raw contact. The char
+ limit is short and cannot be increased, since this needs to be displayed in a single line
+ at a pre-determined text size. [CHAR LIMIT=20] -->
+ <string name="contact_editor_title_read_only_contact">View only</string>
+
+ <!-- Dialog title when the user is selecting a raw contact to edit. [CHAR LIMIT=128] -->
+ <string name="contact_editor_pick_raw_contact_to_edit_dialog_title">Choose contact to edit</string>
+
+ <!-- Dialog title showing the user the list of contacts that are linked together to create the aggregate they are viewing. [CHAR LIMIT=128] -->
+ <string name="contact_editor_pick_linked_contact_dialog_title">Linked contacts</string>
+
+ <!-- Dialog button label to prompt user to add more linked contacts to the one they're viewing. [CHAR LIMIT=15] -->
+ <string name="contact_editor_add_linked_contact">Add</string>
+
+ <!-- Dialog button label to prompt user to unlinked the contact they're looking at to it's constituent parts. [CHAR LIMIT=15] -->
+ <string name="contact_editor_unlink_contacts">Unlink</string>
<!-- Button label to prompt the user to add an account (when there are 0 existing accounts on the device) [CHAR LIMIT=30] -->
<string name="add_account">Add account</string>
@@ -712,18 +573,16 @@
<!-- Button label to prompt the user to add another account (when there are already existing accounts on the device) [CHAR LIMIT=30] -->
<string name="add_new_account">Add new account</string>
- <!-- Menu item shown only when the special debug mode is enabled, which is used to send all contacts database files via email. [CHAR LIMI=NONE] -->
+ <!-- Menu item shown only when the special debug mode is enabled, which is used to send all contacts database files via email. [CHAR LIMIT=NONE] -->
<string name="menu_export_database">Export database files</string>
<!-- Content description for the button that adds a new contact
[CHAR LIMIT=NONE] -->
- <string name="action_menu_add_new_contact_button">add new contact</string>
+ <string name="action_menu_add_new_contact_button">Create new contact</string>
<!-- Button Label to see more on an ExpandingEntryCardView [CHAR LIMIT=40] -->
<string name="expanding_entry_card_view_see_more">See more</string>
<!-- Button Label to see less on an ExpandingEntryCardView [CHAR LIMIT=40] -->
<string name="expanding_entry_card_view_see_less">See less</string>
- <!-- Button Label to see all on an ExpandingEntryCardView [CHAR LIMIT=40] -->
- <string name="expanding_entry_card_view_see_all">See all</string>
<!-- Title of recent card. [CHAR LIMIT=60] -->
<string name="recent_card_title">Recent</string>
@@ -731,13 +590,9 @@
<!-- Title of recent card. [CHAR LIMIT=40] -->
<string name="about_card_title">About</string>
- <!-- Title of sms action entry. [CHAR LIMIT=60] -->
- <string name="send_message">Send message</string>
-
<!-- Toast that appears when you are copying a directory contact into your personal contacts -->
- <string name="toast_making_personal_copy">Creating a personal copy...</string>
- <!-- Timestamp string for interactions from yesterday. [CHAR LIMIT=40] -->
- <string name="yesterday">Yesterday</string>
+ <string name="toast_making_personal_copy">Creating a personal copy&#8230;</string>
+ <!-- Timestamp string for interactions from tomorrow. [CHAR LIMIT=40] -->
<string name="tomorrow">Tomorrow</string>
<!-- Timestamp string for interactions from today. [CHAR LIMIT=40] -->
<string name="today">Today</string>
@@ -749,7 +604,7 @@
<string name="tomorrow_at_time_fmt">"Tomorrow at <xliff:g id="time_interval">%s</xliff:g>"</string>
<!-- Format string for a date and time description. For ex:
"April 19, 2012, 3:00pm - 4:00pm" [CHAR LIMIT=NONE] -->
- <string name="date_time_fmt">"<xliff:g id="date">%s</xliff:g>, <xliff:g id="time_interval">%s</xliff:g>"</string>
+ <string name="date_time_fmt">"<xliff:g id="date">%1$s</xliff:g>, <xliff:g id="time_interval">%2$s</xliff:g>"</string>
<!-- Title for untitled calendar interactions [CHAR LIMIT=40] -->
<string name="untitled_event">(Untitled event)</string>
@@ -770,27 +625,18 @@
<string name="header_event_entry">Event</string>
<!-- Header for the Relation entry [CHAR LIMIT=40] -->
<string name="header_relation_entry">Relation</string>
- <!-- Content description for the account field header image. Example accounts listed in this field: Google, Hotmail and Exchange. [CHAR LIMIT=NONE] -->
- <string name="header_account_entry">Account</string>
<!-- Content description for the name fields header entry [CHAR LIMIT=NONE] -->
<string name="header_name_entry">Name</string>
<!-- Content description for the email fields header entry [CHAR LIMIT=NONE] -->
<string name="header_email_entry">Email</string>
<!-- Content description for the phone fields header entry [CHAR LIMIT=NONE] -->
<string name="header_phone_entry">Phone</string>
- <!-- Content description for the camera icon beside the photo section in the Raw Contact Editor [CHAR LIMIT=NONE] -->
- <string name="header_photo_entry">Photo</string>
-
- <!-- Content description for the expand button inside the raw contact editor's header. [CHAR LIMIT=NONE] -->
- <string name="content_description_expand_editor">Click to expand contact editor.</string>
- <!-- Content description for the collapse button inside the raw contact editor's header. [CHAR LIMIT=NONE] -->
- <string name="content_description_collapse_editor">Click to collapse contact editor.</string>
<!-- Content description for directions secondary button [CHAR LIMIT=NONE] -->
<string name="content_description_directions">directions to location</string>
<!-- Content description for recent sms interaction [CHAR LIMIT=NONE] -->
- <string name="content_description_recent_sms">recent sms. <xliff:g id="message_body">%s</xliff:g>. <xliff:g id="phone_number">%s</xliff:g>. <xliff:g id="date">%s</xliff:g>. click to respond</string>
+ <string name="content_description_recent_sms">recent sms. <xliff:g id="message_body">%1$s</xliff:g>. <xliff:g id="phone_number">%2$s</xliff:g>. <xliff:g id="date">%3$s</xliff:g>. click to respond</string>
<!-- Header for the Relation entry [CHAR LIMIT=NONE] -->
<string name="content_description_recent_call_type_incoming">incoming</string>
@@ -800,40 +646,31 @@
<string name="content_description_recent_call_type_missed">missed</string>
<!-- Content description for recent sms interaction [CHAR LIMIT=NONE] -->
- <string name="content_description_recent_call">recent call. <xliff:g id="call_type">%s</xliff:g>. <xliff:g id="phone_number">%s</xliff:g>. <xliff:g id="date">%s</xliff:g>. click to call back</string>
+ <string name="content_description_recent_call">recent call. <xliff:g id="call_type">%1$s</xliff:g>. <xliff:g id="phone_number">%2$s</xliff:g>. <xliff:g id="date">%3$s</xliff:g>. click to call back</string>
<!-- Prefix for messages that you sent [CHAR LIMIT=40] -->
<string name="message_from_you_prefix">You: <xliff:g id="sms_body">%s</xliff:g></string>
- <!-- When a user tries to create an IM Hangouts field, an alert dialog pops up displaying this message. We don't want users entering email addresses of phone numbers into the IM field. [CHAR LIMIT=200] -->
- <string name="contact_editor_hangouts_im_alert">Hangouts works better when you enter the person\'s Hangouts identifier into the email field or phone field.</string>
+ <!-- Button to expand the contact editor to show all available input fields. [CHAR LIMIT=60] -->
+ <string name="editor_more_fields">More fields</string>
- <!-- Button to expand the compact contact editor to show all available input fields. [CHAR LIMIT=60] -->
- <string name="compact_editor_more_fields">More fields</string>
+ <!-- Content description for the contact editor photo overlay which, when clicked, shows a dialog with the options for changing the contact photo. [CHAR LIMIT=NONE] -->
+ <string name="editor_change_photo_content_description">Change contact photo</string>
- <!-- Content description for the compact contact editor photo overlay which, when clicked, shows a dialog with the options for changing the contact photo. [CHAR LIMIT=30] -->
- <string name="compact_editor_change_photo_content_description">Change photo</string>
+ <!-- Content description for the contact editor photo overlay which, when clicked, shows a dialog with the options for adding a contact photo. [CHAR LIMIT=NONE] -->
+ <string name="editor_add_photo_content_description">Add contact photo</string>
+
+ <!-- Accessibility content description, describes the image as being the photo for the contact the user is viewing. [CHAR LIMIT=NONE] -->
+ <string name="editor_contact_photo_content_description">Contact photo</string>
<!-- Toast message displayed when the editor fails to load for a contacts. [CHAR LIMIT=NONE] -->
- <string name="compact_editor_failed_to_load">Failed to open editor.</string>
+ <string name="editor_failed_to_load">Failed to open editor.</string>
<!-- Label for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=30] -->
- <string name="compact_editor_account_selector_title">Saving to</string>
-
- <!-- Content description for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=NONE] -->
- <string name="compact_editor_account_selector_description">Currently saving to <xliff:g id="account_name">%s</xliff:g>. Double-tap to pick a different account.</string>
-
- <!-- Label for the linked contacts selector which indicates the number of raw contacts which have been linked together into the aggregate being viewed. [CHAR LIMIT=40] -->
- <plurals name="compact_editor_linked_contacts_selector_title">
- <item quantity="one">Linked contact</item>
- <item quantity="other">Linked contacts (<xliff:g id="count">%d</xliff:g>)</item>
- </plurals>
-
- <!-- Number of linked contacts of the current contact, only shown when there are more than 2 linked contacts (plural only!!!) [CHAR LIMIT=60] -->
- <string name="quickcontact_contacts_number"><xliff:g id="count">%d</xliff:g> linked contacts</string>
+ <string name="editor_account_selector_title">Saving to</string>
- <!-- Quick contact display name with phonetic name -->
- <string name="quick_contact_display_name_with_phonetic"><xliff:g id="display_name">%s</xliff:g> (<xliff:g id="phonetic_name">%s</xliff:g>)</string>
+ <!-- Label for the account selector to indicate the current information (name, phone number, email etc.) about the contact comes from a read-only account. [CHAR LIMIT=55] -->
+ <string name="editor_account_selector_read_only_title">Contact info from <xliff:g id="account">%s</xliff:g> is not editable</string>
<!-- Button used in quick contact suggestion card to link selected contacts. [CHAR LIMIT=30]-->
<string name="quickcontact_suggestion_link_button">LINK CONTACTS</string>
@@ -841,27 +678,6 @@
<!-- Button used in quick contact suggestion card to collapse suggestion card. [CHAR LIMIT=30]-->
<string name="quickcontact_suggestion_cancel_button">CANCEL</string>
- <!-- Suggestion card title in quick contact UI [CHAR LIMIT=100] -->
- <plurals name="quickcontact_suggestion_card_title">
- <item quantity="one">1 Possible duplicate</item>
- <item quantity="other"><xliff:g id="count">%d</xliff:g> Possible duplicates</item>
- </plurals>
-
- <!-- Suggestions number in quick contact suggestion card [CHAR LIMIT=60] -->
- <plurals name="quickcontact_suggestions_number">
- <item quantity="one">1 linked contact</item>
- <item quantity="other"><xliff:g id="count">%d</xliff:g> linked contacts</item>
- </plurals>
-
- <!-- Account type number for suggestions in quick contact suggestion card [CHAR LIMIT=30]-->
- <plurals name="quickcontact_suggestion_account_type_number">
- <item quantity="one"></item>
- <item quantity="other">(<xliff:g id="count">%d</xliff:g>)</item>
- </plurals>
-
- <!-- Account type with number in quick contact suggestion card [CHAR LIMIT=30]-->
- <string name="quickcontact_suggestion_account_type"><xliff:g id="account_type">%s</xliff:g><xliff:g id="account_type_number">%s</xliff:g></string>
-
<!-- "This contact" title showing in suggestion card in Quick contact. [CHAR LIMIT=30]-->
<string name="suggestion_card_this_contact_title">This contact</string>
@@ -871,49 +687,903 @@
<!-- Help message showing in suggestion card in Quick contact. [CHAR LIMIT=NONE]-->
<string name="suggestion_card_help_message">These contacts might be the same person. You can link them together as a single contact.</string>
- <!-- Linked contacts title showing in contact editor UI. [CHAR LIMIT=30]-->
- <string name="compact_editor_linked_contacts_title">Linked contacts</string>
+ <!-- Content description of delete button to the right of each section in editor, including
+ data type. For example: Delete Home Phone, Delete Work Email, etc [CHAR LIMIT=30]-->
+ <string name="editor_delete_view_description">Delete <xliff:g id="data_type">%1$s </xliff:g><xliff:g id="data_kind">%2$s</xliff:g></string>
- <!-- Title of profile photos that are from your various accounts -->
- <string name="from_your_accounts">From your accounts</string>
+ <!-- Content description of delete button to the right of each section in editor, without data
+ type. For example: Delete Website, Delete SIP, etc [CHAR LIMIT=30]-->
+ <string name="editor_delete_view_description_short">Delete <xliff:g id="data_kind">%s</xliff:g></string>
- <!-- Button used in photo picker to open camera [CHAR LIMIT=30]-->
- <string name="take_a_photo_button">Take a photo</string>
+ <!-- Left drawer menu item to open contacts assistant/suggestion cards. [CHAR LIMIT=20]-->
+ <string name="menu_assistant">Suggestions</string>
- <!-- Button used in photo picker to open photo/gallery [CHAR LIMIT=20]-->
- <string name="all_photos_button">All photos</string>
+ <!-- Badge shown next to Suggestions in left drawer menu when user has not visited it yet. [CHAR LIMIT=10] -->
+ <string name="menu_assistant_new_badge">New</string>
- <!-- Title of photo picker [CHAR LIMIT=30]-->
- <string name="photo_picker_title">Choose photo</string>
+ <!-- Open drawer content descriptions [CHAR LIMIT=40] -->
+ <string name="navigation_drawer_open">Open navigation drawer</string>
- <!-- Message below contact name, showing from which account [CHAR LIMIT=NONE]-->
- <string name="contact_from_account_name">From <xliff:g id="account_name">%s</xliff:g></string>
+ <!-- Close drawer content descriptions [CHAR LIMIT=40] -->
+ <string name="navigation_drawer_close">Close navigation drawer</string>
- <!-- Content description of delete button to the right of each section in editor, including
- data type. For example: Delete Home Phone, Delete Work Email, etc [CHAR LIMIT=30]-->
- <string name="editor_delete_view_description">Delete <xliff:g id="data_type">%s </xliff:g><xliff:g id="data_kind">%s</xliff:g></string>
+ <!-- Content description of label name in navigation drawer. For example: Coworker Label, Friends Label [CHAR LIMIT=30] -->
+ <string name="navigation_drawer_label"><xliff:g id="label_name">%s</xliff:g> label</string>
- <!-- Content description of delete button to the right of each section in editor, without data
- type. For example: Delete Website, Delete SIP, etc [CHAR LIMIT=30]-->
- <string name="editor_delete_view_description_short">Delete <xliff:g id="data_kind">%s</xliff:g></string>
+ <!-- Menu section title of "labels" [CHAR LIMIT=20] -->
+ <string name="menu_title_groups">Labels</string>
+
+ <!-- Menu section title of "accounts" [CHAR LIMIT=20] -->
+ <string name="menu_title_filters">Accounts</string>
+
+ <!-- Contacts app asking for permissions in QuickContact activity,
+ in order to display calendar and SMS history [CHAR LIMIT=60] -->
+ <string name="permission_explanation_header">See your history together</string>
+
+ <!-- Content displayed in QuickContact activity after Contacts app receiving
+ Calendar and SMS permissions [CHAR LIMIT=60] -->
+ <string name="permission_explanation_subheader_calendar_and_SMS">Events and messages</string>
+
+ <!-- Content displayed in QuickContact activity after Contacts app receiving
+ Calendar permission [CHAR LIMIT=40] -->
+ <string name="permission_explanation_subheader_calendar">Events</string>
+
+ <!-- Content displayed in QuickContact activity after Contacts app receiving
+ SMS permission [CHAR LIMIT=40] -->
+ <string name="permission_explanation_subheader_SMS">Messages</string>
+
+ <!-- The header text for hamburger promo [CHAR LIMIT=60]-->
+ <string name="hamburger_feature_highlight_header">Suggestions</string>
+ <!-- The body text for hamburger promo [CHAR LIMIT=200]-->
+ <string name="hamburger_feature_highlight_body">Keep your contacts organized and useful</string>
+
+ <!-- The label for the action shown in a snackbar after an operation that modifies some data is performed.
+ The user can click on the action to rollback the modification-->
+ <string name="undo">Undo</string>
+
+ <!-- Action string for calling a custom phone number -->
+ <string name="call_custom">Call
+ <xliff:g id="custom_label" example="business">%s</xliff:g>
+ </string>
+ <!-- Action string for calling a home phone number -->
+ <string name="call_home">Call home</string>
+ <!-- Action string for calling a mobile phone number -->
+ <string name="call_mobile">Call mobile</string>
+ <!-- Action string for calling a work phone number -->
+ <string name="call_work">Call work</string>
+ <!-- Action string for calling a work fax phone number -->
+ <string name="call_fax_work">Call work fax</string>
+ <!-- Action string for calling a home fax phone number -->
+ <string name="call_fax_home">Call home fax</string>
+ <!-- Action string for calling a pager phone number -->
+ <string name="call_pager">Call pager</string>
+ <!-- Action string for calling an other phone number -->
+ <string name="call_other">Call</string>
+ <!-- Action string for calling a callback number -->
+ <string name="call_callback">Call callback</string>
+ <!-- Action string for calling a car phone number -->
+ <string name="call_car">Call car</string>
+ <!-- Action string for calling a company main phone number -->
+ <string name="call_company_main">Call company main</string>
+ <!-- Action string for calling a ISDN phone number -->
+ <string name="call_isdn">Call ISDN</string>
+ <!-- Action string for calling a main phone number -->
+ <string name="call_main">Call main</string>
+ <!-- Action string for calling an other fax phone number -->
+ <string name="call_other_fax">Call fax</string>
+ <!-- Action string for calling a radio phone number -->
+ <string name="call_radio">Call radio</string>
+ <!-- Action string for calling a Telex phone number -->
+ <string name="call_telex">Call telex</string>
+ <!-- Action string for calling a TTY/TDD phone number -->
+ <string name="call_tty_tdd">Call TTY/TDD</string>
+ <!-- Action string for calling a work mobile phone number -->
+ <string name="call_work_mobile">Call work mobile</string>
+ <!-- Action string for calling a work pager phone number -->
+ <string name="call_work_pager">Call work pager</string>
+ <!-- Action string for calling an assistant phone number -->
+ <string name="call_assistant">Call
+ <xliff:g id="custom_label" example="assistant">%s</xliff:g>
+ </string>
+ <!-- Action string for calling a MMS phone number -->
+ <string name="call_mms">Call MMS</string>
+ <!-- Action string for calling a contact by shortcut -->
+ <string name="call_by_shortcut"><xliff:g id="contact_name">%s</xliff:g> (Call)</string>
+
+ <!-- Action string for sending an SMS to a custom phone number -->
+ <string name="sms_custom">Text
+ <xliff:g id="custom_label" example="business">%s</xliff:g>
+ </string>
+ <!-- Action string for sending an SMS to a home phone number -->
+ <string name="sms_home">Text home</string>
+ <!-- Action string for sending an SMS to a mobile phone number -->
+ <string name="sms_mobile">Text mobile</string>
+ <!-- Action string for sending an SMS to a work phone number -->
+ <string name="sms_work">Text work</string>
+ <!-- Action string for sending an SMS to a work fax phone number -->
+ <string name="sms_fax_work">Text work fax</string>
+ <!-- Action string for sending an SMS to a home fax phone number -->
+ <string name="sms_fax_home">Text home fax</string>
+ <!-- Action string for sending an SMS to a pager phone number -->
+ <string name="sms_pager">Text pager</string>
+ <!-- Action string for sending an SMS to an other phone number -->
+ <string name="sms_other">Text</string>
+ <!-- Action string for sending an SMS to a callback number -->
+ <string name="sms_callback">Text callback</string>
+ <!-- Action string for sending an SMS to a car phone number -->
+ <string name="sms_car">Text car</string>
+ <!-- Action string for sending an SMS to a company main phone number -->
+ <string name="sms_company_main">Text company main</string>
+ <!-- Action string for sending an SMS to a ISDN phone number -->
+ <string name="sms_isdn">Text ISDN</string>
+ <!-- Action string for sending an SMS to a main phone number -->
+ <string name="sms_main">Text main</string>
+ <!-- Action string for sending an SMS to an other fax phone number -->
+ <string name="sms_other_fax">Text fax</string>
+ <!-- Action string for sending an SMS to a radio phone number -->
+ <string name="sms_radio">Text radio</string>
+ <!-- Action string for sending an SMS to a Telex phone number -->
+ <string name="sms_telex">Text telex</string>
+ <!-- Action string for sending an SMS to a TTY/TDD phone number -->
+ <string name="sms_tty_tdd">Text TTY/TDD</string>
+ <!-- Action string for sending an SMS to a work mobile phone number -->
+ <string name="sms_work_mobile">Text work mobile</string>
+ <!-- Action string for sending an SMS to a work pager phone number -->
+ <string name="sms_work_pager">Text work pager</string>
+ <!-- Action string for sending an SMS to an assistant phone number -->
+ <string name="sms_assistant">Text
+ <xliff:g id="assistant">%s</xliff:g>
+ </string>
+ <!-- Action string for sending an SMS to a MMS phone number -->
+ <string name="sms_mms">Text MMS</string>
+ <!-- Action string for sending an SMS to a contact by shortcut -->
+ <string name="sms_by_shortcut"><xliff:g id="contact_name">%s</xliff:g> (Message)</string>
+
+ <!-- Description string for an action button to initiate a video call. -->
+ <string name="description_video_call">Make video call</string>
+
+ <!-- Title of the confirmation dialog for clearing frequents. [CHAR LIMIT=60] -->
+ <string name="clearFrequentsConfirmation_title">Clear frequently contacted?</string>
+
+ <!-- Confirmation dialog for clearing frequents. [CHAR LIMIT=NONE] -->
+ <string name="clearFrequentsConfirmation">You\'ll clear the frequently contacted list in the
+ Contacts and Phone apps, and force email apps to learn your addressing preferences from
+ scratch.
+ </string>
+
+ <!-- Title of the "Clearing frequently contacted" progress-dialog [CHAR LIMIT=60] -->
+ <string name="clearFrequentsProgress_title">Clearing frequently contacted\u2026</string>
+
+ <!-- Used to display as default status when the contact is available for chat [CHAR LIMIT=19] -->
+ <string name="status_available">Available</string>
+
+ <!-- Used to display as default status when the contact is away or idle for chat [CHAR LIMIT=19] -->
+ <string name="status_away">Away</string>
+
+ <!-- Used to display as default status when the contact is busy or Do not disturb for chat [CHAR LIMIT=19] -->
+ <string name="status_busy">Busy</string>
+
+ <!-- The name of the invisible local contact directory -->
+ <string name="local_invisible_directory">Other</string>
+
+ <!-- The label in section header in the contact list for a contact directory [CHAR LIMIT=128] -->
+ <string name="directory_search_label">Directory</string>
+
+ <!-- The label in section header in the contact list for a work contact directory [CHAR LIMIT=128] -->
+ <string name="directory_search_label_work">Work directory</string>
+
+ <!-- The label in section header in the contact list for a local contacts [CHAR LIMIT=128] -->
+ <string name="local_search_label">All contacts</string>
+
+ <!-- String describing the text for photo of a contact in a contacts list.
- <!-- Content description of photo in photo picker indicating a photo from a specific account is *not* selected.
- For example: Photo from Google abc@gmail.com not checked. [CHAR LIMIT=60]-->
- <string name="photo_view_description_not_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>not checked</string>
+ Note: AccessibilityServices use this attribute to announce what the view represents.
+ This is especially valuable for views without textual representation like ImageView.
+ -->
+ <string name="description_quick_contact_for">Quick contact for <xliff:g id="name">%1$s</xliff:g></string>
+
+ <!-- Shown as the display name for a person when the name is missing or unknown. [CHAR LIMIT=18]-->
+ <string name="missing_name">(No name)</string>
+
+ <!-- The text displayed on the divider for the Favorites tab in People app indicating that items below it are frequently contacted [CHAR LIMIT = 39] -->
+ <string name="favoritesFrequentContacted">Frequently contacted</string>
+
+ <!-- Contact list filter selection indicating that the list shows all contacts with phone numbers [CHAR LIMIT=64] -->
+ <string name="list_filter_phones">All contacts with phone numbers</string>
+
+ <!-- Contact list filter selection indicating that the list shows all work contacts with phone numbers [CHAR LIMIT=64] -->
+ <string name="list_filter_phones_work">Work profile contacts</string>
+
+ <!-- Button to view the updates from the current group on the group detail page [CHAR LIMIT=25] -->
+ <string name="view_updates_from_group">View updates</string>
+
+ <!-- Title for data source when creating or editing a contact that doesn't
+ belong to a specific account. This contact will only exist on the phone
+ and will not be synced. [CHAR LIMIT=20] -->
+ <string name="account_phone">Device</string>
+
+ <!-- Title for data source when creating or editing a contact that is stored on the
+ devices SIM card. This contact will only exist on the phone and will not be synced.
+ [CHAR LIMIT=20] -->
+ <string name="account_sim">SIM</string>
+
+ <!-- Header that expands to list all name types when editing a structured name of a contact
+ [CHAR LIMIT=20] -->
+ <string name="nameLabelsGroup">Name</string>
+
+ <!-- Header that expands to list all nickname types when editing a nickname of a contact
+ [CHAR LIMIT=20] -->
+ <string name="nicknameLabelsGroup">Nickname</string>
+
+ <!-- Field title for the given name of a contact -->
+ <string name="name_given">First name</string>
+ <!-- Field title for the family name of a contact -->
+ <string name="name_family">Last name</string>
+ <!-- Field title for the prefix name of a contact -->
+ <string name="name_prefix">Name prefix</string>
+ <!-- Field title for the middle name of a contact -->
+ <string name="name_middle">Middle name</string>
+ <!-- Field title for the suffix name of a contact -->
+ <string name="name_suffix">Name suffix</string>
+
+ <!-- Field title for the phonetic name of a contact [CHAR LIMIT=64]-->
+ <string name="name_phonetic">Phonetic name</string>
+
+ <!-- Field title for the phonetic given name of a contact -->
+ <string name="name_phonetic_given">Phonetic first name</string>
+ <!-- Field title for the phonetic middle name of a contact -->
+ <string name="name_phonetic_middle">Phonetic middle name</string>
+ <!-- Field title for the phonetic family name of a contact -->
+ <string name="name_phonetic_family">Phonetic last name</string>
+
+ <!-- Header that expands to list all of the types of phone numbers when editing or creating a
+ phone number for a contact [CHAR LIMIT=20] -->
+ <string name="phoneLabelsGroup">Phone</string>
+
+ <!-- Header that expands to list all of the types of email addresses when editing or creating
+ an email address for a contact [CHAR LIMIT=20] -->
+ <string name="emailLabelsGroup">Email</string>
+
+ <!-- Header that expands to list all of the types of postal addresses when editing or creating
+ an postal address for a contact [CHAR LIMIT=20] -->
+ <string name="postalLabelsGroup">Address</string>
+
+ <!-- Header that expands to list all of the types of IM account when editing or creating an IM
+ account for a contact [CHAR LIMIT=20] -->
+ <string name="imLabelsGroup">IM</string>
+
+ <!-- Header that expands to list all organization types when editing an organization of a
+ contact [CHAR LIMIT=20] -->
+ <string name="organizationLabelsGroup">Organization</string>
+
+ <!-- Header for the list of all relationships for a contact [CHAR LIMIT=20] -->
+ <string name="relationLabelsGroup">Relationship</string>
+
+ <!-- Header that expands to list all event types when editing an event of a contact
+ [CHAR LIMIT=20] -->
+ <string name="eventLabelsGroup">Special date</string>
+
+ <!-- Generic action string for text messaging a contact. Used by AccessibilityService to
+ announce the purpose of the view. [CHAR LIMIT=NONE] -->
+ <string name="sms">Text message</string>
+
+ <!-- Field title for the full postal address of a contact [CHAR LIMIT=64]-->
+ <string name="postal_address">Address</string>
+
+ <!-- Hint text for the organization name when editing a business/work contact. [CHAR LIMIT=64] -->
+ <string name="ghostData_company">Company</string>
+
+ <!-- Hint text for the organization title when editing a business/work contact. [CHAR LIMIT=64] -->
+ <string name="ghostData_title">Title</string>
+
+ <!-- The label describing the Notes field of a contact. This field allows free form text entry
+ about a contact -->
+ <string name="label_notes">Notes</string>
+
+ <!-- The label describing the custom field of a contact. [CHAR LIMIT=20] -->
+ <string name="label_custom_field">Custom</string>
+
+ <!-- The label describing the SIP address field of a contact. [CHAR LIMIT=20] -->
+ <string name="label_sip_address">SIP</string>
+
+ <!-- Header that expands to list all website types when editing a website of a contact
+ [CHAR LIMIT=20] -->
+ <string name="websiteLabelsGroup">Website</string>
+
+ <!-- Header for the list of all labels for a contact [CHAR LIMIT=20] -->
+ <string name="groupsLabel">Labels</string>
+
+ <!-- Action string for sending an email to a home email address -->
+ <string name="email_home">Email home</string>
+ <!-- Action string for sending an email to a mobile email address -->
+ <string name="email_mobile">Email mobile</string>
+ <!-- Action string for sending an email to a work email address -->
+ <string name="email_work">Email work</string>
+ <!-- Action string for sending an email to an other email address -->
+ <string name="email_other">Email</string>
+ <!-- Action string for sending an email to a custom email address -->
+ <string name="email_custom">Email <xliff:g id="custom_label" example="business">%s</xliff:g></string>
+
+ <!-- Generic action string for sending an email -->
+ <string name="email">Email</string>
+
+ <!-- Field title for the street of a structured postal address of a contact -->
+ <string name="postal_street">Street</string>
+ <!-- Field title for the city of a structured postal address of a contact -->
+ <string name="postal_city">City</string>
+ <!-- Field title for the region, or state, of a structured postal address of a contact -->
+ <string name="postal_region">State</string>
+ <!-- Field title for the postal code of a structured postal address of a contact -->
+ <string name="postal_postcode">ZIP code</string>
+ <!-- Field title for the country of a structured postal address of a contact -->
+ <string name="postal_country">Country</string>
+
+ <!-- Action string for viewing a home postal address -->
+ <string name="map_home">View home address</string>
+ <!-- Action string for viewing a work postal address -->
+ <string name="map_work">View work address</string>
+ <!-- Action string for viewing an other postal address -->
+ <string name="map_other">View address</string>
+ <!-- Action string for viewing a custom postal address -->
+ <string name="map_custom">View <xliff:g id="custom_label" example="vacation">%s</xliff:g> address</string>
+
+ <!-- Action string for starting an IM chat with the AIM protocol -->
+ <string name="chat_aim">Chat using AIM</string>
+ <!-- Action string for starting an IM chat with the MSN or Windows Live protocol -->
+ <string name="chat_msn">Chat using Windows Live</string>
+ <!-- Action string for starting an IM chat with the Yahoo protocol -->
+ <string name="chat_yahoo">Chat using Yahoo</string>
+ <!-- Action string for starting an IM chat with the Skype protocol -->
+ <string name="chat_skype">Chat using Skype</string>
+ <!-- Action string for starting an IM chat with the QQ protocol -->
+ <string name="chat_qq">Chat using QQ</string>
+ <!-- Action string for starting an IM chat with the Google Talk protocol -->
+ <string name="chat_gtalk">Chat using Google Talk</string>
+ <!-- Action string for starting an IM chat with the ICQ protocol -->
+ <string name="chat_icq">Chat using ICQ</string>
+ <!-- Action string for starting an IM chat with the Jabber protocol -->
+ <string name="chat_jabber">Chat using Jabber</string>
+
+ <!-- Generic action string for starting an IM chat -->
+ <string name="chat">Chat</string>
+
+ <!-- String describing the Contact Editor Minus button
+
+ Used by AccessibilityService to announce the purpose of the button.
+
+ [CHAR LIMIT=NONE]
+ -->
+ <string name="description_minus_button">delete</string>
+
+ <!-- Content description for the expand or collapse name fields button.
+ Clicking this button causes the name editor to toggle between showing
+ a single field where the entire name is edited at once, or multiple
+ fields corresponding to each part of the name (Name Prefix, First Name,
+ Middle Name, Last Name, Name Suffix).
+ [CHAR LIMIT=NONE] -->
+ <string name="expand_name_fields_description">Show more name fields</string>
+
+ <!-- Content description for the collapse name fields button. [CHAR LIMIT=NONE] -->
+ <string name="collapse_name_fields_description">Collapse name fields</string>
+
+ <!-- Content description for the expand phonetic name fields button. [CHAR LIMIT=NONE] -->
+ <string name="expand_phonetic_name_fields_description">Show more phonetic name fields</string>
+
+ <!-- Content description for the collapse phonetic name fields button. [CHAR LIMIT=NONE] -->
+ <string name="collapse_phonetic_name_fields_description">Collapse phonetic name fields</string>
+
+ <!-- Content description for a generic expand fields button. [CHAR LIMIT=NONE] -->
+ <string name="expand_fields_description">Expand</string>
+
+ <!-- Content description for a generic collapse fields button. [CHAR LIMIT=NONE] -->
+ <string name="collapse_fields_description">Collapse</string>
+
+ <!-- A11y announcement text for when a expand fields button is actioned. [CHAR LIMIT=NONE] -->
+ <string name="announce_expanded_fields">Expanded</string>
+
+ <!-- A11y announcement text for when a collapse fields button is actioned. [CHAR LIMIT=NONE] -->
+ <string name="announce_collapsed_fields">Collapsed</string>
+
+ <!-- Contact list filter label indicating that the list is showing all available accounts [CHAR LIMIT=64] -->
+ <string name="list_filter_all_accounts">All contacts</string>
+
+ <!-- Contact list filter label indicating that the list is showing all starred contacts [CHAR LIMIT=64] -->
+ <string name="list_filter_all_starred">Starred</string>
+
+ <!-- Contact list filter selection indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
+ <string name="list_filter_customize">Customize</string>
+
+ <!-- Contact list filter selection indicating that the list shows only the selected contact [CHAR LIMIT=64] -->
+ <string name="list_filter_single">Contact</string>
+
+ <!-- List title for a special contacts group that covers all contacts. [CHAR LIMIT=25] -->
+ <string name="display_ungrouped">All other contacts</string>
+
+ <!-- List title for a special contacts group that covers all contacts that aren't members of any other group. [CHAR LIMIT=25] -->
+ <string name="display_all_contacts">All contacts</string>
+
+ <!-- Menu item to remove a contacts sync group. [CHAR LIMIT=40] -->
+ <string name="menu_sync_remove">Remove sync group</string>
+
+ <!-- Menu item to add a contacts sync group. [CHAR LIMIT=40] -->
+ <string name="dialog_sync_add">Add sync group</string>
+
+ <!-- Text displayed in the sync groups footer view for unknown sync groups. [CHAR LIMIT=40 -->
+ <string name="display_more_groups">More groups\u2026</string>
+
+ <!-- Warning message given to users just before they remove a currently syncing
+ group that would also cause all ungrouped contacts to stop syncing. [CHAR LIMIT=NONE] -->
+ <string name="display_warn_remove_ungrouped">Removing \"<xliff:g id="group" example="Starred">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync.</string>
+
+ <!-- Displayed in a spinner dialog as user changes to display options are saved -->
+ <string name="savingDisplayGroups">Saving display options\u2026</string>
+
+ <!-- Displayed at the top of the contacts showing single contact. [CHAR LIMIT=50] -->
+ <string name="listCustomView">Customized view</string>
+
+ <!-- Message asking user to select an account to save contacts imported from vcard or SIM card [CHAR LIMIT=64] -->
+ <string name="dialog_new_contact_account">Save imported contacts to:</string>
+
+ <!-- Action string for selecting SIM for importing contacts -->
+ <string name="import_from_sim">SIM card</string>
+
+ <!-- Action string for selecting a SIM subscription for importing contacts -->
+ <string name="import_from_sim_summary_fmt">SIM <xliff:g id="sim_name">%1$s</xliff:g></string>
+
+ <!-- Secondary string showing the number of SIM contacts for the SIM card on the action for
+ importing from that SIM. Only shown if there is no phone number available for the SIM card
+ [CHAR LIMIT=25] -->
+ <plurals name="import_from_sim_secondary_contact_count_fmt">
+ <item quantity="one">1 contact</item>
+ <item quantity="other">%1$d contacts</item>
+ </plurals>
+
+ <!-- Secondary string showing the number of SIM contacts and phone number for the SIM card
+ on the action for importing that SIM. Note that the bullet character is purely a visual
+ separator between the contact count and phone number; it has no grammatical meaning in
+ this string [CHAR LIMIT=35]-->
+ <plurals name="import_from_sim_secondary_template">
+ <item quantity="one"><xliff:g id="count">^1</xliff:g> contact • <xliff:g id="phone_number">^2</xliff:g></item>
+ <item quantity="other"><xliff:g id="count">^1</xliff:g> contacts • <xliff:g id="phone_number">^2</xliff:g></item>
+ </plurals>
+
+
+
+ <!-- Action string for selecting a .vcf file to import contacts from [CHAR LIMIT=30] -->
+ <string name="import_from_vcf_file">.vcf file</string>
+
+ <!-- Message shown on Import from dialog when there is nothing available to import (no .vcf option or SIM cards) [CHAR LIMIT=NONE] -->
+ <string name="nothing_to_import_message">Nothing to import</string>
+
+ <!-- Dialog message asking the user for confirmation before starting to import contacts from a .vcf file. [CHAR LIMIT=NONE] -->
+ <string name="import_from_vcf_file_confirmation_message">Import contacts from vCard?</string>
+
+ <!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard import.
+ The argument is file name for the vCard import the user wants to cancel.
+ [CHAR LIMIT=128] -->
+ <string name="cancel_import_confirmation_message">Cancel import of <xliff:g id="filename" example="import.vcf">%s</xliff:g>?</string>
+
+ <!-- Message shown in a Dialog confirming a user's cancel request toward existing vCard export.
+ The argument is file name for the vCard export the user wants to cancel.
+ [CHAR LIMIT=128] -->
+ <string name="cancel_export_confirmation_message">Cancel export of <xliff:g id="filename" example="export.vcf">%s</xliff:g>?</string>
+
+ <!-- Title shown in a Dialog telling users cancel vCard import/export operation is failed. [CHAR LIMIT=80] -->
+ <string name="cancel_vcard_import_or_export_failed">Couldn\'t cancel vCard import/export</string>
+
+ <!-- The failed reason which should not be shown but it may in some buggy condition. [CHAR LIMIT=40] -->
+ <string name="fail_reason_unknown">Unknown error.</string>
+
+ <!-- The failed reason shown when vCard importer/exporter could not open the file
+ specified by a user. The file name should be in the message. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_could_not_open_file">Couldn\'t open \"<xliff:g id="file_name">%1$s</xliff:g>\": <xliff:g id="exact_reason">%2$s</xliff:g>.</string>
+
+ <!-- The failed reason shown when contacts exporter fails to be initialized.
+ Some exact reason must follow this. [CHAR LIMIT=NONE]-->
+ <string name="fail_reason_could_not_initialize_exporter">Couldn\'t start the exporter: \"<xliff:g id="exact_reason">%s</xliff:g>\".</string>
+
+ <!-- The failed reason shown when there's no contact which is allowed to be exported.
+ Note that user may have contacts data but all of them are probably not allowed to be
+ exported because of security/permission reasons. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_no_exportable_contact">There is no exportable contact.</string>
+
+ <!-- The user doesn't have all permissions required to use the current screen. So
+ close the current screen and show the user this message. -->
+ <string name="missing_required_permission">You have disabled a required permission.</string>
+
+ <!-- The failed reason shown when some error happend during contacts export.
+ Some exact reason must follow this. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_error_occurred_during_export">An error occurred during export: \"<xliff:g id="exact_reason">%s</xliff:g>\".</string>
+
+ <!-- The failed reason shown when Contacts app (especially vCard importer/exporter)
+ emitted some I/O error. Exact reason will be appended by the system. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_io_error">I/O error</string>
+
+ <!-- Failure reason show when Contacts app (especially vCard importer) encountered
+ low memory problem and could not proceed its import procedure. [CHAR LIMIT=NONE] -->
+ <string name="fail_reason_low_memory_during_import">Not enough memory. The file may be too large.</string>
+
+ <!-- The failed reason shown when vCard importer doesn't support the format.
+ This may be shown when the vCard is corrupted [CHAR LIMIT=40] -->
+ <string name="fail_reason_not_supported">The format isn\'t supported.</string>
+
+ <!-- The title shown when exporting vCard is successfuly finished [CHAR LIMIT=40] -->
+ <string name="exporting_vcard_finished_title">Finished exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g>.</string>
+
+ <!-- The title shown when exporting vCard has finished successfully but the destination filename could not be resolved. [CHAR LIMIT=NONE] -->
+ <string name="exporting_vcard_finished_title_fallback">Finished exporting contacts.</string>
+
+ <!-- The toast message shown when exporting vCard has finished and vCards are ready to be shared [CHAR LIMIT=150]-->
+ <string name="exporting_vcard_finished_toast">Finished exporting contacts, click the notification to share contacts.</string>
+
+ <!-- The message on notification shown when exporting vCard has finished and vCards are ready to be shared [CHAR LIMIT=60]-->
+ <string name="touch_to_share_contacts">Tap to share contacts.</string>
+
+ <!-- The title shown when exporting vCard is canceled (probably by a user)
+ The argument is file name the user canceled importing.
+ [CHAR LIMIT=40] -->
+ <string name="exporting_vcard_canceled_title">Exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g> canceled.</string>
+
+ <!-- Dialog title shown when the application is exporting contact data outside. [CHAR LIMIT=NONE] -->
+ <string name="exporting_contact_list_title">Exporting contact data</string>
+
+ <!-- Message shown when the application is exporting contact data outside -->
+ <string name="exporting_contact_list_message">Contact data is being exported.</string>
+
+ <!-- The error reason the vCard composer "may" emit when database is corrupted or
+ something is going wrong. Usually users should not see this text. [CHAR LIMIT=NONE] -->
+ <string name="composer_failed_to_get_database_infomation">Couldn\'t get database information.</string>
+
+ <!-- This error message shown when the user actually have no contact
+ (e.g. just after data-wiping), or, data providers of the contact list prohibits their
+ contacts from being exported to outside world via vcard exporter, etc. [CHAR LIMIT=NONE] -->
+ <string name="composer_has_no_exportable_contact">There are no exportable contacts.</string>
+
+ <!-- The error reason the vCard composer may emit when vCard composer is not initialized
+ even when needed.
+ Users should not usually see this error message. [CHAR LIMIT=NONE] -->
+ <string name="composer_not_initialized">The vCard composer didn\'t start properly.</string>
+
+ <!-- Dialog title shown when exporting Contact data failed. [CHAR LIMIT=20] -->
+ <string name="exporting_contact_failed_title">Couldn\'t export</string>
+
+ <!-- Dialog message shown when exporting Contact data failed. [CHAR LIMIT=NONE] -->
+ <string name="exporting_contact_failed_message">The contact data wasn\'t exported.\nReason: \"<xliff:g id="fail_reason">%s</xliff:g>\"</string>
+
+ <!-- Description shown when importing vCard data.
+ The argument is the name of a contact which is being read.
+ [CHAR LIMIT=20] -->
+ <string name="importing_vcard_description">Importing <xliff:g id="name" example="Joe Due">%s</xliff:g></string>
+
+ <!-- Dialog title shown when reading vCard data failed [CHAR LIMIT=40] -->
+ <string name="reading_vcard_failed_title">Couldn\'t read vCard data</string>
+
+ <!-- The title shown when reading vCard finished
+ The argument is file name the user imported.
+ [CHAR LIMIT=40] -->
+ <string name="importing_vcard_finished_title">Finished importing vCard <xliff:g id="filename" example="import.vcf">%s</xliff:g></string>
+
+ <!-- The title shown when importing vCard is canceled (probably by a user)
+ The argument is file name the user canceled importing.
+ [CHAR LIMIT=40] -->
+ <string name="importing_vcard_canceled_title">Importing <xliff:g id="filename" example="import.vcf">%s</xliff:g> canceled</string>
+
+ <!-- The message shown when vCard import request is accepted. The system may start that work soon, or do it later
+ when there are already other import/export requests.
+ The argument is file name the user imported.
+ [CHAR LIMIT=40] -->
+ <string name="vcard_import_will_start_message"><xliff:g id="filename" example="import.vcf">%s</xliff:g> will be imported shortly.</string>
+ <!-- The message shown when vCard import request is accepted. The system may start that work soon, or do it later when there are already other import/export requests.
+ "The file" is what a user selected for importing.
+ [CHAR LIMIT=40] -->
+ <string name="vcard_import_will_start_message_with_default_name">The file will be imported shortly.</string>
+ <!-- The message shown when a given vCard import request is rejected by the system. [CHAR LIMIT=NONE] -->
+ <string name="vcard_import_request_rejected_message">vCard import request was rejected. Try again later.</string>
+
+ <!-- The message shown when a vCard export request is accepted and contacts will be exported shortly. [CHAR LIMIT=70]-->
+ <string name="contacts_export_will_start_message">Contacts will be exported shortly.</string>
+
+ <!-- The message shown when a given vCard export request is rejected by the system. [CHAR LIMIT=NONE] -->
+ <string name="vcard_export_request_rejected_message">vCard export request was rejected. Try again later.</string>
+ <!-- Used when file name is unknown in vCard processing. It typically happens
+ when the file is given outside the Contacts app. [CHAR LIMIT=30] -->
+ <string name="vcard_unknown_filename">contact</string>
+
+ <!-- The message shown when vCard importer is caching files to be imported into local temporary
+ data storage. [CHAR LIMIT=NONE] -->
+ <string name="caching_vcard_message">Caching vCard(s) to local temporary storage. The actual import will start soon.</string>
+
+ <!-- Message used when vCard import has failed. [CHAR LIMIT=40] -->
+ <string name="vcard_import_failed">Couldn\'t import vCard.</string>
+
+ <!-- The "file name" displayed for vCards received directly via NFC [CHAR LIMIT=50] -->
+ <string name="nfc_vcard_file_name">Contact received over NFC</string>
+
+ <!-- The title shown when vCard importer is caching files to be imported into local temporary
+ data storage. [CHAR LIMIT=40] -->
+ <string name="caching_vcard_title">Caching</string>
- <!-- Content description of photo in photo picker indicating a photo from a specific account is selected.
- For example: Photo from Google abc@gmail.com checked. [CHAR LIMIT=60]-->
- <string name="photo_view_description_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>checked</string>
+ <!-- The message shown while importing vCard(s).
+ First argument is current index of contacts to be imported.
+ Second argument is the total number of contacts.
+ Third argument is the name of a contact which is being read.
+ [CHAR LIMIT=20] -->
+ <string name="progress_notifier_message">Importing <xliff:g id="current_number">%1$s</xliff:g>/<xliff:g id="total_number">%2$s</xliff:g>: <xliff:g id="name" example="Joe Due">%3$s</xliff:g></string>
- <!-- Content description of photo in photo picker indicating a photo from unknown account is *not* selected.-->
- <string name="photo_view_description_not_checked_no_info">Photo from unknown account not checked</string>
+ <!-- Action that exports all contacts to a user selected destination. [CHAR LIMIT=25] -->
+ <string name="export_to_vcf_file">Export to .vcf file</string>
- <!-- Content description of photo in photo picker indicating a photo from unknown account is selected. -->
- <string name="photo_view_description_checked_no_info">Photo from unknown account checked</string>
+ <!-- Contact preferences related strings -->
- <!-- Text shown in the contacts app while the background process updates contacts after a locale change [CHAR LIMIT=150]-->
- <string name="locale_change_in_progress">Contact list is being updated to reflect the change of language.\n\nPlease wait...</string>
+ <!-- Label of the "sort by" display option -->
+ <string name="display_options_sort_list_by">Sort by</string>
+
+ <!-- Label of the "phonetic name fields" display option. [CHAR LIMIT=50] -->
+ <string name="display_options_phonetic_name_fields">Phonetic name</string>
+
+ <!-- Option to initially show the phonetic name input fields on the contact editor even if the
+ contact does not have a phonetic name. [CHAR LIMIT=25] -->
+ <string name="editor_options_always_show_phonetic_names">Always show</string>
+
+ <!-- Option to initially hide the phonetic name input fields on the contact editor if the
+ contact being edited doesn't have a phonetic name. [CHAR LIMIT=25] -->
+ <string name="editor_options_hide_phonetic_names_if_empty">Hide if empty</string>
+
+ <!-- An allowable value for the "sort list by" contact display option -->
+ <string name="display_options_sort_by_given_name">First name</string>
+
+ <!-- An allowable value for the "sort list by" contact display option -->
+ <string name="display_options_sort_by_family_name">Last name</string>
+
+ <!-- Label of the "name format" display option [CHAR LIMIT=64]-->
+ <string name="display_options_view_names_as">Name format</string>
+
+ <!-- An allowable value for the "view names as" contact display option -->
+ <string name="display_options_view_given_name_first">First name first</string>
+
+ <!-- An allowable value for the "view names as" contact display option -->
+ <string name="display_options_view_family_name_first">Last name first</string>
+
+ <!--Lable of the "Accounts" in settings [CHAR LIMIT=30]-->
+ <string name="settings_accounts">Accounts</string>
+
+ <!--Label of the "default account" setting option to set default editor account. [CHAR LIMIT=80]-->
+ <string name="default_editor_account">Default account for new contacts</string>
+
+ <!-- Title of my info preference, showing the name of user's personal profile [CHAR LIMIT=30]-->
+ <string name="settings_my_info_title">My info</string>
+
+ <!-- Displayed below my info for user to set up the user's personal profile entry [CHAR LIMIT=64] -->
+ <string name="set_up_profile">Set up your profile</string>
+
+ <!-- Label of the "About" setting -->
+ <string name="setting_about">About Contacts</string>
+
+ <!-- Action that shares favorite contacts [CHAR LIMIT=40]-->
+ <string name="share_favorite_contacts">Share favorite contacts</string>
+
+ <!-- Action that shares contacts [CHAR LIMIT=30]-->
+ <string name="share_contacts">Share all contacts</string>
+
+ <!-- A framework exception can be thrown while attempting to share all contacts. If so, show this toast. [CHAR LIMIT=40]-->
+ <string name="share_contacts_failure">Failed to share contacts.</string>
+
+ <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] -->
+ <string name="dialog_export">Export contacts</string>
+
+ <!-- Dialog title when importing contacts from an external source such as SIM card or a vcf file. [CHAR LIMIT=36] -->
+ <string name="dialog_import">Import contacts from</string>
+
+ <!-- Toast indicating that sharing a contact has failed. [CHAR LIMIT=NONE] -->
+ <string name="share_error">This contact can\'t be shared.</string>
+
+ <!-- Toast indicating that no visible contact to share [CHAR LIMIT=NONE] -->
+ <string name="no_contact_to_share">There are no contacts to share.</string>
+
+ <!-- The menu item to filter the list of contacts displayed -->
+ <string name="menu_contacts_filter">Contacts to display</string>
+
+ <!-- Title of the activity that allows the uesr to filter the list of contacts displayed according to account [CHAR LIMIT=25] -->
+ <string name="activity_title_contacts_filter">Contacts to display</string>
+
+ <!-- Title of the activity that allows the user to customize filtering of contact list [CHAR LIMIT=128] -->
+ <string name="custom_list_filter">Customize view</string>
+
+ <!-- Menu item to save changes to custom filter. [CHAR LIMIT=15] -->
+ <string name="menu_custom_filter_save">Save</string>
+
+ <!-- Query hint displayed inside the search field [CHAR LIMIT=64] -->
+ <string name="hint_findContacts">Search contacts</string>
+
+ <!-- The content description text for star icon in contacts list [CHAR LIMIT=30] -->
+ <string name="contactsFavoritesLabel">Favorites</string>
+
+ <!-- The menu item to bulk import contacts from SIM card or SD card. [CHAR LIMIT=30]-->
+ <string name="menu_import">Import</string>
+
+ <!-- The menu item to bulk export contacts from SIM card or SD card. [CHAR LIMIT=30]-->
+ <string name="menu_export">Export</string>
<!-- The menu item to open blocked numbers activity [CHAR LIMIT=60]-->
<string name="menu_blocked_numbers">Blocked numbers</string>
+
+ <!-- Attribution of a contact status update, when the time of update is unknown -->
+ <string name="contact_status_update_attribution">via <xliff:g id="source" example="Google Talk">%1$s</xliff:g></string>
+
+ <!-- Attribution of a contact status update, when the time of update is known -->
+ <string name="contact_status_update_attribution_with_date"><xliff:g id="date" example="3 hours ago">%1$s</xliff:g> via <xliff:g id="source" example="Google Talk">%2$s</xliff:g></string>
+
+ <!-- Font family used when drawing letters for letter tile avatars.
+ Do not translate. -->
+ <string name="letter_tile_letter_font_family">sans-serif-medium</string>
+
+ <!-- Content description for the fake action menu up button as used
+ inside search. [CHAR LIMIT=NONE] -->
+ <string name="action_menu_back_from_search">stop searching</string>
+
+ <!-- String describing the icon used to clear the search field -->
+ <string name="description_clear_search">Clear search</string>
+
+ <!-- The font-family to use for the text inside the searchbox.
+ Do not translate. -->
+ <string name="search_font_family">sans-serif</string>
+
+ <!-- Title for Select Account Dialog [CHAR LIMIT=30] -->
+ <string name="select_account_dialog_title">Account</string>
+
+ <!-- Label for the check box to toggle default sim card setting [CHAR LIMIT=35]-->
+ <string name="set_default_account">Always use this for calls</string>
+
+ <!-- String used for actions in the dialer call log and the quick contact card to initiate
+ a call to an individual. The user is prompted to enter a note which is sent along with
+ the call (e.g. a call subject). [CHAR LIMIT=40] -->
+ <string name="call_with_a_note">Call with a note</string>
+
+ <!-- Hint text shown in the call subject dialog. [CHAR LIMIT=255] -->
+ <string name="call_subject_hint">Type a note to send with call&#8230;</string>
+
+ <!-- Button used to start a new call with the user entered subject. [CHAR LIMIT=32] -->
+ <string name="send_and_call_button">SEND &amp; CALL</string>
+
+ <!-- String used to represent the total number of characters entered for a call subject,
+ compared to the character limit. Example: 2 / 64 -->
+ <string name="call_subject_limit"><xliff:g id="count" example="4">%1$s</xliff:g> / <xliff:g id="limit" example="64">%2$s</xliff:g></string>
+
+ <!-- String used to build a phone number bype and phone number string.
+ Example: Mobile • 650-555-1212 -->
+ <string name="call_subject_type_and_number"><xliff:g id="type" example="Mobile">%1$s</xliff:g> • <xliff:g id="number" example="(650) 555-1212">%2$s</xliff:g></string>
+
+ <!-- Build version title in About preference. [CHAR LIMIT=40]-->
+ <string name="about_build_version">Build version</string>
+
+ <!-- Open source licenses title in About preference. [CHAR LIMIT=60] -->
+ <string name="about_open_source_licenses">Open source licenses</string>
+
+ <!-- Open source licenses summary in About preference. [CHAR LIMIT=NONE] -->
+ <string name="about_open_source_licenses_summary">License details for open source software</string>
+
+ <!-- Privacy policy title in About preference. [CHAR LIMIT=40]-->
+ <string name="about_privacy_policy">Privacy policy</string>
+
+ <!-- Terms of service title in about preference. [CHAR LIMIT=60]-->
+ <string name="about_terms_of_service">Terms of service</string>
+
+ <!-- Title for the activity that displays licenses for open source libraries. [CHAR LIMIT=100]-->
+ <string name="activity_title_licenses">Open source licenses</string>
+
+ <!-- Toast message showing when failed to open the url. [CHAR LIMIT=100]-->
+ <string name="url_open_error_toast">Failed to open the url.</string>
+
+ <!-- Content description of entries (including that radio button is checked) in contact
+ accounts list filter. For example: Google abc@gmail.com checked, etc [CHAR LIMIT=30]-->
+ <string name="account_filter_view_checked"><xliff:g id="account_info">%s</xliff:g> checked</string>
+
+ <!-- Content description of entries (including that the radio button is not checked) in contact
+ accounts list filter. For example: Google abc@gmail.com not checked, etc [CHAR LIMIT=30]-->
+ <string name="account_filter_view_not_checked"><xliff:g id="account_info">%s</xliff:g> not checked</string>
+
+ <!-- Description string for an action button to initiate a video call from search results.
+ Note: AccessibilityServices use this attribute to announce what the view represents.
+ This is especially valuable for views without textual representation like ImageView.
+
+ [CHAR LIMIT=NONE]-->
+ <string name="description_search_video_call">Place video call</string>
+
+ <!-- Content description of delete contact button [CHAR LIMIT=30]-->
+ <string name="description_delete_contact">Delete</string>
+
+ <!-- Content description for (...) in no name header [CHAR LIMIT=30]-->
+ <string name="description_no_name_header">Ellipsis</string>
+
+ <!-- Formatted call duration displayed in recent card in QuickContact, for duration less than 1 minute -->
+ <string name="callDurationSecondFormat"><xliff:g id="seconds">%s</xliff:g> sec</string>
+
+ <!-- Formatted call duration displayed in recent card in QuickContact, for duration less than 1 hour -->
+ <string name="callDurationMinuteFormat"><xliff:g id="minutes">%1$s</xliff:g> min <xliff:g id="seconds">%2$s</xliff:g> sec</string>
+
+ <!-- Formatted call duration displayed in recent card in QuickContact, for duration more than 1 hour -->
+ <string name="callDurationHourFormat"><xliff:g id="minutes">%1$s</xliff:g> hr <xliff:g id="minutes">%2$s</xliff:g> min <xliff:g id="seconds">%3$s</xliff:g> sec</string>
+
+ <!-- Toast shown when a dynamic shortcut is tapped after being disabled because the experiment was turned off on the device -->
+ <string name="dynamic_shortcut_disabled_message">This shortcut has been disabled</string>
+
+ <!-- Toast shown when a dynamic shortcut is tapped after being disabled because the contact was removed -->
+ <string name="dynamic_shortcut_contact_removed_message">Contact was removed</string>
+
+ <!-- Text for button shown in toolbar to start import of SIM contacts -->
+ <string name="sim_import_button_text">Import</string>
+
+ <!-- Toolbar title shown when importing SIM contacts and none are selected -->
+ <string name="sim_import_title_none_selected">Select contacts</string>
+
+ <!-- Message shown when the SIM import screen is displayed but there are no contacts on the
+ SIM card -->
+ <string name="sim_import_empty_message">No contacts on your SIM card</string>
+
+ <!-- Snackbar message shown on the SIM import screen when the user taps on a contact that
+ is disabled because an exact duplicate already exists in their contacts [CHAR LIMIT=60] -->
+ <string name="sim_import_contact_exists_toast">Contact already exists in your list</string>
+
+ <!-- Toast shown on settings screen when importing from SIM completes successfully -->
+ <plurals name="sim_import_success_toast_fmt">
+ <item quantity="one">1 SIM contact imported</item>
+ <item quantity="other"><xliff:g id="count">%d</xliff:g> SIM contacts imported</item>
+ </plurals>
+
+ <!-- Toast shown on settings screen when importing from SIM completes with an error -->
+ <string name="sim_import_failed_toast">Failed to import SIM contacts</string>
+
+ <!-- Title of the SIM import activity; this isn't displayed but is announced by talkback
+ when the window is first opened [CHAR LIMIT=40] -->
+ <string name="sim_import_title">Import from SIM</string>
+
+ <!-- Content description of the cancel navigation icon shown in SIM import screen toolbar [CHAR LIMIT=NONE]-->
+ <string name="sim_import_cancel_content_description">Cancel</string>
+
+ <!-- Alert for letting user know that their device auto-sync setting is turned off,
+ in case they are wondering why they are not seeing any contact. [CHAR LIMIT=150] -->
+ <string name="auto_sync_off">Auto-sync is off. Tap to turn on.</string>
+
+ <!-- Content description for the "X" image icon for dismissing an alert.[CHAR LIMIT=50] -->
+ <string name="dismiss_sync_alert">Dismiss</string>
+
+ <!-- Alert for letting user know that their account level sync setting is turned off,
+ in case they are wondering why they are not seeing any contact. [CHAR LIMIT=150] -->
+ <string name="account_sync_off">Account sync is off. Tap to turn on.</string>
+
+ <!-- Title of dialog to turn auto-sync on [CHAR LIMIT=100] -->
+ <string name="turn_auto_sync_on_dialog_title">Turn on auto-sync?</string>
+
+ <!-- Text of dialog to turn auto-sync on [CHAR LIMIT=500] -->
+ <string name="turn_auto_sync_on_dialog_body">Changes you make to all apps and accounts, not just Google Contacts, will be kept up to date between the web and your devices.</string>
+
+ <!-- Confirm button text for dialog to turn auto-sync on [CHAR LIMIT=30] -->
+ <string name="turn_auto_sync_on_dialog_confirm_btn">Turn on</string>
+
+ <!-- No network connection error message [CHAR LIMIT=50] -->
+ <string name="connection_error_message">No connection</string>
+
+ <!-- Generic label for the SIM card when there is only a single SIM in the device [CHAR LIMIT=10]-->
+ <string name="single_sim_display_label">SIM</string>
+
+ <!-- Content description for dropdown arrow (https://material.io/icons/#ic_arrow_drop_down)
+ This is used to indicate that a list of options can be opened by tapping on it.
+ [CHAR LIMIT=NONE] -->
+ <string name="show_more_content_description">Show more</string>
+
+ <!-- The notification title shown when importing a SIM card finishes [CHAR LIMIT=40] -->
+ <string name="importing_sim_finished_title">Finished importing SIM card</string>
+
+ <!-- Notification title shown when importing SIM contacts failed [CHAR LIMIT=40] -->
+ <string name="importing_sim_failed_title">Import failed</string>
+
+ <!-- Notification message shown when importing SIM contacts failed [CHAR LIMIT=NONE] -->
+ <string name="importing_sim_failed_message">Couldn\'t import contacts from SIM card</string>
+
+ <!-- The notification title shown while SIM contacts are being imported [CHAR LIMIT=40] -->
+ <string name="importing_sim_in_progress_title">Importing SIM</string>
+
+ <!-- Text shown when viewing channel settings for default Contacts notifications [CHAR LIMIT=50] -->
+ <string name="contacts_default_notification_channel">Notifications</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7402235f1..4c78136c1 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -13,26 +13,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
- <style name="DetailActivityTheme" parent="@android:style/Theme.Holo.Light">
- <item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
- <item name="android:homeAsUpIndicator">@drawable/ic_menu_back</item>
- <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflow</item>
- <item name="android:actionBarItemBackground">@drawable/action_bar_item_background</item>
- <item name="android:actionBarWidgetTheme">@style/ContactsActionBarTheme</item>
- <item name="android:textColorPrimary">@color/primary_text_color</item>
- <item name="android:textColorSecondary">@color/secondary_text_color</item>
- <item name="android:listViewStyle">@style/ListViewStyle</item>
- </style>
-
- <style name="EditorActivityTheme" parent="@style/PeopleTheme">
- <item name="android:listViewStyle">@style/ListViewStyle</item>
- <item name="android:actionBarStyle">@style/EditorActionBarStyle</item>
- <item name="android:colorButtonNormal">@color/background_primary</item>
- </style>
-
- <style name="Theme">
+ <style name="EditorActivityTheme" parent="@style/PeopleActivityTheme">
+ <item name="actionBarStyle">@style/EditorActionBarStyle</item>
+ <item name="colorButtonNormal">@color/background_primary</item>
+ <item name="windowActionModeOverlay">true</item>
</style>
<style name="Theme.QuickContact" parent="@style/PeopleTheme">
@@ -47,22 +34,16 @@
<item name="android:listViewStyle">@style/ListViewStyle</item>
<!-- We need to use a light ripple behind ActionBar items in order for them to
be visible when using some of the darker ActionBar tints -->
- <item name="android:actionBarItemBackground">@drawable/item_background_material_borderless_dark</item>
+ <item name="android:actionBarItemBackground">
+ @drawable/item_background_material_borderless_dark
+ </item>
</style>
- <style name="PeopleTheme" parent="@android:style/Theme.Material.Light">
+ <style name="PeopleTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
- <!-- Style for the tab bar (for the divider between tabs) -->
- <item name="android:actionBarTabBarStyle">@style/ContactsActionBarTabBarStyle</item>
- <!-- Style for the tab bar text (for text on tabs) -->
- <item name="android:actionBarTabTextStyle">@style/ContactsActionBarTabTextStyle</item>
- <!-- Drawable for the back button -->
- <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
<!-- Style for the overflow button in the actionbar. -->
<item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
- <item name="android:actionModeCloseDrawable">@drawable/ic_close_lt</item>
- <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
- <item name="android:fastScrollTrackDrawable">@null</item>
+ <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
<item name="android:textColorPrimary">@color/primary_text_color</item>
<item name="android:textColorSecondary">@color/secondary_text_color</item>
<item name="android:icon">@android:color/transparent</item>
@@ -72,9 +53,80 @@
<item name="android:colorPrimary">@color/primary_color</item>
<item name="android:colorAccent">@color/primary_color</item>
<item name="android:alertDialogTheme">@style/ContactsAlertDialogTheme</item>
- <item name="list_item_height">?android:attr/listPreferredItemHeight</item>
- <item name="activated_background">@drawable/list_item_activated_background</item>
- <item name="section_header_background">@drawable/list_title_holo</item>
+ <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
+ <item name="list_section_header_height">24dip</item>
+ <item name="list_item_padding_top">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_right">32dp</item>
+ <item name="list_item_padding_bottom">
+ @dimen/contact_browser_list_item_padding_top_or_bottom
+ </item>
+ <item name="list_item_padding_left">0dp</item>
+ <item name="list_item_gap_between_image_and_text">
+ @dimen/contact_browser_list_item_gap_between_image_and_text
+ </item>
+ <item name="list_item_gap_between_label_and_data">5dip</item>
+ <item name="list_item_presence_icon_margin">4dip</item>
+ <item name="list_item_presence_icon_size">16dip</item>
+ <item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
+ <item name="list_item_profile_photo_size">70dip</item>
+ <item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
+ <item name="list_item_background_color">@color/list_item_pinned_header_color</item>
+ <item name="list_item_header_text_color">@color/people_app_theme_color</item>
+ <item name="list_item_header_text_size">14sp</item>
+ <item name="list_item_header_height">30dip</item>
+ <item name="list_item_header_text_indent">8dip</item>
+ <item name="contact_browser_list_padding_left">0dip</item>
+ <item name="contact_browser_list_padding_right">0dip</item>
+ <item name="contact_browser_background">@color/background_primary</item>
+ <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+ <item name="list_item_text_offset_top">-2dp</item>
+ <item name="list_item_avatar_offset_top">-1dp</item>
+ <!-- Favorites -->
+ <item name="favorites_padding_bottom">0dip</item>
+ <!-- Popup menu -->
+ <item name="android:popupMenuStyle">@style/PopupMenuStyle</item>
+ </style>
+
+ <style name="LaunchScreenTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+ <item name="android:windowBackground">@drawable/quantum_launchscreen_contacts</item>
+ <!-- Ensure the status bar color matches the background (grey 500) -->
+ <!-- TODO(yaolu): Switch to use quantum_grey if in Google3 -->
+ <item name="android:colorPrimaryDark">#9e9e9e</item>
+ </style>
+
+ <style name="PeopleActivityTheme" parent="@style/PeopleThemeAppCompat">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
+ </style>
+
+ <style name="PeopleThemeAppCompat" parent="Theme.AppCompat.Light.DarkActionBar">
+ <!-- Styles that require AppCompat compatibility, remember to update both sets -->
+ <item name="android:actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
+ <item name="actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
+ <item name="android:actionButtonStyle">@style/ContactsActionButtonStyle</item>
+ <item name="actionButtonStyle">@style/ContactsActionButtonStyle</item>
+ <!-- Style for the overflow button in the actionbar. -->
+ <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+ <item name="actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
+ <item name="toolbarNavigationButtonStyle">@style/ContactToolbarNavigationButtonStyle</item>
+ <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
+ <item name="android:textColorPrimary">@color/primary_text_color</item>
+ <item name="android:textColorSecondary">@color/secondary_text_color</item>
+ <item name="android:icon">@android:color/transparent</item>
+ <item name="android:listViewStyle">@style/ListViewStyle</item>
+ <item name="android:windowBackground">@color/background_primary</item>
+ <item name="android:colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="colorPrimaryDark">@color/primary_color_dark</item>
+ <item name="android:colorPrimary">@color/primary_color</item>
+ <item name="colorPrimary">@color/primary_color</item>
+ <item name="android:colorAccent">@color/primary_color</item>
+ <item name="colorAccent">@color/primary_color</item>
+ <item name="android:alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
+ <item name="alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
+ <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
<item name="list_section_header_height">24dip</item>
<item name="list_item_padding_top">
@dimen/contact_browser_list_item_padding_top_or_bottom
@@ -83,10 +135,13 @@
<item name="list_item_padding_bottom">
@dimen/contact_browser_list_item_padding_top_or_bottom
</item>
- <item name="list_item_padding_left">16dip</item>
+ <item name="list_item_padding_left">0dp</item>
<item name="list_item_gap_between_image_and_text">
@dimen/contact_browser_list_item_gap_between_image_and_text
</item>
+ <item name="list_item_gap_between_indexer_and_image">
+ @dimen/contact_browser_list_item_gap_between_indexer_and_image
+ </item>
<item name="list_item_gap_between_label_and_data">5dip</item>
<item name="list_item_presence_icon_margin">4dip</item>
<item name="list_item_presence_icon_size">16dip</item>
@@ -97,19 +152,38 @@
<item name="list_item_header_text_color">@color/people_app_theme_color</item>
<item name="list_item_header_text_size">14sp</item>
<item name="list_item_header_height">30dip</item>
- <item name="list_item_data_width_weight">5</item>
- <item name="list_item_label_width_weight">3</item>
<item name="list_item_header_text_indent">8dip</item>
<item name="contact_browser_list_padding_left">0dip</item>
<item name="contact_browser_list_padding_right">0dip</item>
<item name="contact_browser_background">@color/background_primary</item>
<item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+ <item name="list_item_text_offset_top">-2dp</item>
+ <item name="list_item_avatar_offset_top">-1dp</item>
<!-- Favorites -->
<item name="favorites_padding_bottom">0dip</item>
+ <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
+ <!-- Popup menu -->
+ <item name="android:popupMenuStyle">@style/PopupMenuStyleAppCompat</item>
+ <item name="popupMenuStyle">@style/PopupMenuStyleAppCompat</item>
</style>
- <style name="ContactsActionBarOverflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
- <item name="android:src">@drawable/ic_overflow_menu</item>
+ <style name="PopupMenuStyle" parent="@android:style/Widget.PopupMenu">
+ <item name="android:popupBackground">@android:color/white</item>
+ </style>
+
+ <style name="PopupMenuStyleAppCompat" parent="Widget.AppCompat.PopupMenu">
+ <item name="android:popupBackground">@android:color/white</item>
+ </style>
+
+ <style name="ContactsActionButtonStyle" parent="Widget.AppCompat.ActionButton">
+ <item name="android:paddingStart">16dp</item>
+ <item name="android:paddingEnd">16dp</item>
+ </style>
+
+ <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
+ <item name="spinBars">false</item>
+ <item name="color">@android:color/white</item>
+ <item name="android:color">@android:color/white</item>
</style>
<!-- Use the non-light style so that the up button & icons aren't black. If we use the
@@ -122,87 +196,87 @@
<item name="android:icon">@android:color/transparent</item>
</style>
- <style name="EditorActionBarStyle" parent="@style/ContactsActionBarStyle">
+ <style name="ContactsActionBarStyleAppCompat"
+ parent="@style/Widget.AppCompat.ActionBar.Solid">
+ <!-- Styles that require AppCompat compatibility, remember to update both sets -->
+ <item name="android:background">@color/actionbar_background_color</item>
+ <item name="background">@color/actionbar_background_color</item>
+ <item name="android:titleTextStyle">@style/ContactsActionBarTitleTextAppCompat</item>
+ <item name="titleTextStyle">@style/ContactsActionBarTitleTextAppCompat</item>
+ <item name="android:backgroundStacked">@color/actionbar_background_color</item>
+ <item name="backgroundStacked">@color/actionbar_background_color</item>
+ <!-- Empty icon -->
+ <item name="android:icon">@android:color/transparent</item>
+ <item name="icon">@android:color/transparent</item>
+ </style>
+
+ <style name="EditorActionBarStyle" parent="@style/ContactsToolbarStyle">
<item name="android:contentInsetStart">72dp</item>
+ <item name="android:contentInsetStartWithNavigation">72dp</item>
+ <item name="android:titleTextAppearance">@style/ContactsActionBarTitleText</item>
</style>
<!-- When this style was added, android:toolbarStyle was private. Therefore, this style
must be directly applied to every toolbar -->
- <style name="ContactsToolbarStyle" parent="@android:style/Widget.Toolbar">
- <item name="android:titleTextAppearance">@style/ContactsActionBarTitleText</item>
+ <style name="ContactsToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
+ <!-- Styles that require AppCompat compatibility, remember to update both sets -->
+ <item name="android:titleTextAppearance">@style/ContactsActionBarTitleTextAppCompat</item>
+ <item name="titleTextAppearance">@style/ContactsActionBarTitleTextAppCompat</item>
</style>
- <style name="ContactsPickerActionBarStyle" parent="@style/ContactsActionBarStyle">
- <!-- when first loading, don't show title or up button -->
- <item name="android:displayOptions"></item>
+ <style name="LightToolbarNavigationButtonStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">
+ <item name="android:tint">?android:textColorSecondary</item>
</style>
- <style name="ContactPickerSearchTheme" parent="@style/PeopleTheme">
- <item name="android:textColorPrimary">@android:color/white</item>
- <item name="android:textColorHint">?android:textColorHintInverse</item>
- <item name="android:colorControlActivated">?android:textColorHintInverse</item>
- <item name="android:colorControlNormal">@android:color/white</item>
+ <style name="LightToolbarThemeOverlay" parent="@style/ThemeOverlay.AppCompat.ActionBar">
+ <item name="toolbarNavigationButtonStyle">@style/LightToolbarNavigationButtonStyle</item>
+ </style>
+
+ <style name="LightToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
+ <item name="android:background">@color/contextual_selection_bar_color</item>
+ <item name="background">@color/contextual_selection_bar_color</item>
+ <item name="android:titleTextAppearance">@style/ContactsActionBarTitleTextBlack</item>
+ <item name="titleTextAppearance">@style/ContactsActionBarTitleTextBlack</item>
</style>
<!-- Text in the action bar at the top of the screen -->
<style name="ContactsActionBarTitleText"
- parent="@android:style/TextAppearance.Material.Widget.ActionBar.Title">
+ parent="@android:style/TextAppearance.Material.Widget.ActionBar.Title">
+ <item name="android:textSize">20dp</item>
<item name="android:textColor">@color/actionbar_text_color</item>
</style>
- <!-- Styling for the tab bar; handles styling of the divider line. -->
- <style name="ContactsActionBarTabBarStyle"
- parent="@android:style/Widget.Material.ActionBar.TabBar">
- <item name="android:showDividers">none</item>
+ <style name="ContactsActionBarTitleTextAppCompat" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
+ <item name="android:textSize">20dp</item>
+ <item name="android:textColor">@color/actionbar_text_color</item>
</style>
- <!-- Text style for tabs. -->
- <style name="ContactsActionBarTabTextStyle"
- parent="android:style/Widget.Material.Light.ActionBar.TabText">
- <item name="android:textColor">@color/tab_text_color</item>
- <item name="android:textSize">@dimen/tab_text_size</item>
- <item name="android:fontFamily">@string/tab_font_family</item>
- <item name="android:elevation">0dp</item>
- <item name="android:textStyle">bold</item>
+ <style name="ContactsActionBarTitleTextBlack" parent="@style/ContactsActionBarTitleTextAppCompat">
+ <item name="android:textColor">@color/actionbar_text_color_black</item>
</style>
<!-- Action bar overflow menu icon. -->
<style name="ContactsActionBarOverflowQP"
- parent="@android:style/Widget.Material.Light.ActionButton.Overflow">
- <item name="android:src">@drawable/ic_more_vert</item>
+ parent="Widget.AppCompat.Light.ActionButton.Overflow">
+ <item name="android:src">@drawable/quantum_ic_more_vert_vd_theme_24</item>
<item name="android:tint">@color/action_bar_button_text_color</item>
</style>
- <style name="ContactsActionBarDropDownStyle" parent="@android:style/Widget.Holo.Light.Spinner">
- <item name="android:background">@drawable/ab_dropdown_navigation_item_background</item>
- </style>
-
- <style name="ContactsActionBarTheme" parent="@android:style/Theme.Holo.Light">
- <item name="android:textColorHint">#CCCCCC</item>
- <item name="android:textColor">@android:color/black</item>
- <item name="android:popupMenuStyle">@android:style/Widget.Holo.Light.PopupMenu</item>
- <item name="android:dropDownListViewStyle">@style/ListViewDropdownStyle</item>
- </style>
-
- <style name="ListViewDropdownStyle" parent="@android:style/Widget.ListView.DropDown">
- <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
- </style>
-
- <style name="ContactPickerTheme" parent="@style/PeopleTheme" >
- <item name="android:actionBarStyle">@style/ContactsPickerActionBarStyle</item>
+ <!-- Toolbar navigation button. -->
+ <style name="ContactToolbarNavigationButtonStyle" parent="@style/Widget.AppCompat.Toolbar.Button.Navigation">
+ <item name="android:tint">@color/action_bar_button_text_color</item>
</style>
- <style name="ContactPickerLayout" parent="ContactPickerTheme">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">match_parent</item>
+ <style name="ContactPickerTheme" parent="PeopleActivityTheme">
</style>
- <style name="ContactsPreferencesTheme" parent="@style/PeopleTheme">
+ <style name="ContactsPreferencesTheme" parent="@style/PeopleThemeAppCompat">
<item name="android:listViewStyle">@style/ListViewStyle</item>
</style>
<style name="ContactListFilterTheme" parent="@style/PeopleTheme">
<item name="android:listViewStyle">@style/ListViewStyle</item>
+ <item name="android:actionButtonStyle">@style/FilterActionButtonStyle</item>
</style>
<style name="NonPhoneActivityTheme" parent="@android:Theme.Translucent.NoTitleBar">
@@ -223,60 +297,10 @@
<item name="android:colorAccent">@color/primary_color</item>
</style>
- <style name="SectionDivider">
- <item name="android:background">#7e7e87</item>
- <item name="android:layout_height">1dip</item>
- <item name="android:layout_width">match_parent</item>
- </style>
-
- <style name="ConfirmAddDetailViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">wrap_content</item>
- </style>
-
- <style name="ConfirmAddDetailHeaderViewStyle">
- <item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">150dip</item>
- </style>
-
<style name="SelectableItem" parent="@android:style/Theme.Material.Light">
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
- <style name="QuickContactListItemTextWrapperStyle">
- <item name="android:layout_width">0dip</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:layout_weight">1</item>
- <item name="android:paddingLeft">16dip</item>
- <item name="android:paddingRight">16dip</item>
- <item name="android:paddingStart">16dip</item>
- <item name="android:paddingEnd">16dip</item>
- <item name="android:gravity">center_vertical</item>
- <item name="android:orientation">vertical</item>
- </style>
-
- <style name="Theme.PhotoSelector" parent="@android:style/Theme.Holo.Light">
- <item name="android:windowBackground">@android:color/transparent</item>
- <item name="android:windowFrame">@null</item>
- <item name="android:windowContentOverlay">@null</item>
- <item name="android:windowAnimationStyle">@null</item>
- <item name="android:backgroundDimEnabled">false</item>
- <item name="android:windowIsTranslucent">true</item>
- <item name="android:windowNoTitle">true</item>
- </style>
-
- <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Small"/>
-
- <style name="PeopleNavigationDropDownTextAppearance">
- <item name="android:textColor">@color/primary_text_color</item>
- <item name="android:textSize">18sp</item>
- </style>
-
- <style name="PeopleNavigationDropDownHeaderTextAppearance">
- <item name="android:textColor">@color/primary_text_color</item>
- <item name="android:textSize">18sp</item>
- </style>
-
<style name="ExpandingEntryCardStyle">
<item name="android:elevation">@dimen/expanding_entry_card_elevation</item>
<item name="android:background">@color/expanding_entry_card_background_color</item>
@@ -316,6 +340,11 @@
<item name="android:colorAccent">@color/primary_color</item>
</style>
+ <style name="ContactsAlertDialogThemeAppCompat" parent="Theme.AppCompat.Light.Dialog.MinWidth">
+ <item name="android:colorAccent">@color/primary_color</item>
+ <item name="colorAccent">@color/primary_color</item>
+ </style>
+
<style name="EditKindIconStyle">
<item name="android:layout_width">24dp</item>
<item name="android:layout_height">24dp</item>
@@ -349,4 +378,218 @@
<item name="android:textColor">#363636</item>
<item name="android:fontFamily">sans-serif</item>
</style>
+
+ <style name="NavigationDrawerMenuItemTextAppearance">
+ <item name="android:ellipsize">end</item>
+ </style>
+
+ <!-- Text style for empty states (no account view, empty label). -->
+ <style name="EmptyStateTextStyle">
+ <item name="android:textSize">18sp</item>
+ <item name="android:textColor">#000000</item>
+ <item name="android:alpha">0.54</item>
+ <item name="android:fontFamily">sans-serif</item>
+ </style>
+
+ <!-- Button style for main contacts no account empty view. -->
+ <style name="NoAccountViewButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless">
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">@color/primary_color</item>
+ <item name="android:fontFamily">sans-serif-medium</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
+
+ <!-- Add contacts button style for empty states. -->
+ <style name="AddContactsButtonStyle" parent="@style/Widget.AppCompat.Button.Borderless">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textColor">@color/primary_color</item>
+ <item name="android:fontFamily">sans-serif-medium</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
+
+ <style name="SectionHeaderStyle" parent="@android:style/TextAppearance.Large">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textColor">@color/section_header_text_color</item>
+ <item name="android:textStyle">bold</item>
+ </style>
+
+ <style name="DirectoryHeaderStyle" parent="@android:style/TextAppearance.Small">
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">@color/dialtacts_secondary_text_color</item>
+ <item name="android:fontFamily">sans-serif-medium</item>
+ </style>
+
+ <!-- TextView style used for headers.
+
+This is similar to ?android:attr/listSeparatorTextView but uses different
+background and text color. See also android:style/Widget.Holo.TextView.ListSeparator
+(which is private, so we cannot specify it as a parent style). -->
+ <style name="ContactListSeparatorTextViewStyle">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">wrap_content</item>
+ <!-- See comments for @dimen/list_section_divider_min_height -->
+ <item name="android:minHeight">@dimen/list_section_divider_min_height</item>
+ <item name="android:textAppearance">@style/DirectoryHeaderStyle</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="android:paddingLeft">8dip</item>
+ <item name="android:paddingStart">8dip</item>
+ <item name="android:paddingTop">4dip</item>
+ <item name="android:paddingBottom">4dip</item>
+ <item name="android:ellipsize">end</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:textAllCaps">true</item>
+ </style>
+
+ <style name="TextAppearanceMedium" parent="@android:style/TextAppearance.Medium">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textColor">#000000</item>
+ </style>
+
+ <style name="TextAppearanceSmall" parent="@android:style/TextAppearance.Small">
+ <item name="android:textSize">14sp</item>
+ <item name="android:textColor">#737373</item>
+ </style>
+
+ <style name="ListViewStyle" parent="@android:style/Widget.Material.Light.ListView">
+ <item name="android:overScrollMode">always</item>
+ </style>
+
+ <!-- Adding padding to action button doesn't move it to left, we increase the button width to
+ make margin between the button and screen edge 16dp -->
+ <style name="FilterActionButtonStyle" parent="@android:Widget.ActionButton">
+ <item name="android:minWidth">@dimen/contact_filter_action_button_width</item>
+ <item name="android:textColor">@color/actionbar_text_color</item>
+ </style>
+
+ <style name="CustomContactListFilterView" parent="ContactListFilterTheme">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">match_parent</item>
+ </style>
+
+ <style name="BackgroundOnlyTheme" parent="@android:style/Theme.Material.Light">
+ <item name="android:windowBackground">@null</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowAnimationStyle">@null</item>
+ <item name="android:windowNoTitle">true</item>
+ <!-- Activities that use this theme are background activities without obvious displays.
+ However, some also have dialogs. Therefore, it doesn't make sense to set this true.-->
+ <item name="android:windowNoDisplay">false</item>
+ <item name="android:windowIsFloating">true</item>
+ </style>
+
+ <style name="Theme.CallSubjectDialogTheme" parent="@android:style/Theme.Material.Light.Dialog">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">match_parent</item>
+
+ <!-- No backgrounds, titles or window float -->
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowFullscreen">false</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowDrawsSystemBarBackgrounds">false</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowElevation">0dp</item>
+ </style>
+
+ <!-- Transparent/blank activity -->
+ <style name="TransparentThemeAppCompat" parent="@style/PeopleActivityTheme">
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:backgroundDimEnabled">false</item>
+ </style>
+
+ <style name="FullScreenDialogAnimationStyle">
+ <item name="android:windowEnterAnimation">@anim/slide_and_fade_in</item>
+ <item name="android:windowExitAnimation">@anim/slide_and_fade_out</item>
+ </style>
+
+ <style name="PeopleThemeAppCompat.FullScreenDialog">
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ <item name="windowActionBar">false</item>
+ <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
+ <item name="android:windowAnimationStyle">@style/FullScreenDialogAnimationStyle</item>
+ </style>
+
+ <style name="PeopleThemeAppCompat.FullScreenDialog.SimImportActivity">
+ <!-- This is necessary because the window is partially transparent during the enter
+ and exit animations -->
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:statusBarColor">@color/contextual_selection_bar_status_bar_color</item>
+ </style>
+
+ <!-- Style for item in navigation drawer -->
+ <style name="DrawerItemStyle">
+ <item name="android:layout_width">match_parent</item>
+ <item name="android:layout_height">@dimen/drawer_item_fixed_height</item>
+ <item name="android:layout_gravity">center_vertical</item>
+ <item name="android:background">@drawable/drawer_item_background</item>
+ <item name="android:orientation">horizontal</item>
+ <item name="android:paddingStart">@dimen/drawer_side_padding</item>
+ </style>
+
+ <style name="DrawerPrimaryItemStyle" parent="DrawerItemStyle">
+ <item name="android:paddingEnd">@dimen/drawer_item_text_margin</item>
+ </style>
+
+ <!-- Style for item icon in navigation drawer -->
+ <style name="DrawerItemIconStyle">
+ <item name="android:layout_width">@dimen/drawer_item_icon_size</item>
+ <item name="android:layout_height">@dimen/drawer_item_icon_size</item>
+ <item name="android:layout_gravity">center</item>
+ <item name="android:gravity">center</item>
+ <item name="android:scaleType">center</item>
+ </style>
+
+ <!-- Style for primary item text in navigation drawer -->
+ <style name="DrawerItemTextStyle" parent="DrawerTextStyle">
+ <item name="android:textColor">@color/primary_text_color</item>
+ <item name="android:layout_width">0dip</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_weight">1</item>
+ <item name="android:layout_marginStart">@dimen/drawer_item_text_margin</item>
+ <item name="android:layout_marginEnd">@dimen/drawer_item_text_margin</item>
+ </style>
+
+ <style name="DrawerTextStyle">
+ <item name="android:fontFamily" tools:ignore="NewApi">sans-serif-medium</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="android:layout_gravity">center_vertical</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:ellipsize">end</item>
+ </style>
+
+ <style name="DrawerItemTextActiveStyle">
+ <item name="android:textColor">@color/primary_color</item>
+ <item name="android:textStyle">bold</item>
+ </style>
+
+ <style name="DrawerItemTextInactiveStyle">
+ <item name="android:textColor">@color/quantum_black_text</item>
+ <item name="android:textStyle">bold</item>
+ </style>
+
+ <style name="DrawerHeaderTextStyle" parent="DrawerTextStyle">
+ <item name="android:layout_gravity">center_vertical|start</item>
+ <item name="android:paddingTop">12dp</item>
+ <item name="android:paddingBottom">12dp</item>
+ <item name="android:textColor">@color/quantum_black_secondary_text</item>
+ <item name="android:textSize">14sp</item>
+ </style>
+
+ <style name="DrawerBadgeStyle" parent="DrawerHeaderTextStyle">
+ <item name="android:layout_gravity">center_vertical|end</item>
+ </style>
+
+ <style name="DrawerHeaderItemStyle">
+ <item name="android:paddingStart">@dimen/drawer_side_padding</item>
+ <item name="android:paddingEnd">@dimen/drawer_label_header_end_padding</item>
+ </style>
</resources>
diff --git a/res/xml/preference_about.xml b/res/xml/preference_about.xml
new file mode 100644
index 000000000..a109db68e
--- /dev/null
+++ b/res/xml/preference_about.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <Preference
+ android:icon="@null"
+ android:key="@string/pref_build_version_key"
+ android:title="@string/about_build_version"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="@string/pref_open_source_licenses_key"
+ android:title="@string/about_open_source_licenses"
+ android:summary="@string/about_open_source_licenses_summary"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="@string/pref_privacy_policy_key"
+ android:title="@string/about_privacy_policy">
+ </Preference>
+
+ <Preference
+ android:icon="@null"
+ android:key="@string/pref_terms_of_service_key"
+ android:title="@string/about_terms_of_service">
+ </Preference>
+</PreferenceScreen>
diff --git a/res/xml/preference_display_options.xml b/res/xml/preference_display_options.xml
new file mode 100644
index 000000000..c969cd24f
--- /dev/null
+++ b/res/xml/preference_display_options.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <Preference
+ android:icon="@null"
+ android:key="myInfo"
+ android:title="@string/settings_my_info_title"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="accounts"
+ android:title="@string/settings_accounts">
+ </Preference>
+
+ <com.android.contacts.preference.DefaultAccountPreference
+ android:icon="@null"
+ android:key="defaultAccount"
+ android:title="@string/default_editor_account"
+ android:dialogTitle="@string/default_editor_account" />
+
+ <Preference
+ android:icon="@null"
+ android:key="customContactsFilter"
+ android:title="@string/menu_contacts_filter"/>
+
+ <com.android.contacts.preference.SortOrderPreference
+ android:icon="@null"
+ android:key="sortOrder"
+ android:title="@string/display_options_sort_list_by"
+ android:dialogTitle="@string/display_options_sort_list_by" />
+
+ <com.android.contacts.preference.DisplayOrderPreference
+ android:icon="@null"
+ android:key="displayOrder"
+ android:title="@string/display_options_view_names_as"
+ android:dialogTitle="@string/display_options_view_names_as" />
+
+ <com.android.contacts.preference.PhoneticNameDisplayPreference
+ android:icon="@null"
+ android:key="phoneticNameDisplay"
+ android:title="@string/display_options_phonetic_name_fields"
+ android:dialogTitle="@string/display_options_phonetic_name_fields"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="import"
+ android:title="@string/menu_import"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="export"
+ android:title="@string/menu_export"/>
+
+ <Preference
+ android:icon="@null"
+ android:key="blockedNumbers"
+ android:title="@string/menu_blocked_numbers" />
+
+ <Preference
+ android:icon="@null"
+ android:key="about"
+ android:title="@string/setting_about"
+ android:order="@integer/about_contacts_order_number"/>
+</PreferenceScreen>
diff --git a/res/xml/shortcuts.xml b/res/xml/shortcuts.xml
new file mode 100644
index 000000000..c33893a7d
--- /dev/null
+++ b/res/xml/shortcuts.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
+ <shortcut
+ android:enabled="true"
+ android:icon="@drawable/ic_add_circle_24dp"
+ android:shortcutId="shortcut-add-contact"
+ android:shortcutShortLabel="@string/shortcut_add_contact">
+ <intent
+ android:action="android.intent.action.INSERT"
+ android:data="content://com.android.contacts/contacts"
+ android:targetPackage="com.android.contacts"
+ android:targetClass="com.android.contacts.activities.ContactEditorActivity"/>
+ </shortcut>
+</shortcuts>
diff --git a/src-bind/com/android/contactsbind/FeatureHighlightHelper.java b/src-bind/com/android/contactsbind/FeatureHighlightHelper.java
new file mode 100644
index 000000000..be1833d67
--- /dev/null
+++ b/src-bind/com/android/contactsbind/FeatureHighlightHelper.java
@@ -0,0 +1,33 @@
+/*
+ * 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.contactsbind;
+
+import android.support.v4.app.FragmentActivity;
+
+public final class FeatureHighlightHelper {
+
+ private FeatureHighlightHelper () {
+ }
+
+ public static boolean showHamburgerFeatureHighlight(final FragmentActivity activity) {
+ return false;
+ }
+
+ public static boolean tryRemoveHighlight(final FragmentActivity activity) {
+ return false;
+ }
+}
diff --git a/src-bind/com/android/contactsbind/FeedbackHelper.java b/src-bind/com/android/contactsbind/FeedbackHelper.java
new file mode 100644
index 000000000..efa4791bf
--- /dev/null
+++ b/src-bind/com/android/contactsbind/FeedbackHelper.java
@@ -0,0 +1,27 @@
+/*
+ * 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.contactsbind;
+
+import android.content.Context;
+import android.util.Log;
+
+public final class FeedbackHelper {
+
+ public static void sendFeedback(Context context, String tag, String description, Throwable t) {
+ Log.e(tag, description == null ? t.getMessage() : description, t);
+ }
+
+ private FeedbackHelper() {
+ }
+}
diff --git a/src/com/android/contactsbind/HelpUtils.java b/src-bind/com/android/contactsbind/HelpUtils.java
index edec35a22..edec35a22 100644
--- a/src/com/android/contactsbind/HelpUtils.java
+++ b/src-bind/com/android/contactsbind/HelpUtils.java
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
new file mode 100644
index 000000000..1d579e6a2
--- /dev/null
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -0,0 +1,43 @@
+/*
+ * 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.contactsbind;
+
+import android.app.Fragment;
+import android.content.Context;
+import android.net.Uri;
+
+import com.android.contacts.logging.Logger;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+/**
+ * Creates default bindings for overlays.
+ */
+public class ObjectFactory {
+
+ public static Logger getLogger() {
+ return null;
+ }
+
+ public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
+ return new DeviceLocalAccountTypeFactory.Default(context);
+ }
+
+ public static Fragment getAssistantFragment() {
+ return null;
+ }
+
+ public static Uri getWelcomeUri() {
+ return null;
+ }
+}
diff --git a/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
new file mode 100644
index 000000000..4234ea13c
--- /dev/null
+++ b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
@@ -0,0 +1,25 @@
+/*
+ * 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.contactsbind.analytics;
+
+import android.app.Application;
+
+public class AnalyticsUtil {
+
+ /**
+ * Initialize this class and setup automatic activity tracking.
+ */
+ public static void initialize(Application application) { }
+} \ No newline at end of file
diff --git a/src-bind/com/android/contactsbind/experiments/Flags.java b/src-bind/com/android/contactsbind/experiments/Flags.java
new file mode 100644
index 000000000..3fda11425
--- /dev/null
+++ b/src-bind/com/android/contactsbind/experiments/Flags.java
@@ -0,0 +1,49 @@
+/*
+ * 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.contactsbind.experiments;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Provides getters for experiment flags.
+ * This stub class is designed to be overwritten by an overlay.
+ */
+public final class Flags {
+
+ private static Flags sInstance;
+
+ private Map<String, Object> mMap;
+
+ public static Flags getInstance() {
+ if (sInstance == null) {
+ sInstance = new Flags();
+ }
+ return sInstance;
+ }
+
+ private Flags() {
+ mMap = new HashMap<>();
+ }
+
+ public boolean getBoolean(String flagName) {
+ return mMap.containsKey(flagName) ? (boolean) mMap.get(flagName) : false;
+ }
+
+ public int getInteger(String flagName) {
+ return mMap.containsKey(flagName) ? ((Integer) mMap.get(flagName)).intValue() : 0;
+ }
+}
diff --git a/src-bind/com/android/contactsbind/util/UserAgentGenerator.java b/src-bind/com/android/contactsbind/util/UserAgentGenerator.java
new file mode 100644
index 000000000..be985ee9a
--- /dev/null
+++ b/src-bind/com/android/contactsbind/util/UserAgentGenerator.java
@@ -0,0 +1,34 @@
+/*
+ * 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.contactsbind.util;
+
+import android.content.Context;
+
+/**
+ * Generates a user agent string for the application.
+ */
+public class UserAgentGenerator {
+ /**
+ * Builds a user agent string for the current application. No default implementation.
+ *
+ * @param context The context.
+ * @return The user agent string.
+ */
+ public static String getUserAgent(Context context) {
+ return null;
+ }
+}
diff --git a/src/com/android/contacts/AppCompatContactsActivity.java b/src/com/android/contacts/AppCompatContactsActivity.java
new file mode 100644
index 000000000..27fbec957
--- /dev/null
+++ b/src/com/android/contacts/AppCompatContactsActivity.java
@@ -0,0 +1,130 @@
+/*
+ * 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;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.content.ContentResolver;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.view.View;
+
+import com.android.contacts.activities.AppCompatTransactionSafeActivity;
+import com.android.contacts.testing.InjectedServices;
+
+/**
+ * A common superclass for Contacts activities that handles application-wide services, copied from
+ * {@link com.android.contacts.ContactsActivity}, which will be deprecated after Kitkat backporting
+ * is done.
+ */
+public abstract class AppCompatContactsActivity extends AppCompatTransactionSafeActivity
+ implements ContactSaveService.Listener {
+
+ private ContentResolver mContentResolver;
+
+ @Override
+ public ContentResolver getContentResolver() {
+ if (mContentResolver == null) {
+ InjectedServices services = ContactsApplication.getInjectedServices();
+ if (services != null) {
+ mContentResolver = services.getContentResolver();
+ }
+ if (mContentResolver == null) {
+ mContentResolver = super.getContentResolver();
+ }
+ }
+ return mContentResolver;
+ }
+
+ @Override
+ public SharedPreferences getSharedPreferences(String name, int mode) {
+ InjectedServices services = ContactsApplication.getInjectedServices();
+ if (services != null) {
+ SharedPreferences prefs = services.getSharedPreferences();
+ if (prefs != null) {
+ return prefs;
+ }
+ }
+
+ return super.getSharedPreferences(name, mode);
+ }
+
+ @Override
+ public Object getSystemService(String name) {
+ Object service = super.getSystemService(name);
+ if (service != null) {
+ return service;
+ }
+
+ return getApplicationContext().getSystemService(name);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ ContactSaveService.registerListener(this);
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ protected void onDestroy() {
+ ContactSaveService.unregisterListener(this);
+ super.onDestroy();
+ }
+
+ @Override
+ public void onServiceCompleted(Intent callbackIntent) {
+ onNewIntent(callbackIntent);
+ }
+
+ /**
+ * Convenient version of {@link FragmentManager#findFragmentById(int)}, which throws
+ * an exception if the fragment doesn't exist.
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends Fragment> T getFragment(int id) {
+ T result = (T)getFragmentManager().findFragmentById(id);
+ if (result == null) {
+ throw new IllegalArgumentException("fragment 0x" + Integer.toHexString(id)
+ + " doesn't exist");
+ }
+ return result;
+ }
+
+ /**
+ * Convenient version of {@link #findViewById(int)}, which throws
+ * an exception if the view doesn't exist.
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends View> T getView(int id) {
+ T result = (T)findViewById(id);
+ if (result == null) {
+ throw new IllegalArgumentException("view 0x" + Integer.toHexString(id)
+ + " doesn't exist");
+ }
+ return result;
+ }
+
+ protected static void showFragment(FragmentTransaction ft, Fragment f) {
+ if ((f != null) && f.isHidden()) ft.show(f);
+ }
+
+ protected static void hideFragment(FragmentTransaction ft, Fragment f) {
+ if ((f != null) && !f.isHidden()) ft.hide(f);
+ }
+}
diff --git a/src/com/android/contacts/CallUtil.java b/src/com/android/contacts/CallUtil.java
new file mode 100644
index 000000000..ddde01c22
--- /dev/null
+++ b/src/com/android/contacts/CallUtil.java
@@ -0,0 +1,202 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
+import android.text.TextUtils;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneAccountSdkCompat;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.PhoneNumberHelper;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.phone.common.PhoneConstants;
+
+import java.util.List;
+
+/**
+ * Utilities related to calls that can be used by non system apps. These
+ * use {@link Intent#ACTION_CALL} instead of ACTION_CALL_PRIVILEGED.
+ *
+ * The privileged version of this util exists inside Dialer.
+ */
+public class CallUtil {
+
+ public static final String TAG = "CallUtil";
+
+ /**
+ * Indicates that the video calling is not available.
+ */
+ public static final int VIDEO_CALLING_DISABLED = 0;
+
+ /**
+ * Indicates that video calling is enabled, regardless of presence status.
+ */
+ public static final int VIDEO_CALLING_ENABLED = 1;
+
+ /**
+ * Indicates that video calling is enabled, but the availability of video call affordances is
+ * determined by the presence status associated with contacts.
+ */
+ public static final int VIDEO_CALLING_PRESENCE = 2;
+
+ /**
+ * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
+ * automatically.
+ */
+ public static Intent getCallWithSubjectIntent(String number,
+ PhoneAccountHandle phoneAccountHandle, String callSubject) {
+
+ final Intent intent = getCallIntent(getCallUri(number));
+ intent.putExtra(TelecomManager.EXTRA_CALL_SUBJECT, callSubject);
+ if (phoneAccountHandle != null) {
+ intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ }
+ return intent;
+ }
+
+ /**
+ * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
+ * automatically.
+ */
+ public static Intent getCallIntent(String number) {
+ return getCallIntent(getCallUri(number));
+ }
+
+ /**
+ * Return an Intent for making a phone call. A given Uri will be used as is (without any
+ * sanity check).
+ */
+ public static Intent getCallIntent(Uri uri) {
+ return new Intent(Intent.ACTION_CALL, uri);
+ }
+
+ /**
+ * A variant of {@link #getCallIntent} for starting a video call.
+ */
+ public static Intent getVideoCallIntent(String number, String callOrigin) {
+ final Intent intent = new Intent(Intent.ACTION_CALL, getCallUri(number));
+ intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
+ VideoProfile.STATE_BIDIRECTIONAL);
+ if (!TextUtils.isEmpty(callOrigin)) {
+ intent.putExtra(PhoneConstants.EXTRA_CALL_ORIGIN, callOrigin);
+ }
+ return intent;
+ }
+
+ /**
+ * Return Uri with an appropriate scheme, accepting both SIP and usual phone call
+ * numbers.
+ */
+ public static Uri getCallUri(String number) {
+ if (PhoneNumberHelper.isUriNumber(number)) {
+ return Uri.fromParts(PhoneAccount.SCHEME_SIP, number, null);
+ }
+ return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
+ }
+
+ /**
+ * Determines if video calling is available, and if so whether presence checking is available
+ * as well.
+ *
+ * Returns a bitmask with {@link #VIDEO_CALLING_ENABLED} to indicate that video calling is
+ * available, and {@link #VIDEO_CALLING_PRESENCE} if presence indication is also available.
+ *
+ * @param context The context
+ * @return A bit-mask describing the current video capabilities.
+ */
+ public static int getVideoCallingAvailability(Context context) {
+ if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
+ || !CompatUtils.isVideoCompatible()) {
+ return VIDEO_CALLING_DISABLED;
+ }
+ TelecomManager telecommMgr = (TelecomManager)
+ context.getSystemService(Context.TELECOM_SERVICE);
+ if (telecommMgr == null) {
+ return VIDEO_CALLING_DISABLED;
+ }
+
+ try {
+ List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
+ for (PhoneAccountHandle accountHandle : accountHandles) {
+ PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
+ if (account != null) {
+ if (account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING)) {
+ // Builds prior to N do not have presence support.
+ if (!CompatUtils.isVideoPresenceCompatible()) {
+ return VIDEO_CALLING_ENABLED;
+ }
+
+ int videoCapabilities = VIDEO_CALLING_ENABLED;
+ if (account.hasCapabilities(PhoneAccountSdkCompat
+ .CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE)) {
+ videoCapabilities |= VIDEO_CALLING_PRESENCE;
+ }
+ return videoCapabilities;
+ }
+ }
+ }
+ return VIDEO_CALLING_DISABLED;
+ } catch (SecurityException e) {
+ FeedbackHelper.sendFeedback(context, TAG,
+ "Security exception when getting call capable phone accounts", e);
+ return VIDEO_CALLING_DISABLED;
+ }
+ }
+
+ /**
+ * Determines if one of the call capable phone accounts defined supports calling with a subject
+ * specified.
+ *
+ * @param context The context.
+ * @return {@code true} if one of the call capable phone accounts supports calling with a
+ * subject specified, {@code false} otherwise.
+ */
+ public static boolean isCallWithSubjectSupported(Context context) {
+ if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
+ || !CompatUtils.isCallSubjectCompatible()) {
+ return false;
+ }
+ TelecomManager telecommMgr = (TelecomManager)
+ context.getSystemService(Context.TELECOM_SERVICE);
+ if (telecommMgr == null) {
+ return false;
+ }
+
+ try {
+ List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
+ for (PhoneAccountHandle accountHandle : accountHandles) {
+ PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
+ if (account != null && account.hasCapabilities(PhoneAccount.CAPABILITY_CALL_SUBJECT)) {
+ return true;
+ }
+ }
+ return false;
+ } catch (SecurityException e) {
+ FeedbackHelper.sendFeedback(context, TAG,
+ "Security exception when getting call capable phone accounts", e);
+ return false;
+ }
+
+ }
+}
diff --git a/src/com/android/contacts/ClipboardUtils.java b/src/com/android/contacts/ClipboardUtils.java
new file mode 100644
index 000000000..647cb9997
--- /dev/null
+++ b/src/com/android/contacts/ClipboardUtils.java
@@ -0,0 +1,52 @@
+/*
+ * 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;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+public class ClipboardUtils {
+ private static final String TAG = "ClipboardUtils";
+
+ private ClipboardUtils() { }
+
+ /**
+ * Copy a text to clipboard.
+ *
+ * @param context Context
+ * @param label Label to show to the user describing this clip.
+ * @param text Text to copy.
+ * @param showToast If {@code true}, a toast is shown to the user.
+ */
+ public static void copyText(Context context, CharSequence label, CharSequence text,
+ boolean showToast) {
+ if (TextUtils.isEmpty(text)) return;
+
+ ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(
+ Context.CLIPBOARD_SERVICE);
+ ClipData clipData = ClipData.newPlainText(label == null ? "" : label, text);
+ clipboardManager.setPrimaryClip(clipData);
+
+ if (showToast) {
+ String toastText = context.getString(R.string.toast_text_copied);
+ Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show();
+ }
+ }
+}
diff --git a/src/com/android/contacts/Collapser.java b/src/com/android/contacts/Collapser.java
new file mode 100644
index 000000000..b9d069feb
--- /dev/null
+++ b/src/com/android/contacts/Collapser.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts;
+
+import android.content.Context;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Class used for collapsing data items into groups of similar items. The data items that should be
+ * collapsible should implement the Collapsible interface. The class also contains a utility
+ * function that takes an ArrayList of items and returns a list of the same items collapsed into
+ * groups.
+ */
+public final class Collapser {
+
+ /*
+ * This utility class cannot be instantiated.
+ */
+ private Collapser() {}
+
+ /*
+ * The Collapser uses an n^2 algorithm so we don't want it to run on
+ * lists beyond a certain size. This specifies the maximum size to collapse.
+ */
+ private static final int MAX_LISTSIZE_TO_COLLAPSE = 20;
+
+ /*
+ * Interface implemented by data types that can be collapsed into groups of similar data. This
+ * can be used for example to collapse similar contact data items into a single item.
+ */
+ public interface Collapsible<T> {
+ public void collapseWith(T t);
+ public boolean shouldCollapseWith(T t, Context context);
+
+ }
+
+ /**
+ * Collapses a list of Collapsible items into a list of collapsed items. Items are collapsed
+ * if {@link Collapsible#shouldCollapseWith(Object)} returns true, and are collapsed
+ * through the {@Link Collapsible#collapseWith(Object)} function implemented by the data item.
+ *
+ * @param list List of Objects of type <T extends Collapsible<T>> to be collapsed.
+ */
+ public static <T extends Collapsible<T>> void collapseList(List<T> list, Context context) {
+
+ int listSize = list.size();
+ // The algorithm below is n^2 so don't run on long lists
+ if (listSize > MAX_LISTSIZE_TO_COLLAPSE) {
+ return;
+ }
+
+ for (int i = 0; i < listSize; i++) {
+ T iItem = list.get(i);
+ if (iItem != null) {
+ for (int j = i + 1; j < listSize; j++) {
+ T jItem = list.get(j);
+ if (jItem != null) {
+ if (iItem.shouldCollapseWith(jItem, context)) {
+ iItem.collapseWith(jItem);
+ list.set(j, null);
+ } else if (jItem.shouldCollapseWith(iItem, context)) {
+ jItem.collapseWith(iItem);
+ list.set(i, null);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Remove the null items
+ Iterator<T> itr = list.iterator();
+ while (itr.hasNext()) {
+ if (itr.next() == null) {
+ itr.remove();
+ }
+ }
+
+ }
+}
diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
new file mode 100644
index 000000000..fdcc9b305
--- /dev/null
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -0,0 +1,1749 @@
+/*
+ * Copyright (C) 2010 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;
+
+import android.app.ActivityManager;
+import android.content.ComponentCallbacks2;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.TransitionDrawable;
+import android.media.ThumbnailUtils;
+import android.net.TrafficStats;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.os.Handler;
+import android.os.Handler.Callback;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Contacts.Photo;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.LruCache;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.TrafficStatsTags;
+import com.android.contacts.util.UriUtils;
+import com.android.contactsbind.util.UserAgentGenerator;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Asynchronously loads contact photos and maintains a cache of photos.
+ */
+public abstract class ContactPhotoManager implements ComponentCallbacks2 {
+ static final String TAG = "ContactPhotoManager";
+ static final boolean DEBUG = false; // Don't submit with true
+ static final boolean DEBUG_SIZES = false; // Don't submit with true
+
+ /** Contact type constants used for default letter images */
+ public static final int TYPE_PERSON = LetterTileDrawable.TYPE_PERSON;
+ 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;
+
+ /** Scale and offset default constants used for default letter images */
+ public static final float SCALE_DEFAULT = 1.0f;
+ public static final float OFFSET_DEFAULT = 0.0f;
+
+ public static final boolean IS_CIRCULAR_DEFAULT = false;
+
+ /** Uri-related constants used for default letter images */
+ private static final String DISPLAY_NAME_PARAM_KEY = "display_name";
+ private static final String IDENTIFIER_PARAM_KEY = "identifier";
+ private static final String CONTACT_TYPE_PARAM_KEY = "contact_type";
+ private static final String SCALE_PARAM_KEY = "scale";
+ private static final String OFFSET_PARAM_KEY = "offset";
+ private static final String IS_CIRCULAR_PARAM_KEY = "is_circular";
+ private static final String DEFAULT_IMAGE_URI_SCHEME = "defaultimage";
+ private static final Uri DEFAULT_IMAGE_URI = Uri.parse(DEFAULT_IMAGE_URI_SCHEME + "://");
+
+ // Static field used to cache the default letter avatar drawable that is created
+ // using a null {@link DefaultImageRequest}
+ private static Drawable sDefaultLetterAvatar = null;
+
+ private static ContactPhotoManager sInstance;
+
+ /**
+ * Given a {@link DefaultImageRequest}, returns a {@link Drawable}, that when drawn, will
+ * draw a letter tile avatar based on the request parameters defined in the
+ * {@link DefaultImageRequest}.
+ */
+ public static Drawable getDefaultAvatarDrawableForContact(Resources resources, boolean hires,
+ DefaultImageRequest defaultImageRequest) {
+ if (defaultImageRequest == null) {
+ if (sDefaultLetterAvatar == null) {
+ // Cache and return the letter tile drawable that is created by a null request,
+ // so that it doesn't have to be recreated every time it is requested again.
+ sDefaultLetterAvatar = LetterTileDefaultImageProvider.getDefaultImageForContact(
+ resources, null);
+ }
+ return sDefaultLetterAvatar;
+ }
+ return LetterTileDefaultImageProvider.getDefaultImageForContact(resources,
+ defaultImageRequest);
+ }
+
+ /**
+ * Given a {@link DefaultImageRequest}, returns an Uri that can be used to request a
+ * letter tile avatar when passed to the {@link ContactPhotoManager}. The internal
+ * implementation of this uri is not guaranteed to remain the same across application
+ * versions, so the actual uri should never be persisted in long-term storage and reused.
+ *
+ * @param request A {@link DefaultImageRequest} object with the fields configured
+ * to return a
+ * @return A Uri that when later passed to the {@link ContactPhotoManager} via
+ * {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest)}, can be
+ * used to request a default contact image, drawn as a letter tile using the
+ * parameters as configured in the provided {@link DefaultImageRequest}
+ */
+ public static Uri getDefaultAvatarUriForContact(DefaultImageRequest request) {
+ final Builder builder = DEFAULT_IMAGE_URI.buildUpon();
+ if (request != null) {
+ if (!TextUtils.isEmpty(request.displayName)) {
+ builder.appendQueryParameter(DISPLAY_NAME_PARAM_KEY, request.displayName);
+ }
+ if (!TextUtils.isEmpty(request.identifier)) {
+ builder.appendQueryParameter(IDENTIFIER_PARAM_KEY, request.identifier);
+ }
+ if (request.contactType != TYPE_DEFAULT) {
+ builder.appendQueryParameter(CONTACT_TYPE_PARAM_KEY,
+ String.valueOf(request.contactType));
+ }
+ if (request.scale != SCALE_DEFAULT) {
+ builder.appendQueryParameter(SCALE_PARAM_KEY, String.valueOf(request.scale));
+ }
+ if (request.offset != OFFSET_DEFAULT) {
+ builder.appendQueryParameter(OFFSET_PARAM_KEY, String.valueOf(request.offset));
+ }
+ if (request.isCircular != IS_CIRCULAR_DEFAULT) {
+ builder.appendQueryParameter(IS_CIRCULAR_PARAM_KEY,
+ String.valueOf(request.isCircular));
+ }
+
+ }
+ return builder.build();
+ }
+
+ /**
+ * Adds a business contact type encoded fragment to the URL. Used to ensure photo URLS
+ * from Nearby Places can be identified as business photo URLs rather than URLs for personal
+ * contact photos.
+ *
+ * @param photoUrl The photo URL to modify.
+ * @return URL with the contact type parameter added and set to TYPE_BUSINESS.
+ */
+ public static String appendBusinessContactType(String photoUrl) {
+ Uri uri = Uri.parse(photoUrl);
+ Builder builder = uri.buildUpon();
+ builder.encodedFragment(String.valueOf(TYPE_BUSINESS));
+ return builder.build().toString();
+ }
+
+ /**
+ * Removes the contact type information stored in the photo URI encoded fragment.
+ *
+ * @param photoUri The photo URI to remove the contact type from.
+ * @return The photo URI with contact type removed.
+ */
+ public static Uri removeContactType(Uri photoUri) {
+ String encodedFragment = photoUri.getEncodedFragment();
+ if (!TextUtils.isEmpty(encodedFragment)) {
+ Builder builder = photoUri.buildUpon();
+ builder.encodedFragment(null);
+ return builder.build();
+ }
+ return photoUri;
+ }
+
+ /**
+ * Inspects a photo URI to determine if the photo URI represents a business.
+ *
+ * @param photoUri The URI to inspect.
+ * @return Whether the URI represents a business photo or not.
+ */
+ public static boolean isBusinessContactUri(Uri photoUri) {
+ if (photoUri == null) {
+ return false;
+ }
+
+ String encodedFragment = photoUri.getEncodedFragment();
+ return !TextUtils.isEmpty(encodedFragment)
+ && encodedFragment.equals(String.valueOf(TYPE_BUSINESS));
+ }
+
+ protected static DefaultImageRequest getDefaultImageRequestFromUri(Uri uri) {
+ final DefaultImageRequest request = new DefaultImageRequest(
+ uri.getQueryParameter(DISPLAY_NAME_PARAM_KEY),
+ uri.getQueryParameter(IDENTIFIER_PARAM_KEY), false);
+ try {
+ String contactType = uri.getQueryParameter(CONTACT_TYPE_PARAM_KEY);
+ if (!TextUtils.isEmpty(contactType)) {
+ request.contactType = Integer.valueOf(contactType);
+ }
+
+ String scale = uri.getQueryParameter(SCALE_PARAM_KEY);
+ if (!TextUtils.isEmpty(scale)) {
+ request.scale = Float.valueOf(scale);
+ }
+
+ String offset = uri.getQueryParameter(OFFSET_PARAM_KEY);
+ if (!TextUtils.isEmpty(offset)) {
+ request.offset = Float.valueOf(offset);
+ }
+
+ String isCircular = uri.getQueryParameter(IS_CIRCULAR_PARAM_KEY);
+ if (!TextUtils.isEmpty(isCircular)) {
+ request.isCircular = Boolean.valueOf(isCircular);
+ }
+ } catch (NumberFormatException e) {
+ Log.w(TAG, "Invalid DefaultImageRequest image parameters provided, ignoring and using "
+ + "defaults.");
+ }
+
+ return request;
+ }
+
+ protected boolean isDefaultImageUri(Uri uri) {
+ return DEFAULT_IMAGE_URI_SCHEME.equals(uri.getScheme());
+ }
+
+ /**
+ * Contains fields used to contain contact details and other user-defined settings that might
+ * be used by the ContactPhotoManager to generate a default contact image. This contact image
+ * takes the form of a letter or bitmap drawn on top of a colored tile.
+ */
+ public static class DefaultImageRequest {
+ /**
+ * The contact's display name. The display name is used to
+ */
+ public String displayName;
+
+ /**
+ * A unique and deterministic string that can be used to identify this contact. This is
+ * usually the contact's lookup key, but other contact details can be used as well,
+ * especially for non-local or temporary contacts that might not have a lookup key. This
+ * is used to determine the color of the tile.
+ */
+ public String identifier;
+
+ /**
+ * 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}
+ */
+ public int contactType = 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.
+ */
+ public float scale = SCALE_DEFAULT;
+
+ /**
+ * The amount to vertically offset the letter or image to within the tile.
+ * The provided offset must be within the range of -0.5f to 0.5f.
+ * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
+ * it is being drawn on, which means it will be drawn with the center of the letter starting
+ * at the top edge of the canvas.
+ * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the
+ * canvas it is being drawn on, which means it will be drawn with the center of the letter
+ * starting at the bottom edge of the canvas.
+ * The default is 0.0f, which means the letter is drawn in the exact vertical center of
+ * the tile.
+ */
+ public float offset = OFFSET_DEFAULT;
+
+ /**
+ * Whether or not to draw the default image as a circle, instead of as a square/rectangle.
+ */
+ public boolean isCircular = false;
+
+ /**
+ * Used to indicate that a drawable that represents a contact without any contact details
+ * should be returned.
+ */
+ public static DefaultImageRequest EMPTY_DEFAULT_IMAGE_REQUEST = new DefaultImageRequest();
+
+ /**
+ * Used to indicate that a drawable that represents a business without a business photo
+ * should be returned.
+ */
+ public static DefaultImageRequest EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST =
+ new DefaultImageRequest(null, null, TYPE_BUSINESS, false);
+
+ /**
+ * Used to indicate that a circular drawable that represents a contact without any contact
+ * details should be returned.
+ */
+ public static DefaultImageRequest EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST =
+ new DefaultImageRequest(null, null, true);
+
+ /**
+ * Used to indicate that a circular drawable that represents a business without a business
+ * photo should be returned.
+ */
+ public static DefaultImageRequest EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST =
+ new DefaultImageRequest(null, null, TYPE_BUSINESS, true);
+
+ public DefaultImageRequest() {
+ }
+
+ public DefaultImageRequest(String displayName, String identifier, boolean isCircular) {
+ this(displayName, identifier, TYPE_DEFAULT, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
+ }
+
+ public DefaultImageRequest(String displayName, String identifier, int contactType,
+ boolean isCircular) {
+ this(displayName, identifier, contactType, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
+ }
+
+ public DefaultImageRequest(String displayName, String identifier, int contactType,
+ float scale, float offset, boolean isCircular) {
+ this.displayName = displayName;
+ this.identifier = identifier;
+ this.contactType = contactType;
+ this.scale = scale;
+ this.offset = offset;
+ this.isCircular = isCircular;
+ }
+ }
+
+ public static abstract class DefaultImageProvider {
+ /**
+ * Applies the default avatar to the ImageView. Extent is an indicator for the size (width
+ * or height). If darkTheme is set, the avatar is one that looks better on dark background
+ *
+ * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a
+ * default letter tile avatar should be drawn.
+ */
+ public abstract void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+ DefaultImageRequest defaultImageRequest);
+ }
+
+ /**
+ * A default image provider that applies a letter tile consisting of a colored background
+ * and a letter in the foreground as the default image for a contact. The color of the
+ * background and the type of letter is decided based on the contact's details.
+ */
+ private static class LetterTileDefaultImageProvider extends DefaultImageProvider {
+ @Override
+ public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+ DefaultImageRequest defaultImageRequest) {
+ final Drawable drawable = getDefaultImageForContact(view.getResources(),
+ defaultImageRequest);
+ view.setImageDrawable(drawable);
+ }
+
+ public static Drawable getDefaultImageForContact(Resources resources,
+ DefaultImageRequest defaultImageRequest) {
+ final LetterTileDrawable drawable = new LetterTileDrawable(resources);
+ if (defaultImageRequest != null) {
+ // If the contact identifier is null or empty, fallback to the
+ // displayName. In that case, use {@code null} for the contact's
+ // display name so that a default bitmap will be used instead of a
+ // letter
+ if (TextUtils.isEmpty(defaultImageRequest.identifier)) {
+ drawable.setLetterAndColorFromContactDetails(null,
+ defaultImageRequest.displayName);
+ } else {
+ drawable.setLetterAndColorFromContactDetails(defaultImageRequest.displayName,
+ defaultImageRequest.identifier);
+ }
+ drawable.setContactType(defaultImageRequest.contactType);
+ drawable.setScale(defaultImageRequest.scale);
+ drawable.setOffset(defaultImageRequest.offset);
+ drawable.setIsCircular(defaultImageRequest.isCircular);
+ }
+ return drawable;
+ }
+ }
+
+ private static class BlankDefaultImageProvider extends DefaultImageProvider {
+ private static Drawable sDrawable;
+
+ @Override
+ public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+ DefaultImageRequest defaultImageRequest) {
+ if (sDrawable == null) {
+ Context context = view.getContext();
+ sDrawable = new ColorDrawable(context.getResources().getColor(
+ R.color.image_placeholder));
+ }
+ view.setImageDrawable(sDrawable);
+ }
+ }
+
+ public static DefaultImageProvider DEFAULT_AVATAR = new LetterTileDefaultImageProvider();
+
+ public static final DefaultImageProvider DEFAULT_BLANK = new BlankDefaultImageProvider();
+
+ public static ContactPhotoManager getInstance(Context context) {
+ if (sInstance == null) {
+ Context applicationContext = context.getApplicationContext();
+ sInstance = createContactPhotoManager(applicationContext);
+ applicationContext.registerComponentCallbacks(sInstance);
+ if (PermissionsUtil.hasContactsPermissions(context)) {
+ sInstance.preloadPhotosInBackground();
+ }
+ }
+ return sInstance;
+ }
+
+ public static synchronized ContactPhotoManager createContactPhotoManager(Context context) {
+ return new ContactPhotoManagerImpl(context);
+ }
+
+ @VisibleForTesting
+ public static void injectContactPhotoManagerForTesting(ContactPhotoManager photoManager) {
+ sInstance = photoManager;
+ }
+
+ /**
+ * Load thumbnail image into the supplied image view. If the photo is already cached,
+ * it is displayed immediately. Otherwise a request is sent to load the photo
+ * from the database.
+ */
+ public abstract void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider);
+
+ /**
+ * Calls {@link #loadThumbnail(ImageView, long, boolean, DefaultImageRequest,
+ * DefaultImageProvider)} using the {@link DefaultImageProvider} {@link #DEFAULT_AVATAR}.
+ */
+ public final void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadThumbnail(view, photoId, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+
+ /**
+ * Load photo into the supplied image view. If the photo is already cached,
+ * it is displayed immediately. Otherwise a request is sent to load the photo
+ * from the location specified by the URI.
+ *
+ * @param view The target view
+ * @param photoUri The uri of the photo to load
+ * @param requestedExtent Specifies an approximate Max(width, height) of the targetView.
+ * This is useful if the source image can be a lot bigger that the target, so that the decoding
+ * is done using efficient sampling. If requestedExtent is specified, no sampling of the image
+ * is performed
+ * @param darkTheme Whether the background is dark. This is used for default avatars
+ * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+ * letter tile avatar should be drawn.
+ * @param defaultProvider The provider of default avatars (this is used if photoUri doesn't
+ * refer to an existing image)
+ */
+ public abstract void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider);
+
+ /**
+ * Calls {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest,
+ * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and {@code null} display names and
+ * lookup keys.
+ *
+ * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+ * letter tile avatar should be drawn.
+ */
+ public final void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadPhoto(view, photoUri, requestedExtent, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+ /**
+ * Calls {@link #loadPhoto(ImageView, Uri, boolean, boolean, DefaultImageRequest,
+ * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and with the assumption, that
+ * the image is a thumbnail.
+ *
+ * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+ * letter tile avatar should be drawn.
+ */
+ public final void loadDirectoryPhoto(ImageView view, Uri photoUri, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadPhoto(view, photoUri, -1, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+ /**
+ * Remove photo from the supplied image view. This also cancels current pending load request
+ * inside this photo manager.
+ */
+ public abstract void removePhoto(ImageView view);
+
+ /**
+ * Cancels all pending requests to load photos asynchronously.
+ */
+ public abstract void cancelPendingRequests(View fragmentRootView);
+
+ /**
+ * Temporarily stops loading photos from the database.
+ */
+ public abstract void pause();
+
+ /**
+ * Resumes loading photos from the database.
+ */
+ public abstract void resume();
+
+ /**
+ * Marks all cached photos for reloading. We can continue using cache but should
+ * also make sure the photos haven't changed in the background and notify the views
+ * if so.
+ */
+ public abstract void refreshCache();
+
+ /**
+ * Stores the given bitmap directly in the LRU bitmap cache.
+ * @param photoUri The URI of the photo (for future requests).
+ * @param bitmap The bitmap.
+ * @param photoBytes The bytes that were parsed to create the bitmap.
+ */
+ public abstract void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes);
+
+ /**
+ * Initiates a background process that over time will fill up cache with
+ * preload photos.
+ */
+ public abstract void preloadPhotosInBackground();
+
+ // ComponentCallbacks2
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ }
+
+ // ComponentCallbacks2
+ @Override
+ public void onLowMemory() {
+ }
+
+ // ComponentCallbacks2
+ @Override
+ public void onTrimMemory(int level) {
+ }
+}
+
+class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback {
+ private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
+
+ private static final int FADE_TRANSITION_DURATION = 200;
+
+ /**
+ * Type of message sent by the UI thread to itself to indicate that some photos
+ * need to be loaded.
+ */
+ private static final int MESSAGE_REQUEST_LOADING = 1;
+
+ /**
+ * Type of message sent by the loader thread to indicate that some photos have
+ * been loaded.
+ */
+ private static final int MESSAGE_PHOTOS_LOADED = 2;
+
+ private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+ private static final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
+
+ /**
+ * Dummy object used to indicate that a bitmap for a given key could not be stored in the
+ * cache.
+ */
+ private static final BitmapHolder BITMAP_UNAVAILABLE;
+
+ static {
+ BITMAP_UNAVAILABLE = new BitmapHolder(new byte[0], 0);
+ BITMAP_UNAVAILABLE.bitmapRef = new SoftReference<Bitmap>(null);
+ }
+
+ /**
+ * Maintains the state of a particular photo.
+ */
+ private static class BitmapHolder {
+ final byte[] bytes;
+ final int originalSmallerExtent;
+
+ volatile boolean fresh;
+ Bitmap bitmap;
+ Reference<Bitmap> bitmapRef;
+ int decodedSampleSize;
+
+ public BitmapHolder(byte[] bytes, int originalSmallerExtent) {
+ this.bytes = bytes;
+ this.fresh = true;
+ this.originalSmallerExtent = originalSmallerExtent;
+ }
+ }
+
+ private final Context mContext;
+
+ /**
+ * An LRU cache for bitmap holders. The cache contains bytes for photos just
+ * as they come from the database. Each holder has a soft reference to the
+ * actual bitmap.
+ */
+ private final LruCache<Object, BitmapHolder> mBitmapHolderCache;
+
+ /**
+ * {@code true} if ALL entries in {@link #mBitmapHolderCache} are NOT fresh.
+ */
+ private volatile boolean mBitmapHolderCacheAllUnfresh = true;
+
+ /**
+ * Cache size threshold at which bitmaps will not be preloaded.
+ */
+ private final int mBitmapHolderCacheRedZoneBytes;
+
+ /**
+ * Level 2 LRU cache for bitmaps. This is a smaller cache that holds
+ * the most recently used bitmaps to save time on decoding
+ * them from bytes (the bytes are stored in {@link #mBitmapHolderCache}.
+ */
+ private final LruCache<Object, Bitmap> mBitmapCache;
+
+ /**
+ * A map from ImageView to the corresponding photo ID or uri, encapsulated in a request.
+ * The request may swapped out before the photo loading request is started.
+ */
+ private final ConcurrentHashMap<ImageView, Request> mPendingRequests =
+ new ConcurrentHashMap<ImageView, Request>();
+
+ /**
+ * Handler for messages sent to the UI thread.
+ */
+ private final Handler mMainThreadHandler = new Handler(this);
+
+ /**
+ * Thread responsible for loading photos from the database. Created upon
+ * the first request.
+ */
+ private LoaderThread mLoaderThread;
+
+ /**
+ * A gate to make sure we only send one instance of MESSAGE_PHOTOS_NEEDED at a time.
+ */
+ private boolean mLoadingRequested;
+
+ /**
+ * Flag indicating if the image loading is paused.
+ */
+ private boolean mPaused;
+
+ /** Cache size for {@link #mBitmapHolderCache} for devices with "large" RAM. */
+ private static final int HOLDER_CACHE_SIZE = 2000000;
+
+ /** Cache size for {@link #mBitmapCache} for devices with "large" RAM. */
+ private static final int BITMAP_CACHE_SIZE = 36864 * 48; // 1728K
+
+ /** Height/width of a thumbnail image */
+ private static int mThumbnailSize;
+
+ /** For debug: How many times we had to reload cached photo for a stale entry */
+ private final AtomicInteger mStaleCacheOverwrite = new AtomicInteger();
+
+ /** For debug: How many times we had to reload cached photo for a fresh entry. Should be 0. */
+ private final AtomicInteger mFreshCacheOverwrite = new AtomicInteger();
+
+ /**
+ * The user agent string to use when loading URI based photos.
+ */
+ private String mUserAgent;
+
+ public ContactPhotoManagerImpl(Context context) {
+ mContext = context;
+
+ final ActivityManager am = ((ActivityManager) context.getSystemService(
+ Context.ACTIVITY_SERVICE));
+
+ final float cacheSizeAdjustment = (am.isLowRamDevice()) ? 0.5f : 1.0f;
+
+ final int bitmapCacheSize = (int) (cacheSizeAdjustment * BITMAP_CACHE_SIZE);
+ mBitmapCache = new LruCache<Object, Bitmap>(bitmapCacheSize) {
+ @Override protected int sizeOf(Object key, Bitmap value) {
+ return value.getByteCount();
+ }
+
+ @Override protected void entryRemoved(
+ boolean evicted, Object key, Bitmap oldValue, Bitmap newValue) {
+ if (DEBUG) dumpStats();
+ }
+ };
+ final int holderCacheSize = (int) (cacheSizeAdjustment * HOLDER_CACHE_SIZE);
+ mBitmapHolderCache = new LruCache<Object, BitmapHolder>(holderCacheSize) {
+ @Override protected int sizeOf(Object key, BitmapHolder value) {
+ return value.bytes != null ? value.bytes.length : 0;
+ }
+
+ @Override protected void entryRemoved(
+ boolean evicted, Object key, BitmapHolder oldValue, BitmapHolder newValue) {
+ if (DEBUG) dumpStats();
+ }
+ };
+ mBitmapHolderCacheRedZoneBytes = (int) (holderCacheSize * 0.75);
+ Log.i(TAG, "Cache adj: " + cacheSizeAdjustment);
+ if (DEBUG) {
+ Log.d(TAG, "Cache size: " + btk(mBitmapHolderCache.maxSize())
+ + " + " + btk(mBitmapCache.maxSize()));
+ }
+
+ mThumbnailSize = context.getResources().getDimensionPixelSize(
+ R.dimen.contact_browser_list_item_photo_size);
+
+ // Get a user agent string to use for URI photo requests.
+ mUserAgent = UserAgentGenerator.getUserAgent(context);
+ if (mUserAgent == null) {
+ mUserAgent = "";
+ }
+ }
+
+ /** Converts bytes to K bytes, rounding up. Used only for debug log. */
+ private static String btk(int bytes) {
+ return ((bytes + 1023) / 1024) + "K";
+ }
+
+ private static final int safeDiv(int dividend, int divisor) {
+ return (divisor == 0) ? 0 : (dividend / divisor);
+ }
+
+ /**
+ * Dump cache stats on logcat.
+ */
+ private void dumpStats() {
+ if (!DEBUG) return;
+ {
+ int numHolders = 0;
+ int rawBytes = 0;
+ int bitmapBytes = 0;
+ int numBitmaps = 0;
+ for (BitmapHolder h : mBitmapHolderCache.snapshot().values()) {
+ numHolders++;
+ if (h.bytes != null) {
+ rawBytes += h.bytes.length;
+ }
+ Bitmap b = h.bitmapRef != null ? h.bitmapRef.get() : null;
+ if (b != null) {
+ numBitmaps++;
+ bitmapBytes += b.getByteCount();
+ }
+ }
+ Log.d(TAG, "L1: " + btk(rawBytes) + " + " + btk(bitmapBytes) + " = "
+ + btk(rawBytes + bitmapBytes) + ", " + numHolders + " holders, "
+ + numBitmaps + " bitmaps, avg: "
+ + btk(safeDiv(rawBytes, numHolders))
+ + "," + btk(safeDiv(bitmapBytes,numBitmaps)));
+ Log.d(TAG, "L1 Stats: " + mBitmapHolderCache.toString()
+ + ", overwrite: fresh=" + mFreshCacheOverwrite.get()
+ + " stale=" + mStaleCacheOverwrite.get());
+ }
+
+ {
+ int numBitmaps = 0;
+ int bitmapBytes = 0;
+ for (Bitmap b : mBitmapCache.snapshot().values()) {
+ numBitmaps++;
+ bitmapBytes += b.getByteCount();
+ }
+ Log.d(TAG, "L2: " + btk(bitmapBytes) + ", " + numBitmaps + " bitmaps"
+ + ", avg: " + btk(safeDiv(bitmapBytes, numBitmaps)));
+ // We don't get from L2 cache, so L2 stats is meaningless.
+ }
+ }
+
+ @Override
+ public void onTrimMemory(int level) {
+ if (DEBUG) Log.d(TAG, "onTrimMemory: " + level);
+ if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
+ // Clear the caches. Note all pending requests will be removed too.
+ clear();
+ }
+ }
+
+ @Override
+ public void preloadPhotosInBackground() {
+ ensureLoaderThread();
+ mLoaderThread.requestPreloading();
+ }
+
+ @Override
+ public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
+ DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
+ if (photoId == 0) {
+ // No photo is needed
+ defaultProvider.applyDefaultImage(view, -1, darkTheme, defaultImageRequest);
+ mPendingRequests.remove(view);
+ } else {
+ if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoId);
+ loadPhotoByIdOrUri(view, Request.createFromThumbnailId(photoId, darkTheme, isCircular,
+ defaultProvider, defaultImageRequest));
+ }
+ }
+
+ @Override
+ public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
+ if (photoUri == null) {
+ // No photo is needed
+ defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme,
+ defaultImageRequest);
+ mPendingRequests.remove(view);
+ } else {
+ if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoUri);
+ if (isDefaultImageUri(photoUri)) {
+ createAndApplyDefaultImageForUri(view, photoUri, requestedExtent, darkTheme,
+ isCircular, defaultProvider);
+ } else {
+ loadPhotoByIdOrUri(view, Request.createFromUri(photoUri, requestedExtent,
+ darkTheme, isCircular, defaultProvider, defaultImageRequest));
+ }
+ }
+ }
+
+ private void createAndApplyDefaultImageForUri(ImageView view, Uri uri, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageProvider defaultProvider) {
+ DefaultImageRequest request = getDefaultImageRequestFromUri(uri);
+ request.isCircular = isCircular;
+ defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, request);
+ }
+
+ private void loadPhotoByIdOrUri(ImageView view, Request request) {
+ boolean loaded = loadCachedPhoto(view, request, false);
+ if (loaded) {
+ mPendingRequests.remove(view);
+ } else {
+ mPendingRequests.put(view, request);
+ if (!mPaused) {
+ // Send a request to start loading photos
+ requestLoading();
+ }
+ }
+ }
+
+ @Override
+ public void removePhoto(ImageView view) {
+ view.setImageDrawable(null);
+ mPendingRequests.remove(view);
+ }
+
+
+ /**
+ * Cancels pending requests to load photos asynchronously for views inside
+ * {@param fragmentRootView}. If {@param fragmentRootView} is null, cancels all requests.
+ */
+ @Override
+ public void cancelPendingRequests(View fragmentRootView) {
+ if (fragmentRootView == null) {
+ mPendingRequests.clear();
+ return;
+ }
+ final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
+ while (iterator.hasNext()) {
+ final ImageView imageView = iterator.next().getKey();
+ // If an ImageView is orphaned (currently scrap) or a child of fragmentRootView, then
+ // we can safely remove its request.
+ if (imageView.getParent() == null || isChildView(fragmentRootView, imageView)) {
+ iterator.remove();
+ }
+ }
+ }
+
+ private static boolean isChildView(View parent, View potentialChild) {
+ return potentialChild.getParent() != null && (potentialChild.getParent() == parent || (
+ potentialChild.getParent() instanceof ViewGroup && isChildView(parent,
+ (ViewGroup) potentialChild.getParent())));
+ }
+
+ @Override
+ public void refreshCache() {
+ if (mBitmapHolderCacheAllUnfresh) {
+ if (DEBUG) Log.d(TAG, "refreshCache -- no fresh entries.");
+ return;
+ }
+ if (DEBUG) Log.d(TAG, "refreshCache");
+ mBitmapHolderCacheAllUnfresh = true;
+ for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+ if (holder != BITMAP_UNAVAILABLE) {
+ holder.fresh = false;
+ }
+ }
+ }
+
+ /**
+ * Checks if the photo is present in cache. If so, sets the photo on the view.
+ *
+ * @return false if the photo needs to be (re)loaded from the provider.
+ */
+ private boolean loadCachedPhoto(ImageView view, Request request, boolean fadeIn) {
+ BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
+ if (holder == null) {
+ // The bitmap has not been loaded ==> show default avatar
+ request.applyDefaultImage(view, request.mIsCircular);
+ return false;
+ }
+
+ if (holder.bytes == null || holder.bytes.length == 0) {
+ request.applyDefaultImage(view, request.mIsCircular);
+ return holder.fresh;
+ }
+
+ Bitmap cachedBitmap = holder.bitmapRef == null ? null : holder.bitmapRef.get();
+ if (cachedBitmap == null) {
+ if (holder.bytes.length < 8 * 1024) {
+ // Small thumbnails are usually quick to inflate. Let's do that on the UI thread
+ inflateBitmap(holder, request.getRequestedExtent());
+ cachedBitmap = holder.bitmap;
+ if (cachedBitmap == null) return false;
+ } else {
+ // This is bigger data. Let's send that back to the Loader so that we can
+ // inflate this in the background
+ request.applyDefaultImage(view, request.mIsCircular);
+ return false;
+ }
+ }
+
+ final Drawable previousDrawable = view.getDrawable();
+ if (fadeIn && previousDrawable != null) {
+ final Drawable[] layers = new Drawable[2];
+ // Prevent cascade of TransitionDrawables.
+ if (previousDrawable instanceof TransitionDrawable) {
+ final TransitionDrawable previousTransitionDrawable =
+ (TransitionDrawable) previousDrawable;
+ layers[0] = previousTransitionDrawable.getDrawable(
+ previousTransitionDrawable.getNumberOfLayers() - 1);
+ } else {
+ layers[0] = previousDrawable;
+ }
+ layers[1] = getDrawableForBitmap(mContext.getResources(), cachedBitmap, request);
+ TransitionDrawable drawable = new TransitionDrawable(layers);
+ view.setImageDrawable(drawable);
+ drawable.startTransition(FADE_TRANSITION_DURATION);
+ } else {
+ view.setImageDrawable(
+ getDrawableForBitmap(mContext.getResources(), cachedBitmap, request));
+ }
+
+ // Put the bitmap in the LRU cache. But only do this for images that are small enough
+ // (we require that at least six of those can be cached at the same time)
+ if (cachedBitmap.getByteCount() < mBitmapCache.maxSize() / 6) {
+ mBitmapCache.put(request.getKey(), cachedBitmap);
+ }
+
+ // Soften the reference
+ holder.bitmap = null;
+
+ return holder.fresh;
+ }
+
+ /**
+ * Given a bitmap, returns a drawable that is configured to display the bitmap based on the
+ * specified request.
+ */
+ private Drawable getDrawableForBitmap(Resources resources, Bitmap bitmap, Request request) {
+ if (request.mIsCircular) {
+ final RoundedBitmapDrawable drawable =
+ RoundedBitmapDrawableFactory.create(resources, bitmap);
+ drawable.setAntiAlias(true);
+ drawable.setCornerRadius(bitmap.getHeight() / 2);
+ return drawable;
+ } else {
+ return new BitmapDrawable(resources, bitmap);
+ }
+ }
+
+ /**
+ * If necessary, decodes bytes stored in the holder to Bitmap. As long as the
+ * bitmap is held either by {@link #mBitmapCache} or by a soft reference in
+ * the holder, it will not be necessary to decode the bitmap.
+ */
+ private static void inflateBitmap(BitmapHolder holder, int requestedExtent) {
+ final int sampleSize =
+ BitmapUtil.findOptimalSampleSize(holder.originalSmallerExtent, requestedExtent);
+ byte[] bytes = holder.bytes;
+ if (bytes == null || bytes.length == 0) {
+ return;
+ }
+
+ if (sampleSize == holder.decodedSampleSize) {
+ // Check the soft reference. If will be retained if the bitmap is also
+ // in the LRU cache, so we don't need to check the LRU cache explicitly.
+ if (holder.bitmapRef != null) {
+ holder.bitmap = holder.bitmapRef.get();
+ if (holder.bitmap != null) {
+ return;
+ }
+ }
+ }
+
+ try {
+ Bitmap bitmap = BitmapUtil.decodeBitmapFromBytes(bytes, sampleSize);
+
+ // TODO: As a temporary workaround while framework support is being added to
+ // clip non-square bitmaps into a perfect circle, manually crop the bitmap into
+ // into a square if it will be displayed as a thumbnail so that it can be cropped
+ // into a circle.
+ final int height = bitmap.getHeight();
+ final int width = bitmap.getWidth();
+
+ // The smaller dimension of a scaled bitmap can range from anywhere from 0 to just
+ // below twice the length of a thumbnail image due to the way we calculate the optimal
+ // sample size.
+ if (height != width && Math.min(height, width) <= mThumbnailSize * 2) {
+ final int dimension = Math.min(height, width);
+ bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);
+ }
+ // make bitmap mutable and draw size onto it
+ if (DEBUG_SIZES) {
+ Bitmap original = bitmap;
+ bitmap = bitmap.copy(bitmap.getConfig(), true);
+ original.recycle();
+ Canvas canvas = new Canvas(bitmap);
+ Paint paint = new Paint();
+ paint.setTextSize(16);
+ paint.setColor(Color.BLUE);
+ paint.setStyle(Style.FILL);
+ canvas.drawRect(0.0f, 0.0f, 50.0f, 20.0f, paint);
+ paint.setColor(Color.WHITE);
+ paint.setAntiAlias(true);
+ canvas.drawText(bitmap.getWidth() + "/" + sampleSize, 0, 15, paint);
+ }
+
+ holder.decodedSampleSize = sampleSize;
+ holder.bitmap = bitmap;
+ holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+ if (DEBUG) {
+ Log.d(TAG, "inflateBitmap " + btk(bytes.length) + " -> "
+ + bitmap.getWidth() + "x" + bitmap.getHeight()
+ + ", " + btk(bitmap.getByteCount()));
+ }
+ } catch (OutOfMemoryError e) {
+ // Do nothing - the photo will appear to be missing
+ }
+ }
+
+ public void clear() {
+ if (DEBUG) Log.d(TAG, "clear");
+ mPendingRequests.clear();
+ mBitmapHolderCache.evictAll();
+ mBitmapCache.evictAll();
+ }
+
+ @Override
+ public void pause() {
+ mPaused = true;
+ }
+
+ @Override
+ public void resume() {
+ mPaused = false;
+ if (DEBUG) dumpStats();
+ if (!mPendingRequests.isEmpty()) {
+ requestLoading();
+ }
+ }
+
+ /**
+ * Sends a message to this thread itself to start loading images. If the current
+ * view contains multiple image views, all of those image views will get a chance
+ * to request their respective photos before any of those requests are executed.
+ * This allows us to load images in bulk.
+ */
+ private void requestLoading() {
+ if (!mLoadingRequested) {
+ mLoadingRequested = true;
+ mMainThreadHandler.sendEmptyMessage(MESSAGE_REQUEST_LOADING);
+ }
+ }
+
+ /**
+ * Processes requests on the main thread.
+ */
+ @Override
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_REQUEST_LOADING: {
+ mLoadingRequested = false;
+ if (!mPaused) {
+ ensureLoaderThread();
+ mLoaderThread.requestLoading();
+ }
+ return true;
+ }
+
+ case MESSAGE_PHOTOS_LOADED: {
+ if (!mPaused) {
+ processLoadedImages();
+ }
+ if (DEBUG) dumpStats();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void ensureLoaderThread() {
+ if (mLoaderThread == null) {
+ mLoaderThread = new LoaderThread(mContext.getContentResolver());
+ mLoaderThread.start();
+ }
+ }
+
+ /**
+ * Goes over pending loading requests and displays loaded photos. If some of the
+ * photos still haven't been loaded, sends another request for image loading.
+ */
+ private void processLoadedImages() {
+ final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
+ while (iterator.hasNext()) {
+ final Entry<ImageView, Request> entry = iterator.next();
+ // TODO: Temporarily disable contact photo fading in, until issues with
+ // RoundedBitmapDrawables overlapping the default image drawables are resolved.
+ final boolean loaded = loadCachedPhoto(entry.getKey(), entry.getValue(), false);
+ if (loaded) {
+ iterator.remove();
+ }
+ }
+
+ softenCache();
+
+ if (!mPendingRequests.isEmpty()) {
+ requestLoading();
+ }
+ }
+
+ /**
+ * Removes strong references to loaded bitmaps to allow them to be garbage collected
+ * if needed. Some of the bitmaps will still be retained by {@link #mBitmapCache}.
+ */
+ private void softenCache() {
+ for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+ holder.bitmap = null;
+ }
+ }
+
+ /**
+ * Stores the supplied bitmap in cache.
+ * bytes should be null to indicate a failure to load the photo. An empty byte[] signifies
+ * a successful load but no photo was available.
+ */
+ private void cacheBitmap(Object key, byte[] bytes, boolean preloading, int requestedExtent) {
+ if (DEBUG) {
+ BitmapHolder prev = mBitmapHolderCache.get(key);
+ if (prev != null && prev.bytes != null) {
+ Log.d(TAG, "Overwriting cache: key=" + key + (prev.fresh ? " FRESH" : " stale"));
+ if (prev.fresh) {
+ mFreshCacheOverwrite.incrementAndGet();
+ } else {
+ mStaleCacheOverwrite.incrementAndGet();
+ }
+ }
+ Log.d(TAG, "Caching data: key=" + key + ", " +
+ (bytes == null ? "<null>" : btk(bytes.length)));
+ }
+ BitmapHolder holder = new BitmapHolder(bytes,
+ bytes == null ? -1 : BitmapUtil.getSmallerExtentFromBytes(bytes));
+
+ // Unless this image is being preloaded, decode it right away while
+ // we are still on the background thread.
+ if (!preloading) {
+ inflateBitmap(holder, requestedExtent);
+ }
+
+ if (bytes != null) {
+ mBitmapHolderCache.put(key, holder);
+ if (mBitmapHolderCache.get(key) != holder) {
+ Log.w(TAG, "Bitmap too big to fit in cache.");
+ mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
+ }
+ } else {
+ mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
+ }
+
+ mBitmapHolderCacheAllUnfresh = false;
+ }
+
+ @Override
+ public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+ final int smallerExtent = Math.min(bitmap.getWidth(), bitmap.getHeight());
+ // We can pretend here that the extent of the photo was the size that we originally
+ // requested
+ Request request = Request.createFromUri(photoUri, smallerExtent, false /* darkTheme */,
+ false /* isCircular */ , DEFAULT_AVATAR);
+ BitmapHolder holder = new BitmapHolder(photoBytes, smallerExtent);
+ holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+ mBitmapHolderCache.put(request.getKey(), holder);
+ mBitmapHolderCacheAllUnfresh = false;
+ mBitmapCache.put(request.getKey(), bitmap);
+ }
+
+ /**
+ * Populates an array of photo IDs that need to be loaded. Also decodes bitmaps that we have
+ * already loaded
+ */
+ private void obtainPhotoIdsAndUrisToLoad(Set<Long> photoIds,
+ Set<String> photoIdsAsStrings, Set<Request> uris) {
+ photoIds.clear();
+ photoIdsAsStrings.clear();
+ uris.clear();
+
+ boolean jpegsDecoded = false;
+
+ /*
+ * Since the call is made from the loader thread, the map could be
+ * changing during the iteration. That's not really a problem:
+ * ConcurrentHashMap will allow those changes to happen without throwing
+ * exceptions. Since we may miss some requests in the situation of
+ * concurrent change, we will need to check the map again once loading
+ * is complete.
+ */
+ Iterator<Request> iterator = mPendingRequests.values().iterator();
+ while (iterator.hasNext()) {
+ Request request = iterator.next();
+ final BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
+ if (holder == BITMAP_UNAVAILABLE) {
+ continue;
+ }
+ if (holder != null && holder.bytes != null && holder.fresh &&
+ (holder.bitmapRef == null || holder.bitmapRef.get() == null)) {
+ // This was previously loaded but we don't currently have the inflated Bitmap
+ inflateBitmap(holder, request.getRequestedExtent());
+ jpegsDecoded = true;
+ } else {
+ if (holder == null || !holder.fresh) {
+ if (request.isUriRequest()) {
+ uris.add(request);
+ } else {
+ photoIds.add(request.getId());
+ photoIdsAsStrings.add(String.valueOf(request.mId));
+ }
+ }
+ }
+ }
+
+ if (jpegsDecoded) mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+ }
+
+ /**
+ * The thread that performs loading of photos from the database.
+ */
+ private class LoaderThread extends HandlerThread implements Callback {
+ private static final int BUFFER_SIZE = 1024*16;
+ private static final int MESSAGE_PRELOAD_PHOTOS = 0;
+ private static final int MESSAGE_LOAD_PHOTOS = 1;
+
+ /**
+ * A pause between preload batches that yields to the UI thread.
+ */
+ private static final int PHOTO_PRELOAD_DELAY = 1000;
+
+ /**
+ * Number of photos to preload per batch.
+ */
+ private static final int PRELOAD_BATCH = 25;
+
+ /**
+ * Maximum number of photos to preload. If the cache size is 2Mb and
+ * the expected average size of a photo is 4kb, then this number should be 2Mb/4kb = 500.
+ */
+ private static final int MAX_PHOTOS_TO_PRELOAD = 100;
+
+ private final ContentResolver mResolver;
+ private final StringBuilder mStringBuilder = new StringBuilder();
+ private final Set<Long> mPhotoIds = Sets.newHashSet();
+ private final Set<String> mPhotoIdsAsStrings = Sets.newHashSet();
+ private final Set<Request> mPhotoUris = Sets.newHashSet();
+ private final List<Long> mPreloadPhotoIds = Lists.newArrayList();
+
+ private Handler mLoaderThreadHandler;
+ private byte mBuffer[];
+
+ private static final int PRELOAD_STATUS_NOT_STARTED = 0;
+ private static final int PRELOAD_STATUS_IN_PROGRESS = 1;
+ private static final int PRELOAD_STATUS_DONE = 2;
+
+ private int mPreloadStatus = PRELOAD_STATUS_NOT_STARTED;
+
+ public LoaderThread(ContentResolver resolver) {
+ super(LOADER_THREAD_NAME);
+ mResolver = resolver;
+ }
+
+ public void ensureHandler() {
+ if (mLoaderThreadHandler == null) {
+ mLoaderThreadHandler = new Handler(getLooper(), this);
+ }
+ }
+
+ /**
+ * Kicks off preloading of the next batch of photos on the background thread.
+ * Preloading will happen after a delay: we want to yield to the UI thread
+ * as much as possible.
+ * <p>
+ * If preloading is already complete, does nothing.
+ */
+ public void requestPreloading() {
+ if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+ return;
+ }
+
+ ensureHandler();
+ if (mLoaderThreadHandler.hasMessages(MESSAGE_LOAD_PHOTOS)) {
+ return;
+ }
+
+ mLoaderThreadHandler.sendEmptyMessageDelayed(
+ MESSAGE_PRELOAD_PHOTOS, PHOTO_PRELOAD_DELAY);
+ }
+
+ /**
+ * Sends a message to this thread to load requested photos. Cancels a preloading
+ * request, if any: we don't want preloading to impede loading of the photos
+ * we need to display now.
+ */
+ public void requestLoading() {
+ ensureHandler();
+ mLoaderThreadHandler.removeMessages(MESSAGE_PRELOAD_PHOTOS);
+ mLoaderThreadHandler.sendEmptyMessage(MESSAGE_LOAD_PHOTOS);
+ }
+
+ /**
+ * Receives the above message, loads photos and then sends a message
+ * to the main thread to process them.
+ */
+ @Override
+ public boolean handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_PRELOAD_PHOTOS:
+ preloadPhotosInBackground();
+ break;
+ case MESSAGE_LOAD_PHOTOS:
+ loadPhotosInBackground();
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * The first time it is called, figures out which photos need to be preloaded.
+ * Each subsequent call preloads the next batch of photos and requests
+ * another cycle of preloading after a delay. The whole process ends when
+ * we either run out of photos to preload or fill up cache.
+ */
+ private void preloadPhotosInBackground() {
+ if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+ return;
+ }
+
+ if (mPreloadStatus == PRELOAD_STATUS_NOT_STARTED) {
+ queryPhotosForPreload();
+ if (mPreloadPhotoIds.isEmpty()) {
+ mPreloadStatus = PRELOAD_STATUS_DONE;
+ } else {
+ mPreloadStatus = PRELOAD_STATUS_IN_PROGRESS;
+ }
+ requestPreloading();
+ return;
+ }
+
+ if (mBitmapHolderCache.size() > mBitmapHolderCacheRedZoneBytes) {
+ mPreloadStatus = PRELOAD_STATUS_DONE;
+ return;
+ }
+
+ mPhotoIds.clear();
+ mPhotoIdsAsStrings.clear();
+
+ int count = 0;
+ int preloadSize = mPreloadPhotoIds.size();
+ while(preloadSize > 0 && mPhotoIds.size() < PRELOAD_BATCH) {
+ preloadSize--;
+ count++;
+ Long photoId = mPreloadPhotoIds.get(preloadSize);
+ mPhotoIds.add(photoId);
+ mPhotoIdsAsStrings.add(photoId.toString());
+ mPreloadPhotoIds.remove(preloadSize);
+ }
+
+ loadThumbnails(true);
+
+ if (preloadSize == 0) {
+ mPreloadStatus = PRELOAD_STATUS_DONE;
+ }
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Preloaded " + count + " photos. Cached bytes: "
+ + mBitmapHolderCache.size());
+ }
+
+ requestPreloading();
+ }
+
+ private void queryPhotosForPreload() {
+ Cursor cursor = null;
+ try {
+ Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
+ .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+ String.valueOf(MAX_PHOTOS_TO_PRELOAD))
+ .build();
+ cursor = mResolver.query(uri, new String[] { Contacts.PHOTO_ID },
+ Contacts.PHOTO_ID + " NOT NULL AND " + Contacts.PHOTO_ID + "!=0",
+ null,
+ Contacts.STARRED + " DESC, " + Contacts.LAST_TIME_CONTACTED + " DESC");
+
+ if (cursor != null) {
+ while (cursor.moveToNext()) {
+ // Insert them in reverse order, because we will be taking
+ // them from the end of the list for loading.
+ mPreloadPhotoIds.add(0, cursor.getLong(0));
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ private void loadPhotosInBackground() {
+ if (!PermissionsUtil.hasPermission(mContext,
+ android.Manifest.permission.READ_CONTACTS)) {
+ return;
+ }
+ obtainPhotoIdsAndUrisToLoad(mPhotoIds, mPhotoIdsAsStrings, mPhotoUris);
+ loadThumbnails(false);
+ loadUriBasedPhotos();
+ requestPreloading();
+ }
+
+ /** Loads thumbnail photos with ids */
+ private void loadThumbnails(boolean preloading) {
+ if (mPhotoIds.isEmpty()) {
+ return;
+ }
+
+ // Remove loaded photos from the preload queue: we don't want
+ // the preloading process to load them again.
+ if (!preloading && mPreloadStatus == PRELOAD_STATUS_IN_PROGRESS) {
+ for (Long id : mPhotoIds) {
+ mPreloadPhotoIds.remove(id);
+ }
+ if (mPreloadPhotoIds.isEmpty()) {
+ mPreloadStatus = PRELOAD_STATUS_DONE;
+ }
+ }
+
+ mStringBuilder.setLength(0);
+ mStringBuilder.append(Photo._ID + " IN(");
+ for (int i = 0; i < mPhotoIds.size(); i++) {
+ if (i != 0) {
+ mStringBuilder.append(',');
+ }
+ mStringBuilder.append('?');
+ }
+ mStringBuilder.append(')');
+
+ Cursor cursor = null;
+ try {
+ if (DEBUG) Log.d(TAG, "Loading " + TextUtils.join(",", mPhotoIdsAsStrings));
+ cursor = mResolver.query(Data.CONTENT_URI,
+ COLUMNS,
+ mStringBuilder.toString(),
+ mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
+ null);
+
+ if (cursor != null) {
+ while (cursor.moveToNext()) {
+ Long id = cursor.getLong(0);
+ byte[] bytes = cursor.getBlob(1);
+ if (bytes == null) {
+ bytes = new byte[0];
+ }
+ cacheBitmap(id, bytes, preloading, -1);
+ mPhotoIds.remove(id);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ // Remaining photos were not found in the contacts database (but might be in profile).
+ for (Long id : mPhotoIds) {
+ if (ContactsContract.isProfileId(id)) {
+ Cursor profileCursor = null;
+ try {
+ profileCursor = mResolver.query(
+ ContentUris.withAppendedId(Data.CONTENT_URI, id),
+ COLUMNS, null, null, null);
+ if (profileCursor != null && profileCursor.moveToFirst()) {
+ byte[] bytes = profileCursor.getBlob(1);
+ if (bytes == null) {
+ bytes = new byte[0];
+ }
+ cacheBitmap(profileCursor.getLong(0), bytes, preloading, -1);
+ } else {
+ // Couldn't load a photo this way either.
+ cacheBitmap(id, null, preloading, -1);
+ }
+ } finally {
+ if (profileCursor != null) {
+ profileCursor.close();
+ }
+ }
+ } else {
+ // Not a profile photo and not found - mark the cache accordingly
+ cacheBitmap(id, null, preloading, -1);
+ }
+ }
+
+ mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+ }
+
+ /**
+ * Loads photos referenced with Uris. Those can be remote thumbnails
+ * (from directory searches), display photos etc
+ */
+ private void loadUriBasedPhotos() {
+ for (Request uriRequest : mPhotoUris) {
+ // Keep the original URI and use this to key into the cache. Failure to do so will
+ // result in an image being continually reloaded into cache if the original URI
+ // has a contact type encodedFragment (eg nearby places business photo URLs).
+ Uri originalUri = uriRequest.getUri();
+
+ // Strip off the "contact type" we added to the URI to ensure it was identifiable as
+ // a business photo -- there is no need to pass this on to the server.
+ Uri uri = ContactPhotoManager.removeContactType(originalUri);
+
+ if (mBuffer == null) {
+ mBuffer = new byte[BUFFER_SIZE];
+ }
+ try {
+ if (DEBUG) Log.d(TAG, "Loading " + uri);
+ final String scheme = uri.getScheme();
+ InputStream is = null;
+ if (scheme.equals("http") || scheme.equals("https")) {
+ TrafficStats.setThreadStatsTag(TrafficStatsTags.CONTACT_PHOTO_DOWNLOAD_TAG);
+ final HttpURLConnection connection =
+ (HttpURLConnection) new URL(uri.toString()).openConnection();
+
+ // Include the user agent if it is specified.
+ if (!TextUtils.isEmpty(mUserAgent)) {
+ connection.setRequestProperty("User-Agent", mUserAgent);
+ }
+ try {
+ is = connection.getInputStream();
+ } catch (IOException e) {
+ connection.disconnect();
+ is = null;
+ }
+ TrafficStats.clearThreadStatsTag();
+ } else {
+ is = mResolver.openInputStream(uri);
+ }
+ if (is != null) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ int size;
+ while ((size = is.read(mBuffer)) != -1) {
+ baos.write(mBuffer, 0, size);
+ }
+ } finally {
+ is.close();
+ }
+ cacheBitmap(originalUri, baos.toByteArray(), false,
+ uriRequest.getRequestedExtent());
+ mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+ } else {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Cannot load photo " + uri);
+ }
+ cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
+ }
+ } catch (final Exception | OutOfMemoryError ex) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Cannot load photo " + uri, ex);
+ }
+ cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
+ }
+ }
+ }
+ }
+
+ /**
+ * A holder for either a Uri or an id and a flag whether this was requested for the dark or
+ * light theme
+ */
+ private static final class Request {
+ private final long mId;
+ private final Uri mUri;
+ private final boolean mDarkTheme;
+ private final int mRequestedExtent;
+ private final DefaultImageProvider mDefaultProvider;
+ private final DefaultImageRequest mDefaultRequest;
+ /**
+ * Whether or not the contact photo is to be displayed as a circle
+ */
+ private final boolean mIsCircular;
+
+ private Request(long id, Uri uri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageProvider defaultProvider,
+ DefaultImageRequest defaultRequest) {
+ mId = id;
+ mUri = uri;
+ mDarkTheme = darkTheme;
+ mIsCircular = isCircular;
+ mRequestedExtent = requestedExtent;
+ mDefaultProvider = defaultProvider;
+ mDefaultRequest = defaultRequest;
+ }
+
+ public static Request createFromThumbnailId(long id, boolean darkTheme, boolean isCircular,
+ DefaultImageProvider defaultProvider, DefaultImageRequest defaultRequest) {
+ return new Request(id, null /* no URI */, -1, darkTheme, isCircular, defaultProvider,
+ defaultRequest);
+ }
+
+ public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageProvider defaultProvider) {
+ return createFromUri(uri, requestedExtent, darkTheme, isCircular, defaultProvider,
+ /* defaultRequest */ null);
+ }
+
+ public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageProvider defaultProvider,
+ DefaultImageRequest defaultRequest) {
+ return new Request(0 /* no ID */, uri, requestedExtent, darkTheme, isCircular,
+ defaultProvider, defaultRequest);
+ }
+
+ public boolean isUriRequest() {
+ return mUri != null;
+ }
+
+ public Uri getUri() {
+ return mUri;
+ }
+
+ public long getId() {
+ return mId;
+ }
+
+ public int getRequestedExtent() {
+ return mRequestedExtent;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (int) (mId ^ (mId >>> 32));
+ result = prime * result + mRequestedExtent;
+ result = prime * result + ((mUri == null) ? 0 : mUri.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ final Request that = (Request) obj;
+ if (mId != that.mId) return false;
+ if (mRequestedExtent != that.mRequestedExtent) return false;
+ if (!UriUtils.areEqual(mUri, that.mUri)) return false;
+ // Don't compare equality of mDarkTheme because it is only used in the default contact
+ // photo case. When the contact does have a photo, the contact photo is the same
+ // regardless of mDarkTheme, so we shouldn't need to put the photo request on the queue
+ // twice.
+ return true;
+ }
+
+ public Object getKey() {
+ return mUri == null ? mId : mUri;
+ }
+
+ /**
+ * Applies the default image to the current view. If the request is URI-based, looks for
+ * the contact type encoded fragment to determine if this is a request for a business photo,
+ * in which case we will load the default business photo.
+ *
+ * @param view The current image view to apply the image to.
+ * @param isCircular Whether the image is circular or not.
+ */
+ public void applyDefaultImage(ImageView view, boolean isCircular) {
+ final DefaultImageRequest request;
+
+ if (mDefaultRequest == null) {
+ if (isCircular) {
+ request = ContactPhotoManager.isBusinessContactUri(mUri)
+ ? DefaultImageRequest.EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST
+ : DefaultImageRequest.EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST;
+ } else {
+ request = ContactPhotoManager.isBusinessContactUri(mUri)
+ ? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
+ : DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
+ }
+ } else {
+ request = mDefaultRequest;
+ }
+ mDefaultProvider.applyDefaultImage(view, mRequestedExtent, mDarkTheme, request);
+ }
+ }
+}
diff --git a/src/com/android/contacts/ContactPresenceIconUtil.java b/src/com/android/contacts/ContactPresenceIconUtil.java
new file mode 100644
index 000000000..0cb5b93e3
--- /dev/null
+++ b/src/com/android/contacts/ContactPresenceIconUtil.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 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;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.StatusUpdates;
+
+/**
+ * Define the contact present show policy in Contacts
+ */
+public class ContactPresenceIconUtil {
+ /**
+ * Get the presence icon resource according the status.
+ *
+ * @return null means don't show the status icon.
+ */
+ public static Drawable getPresenceIcon (Context context, int status) {
+ // We don't show the offline status in Contacts
+ switch(status) {
+ case StatusUpdates.AVAILABLE:
+ case StatusUpdates.IDLE:
+ case StatusUpdates.AWAY:
+ case StatusUpdates.DO_NOT_DISTURB:
+ case StatusUpdates.INVISIBLE:
+ return context.getResources().getDrawable(
+ StatusUpdates.getPresenceIconResourceId(status));
+ case StatusUpdates.OFFLINE:
+ // The undefined status is treated as OFFLINE in getPresenceIconResourceId();
+ default:
+ return null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 5c9c899c3..4e2d17896 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -17,6 +17,7 @@
package com.android.contacts;
import static android.Manifest.permission.WRITE_CONTACTS;
+
import android.app.Activity;
import android.app.IntentService;
import android.content.ContentProviderOperation;
@@ -29,6 +30,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.OperationApplicationException;
import android.database.Cursor;
+import android.database.DatabaseUtils;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -45,27 +47,34 @@ import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.Profile;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.RawContactsEntity;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v4.os.ResultReceiver;
+import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
-import com.android.contacts.activities.ContactEditorBaseActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.database.ContactUpdateUtils;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.CPOWrapper;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.PermissionsUtil;
+import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.compat.CompatUtils;
import com.android.contacts.compat.PinnedPositionsCompat;
-import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor.SaveMode;
+import com.android.contacts.database.ContactUpdateUtils;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.CPOWrapper;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contactsbind.FeedbackHelper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -84,8 +93,11 @@ public class ContactSaveService extends IntentService {
public static final String EXTRA_ACCOUNT_NAME = "accountName";
public static final String EXTRA_ACCOUNT_TYPE = "accountType";
public static final String EXTRA_DATA_SET = "dataSet";
+ public static final String EXTRA_ACCOUNT = "account";
public static final String EXTRA_CONTENT_VALUES = "contentValues";
public static final String EXTRA_CALLBACK_INTENT = "callbackIntent";
+ public static final String EXTRA_RESULT_RECEIVER = "resultReceiver";
+ public static final String EXTRA_RAW_CONTACT_IDS = "rawContactIds";
public static final String ACTION_SAVE_CONTACT = "saveContact";
public static final String EXTRA_CONTACT_STATE = "state";
@@ -109,11 +121,16 @@ public class ContactSaveService extends IntentService {
public static final String EXTRA_CONTACT_URI = "contactUri";
public static final String EXTRA_CONTACT_IDS = "contactIds";
public static final String EXTRA_STARRED_FLAG = "starred";
+ public static final String EXTRA_DISPLAY_NAME = "extraDisplayName";
+ public static final String EXTRA_DISPLAY_NAME_ARRAY = "extraDisplayNameArray";
public static final String ACTION_SET_SUPER_PRIMARY = "setSuperPrimary";
public static final String ACTION_CLEAR_PRIMARY = "clearPrimary";
public static final String EXTRA_DATA_ID = "dataId";
+ public static final String ACTION_SPLIT_CONTACT = "splitContact";
+ public static final String EXTRA_HARD_SPLIT = "extraHardSplit";
+
public static final String ACTION_JOIN_CONTACTS = "joinContacts";
public static final String ACTION_JOIN_SEVERAL_CONTACTS = "joinSeveralContacts";
public static final String EXTRA_CONTACT_ID1 = "contactId1";
@@ -125,6 +142,31 @@ public class ContactSaveService extends IntentService {
public static final String ACTION_SET_RINGTONE = "setRingtone";
public static final String EXTRA_CUSTOM_RINGTONE = "customRingtone";
+ public static final String ACTION_UNDO = "undo";
+ public static final String EXTRA_UNDO_ACTION = "undoAction";
+ public static final String EXTRA_UNDO_DATA = "undoData";
+
+ // For debugging and testing what happens when requests are queued up.
+ public static final String ACTION_SLEEP = "sleep";
+ public static final String EXTRA_SLEEP_DURATION = "sleepDuration";
+
+ public static final String BROADCAST_GROUP_DELETED = "groupDeleted";
+ public static final String BROADCAST_LINK_COMPLETE = "linkComplete";
+ public static final String BROADCAST_UNLINK_COMPLETE = "unlinkComplete";
+
+ public static final String BROADCAST_SERVICE_STATE_CHANGED = "serviceStateChanged";
+
+ public static final String EXTRA_RESULT_CODE = "resultCode";
+ public static final String EXTRA_RESULT_COUNT = "count";
+
+ public static final int CP2_ERROR = 0;
+ public static final int CONTACTS_LINKED = 1;
+ public static final int CONTACTS_SPLIT = 2;
+ public static final int BAD_ARGUMENTS = 3;
+ public static final int RESULT_UNKNOWN = 0;
+ public static final int RESULT_SUCCESS = 1;
+ public static final int RESULT_FAILURE = 2;
+
private static final HashSet<String> ALLOWED_DATA_COLUMNS = Sets.newHashSet(
Data.MIMETYPE,
Data.IS_PRIMARY,
@@ -156,7 +198,12 @@ public class ContactSaveService extends IntentService {
private static final CopyOnWriteArrayList<Listener> sListeners =
new CopyOnWriteArrayList<Listener>();
+ // Holds the current state of the service
+ private static final State sState = new State();
+
private Handler mMainHandler;
+ private GroupsDao mGroupsDao;
+ private SimContactDao mSimContactDao;
public ContactSaveService() {
super(TAG);
@@ -164,6 +211,13 @@ public class ContactSaveService extends IntentService {
mMainHandler = new Handler(Looper.getMainLooper());
}
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mGroupsDao = new GroupsDaoImpl(this);
+ mSimContactDao = SimContactDao.create(this);
+ }
+
public static void registerListener(Listener listener) {
if (!(listener instanceof Activity)) {
throw new ClassCastException("Only activities can be registered to"
@@ -172,10 +226,23 @@ public class ContactSaveService extends IntentService {
sListeners.add(0, listener);
}
+ public static boolean canUndo(Intent resultIntent) {
+ return resultIntent.hasExtra(EXTRA_UNDO_DATA);
+ }
+
public static void unregisterListener(Listener listener) {
sListeners.remove(listener);
}
+ public static State getState() {
+ return sState;
+ }
+
+ private void notifyStateChanged() {
+ LocalBroadcastManager.getInstance(this)
+ .sendBroadcast(new Intent(BROADCAST_SERVICE_STATE_CHANGED));
+ }
+
/**
* Returns true if the ContactSaveService was started successfully and false if an exception
* was thrown and a Toast error message was displayed.
@@ -186,13 +253,13 @@ public class ContactSaveService extends IntentService {
} catch (Exception exception) {
final int resId;
switch (saveMode) {
- case ContactEditorBaseActivity.ContactEditor.SaveMode.SPLIT:
+ case ContactEditorActivity.ContactEditor.SaveMode.SPLIT:
resId = R.string.contactUnlinkErrorToast;
break;
- case ContactEditorBaseActivity.ContactEditor.SaveMode.RELOAD:
+ case ContactEditorActivity.ContactEditor.SaveMode.RELOAD:
resId = R.string.contactJoinErrorToast;
break;
- case ContactEditorBaseActivity.ContactEditor.SaveMode.CLOSE:
+ case ContactEditorActivity.ContactEditor.SaveMode.CLOSE:
resId = R.string.contactSavedErrorToast;
break;
default:
@@ -225,10 +292,21 @@ public class ContactSaveService extends IntentService {
return getApplicationContext().getSystemService(name);
}
+ // Parent classes Javadoc says not to override this method but we're doing it just to update
+ // our state which should be OK since we're still doing the work in onHandleIntent
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ sState.onStart(intent);
+ notifyStateChanged();
+ return super.onStartCommand(intent, flags, startId);
+ }
+
@Override
- protected void onHandleIntent(Intent intent) {
+ protected void onHandleIntent(final Intent intent) {
if (intent == null) {
- Log.d(TAG, "onHandleIntent: could not handle null intent");
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onHandleIntent: could not handle null intent");
+ }
return;
}
if (!PermissionsUtil.hasPermission(this, WRITE_CONTACTS)) {
@@ -264,6 +342,8 @@ public class ContactSaveService extends IntentService {
deleteMultipleContacts(intent);
} else if (ACTION_DELETE_CONTACT.equals(action)) {
deleteContact(intent);
+ } else if (ACTION_SPLIT_CONTACT.equals(action)) {
+ splitContact(intent);
} else if (ACTION_JOIN_CONTACTS.equals(action)) {
joinContacts(intent);
} else if (ACTION_JOIN_SEVERAL_CONTACTS.equals(action)) {
@@ -272,7 +352,14 @@ public class ContactSaveService extends IntentService {
setSendToVoicemail(intent);
} else if (ACTION_SET_RINGTONE.equals(action)) {
setRingtone(intent);
+ } else if (ACTION_UNDO.equals(action)) {
+ undo(intent);
+ } else if (ACTION_SLEEP.equals(action)) {
+ sleepForDebugging(intent);
}
+
+ sState.onFinish(intent);
+ notifyStateChanged();
}
/**
@@ -493,7 +580,7 @@ public class ContactSaveService extends IntentService {
rawContactId);
lookupUri = RawContacts.getContactLookupUri(resolver, rawContactUri);
}
- if (lookupUri != null) {
+ if (lookupUri != null && Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Saved contact. New URI: " + lookupUri);
}
@@ -503,12 +590,12 @@ public class ContactSaveService extends IntentService {
} catch (RemoteException e) {
// Something went wrong, bail without success
- Log.e(TAG, "Problem persisting user edits", e);
+ FeedbackHelper.sendFeedback(this, TAG, "Problem persisting user edits", e);
break;
} catch (IllegalArgumentException e) {
// This is thrown by applyBatch on malformed requests
- Log.e(TAG, "Problem persisting user edits", e);
+ FeedbackHelper.sendFeedback(this, TAG, "Problem persisting user edits", e);
showToast(R.string.contactSavedErrorToast);
break;
@@ -693,16 +780,10 @@ public class ContactSaveService extends IntentService {
String label = intent.getStringExtra(EXTRA_GROUP_LABEL);
final long[] rawContactsToAdd = intent.getLongArrayExtra(EXTRA_RAW_CONTACTS_TO_ADD);
- ContentValues values = new ContentValues();
- values.put(Groups.ACCOUNT_TYPE, accountType);
- values.put(Groups.ACCOUNT_NAME, accountName);
- values.put(Groups.DATA_SET, dataSet);
- values.put(Groups.TITLE, label);
-
- final ContentResolver resolver = getContentResolver();
-
// Create the new group
- final Uri groupUri = resolver.insert(Groups.CONTENT_URI, values);
+ final Uri groupUri = mGroupsDao.create(label,
+ new AccountWithDataSet(accountName, accountType, dataSet));
+ final ContentResolver resolver = getContentResolver();
// If there's no URI, then the insertion failed. Abort early because group members can't be
// added if the group doesn't exist
@@ -714,8 +795,10 @@ public class ContactSaveService extends IntentService {
// Add new group members
addMembersToGroup(resolver, rawContactsToAdd, ContentUris.parseId(groupUri));
+ ContentValues values = new ContentValues();
// TODO: Move this into the contact editor where it belongs. This needs to be integrated
- // with the way other intent extras that are passed to the {@link ContactEditorActivity}.
+ // with the way other intent extras that are passed to the
+ // {@link ContactEditorActivity}.
values.clear();
values.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE);
values.put(GroupMembership.GROUP_ROW_ID, ContentUris.parseId(groupUri));
@@ -768,9 +851,10 @@ public class ContactSaveService extends IntentService {
* Creates an intent that can be sent to this service to delete a group.
*/
public static Intent createGroupDeletionIntent(Context context, long groupId) {
- Intent serviceIntent = new Intent(context, ContactSaveService.class);
+ final Intent serviceIntent = new Intent(context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_DELETE_GROUP);
serviceIntent.putExtra(ContactSaveService.EXTRA_GROUP_ID, groupId);
+
return serviceIntent;
}
@@ -780,11 +864,33 @@ public class ContactSaveService extends IntentService {
Log.e(TAG, "Invalid arguments for deleteGroup request");
return;
}
+ final Uri groupUri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId);
+
+ final Intent callbackIntent = new Intent(BROADCAST_GROUP_DELETED);
+ final Bundle undoData = mGroupsDao.captureDeletionUndoData(groupUri);
+ callbackIntent.putExtra(EXTRA_UNDO_ACTION, ACTION_DELETE_GROUP);
+ callbackIntent.putExtra(EXTRA_UNDO_DATA, undoData);
+
+ mGroupsDao.delete(groupUri);
+
+ LocalBroadcastManager.getInstance(this).sendBroadcast(callbackIntent);
+ }
+
+ public static Intent createUndoIntent(Context context, Intent resultIntent) {
+ final Intent serviceIntent = new Intent(context, ContactSaveService.class);
+ serviceIntent.setAction(ContactSaveService.ACTION_UNDO);
+ serviceIntent.putExtras(resultIntent);
+ return serviceIntent;
+ }
- getContentResolver().delete(
- ContentUris.withAppendedId(Groups.CONTENT_URI, groupId), null, null);
+ private void undo(Intent intent) {
+ final String actionToUndo = intent.getStringExtra(EXTRA_UNDO_ACTION);
+ if (ACTION_DELETE_GROUP.equals(actionToUndo)) {
+ mGroupsDao.undoDeletion(intent.getBundleExtra(EXTRA_UNDO_DATA));
+ }
}
+
/**
* Creates an intent that can be sent to this service to rename a group as
* well as add and remove members from the group.
@@ -849,7 +955,7 @@ public class ContactSaveService extends IntentService {
deliverCallback(callbackIntent);
}
- private static void addMembersToGroup(ContentResolver resolver, long[] rawContactsToAdd,
+ private void addMembersToGroup(ContentResolver resolver, long[] rawContactsToAdd,
long groupId) {
if (rawContactsToAdd == null) {
return;
@@ -889,14 +995,16 @@ public class ContactSaveService extends IntentService {
}
} catch (RemoteException e) {
// Something went wrong, bail without success
- Log.e(TAG, "Problem persisting user edits for raw contact ID " +
- String.valueOf(rawContactId), e);
+ FeedbackHelper.sendFeedback(this, TAG,
+ "Problem persisting user edits for raw contact ID " +
+ String.valueOf(rawContactId), e);
} catch (OperationApplicationException e) {
// The assert could have failed because the contact is already in the group,
// just continue to the next contact
- Log.w(TAG, "Assert failed in adding raw contact ID " +
- String.valueOf(rawContactId) + ". Already exists in group " +
- String.valueOf(groupId), e);
+ FeedbackHelper.sendFeedback(this, TAG,
+ "Assert failed in adding raw contact ID " +
+ String.valueOf(rawContactId) + ". Already exists in group " +
+ String.valueOf(groupId), e);
}
}
}
@@ -1074,10 +1182,11 @@ public class ContactSaveService extends IntentService {
* Creates an intent that can be sent to this service to delete multiple contacts.
*/
public static Intent createDeleteMultipleContactsIntent(Context context,
- long[] contactIds) {
+ long[] contactIds, final String[] names) {
Intent serviceIntent = new Intent(context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_DELETE_MULTIPLE_CONTACTS);
serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_IDS, contactIds);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_DISPLAY_NAME_ARRAY, names);
return serviceIntent;
}
@@ -1101,8 +1210,23 @@ public class ContactSaveService extends IntentService {
final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
getContentResolver().delete(contactUri, null, null);
}
- final String deleteToastMessage = getResources().getQuantityString(R.plurals
- .contacts_deleted_toast, contactIds.length);
+ final String[] names = intent.getStringArrayExtra(
+ ContactSaveService.EXTRA_DISPLAY_NAME_ARRAY);
+ final String deleteToastMessage;
+ if (contactIds.length != names.length || names.length == 0) {
+ deleteToastMessage = getResources().getQuantityString(
+ R.plurals.contacts_deleted_toast, contactIds.length);
+ } else if (names.length == 1) {
+ deleteToastMessage = getResources().getString(
+ R.string.contacts_deleted_one_named_toast, names);
+ } else if (names.length == 2) {
+ deleteToastMessage = getResources().getString(
+ R.string.contacts_deleted_two_named_toast, names);
+ } else {
+ deleteToastMessage = getResources().getString(
+ R.string.contacts_deleted_many_named_toast, names);
+ }
+
mMainHandler.post(new Runnable() {
@Override
public void run() {
@@ -1113,6 +1237,106 @@ public class ContactSaveService extends IntentService {
}
/**
+ * Creates an intent that can be sent to this service to split a contact into it's constituent
+ * pieces. This will set the raw contact ids to {@link AggregationExceptions#TYPE_AUTOMATIC} so
+ * they may be re-merged by the auto-aggregator.
+ */
+ public static Intent createSplitContactIntent(Context context, long[][] rawContactIds,
+ ResultReceiver receiver) {
+ final Intent serviceIntent = new Intent(context, ContactSaveService.class);
+ serviceIntent.setAction(ContactSaveService.ACTION_SPLIT_CONTACT);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_RAW_CONTACT_IDS, rawContactIds);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_RESULT_RECEIVER, receiver);
+ return serviceIntent;
+ }
+
+ /**
+ * Creates an intent that can be sent to this service to split a contact into it's constituent
+ * pieces. This will explicitly set the raw contact ids to
+ * {@link AggregationExceptions#TYPE_KEEP_SEPARATE}.
+ */
+ public static Intent createHardSplitContactIntent(Context context, long[][] rawContactIds) {
+ final Intent serviceIntent = new Intent(context, ContactSaveService.class);
+ serviceIntent.setAction(ContactSaveService.ACTION_SPLIT_CONTACT);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_RAW_CONTACT_IDS, rawContactIds);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_HARD_SPLIT, true);
+ return serviceIntent;
+ }
+
+ private void splitContact(Intent intent) {
+ final long rawContactIds[][] = (long[][]) intent
+ .getSerializableExtra(EXTRA_RAW_CONTACT_IDS);
+ final ResultReceiver receiver = intent.getParcelableExtra(EXTRA_RESULT_RECEIVER);
+ final boolean hardSplit = intent.getBooleanExtra(EXTRA_HARD_SPLIT, false);
+ if (rawContactIds == null) {
+ Log.e(TAG, "Invalid argument for splitContact request");
+ if (receiver != null) {
+ receiver.send(BAD_ARGUMENTS, new Bundle());
+ }
+ return;
+ }
+ final int batchSize = MAX_CONTACTS_PROVIDER_BATCH_SIZE;
+ final ContentResolver resolver = getContentResolver();
+ final ArrayList<ContentProviderOperation> operations = new ArrayList<>(batchSize);
+ for (int i = 0; i < rawContactIds.length; i++) {
+ for (int j = 0; j < rawContactIds.length; j++) {
+ if (i != j) {
+ if (!buildSplitTwoContacts(operations, rawContactIds[i], rawContactIds[j],
+ hardSplit)) {
+ if (receiver != null) {
+ receiver.send(CP2_ERROR, new Bundle());
+ return;
+ }
+ }
+ }
+ }
+ }
+ if (operations.size() > 0 && !applyOperations(resolver, operations)) {
+ if (receiver != null) {
+ receiver.send(CP2_ERROR, new Bundle());
+ }
+ return;
+ }
+ LocalBroadcastManager.getInstance(this)
+ .sendBroadcast(new Intent(BROADCAST_UNLINK_COMPLETE));
+ if (receiver != null) {
+ receiver.send(CONTACTS_SPLIT, new Bundle());
+ } else {
+ showToast(R.string.contactUnlinkedToast);
+ }
+ }
+
+ /**
+ * Insert aggregation exception ContentProviderOperations between {@param rawContactIds1}
+ * and {@param rawContactIds2} to {@param operations}.
+ * @return false if an error occurred, true otherwise.
+ */
+ private boolean buildSplitTwoContacts(ArrayList<ContentProviderOperation> operations,
+ long[] rawContactIds1, long[] rawContactIds2, boolean hardSplit) {
+ if (rawContactIds1 == null || rawContactIds2 == null) {
+ Log.e(TAG, "Invalid arguments for splitContact request");
+ return false;
+ }
+ // For each pair of raw contacts, insert an aggregation exception
+ final ContentResolver resolver = getContentResolver();
+ // The maximum number of operations per batch (aka yield point) is 500. See b/22480225
+ final int batchSize = MAX_CONTACTS_PROVIDER_BATCH_SIZE;
+ for (int i = 0; i < rawContactIds1.length; i++) {
+ for (int j = 0; j < rawContactIds2.length; j++) {
+ buildSplitContactDiff(operations, rawContactIds1[i], rawContactIds2[j], hardSplit);
+ // Before we get to 500 we need to flush the operations list
+ if (operations.size() > 0 && operations.size() % batchSize == 0) {
+ if (!applyOperations(resolver, operations)) {
+ return false;
+ }
+ operations.clear();
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Creates an intent that can be sent to this service to join two contacts.
* The resulting contact uses the name from {@param contactId1} if possible.
*/
@@ -1135,13 +1359,22 @@ public class ContactSaveService extends IntentService {
* Creates an intent to join all raw contacts inside {@param contactIds}'s contacts.
* No special attention is paid to where the resulting contact's name is taken from.
*/
- public static Intent createJoinSeveralContactsIntent(Context context, long[] contactIds) {
- Intent serviceIntent = new Intent(context, ContactSaveService.class);
+ public static Intent createJoinSeveralContactsIntent(Context context, long[] contactIds,
+ ResultReceiver receiver) {
+ final Intent serviceIntent = new Intent(context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_JOIN_SEVERAL_CONTACTS);
serviceIntent.putExtra(ContactSaveService.EXTRA_CONTACT_IDS, contactIds);
+ serviceIntent.putExtra(ContactSaveService.EXTRA_RESULT_RECEIVER, receiver);
return serviceIntent;
}
+ /**
+ * Creates an intent to join all raw contacts inside {@param contactIds}'s contacts.
+ * No special attention is paid to where the resulting contact's name is taken from.
+ */
+ public static Intent createJoinSeveralContactsIntent(Context context, long[] contactIds) {
+ return createJoinSeveralContactsIntent(context, contactIds, /* receiver = */ null);
+ }
private interface JoinContactQuery {
String[] PROJECTION = {
@@ -1174,10 +1407,16 @@ public class ContactSaveService extends IntentService {
private void joinSeveralContacts(Intent intent) {
final long[] contactIds = intent.getLongArrayExtra(EXTRA_CONTACT_IDS);
+ final ResultReceiver receiver = intent.getParcelableExtra(EXTRA_RESULT_RECEIVER);
+
// Load raw contact IDs for all contacts involved.
- long rawContactIds[] = getRawContactIdsForAggregation(contactIds);
+ final long rawContactIds[] = getRawContactIdsForAggregation(contactIds);
+ final long[][] separatedRawContactIds = getSeparatedRawContactIds(contactIds);
if (rawContactIds == null) {
Log.e(TAG, "Invalid arguments for joinSeveralContacts request");
+ if (receiver != null) {
+ receiver.send(BAD_ARGUMENTS, new Bundle());
+ }
return;
}
@@ -1193,33 +1432,108 @@ public class ContactSaveService extends IntentService {
}
// Before we get to 500 we need to flush the operations list
if (operations.size() > 0 && operations.size() % batchSize == 0) {
- if (!applyJoinOperations(resolver, operations)) {
+ if (!applyOperations(resolver, operations)) {
+ if (receiver != null) {
+ receiver.send(CP2_ERROR, new Bundle());
+ }
return;
}
operations.clear();
}
}
}
- if (operations.size() > 0 && !applyJoinOperations(resolver, operations)) {
+ if (operations.size() > 0 && !applyOperations(resolver, operations)) {
+ if (receiver != null) {
+ receiver.send(CP2_ERROR, new Bundle());
+ }
return;
}
- showToast(R.string.contactsJoinedMessage);
+
+
+ final String name = queryNameOfLinkedContacts(contactIds);
+ if (name != null) {
+ if (receiver != null) {
+ final Bundle result = new Bundle();
+ result.putSerializable(EXTRA_RAW_CONTACT_IDS, separatedRawContactIds);
+ result.putString(EXTRA_DISPLAY_NAME, name);
+ receiver.send(CONTACTS_LINKED, result);
+ } else {
+ if (TextUtils.isEmpty(name)) {
+ showToast(R.string.contactsJoinedMessage);
+ } else {
+ showToast(R.string.contactsJoinedNamedMessage, name);
+ }
+ }
+ LocalBroadcastManager.getInstance(this)
+ .sendBroadcast(new Intent(BROADCAST_LINK_COMPLETE));
+ } else {
+ if (receiver != null) {
+ receiver.send(CP2_ERROR, new Bundle());
+ }
+ showToast(R.string.contactJoinErrorToast);
+ }
+ }
+
+ /** Get the display name of the top-level contact after the contacts have been linked. */
+ private String queryNameOfLinkedContacts(long[] contactIds) {
+ final StringBuilder whereBuilder = new StringBuilder(Contacts._ID).append(" IN (");
+ final String[] whereArgs = new String[contactIds.length];
+ for (int i = 0; i < contactIds.length; i++) {
+ whereArgs[i] = String.valueOf(contactIds[i]);
+ whereBuilder.append("?,");
+ }
+ whereBuilder.deleteCharAt(whereBuilder.length() - 1).append(')');
+ final Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
+ new String[]{Contacts._ID, Contacts.DISPLAY_NAME,
+ Contacts.DISPLAY_NAME_ALTERNATIVE},
+ whereBuilder.toString(), whereArgs, null);
+
+ String name = null;
+ String nameAlt = null;
+ long contactId = 0;
+ try {
+ if (cursor.moveToFirst()) {
+ contactId = cursor.getLong(0);
+ name = cursor.getString(1);
+ nameAlt = cursor.getString(2);
+ }
+ while(cursor.moveToNext()) {
+ if (cursor.getLong(0) != contactId) {
+ return null;
+ }
+ }
+
+ final String formattedName = ContactDisplayUtils.getPreferredDisplayName(name, nameAlt,
+ new ContactsPreferences(getApplicationContext()));
+ return formattedName == null ? "" : formattedName;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
}
/** Returns true if the batch was successfully applied and false otherwise. */
- private boolean applyJoinOperations(ContentResolver resolver,
+ private boolean applyOperations(ContentResolver resolver,
ArrayList<ContentProviderOperation> operations) {
try {
- resolver.applyBatch(ContactsContract.AUTHORITY, operations);
+ final ContentProviderResult[] result =
+ resolver.applyBatch(ContactsContract.AUTHORITY, operations);
+ for (int i = 0; i < result.length; ++i) {
+ // if no rows were modified in the operation then we count it as fail.
+ if (result[i].count < 0) {
+ throw new OperationApplicationException();
+ }
+ }
return true;
} catch (RemoteException | OperationApplicationException e) {
- Log.e(TAG, "Failed to apply aggregation exception batch", e);
+ FeedbackHelper.sendFeedback(this, TAG,
+ "Failed to apply aggregation exception batch", e);
showToast(R.string.contactSavedErrorToast);
return false;
}
}
-
private void joinContacts(Intent intent) {
long contactId1 = intent.getLongExtra(EXTRA_CONTACT_ID1, -1);
long contactId2 = intent.getLongExtra(EXTRA_CONTACT_ID2, -1);
@@ -1276,33 +1590,81 @@ public class ContactSaveService extends IntentService {
operations.add(builder.build());
}
- boolean success = false;
// Apply all aggregation exceptions as one batch
- try {
- resolver.applyBatch(ContactsContract.AUTHORITY, operations);
- showToast(R.string.contactsJoinedMessage);
- success = true;
- } catch (RemoteException | OperationApplicationException e) {
- Log.e(TAG, "Failed to apply aggregation exception batch", e);
- showToast(R.string.contactSavedErrorToast);
- }
+ final boolean success = applyOperations(resolver, operations);
+ final String name = queryNameOfLinkedContacts(new long[] {contactId1, contactId2});
Intent callbackIntent = intent.getParcelableExtra(EXTRA_CALLBACK_INTENT);
- if (success) {
+ if (success && name != null) {
+ if (TextUtils.isEmpty(name)) {
+ showToast(R.string.contactsJoinedMessage);
+ } else {
+ showToast(R.string.contactsJoinedNamedMessage, name);
+ }
Uri uri = RawContacts.getContactLookupUri(resolver,
ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactIds[0]));
callbackIntent.setData(uri);
+ LocalBroadcastManager.getInstance(this)
+ .sendBroadcast(new Intent(BROADCAST_LINK_COMPLETE));
}
deliverCallback(callbackIntent);
}
+ /**
+ * Gets the raw contact ids for each contact id in {@param contactIds}. Each index of the outer
+ * array of the return value holds an array of raw contact ids for one contactId.
+ * @param contactIds
+ * @return
+ */
+ private long[][] getSeparatedRawContactIds(long[] contactIds) {
+ final long[][] rawContactIds = new long[contactIds.length][];
+ for (int i = 0; i < contactIds.length; i++) {
+ rawContactIds[i] = getRawContactIds(contactIds[i]);
+ }
+ return rawContactIds;
+ }
+
+ /**
+ * Gets the raw contact ids associated with {@param contactId}.
+ * @param contactId
+ * @return Array of raw contact ids.
+ */
+ private long[] getRawContactIds(long contactId) {
+ final ContentResolver resolver = getContentResolver();
+ long rawContactIds[];
+
+ final StringBuilder queryBuilder = new StringBuilder();
+ queryBuilder.append(RawContacts.CONTACT_ID)
+ .append("=")
+ .append(String.valueOf(contactId));
+
+ final Cursor c = resolver.query(RawContacts.CONTENT_URI,
+ JoinContactQuery.PROJECTION,
+ queryBuilder.toString(),
+ null, null);
+ if (c == null) {
+ Log.e(TAG, "Unable to open Contacts DB cursor");
+ return null;
+ }
+ try {
+ rawContactIds = new long[c.getCount()];
+ for (int i = 0; i < rawContactIds.length; i++) {
+ c.moveToPosition(i);
+ final long rawContactId = c.getLong(JoinContactQuery._ID);
+ rawContactIds[i] = rawContactId;
+ }
+ } finally {
+ c.close();
+ }
+ return rawContactIds;
+ }
+
private long[] getRawContactIdsForAggregation(long[] contactIds) {
if (contactIds == null) {
return null;
}
final ContentResolver resolver = getContentResolver();
- long rawContactIds[];
final StringBuilder queryBuilder = new StringBuilder();
final String stringContactIds[] = new String[contactIds.length];
@@ -1327,6 +1689,7 @@ public class ContactSaveService extends IntentService {
showToast(R.string.contactSavedErrorToast);
return null;
}
+ long rawContactIds[];
try {
if (c.getCount() < 2) {
Log.e(TAG, "Not enough raw contacts to aggregate together.");
@@ -1362,6 +1725,67 @@ public class ContactSaveService extends IntentService {
}
/**
+ * Construct a {@link AggregationExceptions#TYPE_AUTOMATIC} or a
+ * {@link AggregationExceptions#TYPE_KEEP_SEPARATE} ContentProviderOperation if a hard split is
+ * requested.
+ */
+ private void buildSplitContactDiff(ArrayList<ContentProviderOperation> operations,
+ long rawContactId1, long rawContactId2, boolean hardSplit) {
+ final Builder builder =
+ ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
+ builder.withValue(AggregationExceptions.TYPE,
+ hardSplit
+ ? AggregationExceptions.TYPE_KEEP_SEPARATE
+ : AggregationExceptions.TYPE_AUTOMATIC);
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
+ operations.add(builder.build());
+ }
+
+ /**
+ * Returns an intent that can start this service and cause it to sleep for the specified time.
+ *
+ * This exists purely for debugging and manual testing. Since this service uses a single thread
+ * it is useful to have a way to test behavior when work is queued up and most of the other
+ * operations complete too quickly to simulate that under normal conditions.
+ */
+ public static Intent createSleepIntent(Context context, long millis) {
+ return new Intent(context, ContactSaveService.class).setAction(ACTION_SLEEP)
+ .putExtra(EXTRA_SLEEP_DURATION, millis);
+ }
+
+ private void sleepForDebugging(Intent intent) {
+ long duration = intent.getLongExtra(EXTRA_SLEEP_DURATION, 1000);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "sleeping for " + duration + "ms");
+ }
+ try {
+ Thread.sleep(duration);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "finished sleeping");
+ }
+ }
+
+ /**
+ * Shows a toast on the UI thread by formatting messageId using args.
+ * @param messageId id of message string
+ * @param args args to format string
+ */
+ private void showToast(final int messageId, final Object... args) {
+ final String message = getResources().getString(messageId, args);
+ mMainHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(ContactSaveService.this, message, Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+
+
+ /**
* Shows a toast on the UI thread.
*/
private void showToast(final int message) {
@@ -1396,4 +1820,164 @@ public class ContactSaveService extends IntentService {
}
}
}
+
+ public interface GroupsDao {
+ Uri create(String title, AccountWithDataSet account);
+ int delete(Uri groupUri);
+ Bundle captureDeletionUndoData(Uri groupUri);
+ Uri undoDeletion(Bundle undoData);
+ }
+
+ public static class GroupsDaoImpl implements GroupsDao {
+ public static final String KEY_GROUP_DATA = "groupData";
+ public static final String KEY_GROUP_MEMBERS = "groupMemberIds";
+
+ private static final String TAG = "GroupsDao";
+ private final Context context;
+ private final ContentResolver contentResolver;
+
+ public GroupsDaoImpl(Context context) {
+ this(context, context.getContentResolver());
+ }
+
+ public GroupsDaoImpl(Context context, ContentResolver contentResolver) {
+ this.context = context;
+ this.contentResolver = contentResolver;
+ }
+
+ public Bundle captureDeletionUndoData(Uri groupUri) {
+ final long groupId = ContentUris.parseId(groupUri);
+ final Bundle result = new Bundle();
+
+ final Cursor cursor = contentResolver.query(groupUri,
+ new String[]{
+ Groups.TITLE, Groups.NOTES, Groups.GROUP_VISIBLE,
+ Groups.ACCOUNT_TYPE, Groups.ACCOUNT_NAME, Groups.DATA_SET,
+ Groups.SHOULD_SYNC
+ },
+ Groups.DELETED + "=?", new String[] { "0" }, null);
+ try {
+ if (cursor.moveToFirst()) {
+ final ContentValues groupValues = new ContentValues();
+ DatabaseUtils.cursorRowToContentValues(cursor, groupValues);
+ result.putParcelable(KEY_GROUP_DATA, groupValues);
+ } else {
+ // Group doesn't exist.
+ return result;
+ }
+ } finally {
+ cursor.close();
+ }
+
+ final Cursor membersCursor = contentResolver.query(
+ Data.CONTENT_URI, new String[] { Data.RAW_CONTACT_ID },
+ Data.MIMETYPE + "=? AND " + GroupMembership.GROUP_ROW_ID + "=?",
+ new String[] { GroupMembership.CONTENT_ITEM_TYPE, String.valueOf(groupId) }, null);
+ final long[] memberIds = new long[membersCursor.getCount()];
+ int i = 0;
+ while (membersCursor.moveToNext()) {
+ memberIds[i++] = membersCursor.getLong(0);
+ }
+ result.putLongArray(KEY_GROUP_MEMBERS, memberIds);
+ return result;
+ }
+
+ public Uri undoDeletion(Bundle deletedGroupData) {
+ final ContentValues groupData = deletedGroupData.getParcelable(KEY_GROUP_DATA);
+ if (groupData == null) {
+ return null;
+ }
+ final Uri groupUri = contentResolver.insert(Groups.CONTENT_URI, groupData);
+ final long groupId = ContentUris.parseId(groupUri);
+
+ final long[] memberIds = deletedGroupData.getLongArray(KEY_GROUP_MEMBERS);
+ if (memberIds == null) {
+ return groupUri;
+ }
+ final ContentValues[] memberInsertions = new ContentValues[memberIds.length];
+ for (int i = 0; i < memberIds.length; i++) {
+ memberInsertions[i] = new ContentValues();
+ memberInsertions[i].put(Data.RAW_CONTACT_ID, memberIds[i]);
+ memberInsertions[i].put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE);
+ memberInsertions[i].put(GroupMembership.GROUP_ROW_ID, groupId);
+ }
+ final int inserted = contentResolver.bulkInsert(Data.CONTENT_URI, memberInsertions);
+ if (inserted != memberIds.length) {
+ Log.e(TAG, "Could not recover some members for group deletion undo");
+ }
+
+ return groupUri;
+ }
+
+ public Uri create(String title, AccountWithDataSet account) {
+ final ContentValues values = new ContentValues();
+ values.put(Groups.TITLE, title);
+ values.put(Groups.ACCOUNT_NAME, account.name);
+ values.put(Groups.ACCOUNT_TYPE, account.type);
+ values.put(Groups.DATA_SET, account.dataSet);
+ return contentResolver.insert(Groups.CONTENT_URI, values);
+ }
+
+ public int delete(Uri groupUri) {
+ return contentResolver.delete(groupUri, null, null);
+ }
+ }
+
+ /**
+ * Keeps track of which operations have been requested but have not yet finished for this
+ * service.
+ */
+ public static class State {
+ private final CopyOnWriteArrayList<Intent> mPending;
+
+ public State() {
+ mPending = new CopyOnWriteArrayList<>();
+ }
+
+ public State(Collection<Intent> pendingActions) {
+ mPending = new CopyOnWriteArrayList<>(pendingActions);
+ }
+
+ public boolean isIdle() {
+ return mPending.isEmpty();
+ }
+
+ public Intent getCurrentIntent() {
+ return mPending.isEmpty() ? null : mPending.get(0);
+ }
+
+ /**
+ * Returns the first intent requested that has the specified action or null if no intent
+ * with that action has been requested.
+ */
+ public Intent getNextIntentWithAction(String action) {
+ for (Intent intent : mPending) {
+ if (action.equals(intent.getAction())) {
+ return intent;
+ }
+ }
+ return null;
+ }
+
+ public boolean isActionPending(String action) {
+ return getNextIntentWithAction(action) != null;
+ }
+
+ private void onFinish(Intent intent) {
+ if (mPending.isEmpty()) {
+ return;
+ }
+ final String action = mPending.get(0).getAction();
+ if (action.equals(intent.getAction())) {
+ mPending.remove(0);
+ }
+ }
+
+ private void onStart(Intent intent) {
+ if (intent.getAction() == null) {
+ return;
+ }
+ mPending.add(intent);
+ }
+ }
}
diff --git a/src/com/android/contacts/ContactStatusUtil.java b/src/com/android/contacts/ContactStatusUtil.java
new file mode 100644
index 000000000..4aa24b045
--- /dev/null
+++ b/src/com/android/contacts/ContactStatusUtil.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.res.Resources;
+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) {
+ case StatusUpdates.AVAILABLE:
+ return resources.getString(R.string.status_available);
+ case StatusUpdates.IDLE:
+ case StatusUpdates.AWAY:
+ return resources.getString(R.string.status_away);
+ case StatusUpdates.DO_NOT_DISTURB:
+ return resources.getString(R.string.status_busy);
+ case StatusUpdates.OFFLINE:
+ case StatusUpdates.INVISIBLE:
+ default:
+ return null;
+ }
+ }
+
+}
diff --git a/src/com/android/contacts/ContactTileLoaderFactory.java b/src/com/android/contacts/ContactTileLoaderFactory.java
new file mode 100644
index 000000000..566ebae5f
--- /dev/null
+++ b/src/com/android/contacts/ContactTileLoaderFactory.java
@@ -0,0 +1,108 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Contacts;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Used to create {@link CursorLoader}s to load different groups of
+ * {@link com.android.contacts.list.ContactTileView}.
+ */
+public final class ContactTileLoaderFactory {
+
+ public final static int CONTACT_ID = 0;
+ public final static int DISPLAY_NAME = 1;
+ public final static int STARRED = 2;
+ public final static int PHOTO_URI = 3;
+ public final static int LOOKUP_KEY = 4;
+ public final static int CONTACT_PRESENCE = 5;
+ public final static int CONTACT_STATUS = 6;
+
+ // Only used for StrequentPhoneOnlyLoader
+ public final static int PHONE_NUMBER = 5;
+ public final static int PHONE_NUMBER_TYPE = 6;
+ public final static int PHONE_NUMBER_LABEL = 7;
+ public final static int IS_DEFAULT_NUMBER = 8;
+ public final static int PINNED = 9;
+ // The _ID field returned for strequent items actually contains data._id instead of
+ // contacts._id because the query is performed on the data table. In order to obtain the
+ // contact id for strequent items, we thus have to use Phone.contact_id instead.
+ public final static int CONTACT_ID_FOR_DATA = 10;
+ public final static int DISPLAY_NAME_ALTERNATIVE = 11;
+
+ private static final String[] COLUMNS = new String[] {
+ Contacts._ID, // ..........................................0
+ Contacts.DISPLAY_NAME, // .................................1
+ Contacts.STARRED, // ......................................2
+ Contacts.PHOTO_URI, // ....................................3
+ Contacts.LOOKUP_KEY, // ...................................4
+ Contacts.CONTACT_PRESENCE, // .............................5
+ Contacts.CONTACT_STATUS, // ...............................6
+ };
+
+ /**
+ * Projection used for the {@link Contacts#CONTENT_STREQUENT_URI}
+ * query when {@link ContactsContract#STREQUENT_PHONE_ONLY} flag
+ * is set to true. The main difference is the lack of presence
+ * and status data and the addition of phone number and label.
+ */
+ @VisibleForTesting
+ public static final String[] COLUMNS_PHONE_ONLY = new String[] {
+ Contacts._ID, // ..........................................0
+ Contacts.DISPLAY_NAME_PRIMARY, // .........................1
+ Contacts.STARRED, // ......................................2
+ Contacts.PHOTO_URI, // ....................................3
+ Contacts.LOOKUP_KEY, // ...................................4
+ Phone.NUMBER, // ..........................................5
+ Phone.TYPE, // ............................................6
+ Phone.LABEL, // ...........................................7
+ Phone.IS_SUPER_PRIMARY, //.................................8
+ Contacts.PINNED, // .......................................9
+ Phone.CONTACT_ID, //.......................................10
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // .....................11
+ };
+
+ private static final String STARRED_ORDER = Contacts.DISPLAY_NAME+" COLLATE NOCASE ASC";
+
+ public static CursorLoader createStrequentLoader(Context context) {
+ return new CursorLoader(context, Contacts.CONTENT_STREQUENT_URI, COLUMNS, null, null,
+ STARRED_ORDER);
+ }
+
+ public static CursorLoader createStrequentPhoneOnlyLoader(Context context) {
+ Uri uri = Contacts.CONTENT_STREQUENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.STREQUENT_PHONE_ONLY, "true").build();
+
+ return new CursorLoader(context, uri, COLUMNS_PHONE_ONLY, null, null, null);
+ }
+
+ public static CursorLoader createStarredLoader(Context context) {
+ return new CursorLoader(context, Contacts.CONTENT_URI, COLUMNS, Contacts.STARRED + "=?",
+ new String[]{"1"}, STARRED_ORDER);
+ }
+
+ public static CursorLoader createFrequentLoader(Context context) {
+ return new CursorLoader(context, Contacts.CONTENT_FREQUENT_URI, COLUMNS,
+ Contacts.STARRED + "=?", new String[]{"0"}, null);
+ }
+}
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index 82d1f981e..87c0d625c 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -25,8 +25,8 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
-import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.testing.InjectedServices;
+import com.android.contacts.activities.TransactionSafeActivity;
+import com.android.contacts.testing.InjectedServices;
/**
* A common superclass for Contacts activities that handles application-wide services.
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index 0ba1f02cb..1507ace31 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -29,14 +29,12 @@ import android.preference.PreferenceManager;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.util.Constants;
-import com.android.contacts.commonbind.analytics.AnalyticsUtil;
+import com.android.contacts.testing.InjectedServices;
+import com.android.contacts.util.Constants;
+import com.android.contactsbind.analytics.AnalyticsUtil;
-import com.android.contacts.common.testing.NeededForTesting;
import com.google.common.annotations.VisibleForTesting;
-@NeededForTesting
public class ContactsApplication extends Application {
private static final boolean ENABLE_LOADER_LOG = false; // Don't submit with true
private static final boolean ENABLE_FRAGMENT_LOG = false; // Don't submit with true
diff --git a/src/com/android/contacts/ContactsJobService.java b/src/com/android/contacts/ContactsJobService.java
new file mode 100644
index 000000000..c60a0a762
--- /dev/null
+++ b/src/com/android/contacts/ContactsJobService.java
@@ -0,0 +1,44 @@
+/*
+ * 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;
+
+import android.app.job.JobParameters;
+import android.app.job.JobService;
+
+/**
+ * Service to run {@link android.app.job.JobScheduler} jobs.
+ */
+public class ContactsJobService extends JobService {
+
+ public static final int DYNAMIC_SHORTCUTS_JOB_ID = 1;
+
+ @Override
+ public boolean onStartJob(JobParameters jobParameters) {
+ switch (jobParameters.getJobId()) {
+ case DYNAMIC_SHORTCUTS_JOB_ID:
+ DynamicShortcuts.updateFromJob(this, jobParameters);
+ return true;
+ default:
+ break;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onStopJob(JobParameters jobParameters) {
+ return false;
+ }
+}
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
new file mode 100644
index 000000000..69890b416
--- /dev/null
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.DisplayPhoto;
+import android.support.annotation.IntDef;
+import android.text.TextUtils;
+import android.util.Pair;
+
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.model.dataitem.ImDataItem;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+public class ContactsUtils {
+ private static final String TAG = "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";
+
+ private static final int DEFAULT_THUMBNAIL_SIZE = 96;
+
+ private static int sThumbnailSize = -1;
+
+ public static final boolean FLAG_N_FEATURE = Build.VERSION.SDK_INT >= 24;
+
+ // 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";
+ }
+
+ /**
+ * 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;
+ }
+
+
+ public static final long USER_TYPE_CURRENT = 0;
+ public static final long USER_TYPE_WORK = 1;
+
+ /**
+ * 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 #USER_TYPE_CURRENT}. Please note that current user can be in work profile, where the
+ * dialer is running inside Work Profile.
+ */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({USER_TYPE_CURRENT, USER_TYPE_WORK})
+ public @interface UserType {}
+
+ /**
+ * 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());
+ }
+
+ /**
+ * 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<Intent, Intent> 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.
+ *
+ * 3 types of query
+ *
+ * 1. 2 profile query: content://com.android.contacts/phone_lookup_enterprise/1234567890
+ * personal and work contact are mixed into one cursor. no directory id. contact_id indicates if
+ * it's work contact
+ *
+ * 2. work local query:
+ * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000000
+ * either directory_id or contact_id is enough to identify work contact
+ *
+ * 3. work remote query:
+ * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000003
+ * contact_id is random. only directory_id is available
+ *
+ * Summary: If directory_id is not null, always use directory_id to identify work contact.
+ * (which is the case here) Otherwise, use contact_id.
+ *
+ * @param directoryId directory id of ContactsProvider query
+ * @param contactId contact id
+ * @return UserType indicates the user type of the contact. A directory id or contact id larger
+ * than a thredshold indicates that the contact is stored in Work Profile, but not in
+ * current user. It's a contract by ContactsProvider and check by
+ * Contacts.isEnterpriseDirectoryId and Contacts.isEnterpriseContactId. Currently, only
+ * 2 kinds of users can be detected from the directoryId and contactId as
+ * ContactsProvider can only access current and work user's contacts
+ */
+ public static @UserType long determineUserType(Long directoryId, Long contactId) {
+ // First check directory id
+ if (directoryId != null) {
+ return DirectoryCompat.isEnterpriseDirectoryId(directoryId) ? USER_TYPE_WORK
+ : USER_TYPE_CURRENT;
+ }
+ // Only check contact id if directory id is null
+ if (contactId != null && contactId != 0L
+ && ContactsCompat.isEnterpriseContactId(contactId)) {
+ return USER_TYPE_WORK;
+ } else {
+ return USER_TYPE_CURRENT;
+ }
+
+ }
+}
diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
new file mode 100644
index 000000000..e287e4af3
--- /dev/null
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -0,0 +1,599 @@
+/*
+ * 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;
+
+import android.annotation.TargetApi;
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutManager;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapRegionDecoder;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.AdaptiveIconDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.PersistableBundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.support.annotation.VisibleForTesting;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v4.os.BuildCompat;
+import android.util.Log;
+
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contactsbind.experiments.Flags;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This class creates and updates the dynamic shortcuts displayed on the Nexus launcher for the
+ * Contacts app.
+ *
+ * Currently it adds shortcuts for the top 3 contacts in the {@link Contacts#CONTENT_STREQUENT_URI}
+ *
+ * Usage: DynamicShortcuts.initialize should be called during Application creation. This will
+ * schedule a Job to keep the shortcuts up-to-date so no further interactions should be necessary.
+ */
+@TargetApi(Build.VERSION_CODES.N_MR1)
+public class DynamicShortcuts {
+ private static final String TAG = "DynamicShortcuts";
+
+ // Must be the same as shortcutId in res/xml/shortcuts.xml
+ // Note: This doesn't fit very well because this is a "static" shortcut but it's still the most
+ // sensible place to put it right now.
+ public static final String SHORTCUT_ADD_CONTACT = "shortcut-add-contact";
+
+ // Note the Nexus launcher automatically truncates shortcut labels if they exceed these limits
+ // however, we implement our own truncation in case the shortcut is shown on a launcher that
+ // has different behavior
+ private static final int SHORT_LABEL_MAX_LENGTH = 12;
+ private static final int LONG_LABEL_MAX_LENGTH = 30;
+ private static final int MAX_SHORTCUTS = 3;
+
+ private static final String EXTRA_SHORTCUT_TYPE = "extraShortcutType";
+
+ // Because pinned shortcuts persist across app upgrades these values should not be changed
+ // though new ones may be added
+ private static final int SHORTCUT_TYPE_UNKNOWN = 0;
+ private static final int SHORTCUT_TYPE_CONTACT_URI = 1;
+ private static final int SHORTCUT_TYPE_ACTION_URI = 2;
+
+ // The spec specifies that it should be 44dp @ xxxhdpi
+ // Note that ShortcutManager.getIconMaxWidth and ShortcutManager.getMaxHeight return different
+ // (larger) values.
+ private static final int RECOMMENDED_ICON_PIXEL_LENGTH = 176;
+
+ @VisibleForTesting
+ static final String[] PROJECTION = new String[] {
+ Contacts._ID, Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME_PRIMARY
+ };
+
+ private final Context mContext;
+ private final ContentResolver mContentResolver;
+ private final ShortcutManager mShortcutManager;
+ private int mShortLabelMaxLength = SHORT_LABEL_MAX_LENGTH;
+ private int mLongLabelMaxLength = LONG_LABEL_MAX_LENGTH;
+ private final int mContentChangeMinUpdateDelay;
+ private final int mContentChangeMaxUpdateDelay;
+ private final JobScheduler mJobScheduler;
+
+ public DynamicShortcuts(Context context) {
+ this(context, context.getContentResolver(), (ShortcutManager)
+ context.getSystemService(Context.SHORTCUT_SERVICE),
+ (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE));
+ }
+
+ @VisibleForTesting
+ public DynamicShortcuts(Context context, ContentResolver contentResolver,
+ ShortcutManager shortcutManager, JobScheduler jobScheduler) {
+ mContext = context;
+ mContentResolver = contentResolver;
+ mShortcutManager = shortcutManager;
+ mJobScheduler = jobScheduler;
+ mContentChangeMinUpdateDelay = Flags.getInstance()
+ .getInteger(Experiments.DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
+ mContentChangeMaxUpdateDelay = Flags.getInstance()
+ .getInteger(Experiments.DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS);
+ }
+
+ @VisibleForTesting
+ void setShortLabelMaxLength(int length) {
+ this.mShortLabelMaxLength = length;
+ }
+
+ @VisibleForTesting
+ void setLongLabelMaxLength(int length) {
+ this.mLongLabelMaxLength = length;
+ }
+
+ @VisibleForTesting
+ void refresh() {
+ // Guard here in addition to initialize because this could be run by the JobScheduler
+ // after permissions are revoked (maybe)
+ if (!hasRequiredPermissions()) return;
+
+ final List<ShortcutInfo> shortcuts = getStrequentShortcuts();
+ mShortcutManager.setDynamicShortcuts(shortcuts);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "set dynamic shortcuts " + shortcuts);
+ }
+ updatePinned();
+ }
+
+ @VisibleForTesting
+ void updatePinned() {
+ final List<ShortcutInfo> updates = new ArrayList<>();
+ final List<String> removedIds = new ArrayList<>();
+ final List<String> enable = new ArrayList<>();
+
+ for (ShortcutInfo shortcut : mShortcutManager.getPinnedShortcuts()) {
+ final PersistableBundle extras = shortcut.getExtras();
+
+ if (extras == null || extras.getInt(EXTRA_SHORTCUT_TYPE, SHORTCUT_TYPE_UNKNOWN) !=
+ SHORTCUT_TYPE_CONTACT_URI) {
+ continue;
+ }
+
+ // The contact ID may have changed but that's OK because it is just an optimization
+ final long contactId = extras.getLong(Contacts._ID);
+
+ final ShortcutInfo update = createShortcutForUri(
+ Contacts.getLookupUri(contactId, shortcut.getId()));
+ if (update != null) {
+ updates.add(update);
+ if (!shortcut.isEnabled()) {
+ // Handle the case that a contact is disabled because it doesn't exist but
+ // later is created (for instance by a sync)
+ enable.add(update.getId());
+ }
+ } else if (shortcut.isEnabled()) {
+ removedIds.add(shortcut.getId());
+ }
+ }
+
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "updating " + updates);
+ Log.d(TAG, "enabling " + enable);
+ Log.d(TAG, "disabling " + removedIds);
+ }
+
+ mShortcutManager.updateShortcuts(updates);
+ mShortcutManager.enableShortcuts(enable);
+ mShortcutManager.disableShortcuts(removedIds,
+ mContext.getString(R.string.dynamic_shortcut_contact_removed_message));
+ }
+
+ private ShortcutInfo createShortcutForUri(Uri contactUri) {
+ final Cursor cursor = mContentResolver.query(contactUri, PROJECTION, null, null, null);
+ if (cursor == null) return null;
+
+ try {
+ if (cursor.moveToFirst()) {
+ return createShortcutFromRow(cursor);
+ }
+ } finally {
+ cursor.close();
+ }
+ return null;
+ }
+
+ public List<ShortcutInfo> getStrequentShortcuts() {
+ // The limit query parameter doesn't seem to work for this uri but we'll leave it because in
+ // case it does work on some phones or platform versions.
+ final Uri uri = Contacts.CONTENT_STREQUENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+ String.valueOf(MAX_SHORTCUTS))
+ .build();
+ final Cursor cursor = mContentResolver.query(uri, PROJECTION, null, null, null);
+
+ if (cursor == null) return Collections.emptyList();
+
+ final List<ShortcutInfo> result = new ArrayList<>();
+
+ try {
+ int i = 0;
+ while (i < MAX_SHORTCUTS && cursor.moveToNext()) {
+ final ShortcutInfo shortcut = createShortcutFromRow(cursor);
+ if (shortcut == null) {
+ continue;
+ }
+ result.add(shortcut);
+ i++;
+ }
+ } finally {
+ cursor.close();
+ }
+ return result;
+ }
+
+
+ @VisibleForTesting
+ ShortcutInfo createShortcutFromRow(Cursor cursor) {
+ final ShortcutInfo.Builder builder = builderForContactShortcut(cursor);
+ if (builder == null) {
+ return null;
+ }
+ addIconForContact(cursor, builder);
+ return builder.build();
+ }
+
+ @VisibleForTesting
+ ShortcutInfo.Builder builderForContactShortcut(Cursor cursor) {
+ final long id = cursor.getLong(0);
+ final String lookupKey = cursor.getString(1);
+ final String displayName = cursor.getString(2);
+ return builderForContactShortcut(id, lookupKey, displayName);
+ }
+
+ @VisibleForTesting
+ ShortcutInfo.Builder builderForContactShortcut(long id, String lookupKey, String displayName) {
+ if (lookupKey == null || displayName == null) {
+ return null;
+ }
+ final PersistableBundle extras = new PersistableBundle();
+ extras.putLong(Contacts._ID, id);
+ extras.putInt(EXTRA_SHORTCUT_TYPE, SHORTCUT_TYPE_CONTACT_URI);
+
+ final ShortcutInfo.Builder builder = new ShortcutInfo.Builder(mContext, lookupKey)
+ .setIntent(ImplicitIntentsUtil.getIntentForQuickContactLauncherShortcut(mContext,
+ Contacts.getLookupUri(id, lookupKey)))
+ .setDisabledMessage(mContext.getString(R.string.dynamic_shortcut_disabled_message))
+ .setExtras(extras);
+
+ setLabel(builder, displayName);
+ return builder;
+ }
+
+ @VisibleForTesting
+ ShortcutInfo getActionShortcutInfo(String id, String label, Intent action, Icon icon) {
+ if (id == null || label == null) {
+ return null;
+ }
+ final PersistableBundle extras = new PersistableBundle();
+ extras.putInt(EXTRA_SHORTCUT_TYPE, SHORTCUT_TYPE_ACTION_URI);
+
+ final ShortcutInfo.Builder builder = new ShortcutInfo.Builder(mContext, id)
+ .setIntent(action)
+ .setIcon(icon)
+ .setDisabledMessage(mContext.getString(R.string.dynamic_shortcut_disabled_message));
+
+ setLabel(builder, label);
+ return builder.build();
+ }
+
+ public ShortcutInfo getQuickContactShortcutInfo(long id, String lookupKey, String displayName) {
+ final ShortcutInfo.Builder builder = builderForContactShortcut(id, lookupKey, displayName);
+ addIconForContact(id, lookupKey, displayName, builder);
+ return builder.build();
+ }
+
+ private void setLabel(ShortcutInfo.Builder builder, String label) {
+ if (label.length() < mLongLabelMaxLength) {
+ builder.setLongLabel(label);
+ } else {
+ builder.setLongLabel(label.substring(0, mLongLabelMaxLength - 1).trim() + "…");
+ }
+
+ if (label.length() < mShortLabelMaxLength) {
+ builder.setShortLabel(label);
+ } else {
+ builder.setShortLabel(label.substring(0, mShortLabelMaxLength - 1).trim() + "…");
+ }
+ }
+
+ private void addIconForContact(Cursor cursor, ShortcutInfo.Builder builder) {
+ final long id = cursor.getLong(0);
+ final String lookupKey = cursor.getString(1);
+ final String displayName = cursor.getString(2);
+ addIconForContact(id, lookupKey, displayName, builder);
+ }
+
+ private void addIconForContact(long id, String lookupKey, String displayName,
+ ShortcutInfo.Builder builder) {
+ Bitmap bitmap = getContactPhoto(id);
+ if (bitmap == null) {
+ bitmap = getFallbackAvatar(displayName, lookupKey);
+ }
+ final Icon icon;
+ if (BuildCompat.isAtLeastO()) {
+ icon = Icon.createWithAdaptiveBitmap(bitmap);
+ } else {
+ icon = Icon.createWithBitmap(bitmap);
+ }
+
+ builder.setIcon(icon);
+ }
+
+ private Bitmap getContactPhoto(long id) {
+ final InputStream photoStream = Contacts.openContactPhotoInputStream(
+ mContext.getContentResolver(),
+ ContentUris.withAppendedId(Contacts.CONTENT_URI, id), true);
+
+ if (photoStream == null) return null;
+ try {
+ final Bitmap bitmap = decodeStreamForShortcut(photoStream);
+ photoStream.close();
+ return bitmap;
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to decode contact photo for shortcut. ID=" + id, e);
+ return null;
+ } finally {
+ try {
+ photoStream.close();
+ } catch (IOException e) {
+ // swallow
+ }
+ }
+ }
+
+ private Bitmap decodeStreamForShortcut(InputStream stream) throws IOException {
+ final BitmapRegionDecoder bitmapDecoder = BitmapRegionDecoder.newInstance(stream, false);
+
+ final int sourceWidth = bitmapDecoder.getWidth();
+ final int sourceHeight = bitmapDecoder.getHeight();
+
+ final int iconMaxWidth = mShortcutManager.getIconMaxWidth();
+ final int iconMaxHeight = mShortcutManager.getIconMaxHeight();
+
+ final int sampleSize = Math.min(
+ BitmapUtil.findOptimalSampleSize(sourceWidth,
+ RECOMMENDED_ICON_PIXEL_LENGTH),
+ BitmapUtil.findOptimalSampleSize(sourceHeight,
+ RECOMMENDED_ICON_PIXEL_LENGTH));
+ final BitmapFactory.Options opts = new BitmapFactory.Options();
+ opts.inSampleSize = sampleSize;
+
+ final int scaledWidth = sourceWidth / opts.inSampleSize;
+ final int scaledHeight = sourceHeight / opts.inSampleSize;
+
+ final int targetWidth = Math.min(scaledWidth, iconMaxWidth);
+ final int targetHeight = Math.min(scaledHeight, iconMaxHeight);
+
+ // Make it square.
+ final int targetSize = Math.min(targetWidth, targetHeight);
+
+ // The region is defined in the coordinates of the source image then the sampling is
+ // done on the extracted region.
+ final int prescaledXOffset = ((scaledWidth - targetSize) * opts.inSampleSize) / 2;
+ final int prescaledYOffset = ((scaledHeight - targetSize) * opts.inSampleSize) / 2;
+
+ final Bitmap bitmap = bitmapDecoder.decodeRegion(new Rect(
+ prescaledXOffset, prescaledYOffset,
+ sourceWidth - prescaledXOffset, sourceHeight - prescaledYOffset
+ ), opts);
+ bitmapDecoder.recycle();
+
+ if (!BuildCompat.isAtLeastO()) {
+ return BitmapUtil.getRoundedBitmap(bitmap, targetSize, targetSize);
+ }
+
+ // If on O or higher, add padding around the bitmap.
+ final int paddingW = (int) (bitmap.getWidth() *
+ AdaptiveIconDrawable.getExtraInsetFraction());
+ final int paddingH = (int) (bitmap.getHeight() *
+ AdaptiveIconDrawable.getExtraInsetFraction());
+
+ final Bitmap scaledBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingW,
+ bitmap.getHeight() + paddingH, bitmap.getConfig());
+
+ final Canvas scaledCanvas = new Canvas(scaledBitmap);
+ scaledCanvas.drawBitmap(bitmap, paddingW / 2, paddingH / 2, null);
+
+ return scaledBitmap;
+ }
+
+ private Bitmap getFallbackAvatar(String displayName, String lookupKey) {
+ final int width;
+ final int height;
+ final int padding;
+ if (BuildCompat.isAtLeastO()) {
+ // Add padding on >= O
+ padding = (int) (RECOMMENDED_ICON_PIXEL_LENGTH *
+ AdaptiveIconDrawable.getExtraInsetFraction());
+ width = RECOMMENDED_ICON_PIXEL_LENGTH + padding;
+ height = RECOMMENDED_ICON_PIXEL_LENGTH + padding;
+ } else {
+ padding = 0;
+ width = RECOMMENDED_ICON_PIXEL_LENGTH;
+ height = RECOMMENDED_ICON_PIXEL_LENGTH;
+ }
+
+ final ContactPhotoManager.DefaultImageRequest request =
+ new ContactPhotoManager.DefaultImageRequest(displayName, lookupKey, true);
+ final Drawable avatar = ContactPhotoManager.getDefaultAvatarDrawableForContact(
+ mContext.getResources(), true, request);
+ final Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ // The avatar won't draw unless it thinks it is visible
+ avatar.setVisible(true, true);
+ final Canvas canvas = new Canvas(result);
+ avatar.setBounds(padding, padding, width - padding, height - padding);
+ avatar.draw(canvas);
+ return result;
+ }
+
+ @VisibleForTesting
+ void handleFlagDisabled() {
+ removeAllShortcuts();
+ mJobScheduler.cancel(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID);
+ }
+
+ private void removeAllShortcuts() {
+ mShortcutManager.removeAllDynamicShortcuts();
+
+ final List<ShortcutInfo> pinned = mShortcutManager.getPinnedShortcuts();
+ final List<String> ids = new ArrayList<>(pinned.size());
+ for (ShortcutInfo shortcut : pinned) {
+ ids.add(shortcut.getId());
+ }
+ mShortcutManager.disableShortcuts(ids, mContext
+ .getString(R.string.dynamic_shortcut_disabled_message));
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "DynamicShortcuts have been removed.");
+ }
+ }
+
+ @VisibleForTesting
+ void scheduleUpdateJob() {
+ final JobInfo job = new JobInfo.Builder(
+ ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID,
+ new ComponentName(mContext, ContactsJobService.class))
+ // We just observe all changes to contacts. It would be better to be more granular
+ // but CP2 only notifies using this URI anyway so there isn't any point in adding
+ // that complexity.
+ .addTriggerContentUri(new JobInfo.TriggerContentUri(ContactsContract.AUTHORITY_URI,
+ JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS))
+ .setTriggerContentUpdateDelay(mContentChangeMinUpdateDelay)
+ .setTriggerContentMaxDelay(mContentChangeMaxUpdateDelay)
+ .build();
+ mJobScheduler.schedule(job);
+ }
+
+ void updateInBackground() {
+ new ShortcutUpdateTask(this).execute();
+ }
+
+ public synchronized static void initialize(Context context) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ final Flags flags = Flags.getInstance();
+ Log.d(TAG, "DyanmicShortcuts.initialize\nVERSION >= N_MR1? " +
+ (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) +
+ "\nisJobScheduled? " +
+ (CompatUtils.isLauncherShortcutCompatible() && isJobScheduled(context)) +
+ "\nminDelay=" +
+ flags.getInteger(Experiments.DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS) +
+ "\nmaxDelay=" +
+ flags.getInteger(Experiments.DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS));
+ }
+
+ if (!CompatUtils.isLauncherShortcutCompatible()) return;
+
+ final DynamicShortcuts shortcuts = new DynamicShortcuts(context);
+
+ if (!shortcuts.hasRequiredPermissions()) {
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(RequestPermissionsActivity.BROADCAST_PERMISSIONS_GRANTED);
+ LocalBroadcastManager.getInstance(shortcuts.mContext).registerReceiver(
+ new PermissionsGrantedReceiver(), filter);
+ } else if (!isJobScheduled(context)) {
+ // Update the shortcuts. If the job is already scheduled then either the app is being
+ // launched to run the job in which case the shortcuts will get updated when it runs or
+ // it has been launched for some other reason and the data we care about for shortcuts
+ // hasn't changed. Because the job reschedules itself after completion this check
+ // essentially means that this will run on each app launch that happens after a reboot.
+ // Note: the task schedules the job after completing.
+ new ShortcutUpdateTask(shortcuts).execute();
+ }
+ }
+
+ @VisibleForTesting
+ public static void reset(Context context) {
+ final JobScheduler jobScheduler =
+ (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+ jobScheduler.cancel(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID);
+
+ if (!CompatUtils.isLauncherShortcutCompatible()) {
+ return;
+ }
+ new DynamicShortcuts(context).removeAllShortcuts();
+ }
+
+ @VisibleForTesting
+ boolean hasRequiredPermissions() {
+ return PermissionsUtil.hasContactsPermissions(mContext);
+ }
+
+ public static void updateFromJob(final JobService service, final JobParameters jobParams) {
+ new ShortcutUpdateTask(new DynamicShortcuts(service)) {
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ // Must call super first which will reschedule the job before we call jobFinished
+ super.onPostExecute(aVoid);
+ service.jobFinished(jobParams, false);
+ }
+ }.execute();
+ }
+
+ @VisibleForTesting
+ public static boolean isJobScheduled(Context context) {
+ final JobScheduler scheduler = (JobScheduler) context
+ .getSystemService(Context.JOB_SCHEDULER_SERVICE);
+ return scheduler.getPendingJob(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID) != null;
+ }
+
+ public static void reportShortcutUsed(Context context, String lookupKey) {
+ if (!CompatUtils.isLauncherShortcutCompatible() || lookupKey == null) return;
+ final ShortcutManager shortcutManager = (ShortcutManager) context
+ .getSystemService(Context.SHORTCUT_SERVICE);
+ shortcutManager.reportShortcutUsed(lookupKey);
+ }
+
+ private static class ShortcutUpdateTask extends AsyncTask<Void, Void, Void> {
+ private DynamicShortcuts mDynamicShortcuts;
+
+ public ShortcutUpdateTask(DynamicShortcuts shortcuts) {
+ mDynamicShortcuts = shortcuts;
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ mDynamicShortcuts.refresh();
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "ShorcutUpdateTask.onPostExecute");
+ }
+ // The shortcuts may have changed so update the job so that we are observing the
+ // correct Uris
+ mDynamicShortcuts.scheduleUpdateJob();
+ }
+ }
+
+ private static class PermissionsGrantedReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Clear the receiver.
+ LocalBroadcastManager.getInstance(context).unregisterReceiver(this);
+ DynamicShortcuts.initialize(context);
+ }
+ }
+}
diff --git a/src/com/android/contacts/Experiments.java b/src/com/android/contacts/Experiments.java
new file mode 100644
index 000000000..b53ced315
--- /dev/null
+++ b/src/com/android/contacts/Experiments.java
@@ -0,0 +1,49 @@
+/*
+ * 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;
+
+/**
+ * Experiment flag names.
+ */
+public final class Experiments {
+
+ /**
+ * Experiment to enable device account detection using CP2 queries
+ */
+ public static final String CP2_DEVICE_ACCOUNT_DETECTION_ENABLED =
+ "Account__cp2_device_account_detection_enabled";
+
+ /**
+ * Flags for maximum content update time
+ */
+ public static final String DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+ "Shortcuts__dynamic_max_content_change_update_delay_millis";
+
+ /**
+ * Flags for minimum content update time
+ */
+ public static final String DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+ "Shortcuts__dynamic_min_content_change_update_delay_millis";
+
+ /**
+ * Flags for maximum time to show spinner for a contacts sync.
+ */
+ public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
+ "PullToRefresh__cancel_refresh_millis";
+
+ private Experiments() {
+ }
+}
diff --git a/src/com/android/contacts/GeoUtil.java b/src/com/android/contacts/GeoUtil.java
new file mode 100644
index 000000000..a4c2ed8e9
--- /dev/null
+++ b/src/com/android/contacts/GeoUtil.java
@@ -0,0 +1,60 @@
+/*
+ * 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;
+
+import android.app.Application;
+import android.content.Context;
+
+import com.android.contacts.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/src/com/android/contacts/GroupListLoader.java b/src/com/android/contacts/GroupListLoader.java
index 2589c9bb4..51695f5df 100644
--- a/src/com/android/contacts/GroupListLoader.java
+++ b/src/com/android/contacts/GroupListLoader.java
@@ -20,6 +20,8 @@ import android.content.CursorLoader;
import android.net.Uri;
import android.provider.ContactsContract.Groups;
+import com.android.contacts.group.GroupUtil;
+
/**
* Group loader for the group list that includes details such as the number of contacts per group
* and number of groups per account. This list is sorted by account type, account name, where the
@@ -27,7 +29,6 @@ import android.provider.ContactsContract.Groups;
* groups.
*/
public final class GroupListLoader extends CursorLoader {
-
private final static String[] COLUMNS = new String[] {
Groups.ACCOUNT_NAME,
Groups.ACCOUNT_TYPE,
@@ -35,6 +36,8 @@ public final class GroupListLoader extends CursorLoader {
Groups._ID,
Groups.TITLE,
Groups.SUMMARY_COUNT,
+ Groups.GROUP_IS_READ_ONLY,
+ Groups.SYSTEM_ID,
};
public final static int ACCOUNT_NAME = 0;
@@ -43,14 +46,17 @@ public final class GroupListLoader extends CursorLoader {
public final static int GROUP_ID = 3;
public final static int TITLE = 4;
public final static int MEMBER_COUNT = 5;
+ public final static int IS_READ_ONLY = 6;
+ public final static int SYSTEM_ID = 7;
private static final Uri GROUP_LIST_URI = Groups.CONTENT_SUMMARY_URI;
public GroupListLoader(Context context) {
- super(context, GROUP_LIST_URI, COLUMNS, Groups.ACCOUNT_TYPE + " NOT NULL AND "
- + Groups.ACCOUNT_NAME + " NOT NULL AND " + Groups.AUTO_ADD + "=0 AND " +
- Groups.FAVORITES + "=0 AND " + Groups.DELETED + "=0", null,
- Groups.ACCOUNT_TYPE + ", " + Groups.ACCOUNT_NAME + ", " + Groups.DATA_SET + ", " +
- Groups.TITLE + " COLLATE LOCALIZED ASC");
+ super(context,
+ GROUP_LIST_URI,
+ COLUMNS,
+ GroupUtil.DEFAULT_SELECTION,
+ null,
+ GroupUtil.getGroupsSortOrder());
}
}
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
deleted file mode 100644
index 6001f2c77..000000000
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ /dev/null
@@ -1,124 +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;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-
-import com.android.contacts.common.preference.ContactsPreferences;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Group Member loader. Loads all group members from the given groupId
- */
-public final class GroupMemberLoader extends CursorLoader {
-
- public static class GroupEditorQuery {
- private static final String[] PROJECTION = new String[] {
- Data.CONTACT_ID, // 0
- Data.RAW_CONTACT_ID, // 1
- Data.DISPLAY_NAME_PRIMARY, // 2
- Data.PHOTO_URI, // 3
- Data.LOOKUP_KEY, // 4
- };
-
- public static final int CONTACT_ID = 0;
- public static final int RAW_CONTACT_ID = 1;
- public static final int CONTACT_DISPLAY_NAME_PRIMARY = 2;
- public static final int CONTACT_PHOTO_URI = 3;
- public static final int CONTACT_LOOKUP_KEY = 4;
- }
-
- public static class GroupDetailQuery {
- private static final String[] PROJECTION = new String[] {
- Data.CONTACT_ID, // 0
- Data.PHOTO_URI, // 1
- Data.LOOKUP_KEY, // 2
- Data.DISPLAY_NAME_PRIMARY, // 3
- Data.CONTACT_PRESENCE, // 4
- Data.CONTACT_STATUS, // 5
- };
-
- public static final int CONTACT_ID = 0;
- public static final int CONTACT_PHOTO_URI = 1;
- public static final int CONTACT_LOOKUP_KEY = 2;
- public static final int CONTACT_DISPLAY_NAME_PRIMARY = 3;
- public static final int CONTACT_PRESENCE_STATUS = 4;
- public static final int CONTACT_STATUS = 5;
- }
-
- private final long mGroupId;
-
- /**
- * @return GroupMemberLoader object which can be used in group editor.
- */
- public static GroupMemberLoader constructLoaderForGroupEditorQuery(
- Context context, long groupId) {
- return new GroupMemberLoader(context, groupId, GroupEditorQuery.PROJECTION);
- }
-
- /**
- * @return GroupMemberLoader object used in group detail page.
- */
- public static GroupMemberLoader constructLoaderForGroupDetailQuery(
- Context context, long groupId) {
- return new GroupMemberLoader(context, groupId, GroupDetailQuery.PROJECTION);
- }
-
- private GroupMemberLoader(Context context, long groupId, String[] projection) {
- super(context);
- mGroupId = groupId;
- setUri(createUri());
- setProjection(projection);
- setSelection(createSelection());
- setSelectionArgs(createSelectionArgs());
-
- ContactsPreferences prefs = new ContactsPreferences(context);
- if (prefs.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
- setSortOrder(Contacts.SORT_KEY_PRIMARY);
- } else {
- setSortOrder(Contacts.SORT_KEY_ALTERNATIVE);
- }
- }
-
- private Uri createUri() {
- Uri uri = Data.CONTENT_URI;
- uri = uri.buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
- String.valueOf(Directory.DEFAULT)).build();
- return uri;
- }
-
- private String createSelection() {
- StringBuilder selection = new StringBuilder();
- selection.append(Data.MIMETYPE + "=?" + " AND " + GroupMembership.GROUP_ROW_ID + "=?");
- return selection.toString();
- }
-
- private String[] createSelectionArgs() {
- List<String> selectionArgs = new ArrayList<String>();
- selectionArgs.add(GroupMembership.CONTENT_ITEM_TYPE);
- selectionArgs.add(String.valueOf(mGroupId));
- return selectionArgs.toArray(new String[0]);
- }
-}
diff --git a/src/com/android/contacts/GroupMetaDataLoader.java b/src/com/android/contacts/GroupMetaDataLoader.java
index 834404138..200d91997 100644
--- a/src/com/android/contacts/GroupMetaDataLoader.java
+++ b/src/com/android/contacts/GroupMetaDataLoader.java
@@ -20,13 +20,15 @@ import android.content.CursorLoader;
import android.net.Uri;
import android.provider.ContactsContract.Groups;
+import com.android.contacts.group.GroupUtil;
+
/**
* Group meta-data loader. Loads all groups or just a single group from the
* database (if given a {@link Uri}).
*/
public final class GroupMetaDataLoader extends CursorLoader {
- private final static String[] COLUMNS = new String[] {
+ public final static String[] COLUMNS = new String[] {
Groups.ACCOUNT_NAME,
Groups.ACCOUNT_TYPE,
Groups.DATA_SET,
@@ -49,8 +51,13 @@ public final class GroupMetaDataLoader extends CursorLoader {
public final static int DELETED = 8;
public GroupMetaDataLoader(Context context, Uri groupUri) {
- super(context, ensureIsGroupUri(groupUri), COLUMNS, Groups.ACCOUNT_TYPE + " NOT NULL AND "
- + Groups.ACCOUNT_NAME + " NOT NULL", null, null);
+ super(context, ensureIsGroupUri(groupUri), COLUMNS, GroupUtil.DEFAULT_SELECTION, null,
+ GroupUtil.getGroupsSortOrder());
+ }
+
+ public GroupMetaDataLoader(Context context, Uri groupUri, String selection) {
+ super(context, ensureIsGroupUri(groupUri), COLUMNS, selection, null,
+ GroupUtil.getGroupsSortOrder());
}
/**
@@ -62,7 +69,7 @@ public final class GroupMetaDataLoader extends CursorLoader {
if (groupUri == null) {
throw new IllegalArgumentException("Uri must not be null");
}
- if (!groupUri.toString().startsWith(Groups.CONTENT_URI.toString())) {
+ if (!GroupUtil.isGroupUri(groupUri)) {
throw new IllegalArgumentException("Invalid group Uri: " + groupUri);
}
return groupUri;
diff --git a/src/com/android/contacts/MoreContactUtils.java b/src/com/android/contacts/MoreContactUtils.java
new file mode 100644
index 000000000..7f000ec63
--- /dev/null
+++ b/src/com/android/contacts/MoreContactUtils.java
@@ -0,0 +1,243 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.telephony.PhoneNumberUtils;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.contacts.model.account.AccountType;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+
+/**
+ * Shared static contact utility methods.
+ */
+public class MoreContactUtils {
+
+ private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
+
+ /**
+ * Returns true if two data with mimetypes which represent values in contact entries are
+ * considered equal for collapsing in the GUI. For caller-id, use
+ * {@link android.telephony.PhoneNumberUtils#compare(android.content.Context, String, String)}
+ * instead
+ */
+ public static boolean shouldCollapse(CharSequence mimetype1, CharSequence data1,
+ CharSequence mimetype2, CharSequence data2) {
+ // different mimetypes? don't collapse
+ if (!TextUtils.equals(mimetype1, mimetype2)) return false;
+
+ // exact same string? good, bail out early
+ if (TextUtils.equals(data1, data2)) return true;
+
+ // so if either is null, these two must be different
+ if (data1 == null || data2 == null) return false;
+
+ // if this is not about phone numbers, we know this is not a match (of course, some
+ // mimetypes could have more sophisticated matching is the future, e.g. addresses)
+ if (!TextUtils.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
+ mimetype1)) {
+ return false;
+ }
+
+ return shouldCollapsePhoneNumbers(data1.toString(), data2.toString());
+ }
+
+ // TODO: Move this to PhoneDataItem.shouldCollapse override
+ private static boolean shouldCollapsePhoneNumbers(String number1, String number2) {
+ // Work around to address b/20724444. We want to distinguish between #555, *555 and 555.
+ // This makes no attempt to distinguish between 555 and 55*5, since 55*5 is an improbable
+ // number. PhoneNumberUtil already distinguishes between 555 and 55#5.
+ if (number1.contains("#") != number2.contains("#")
+ || number1.contains("*") != number2.contains("*")) {
+ return false;
+ }
+
+ // Now do the full phone number thing. split into parts, separated by waiting symbol
+ // and compare them individually
+ final String[] dataParts1 = number1.split(WAIT_SYMBOL_AS_STRING);
+ final String[] dataParts2 = number2.split(WAIT_SYMBOL_AS_STRING);
+ if (dataParts1.length != dataParts2.length) return false;
+ final PhoneNumberUtil util = PhoneNumberUtil.getInstance();
+ for (int i = 0; i < dataParts1.length; i++) {
+ // Match phone numbers represented by keypad letters, in which case prefer the
+ // phone number with letters.
+ final String dataPart1 = PhoneNumberUtils.convertKeypadLettersToDigits(dataParts1[i]);
+ final String dataPart2 = dataParts2[i];
+
+ // substrings equal? shortcut, don't parse
+ if (TextUtils.equals(dataPart1, dataPart2)) continue;
+
+ // do a full parse of the numbers
+ final PhoneNumberUtil.MatchType result = util.isNumberMatch(dataPart1, dataPart2);
+ switch (result) {
+ case NOT_A_NUMBER:
+ // don't understand the numbers? let's play it safe
+ return false;
+ case NO_MATCH:
+ return false;
+ case EXACT_MATCH:
+ break;
+ case NSN_MATCH:
+ try {
+ // For NANP phone numbers, match when one has +1 and the other does not.
+ // In this case, prefer the +1 version.
+ if (util.parse(dataPart1, null).getCountryCode() == 1) {
+ // At this point, the numbers can be either case 1 or 2 below....
+ //
+ // case 1)
+ // +14155551212 <--- country code 1
+ // 14155551212 <--- 1 is trunk prefix, not country code
+ //
+ // and
+ //
+ // case 2)
+ // +14155551212
+ // 4155551212
+ //
+ // From b/7519057, case 2 needs to be equal. But also that bug, case 3
+ // below should not be equal.
+ //
+ // case 3)
+ // 14155551212
+ // 4155551212
+ //
+ // So in order to make sure transitive equality is valid, case 1 cannot
+ // be equal. Otherwise, transitive equality breaks and the following
+ // would all be collapsed:
+ // 4155551212 |
+ // 14155551212 |----> +14155551212
+ // +14155551212 |
+ //
+ // With transitive equality, the collapsed values should be:
+ // 4155551212 | 14155551212
+ // 14155551212 |----> +14155551212
+ // +14155551212 |
+
+ // Distinguish between case 1 and 2 by checking for trunk prefix '1'
+ // at the start of number 2.
+ if (dataPart2.trim().charAt(0) == '1') {
+ // case 1
+ return false;
+ }
+ break;
+ }
+ } catch (NumberParseException e) {
+ // This is the case where the first number does not have a country code.
+ // examples:
+ // (123) 456-7890 & 123-456-7890 (collapse)
+ // 0049 (8092) 1234 & +49/80921234 (unit test says do not collapse)
+
+ // Check the second number. If it also does not have a country code, then
+ // we should collapse. If it has a country code, then it's a different
+ // number and we should not collapse (this conclusion is based on an
+ // existing unit test).
+ try {
+ util.parse(dataPart2, null);
+ } catch (NumberParseException e2) {
+ // Number 2 also does not have a country. Collapse.
+ break;
+ }
+ }
+ return false;
+ case SHORT_NSN_MATCH:
+ return false;
+ default:
+ throw new IllegalStateException("Unknown result value from phone number " +
+ "library");
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Returns the {@link android.graphics.Rect} with left, top, right, and bottom coordinates
+ * that are equivalent to the given {@link android.view.View}'s bounds. This is equivalent to
+ * how the target {@link android.graphics.Rect} is calculated in
+ * {@link android.provider.ContactsContract.QuickContact#showQuickContact}.
+ */
+ public static Rect getTargetRectFromView(View view) {
+ final int[] pos = new int[2];
+ view.getLocationOnScreen(pos);
+
+ final Rect rect = new Rect();
+ rect.left = pos[0];
+ rect.top = pos[1];
+ rect.right = pos[0] + view.getWidth();
+ rect.bottom = pos[1] + view.getHeight();
+ 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 AccountType#getInviteContactActivityClassName()} or
+ * {@link AccountType#syncAdapterPackageName}).
+ */
+ public static Intent getInvitableIntent(AccountType accountType, Uri lookupUri) {
+ String syncAdapterPackageName = accountType.syncAdapterPackageName;
+ String className = accountType.getInviteContactActivityClassName();
+ if (TextUtils.isEmpty(syncAdapterPackageName) || TextUtils.isEmpty(className)) {
+ return null;
+ }
+ Intent intent = new Intent();
+ intent.setClassName(syncAdapterPackageName, className);
+
+ intent.setAction(ContactsContract.Intents.INVITE_CONTACT);
+
+ // Data is the lookup URI.
+ intent.setData(lookupUri);
+ return intent;
+ }
+}
diff --git a/src/com/android/contacts/NonPhoneActivity.java b/src/com/android/contacts/NonPhoneActivity.java
index 05c556b95..ba56d7090 100644
--- a/src/com/android/contacts/NonPhoneActivity.java
+++ b/src/com/android/contacts/NonPhoneActivity.java
@@ -16,9 +16,6 @@
package com.android.contacts;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -33,6 +30,9 @@ import android.provider.ContactsContract.Intents.Insert;
import android.telecom.PhoneAccount;
import android.text.TextUtils;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.util.ImplicitIntentsUtil;
+
/**
* Activity that intercepts DIAL and VIEW intents for phone numbers for devices that can not
* be used as a phone. This allows the user to see the phone number
@@ -44,9 +44,7 @@ public class NonPhoneActivity extends ContactsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
- return;
- }
+ RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
final String phoneNumber = getPhoneNumber();
if (TextUtils.isEmpty(phoneNumber)) {
diff --git a/src/com/android/contacts/ShortcutIntentBuilder.java b/src/com/android/contacts/ShortcutIntentBuilder.java
new file mode 100644
index 000000000..3a0b36b78
--- /dev/null
+++ b/src/com/android/contacts/ShortcutIntentBuilder.java
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2010 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;
+
+import android.app.ActivityManager;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutManager;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.FontMetricsInt;
+import android.graphics.Rect;
+import android.graphics.drawable.AdaptiveIconDrawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.support.v4.os.BuildCompat;
+import android.telecom.PhoneAccount;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
+
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+
+/**
+ * Constructs shortcut intents.
+ */
+public class ShortcutIntentBuilder {
+
+ private static final String[] CONTACT_COLUMNS = {
+ Contacts.DISPLAY_NAME,
+ Contacts.PHOTO_ID,
+ Contacts.LOOKUP_KEY
+ };
+
+ private static final int CONTACT_DISPLAY_NAME_COLUMN_INDEX = 0;
+ private static final int CONTACT_PHOTO_ID_COLUMN_INDEX = 1;
+ private static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 2;
+
+ private static final String[] PHONE_COLUMNS = {
+ Phone.DISPLAY_NAME,
+ Phone.PHOTO_ID,
+ Phone.NUMBER,
+ Phone.TYPE,
+ Phone.LABEL,
+ Phone.LOOKUP_KEY
+ };
+
+ private static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 0;
+ private static final int PHONE_PHOTO_ID_COLUMN_INDEX = 1;
+ private static final int PHONE_NUMBER_COLUMN_INDEX = 2;
+ private static final int PHONE_TYPE_COLUMN_INDEX = 3;
+ private static final int PHONE_LABEL_COLUMN_INDEX = 4;
+ private static final int PHONE_LOOKUP_KEY_COLUMN_INDEX = 5;
+
+ private static final String[] PHOTO_COLUMNS = {
+ Photo.PHOTO,
+ };
+
+ private static final int PHOTO_PHOTO_COLUMN_INDEX = 0;
+
+ private static final String PHOTO_SELECTION = Photo._ID + "=?";
+
+ private final OnShortcutIntentCreatedListener mListener;
+ private final Context mContext;
+ private int mIconSize;
+ private final int mIconDensity;
+ private final int mOverlayTextBackgroundColor;
+ private final Resources mResources;
+
+ /**
+ * This is a hidden API of the launcher in JellyBean that allows us to disable the animation
+ * that it would usually do, because it interferes with our own animation for QuickContact.
+ * This is needed since some versions of the launcher override the intent flags and therefore
+ * ignore Intent.FLAG_ACTIVITY_NO_ANIMATION.
+ */
+ public static final String INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION =
+ "com.android.launcher.intent.extra.shortcut.INGORE_LAUNCH_ANIMATION";
+
+ /**
+ * Listener interface.
+ */
+ public interface OnShortcutIntentCreatedListener {
+
+ /**
+ * Callback for shortcut intent creation.
+ *
+ * @param uri the original URI for which the shortcut intent has been
+ * created.
+ * @param shortcutIntent resulting shortcut intent.
+ */
+ void onShortcutIntentCreated(Uri uri, Intent shortcutIntent);
+ }
+
+ public ShortcutIntentBuilder(Context context, OnShortcutIntentCreatedListener listener) {
+ mContext = context;
+ mListener = listener;
+
+ mResources = context.getResources();
+ final ActivityManager am = (ActivityManager) context
+ .getSystemService(Context.ACTIVITY_SERVICE);
+ mIconSize = mResources.getDimensionPixelSize(R.dimen.shortcut_icon_size);
+ if (mIconSize == 0) {
+ mIconSize = am.getLauncherLargeIconSize();
+ }
+ mIconDensity = am.getLauncherLargeIconDensity();
+ mOverlayTextBackgroundColor = mResources.getColor(R.color.shortcut_overlay_text_background);
+ }
+
+ public void createContactShortcutIntent(Uri contactUri) {
+ new ContactLoadingAsyncTask(contactUri).execute();
+ }
+
+ public void createPhoneNumberShortcutIntent(Uri dataUri, String shortcutAction) {
+ new PhoneNumberLoadingAsyncTask(dataUri, shortcutAction).execute();
+ }
+
+ /**
+ * An asynchronous task that loads name, photo and other data from the database.
+ */
+ private abstract class LoadingAsyncTask extends AsyncTask<Void, Void, Void> {
+ protected Uri mUri;
+ protected String mContentType;
+ protected String mDisplayName;
+ protected String mLookupKey;
+ protected byte[] mBitmapData;
+ protected long mPhotoId;
+
+ public LoadingAsyncTask(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ mContentType = mContext.getContentResolver().getType(mUri);
+ loadData();
+ loadPhoto();
+ return null;
+ }
+
+ protected abstract void loadData();
+
+ private void loadPhoto() {
+ if (mPhotoId == 0) {
+ return;
+ }
+
+ ContentResolver resolver = mContext.getContentResolver();
+ Cursor cursor = resolver.query(Data.CONTENT_URI, PHOTO_COLUMNS, PHOTO_SELECTION,
+ new String[] { String.valueOf(mPhotoId) }, null);
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ mBitmapData = cursor.getBlob(PHOTO_PHOTO_COLUMN_INDEX);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+ }
+
+ private final class ContactLoadingAsyncTask extends LoadingAsyncTask {
+ public ContactLoadingAsyncTask(Uri uri) {
+ super(uri);
+ }
+
+ @Override
+ protected void loadData() {
+ ContentResolver resolver = mContext.getContentResolver();
+ Cursor cursor = resolver.query(mUri, CONTACT_COLUMNS, null, null, null);
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ mDisplayName = cursor.getString(CONTACT_DISPLAY_NAME_COLUMN_INDEX);
+ mPhotoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
+ mLookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+ @Override
+ protected void onPostExecute(Void result) {
+ createContactShortcutIntent(mUri, mContentType, mDisplayName, mLookupKey, mBitmapData);
+ }
+ }
+
+ private final class PhoneNumberLoadingAsyncTask extends LoadingAsyncTask {
+ private final String mShortcutAction;
+ private String mPhoneNumber;
+ private int mPhoneType;
+ private String mPhoneLabel;
+
+ public PhoneNumberLoadingAsyncTask(Uri uri, String shortcutAction) {
+ super(uri);
+ mShortcutAction = shortcutAction;
+ }
+
+ @Override
+ protected void loadData() {
+ ContentResolver resolver = mContext.getContentResolver();
+ Cursor cursor = resolver.query(mUri, PHONE_COLUMNS, null, null, null);
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ mDisplayName = cursor.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX);
+ mPhotoId = cursor.getLong(PHONE_PHOTO_ID_COLUMN_INDEX);
+ mPhoneNumber = cursor.getString(PHONE_NUMBER_COLUMN_INDEX);
+ mPhoneType = cursor.getInt(PHONE_TYPE_COLUMN_INDEX);
+ mPhoneLabel = cursor.getString(PHONE_LABEL_COLUMN_INDEX);
+ mLookupKey = cursor.getString(PHONE_LOOKUP_KEY_COLUMN_INDEX);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ createPhoneNumberShortcutIntent(mUri, mDisplayName, mLookupKey, mBitmapData,
+ mPhoneNumber, mPhoneType, mPhoneLabel, mShortcutAction);
+ }
+ }
+
+ private Drawable getPhotoDrawable(byte[] bitmapData, String displayName, String lookupKey) {
+ if (bitmapData != null) {
+ Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
+ return new BitmapDrawable(mContext.getResources(), bitmap);
+ } else {
+ return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext.getResources(),
+ false, new DefaultImageRequest(displayName, lookupKey, false));
+ }
+ }
+
+ private void createContactShortcutIntent(Uri contactUri, String contentType, String displayName,
+ String lookupKey, byte[] bitmapData) {
+ Intent intent = null;
+ if (BuildCompat.isAtLeastO()) {
+ final long contactId = ContentUris.parseId(contactUri);
+ final ShortcutManager sm = (ShortcutManager)
+ mContext.getSystemService(Context.SHORTCUT_SERVICE);
+ final DynamicShortcuts dynamicShortcuts = new DynamicShortcuts(mContext);
+ final ShortcutInfo shortcutInfo = dynamicShortcuts.getQuickContactShortcutInfo(
+ contactId, lookupKey, displayName);
+ intent = sm.createShortcutResultIntent(shortcutInfo);
+ }
+ final Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+ if (TextUtils.isEmpty(displayName)) {
+ displayName = mContext.getResources().getString(R.string.missing_name);
+ }
+
+ final Intent shortcutIntent = ImplicitIntentsUtil.getIntentForQuickContactLauncherShortcut(
+ mContext, contactUri);
+
+ final Bitmap icon = generateQuickContactIcon(drawable);
+
+
+ intent = intent == null ? new Intent() : intent;
+ intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+ intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+ intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, displayName);
+
+ mListener.onShortcutIntentCreated(contactUri, intent);
+ }
+
+ private void createPhoneNumberShortcutIntent(Uri uri, String displayName, String lookupKey,
+ byte[] bitmapData, String phoneNumber, int phoneType, String phoneLabel,
+ String shortcutAction) {
+ final Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+ final Bitmap icon;
+ final Uri phoneUri;
+ final String shortcutName;
+ if (TextUtils.isEmpty(displayName)) {
+ displayName = mContext.getResources().getString(R.string.missing_name);
+ }
+
+ if (Intent.ACTION_CALL.equals(shortcutAction)) {
+ // Make the URI a direct tel: URI so that it will always continue to work
+ phoneUri = Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
+ icon = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
+ R.drawable.quantum_ic_phone_vd_theme_24);
+ shortcutName = mContext.getResources()
+ .getString(R.string.call_by_shortcut, displayName);
+ } else {
+ phoneUri = Uri.fromParts(ContactsUtils.SCHEME_SMSTO, phoneNumber, null);
+ icon = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
+ R.drawable.quantum_ic_message_vd_theme_24);
+ shortcutName = mContext.getResources().getString(R.string.sms_by_shortcut, displayName);
+ }
+
+ final Intent shortcutIntent = new Intent(shortcutAction, phoneUri);
+ shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+ Intent intent = null;
+ if (BuildCompat.isAtLeastO()) {
+ final ShortcutManager sm = (ShortcutManager)
+ mContext.getSystemService(Context.SHORTCUT_SERVICE);
+ final String id = shortcutAction + lookupKey;
+ final DynamicShortcuts dynamicShortcuts = new DynamicShortcuts(mContext);
+ final ShortcutInfo shortcutInfo = dynamicShortcuts.getActionShortcutInfo(
+ id, displayName, shortcutIntent, Icon.createWithAdaptiveBitmap(icon));
+ intent = sm.createShortcutResultIntent(shortcutInfo);
+ }
+
+ intent = intent == null ? new Intent() : intent;
+ intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+ intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+ intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
+
+ mListener.onShortcutIntentCreated(uri, intent);
+ }
+
+ private Bitmap generateQuickContactIcon(Drawable photo) {
+
+ // Setup the drawing classes
+ Bitmap bitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+
+ // Copy in the photo
+ Rect dst = new Rect(0,0, mIconSize, mIconSize);
+ photo.setBounds(dst);
+ photo.draw(canvas);
+
+ // Draw the icon with a rounded border
+ RoundedBitmapDrawable roundedDrawable =
+ RoundedBitmapDrawableFactory.create(mResources, bitmap);
+ roundedDrawable.setAntiAlias(true);
+ roundedDrawable.setCornerRadius(mIconSize / 2);
+ Bitmap roundedBitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
+ canvas.setBitmap(roundedBitmap);
+ roundedDrawable.setBounds(dst);
+ roundedDrawable.draw(canvas);
+ canvas.setBitmap(null);
+
+ return roundedBitmap;
+ }
+
+ /**
+ * Generates a phone number shortcut icon. Adds an overlay describing the type of the phone
+ * number, and if there is a photo also adds the call action icon.
+ */
+ private Bitmap generatePhoneNumberIcon(Drawable photo, int phoneType, String phoneLabel,
+ int actionResId) {
+ final Resources r = mContext.getResources();
+ final float density = r.getDisplayMetrics().density;
+
+ final Drawable phoneDrawable = r.getDrawableForDensity(actionResId, mIconDensity);
+ // These icons have the same height and width so either is fine for the size.
+ final Bitmap phoneIcon =
+ BitmapUtil.drawableToBitmap(phoneDrawable, phoneDrawable.getIntrinsicHeight());
+
+ Bitmap icon = generateQuickContactIcon(photo);
+ Canvas canvas = new Canvas(icon);
+
+ // Copy in the photo
+ Paint photoPaint = new Paint();
+ photoPaint.setDither(true);
+ photoPaint.setFilterBitmap(true);
+ Rect dst = new Rect(0, 0, mIconSize, mIconSize);
+
+ // Create an overlay for the phone number type if we're pre-O. O created shortcuts have the
+ // app badge which overlaps the type overlay.
+ CharSequence overlay = Phone.getTypeLabel(r, phoneType, phoneLabel);
+ if (!BuildCompat.isAtLeastO() && overlay != null) {
+ TextPaint textPaint = new TextPaint(
+ Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
+ textPaint.setTextSize(r.getDimension(R.dimen.shortcut_overlay_text_size));
+ textPaint.setColor(r.getColor(R.color.textColorIconOverlay));
+ textPaint.setShadowLayer(4f, 0, 2f, r.getColor(R.color.textColorIconOverlayShadow));
+
+ final FontMetricsInt fmi = textPaint.getFontMetricsInt();
+
+ // First fill in a darker background around the text to be drawn
+ final Paint workPaint = new Paint();
+ workPaint.setColor(mOverlayTextBackgroundColor);
+ workPaint.setStyle(Paint.Style.FILL);
+ final int textPadding = r
+ .getDimensionPixelOffset(R.dimen.shortcut_overlay_text_background_padding);
+ final int textBandHeight = (fmi.descent - fmi.ascent) + textPadding * 2;
+ dst.set(0, mIconSize - textBandHeight, mIconSize, mIconSize);
+ canvas.drawRect(dst, workPaint);
+
+ overlay = TextUtils.ellipsize(overlay, textPaint, mIconSize, TruncateAt.END);
+ final float textWidth = textPaint.measureText(overlay, 0, overlay.length());
+ canvas.drawText(overlay, 0, overlay.length(), (mIconSize - textWidth) / 2, mIconSize
+ - fmi.descent - textPadding, textPaint);
+ }
+
+ // Draw the phone action icon as an overlay
+ int iconWidth = icon.getWidth();
+ dst.set(iconWidth - ((int) (20 * density)), -1,
+ iconWidth, ((int) (19 * density)));
+ canvas.drawBitmap(phoneIcon, null, dst, photoPaint);
+
+ canvas.setBitmap(null);
+ if (!BuildCompat.isAtLeastO()) {
+ return icon;
+ }
+
+ // On >= O scale image up by AdaptiveIconDrawable.DEFAULT_VIEW_PORT_SCALE.
+ final int scale = (int) (icon.getHeight() *
+ (1f / (1 + 2 * AdaptiveIconDrawable.getExtraInsetFraction())));
+ final Bitmap scaledBitmap = Bitmap.createBitmap(icon.getWidth() + scale,
+ icon.getHeight() + scale, icon.getConfig());
+ Canvas scaledCanvas = new Canvas(scaledBitmap);
+ scaledCanvas.drawBitmap(icon, scale / 2, scale / 2, null);
+ return scaledBitmap;
+ }
+}
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
new file mode 100644
index 000000000..9393e1a3f
--- /dev/null
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -0,0 +1,502 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.widget.ContentLoadingProgressBar;
+import android.support.v7.widget.Toolbar;
+import android.util.SparseBooleanArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.editor.AccountHeaderPresenter;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Function;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+
+/**
+ * Dialog that presents a list of contacts from a SIM card that can be imported into a selected
+ * account
+ */
+public class SimImportFragment extends Fragment
+ implements LoaderManager.LoaderCallbacks<SimImportFragment.LoaderResult>,
+ AdapterView.OnItemClickListener, AbsListView.OnScrollListener {
+
+ private static final String KEY_SUFFIX_SELECTED_IDS = "_selectedIds";
+ private static final String ARG_SUBSCRIPTION_ID = "subscriptionId";
+
+ private ContactsPreferences mPreferences;
+ private AccountTypeManager mAccountTypeManager;
+ private SimContactAdapter mAdapter;
+ private View mAccountHeaderContainer;
+ private AccountHeaderPresenter mAccountHeaderPresenter;
+ private float mAccountScrolledElevationPixels;
+ private ContentLoadingProgressBar mLoadingIndicator;
+ private Toolbar mToolbar;
+ private ListView mListView;
+ private View mImportButton;
+
+ private Bundle mSavedInstanceState;
+
+ private final Map<AccountWithDataSet, long[]> mPerAccountCheckedIds = new ArrayMap<>();
+
+ private int mSubscriptionId;
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mSavedInstanceState = savedInstanceState;
+ mPreferences = new ContactsPreferences(getContext());
+ mAccountTypeManager = AccountTypeManager.getInstance(getActivity());
+ mAdapter = new SimContactAdapter(getActivity());
+
+ final Bundle args = getArguments();
+ mSubscriptionId = args == null ? SimCard.NO_SUBSCRIPTION_ID :
+ args.getInt(ARG_SUBSCRIPTION_ID, SimCard.NO_SUBSCRIPTION_ID);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ getLoaderManager().initLoader(0, null, this);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = inflater.inflate(R.layout.fragment_sim_import, container, false);
+
+ mAccountHeaderContainer = view.findViewById(R.id.account_header_container);
+ mAccountScrolledElevationPixels = getResources()
+ .getDimension(R.dimen.contact_list_header_elevation);
+ mAccountHeaderPresenter = new AccountHeaderPresenter(
+ mAccountHeaderContainer);
+ if (savedInstanceState != null) {
+ mAccountHeaderPresenter.onRestoreInstanceState(savedInstanceState);
+ } else {
+ // Default may be null in which case the first account in the list will be selected
+ // after they are loaded.
+ mAccountHeaderPresenter.setCurrentAccount(mPreferences.getDefaultAccount());
+ }
+ mAccountHeaderPresenter.setObserver(new AccountHeaderPresenter.Observer() {
+ @Override
+ public void onChange(AccountHeaderPresenter sender) {
+ rememberSelectionsForCurrentAccount();
+ mAdapter.setAccount(sender.getCurrentAccount());
+ showSelectionsForCurrentAccount();
+ updateToolbarWithCurrentSelections();
+ }
+ });
+ mAdapter.setAccount(mAccountHeaderPresenter.getCurrentAccount());
+
+ mListView = (ListView) view.findViewById(R.id.list);
+ mListView.setOnScrollListener(this);
+ mListView.setAdapter(mAdapter);
+ mListView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
+ mListView.setOnItemClickListener(this);
+ mImportButton = view.findViewById(R.id.import_button);
+ mImportButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ importCurrentSelections();
+ // Do we wait for import to finish?
+ getActivity().setResult(Activity.RESULT_OK);
+ getActivity().finish();
+ }
+ });
+
+ mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
+ mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getActivity().setResult(Activity.RESULT_CANCELED);
+ getActivity().finish();
+ }
+ });
+
+ mLoadingIndicator = (ContentLoadingProgressBar) view.findViewById(R.id.loading_progress);
+
+ return view;
+ }
+
+ private void rememberSelectionsForCurrentAccount() {
+ final AccountWithDataSet current = mAdapter.getAccount();
+ if (current == null) {
+ return;
+ }
+ final long[] ids = mListView.getCheckedItemIds();
+ Arrays.sort(ids);
+ mPerAccountCheckedIds.put(current, ids);
+ }
+
+ private void showSelectionsForCurrentAccount() {
+ final long[] ids = mPerAccountCheckedIds.get(mAdapter.getAccount());
+ if (ids == null) {
+ selectAll();
+ return;
+ }
+ for (int i = 0, len = mListView.getCount(); i < len; i++) {
+ mListView.setItemChecked(i,
+ Arrays.binarySearch(ids, mListView.getItemIdAtPosition(i)) >= 0);
+ }
+ }
+
+ private void selectAll() {
+ for (int i = 0, len = mListView.getCount(); i < len; i++) {
+ mListView.setItemChecked(i, true);
+ }
+ }
+
+ private void updateToolbarWithCurrentSelections() {
+ // The ListView keeps checked state for items that are disabled but we only want to
+ // consider items that don't exist in the current account when updating the toolbar
+ int importableCount = 0;
+ final SparseBooleanArray checked = mListView.getCheckedItemPositions();
+ for (int i = 0; i < checked.size(); i++) {
+ if (checked.valueAt(i) && !mAdapter.existsInCurrentAccount(checked.keyAt(i))) {
+ importableCount++;
+ }
+ }
+
+ if (importableCount == 0) {
+ mImportButton.setVisibility(View.GONE);
+ mToolbar.setTitle(R.string.sim_import_title_none_selected);
+ } else {
+ mToolbar.setTitle(String.valueOf(importableCount));
+ mImportButton.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (mAdapter.isEmpty() && getLoaderManager().getLoader(0).isStarted()) {
+ mLoadingIndicator.show();
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ rememberSelectionsForCurrentAccount();
+ // We'll restore this manually so we don't need the list to preserve it's own state.
+ mListView.clearChoices();
+ super.onSaveInstanceState(outState);
+ mAccountHeaderPresenter.onSaveInstanceState(outState);
+ saveAdapterSelectedStates(outState);
+ }
+
+ @Override
+ public Loader<LoaderResult> onCreateLoader(int id, Bundle args) {
+ return new SimContactLoader(getContext(), mSubscriptionId);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<LoaderResult> loader,
+ LoaderResult data) {
+ mLoadingIndicator.hide();
+ if (data == null) {
+ return;
+ }
+ mAccountHeaderPresenter.setAccounts(data.accounts);
+ restoreAdapterSelectedStates(data.accounts);
+ mAdapter.setData(data);
+ mListView.setEmptyView(getView().findViewById(R.id.empty_message));
+
+ showSelectionsForCurrentAccount();
+ updateToolbarWithCurrentSelections();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<LoaderResult> loader) {
+ }
+
+ private void restoreAdapterSelectedStates(List<AccountInfo> accounts) {
+ if (mSavedInstanceState == null) {
+ return;
+ }
+
+ for (AccountInfo account : accounts) {
+ final long[] selections = mSavedInstanceState.getLongArray(
+ account.getAccount().stringify() + KEY_SUFFIX_SELECTED_IDS);
+ mPerAccountCheckedIds.put(account.getAccount(), selections);
+ }
+ mSavedInstanceState = null;
+ }
+
+ private void saveAdapterSelectedStates(Bundle outState) {
+ if (mAdapter == null) {
+ return;
+ }
+
+ // Make sure the selections are up-to-date
+ for (Map.Entry<AccountWithDataSet, long[]> entry : mPerAccountCheckedIds.entrySet()) {
+ outState.putLongArray(entry.getKey().stringify() + KEY_SUFFIX_SELECTED_IDS,
+ entry.getValue());
+ }
+ }
+
+ private void importCurrentSelections() {
+ final SparseBooleanArray checked = mListView.getCheckedItemPositions();
+ final ArrayList<SimContact> importableContacts = new ArrayList<>(checked.size());
+ for (int i = 0; i < checked.size(); i++) {
+ // It's possible for existing contacts to be "checked" but we only want to import the
+ // ones that don't already exist
+ if (checked.valueAt(i) && !mAdapter.existsInCurrentAccount(i)) {
+ importableContacts.add(mAdapter.getItem(checked.keyAt(i)));
+ }
+ }
+ SimImportService.startImport(getContext(), mSubscriptionId, importableContacts,
+ mAccountHeaderPresenter.getCurrentAccount());
+ }
+
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ if (mAdapter.existsInCurrentAccount(position)) {
+ Snackbar.make(getView(), R.string.sim_import_contact_exists_toast,
+ Snackbar.LENGTH_LONG).show();
+ } else {
+ updateToolbarWithCurrentSelections();
+ }
+ }
+
+ public Context getContext() {
+ if (CompatUtils.isMarshmallowCompatible()) {
+ return super.getContext();
+ }
+ return getActivity();
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) { }
+
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ int firstCompletelyVisibleItem = firstVisibleItem;
+ if (view != null && view.getChildAt(0) != null && view.getChildAt(0).getTop() < 0) {
+ firstCompletelyVisibleItem++;
+ }
+
+ if (firstCompletelyVisibleItem == 0) {
+ ViewCompat.setElevation(mAccountHeaderContainer, 0);
+ } else {
+ ViewCompat.setElevation(mAccountHeaderContainer, mAccountScrolledElevationPixels);
+ }
+ }
+
+ /**
+ * Creates a fragment that will display contacts stored on the default SIM card
+ */
+ public static SimImportFragment newInstance() {
+ return new SimImportFragment();
+ }
+
+ /**
+ * Creates a fragment that will display the contacts stored on the SIM card that has the
+ * provided subscriptionId
+ */
+ public static SimImportFragment newInstance(int subscriptionId) {
+ final SimImportFragment fragment = new SimImportFragment();
+ final Bundle args = new Bundle();
+ args.putInt(ARG_SUBSCRIPTION_ID, subscriptionId);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ private static class SimContactAdapter extends ArrayAdapter<SimContact> {
+ private Map<AccountWithDataSet, Set<SimContact>> mExistingMap;
+ private AccountWithDataSet mSelectedAccount;
+ private LayoutInflater mInflater;
+
+ public SimContactAdapter(Context context) {
+ super(context, 0);
+ mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ // This can be called by the framework when the adapter hasn't been initialized for
+ // checking the checked state of items. See b/33108913
+ if (position < 0 || position >= getCount()) {
+ return View.NO_ID;
+ }
+ return getItem(position).getId();
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 2;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return !existsInCurrentAccount(position) ? 0 : 1;
+ }
+
+ @NonNull
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TextView text = (TextView) convertView;
+ if (text == null) {
+ final int layoutRes = existsInCurrentAccount(position) ?
+ R.layout.sim_import_list_item_disabled :
+ R.layout.sim_import_list_item;
+ text = (TextView) mInflater.inflate(layoutRes, parent, false);
+ }
+ text.setText(getItemLabel(getItem(position)));
+
+ return text;
+ }
+
+ public void setData(LoaderResult result) {
+ clear();
+ addAll(result.contacts);
+ mExistingMap = result.accountsMap;
+ }
+
+ public void setAccount(AccountWithDataSet account) {
+ mSelectedAccount = account;
+ notifyDataSetChanged();
+ }
+
+ public AccountWithDataSet getAccount() {
+ return mSelectedAccount;
+ }
+
+ public boolean existsInCurrentAccount(int position) {
+ return existsInCurrentAccount(getItem(position));
+ }
+
+ public boolean existsInCurrentAccount(SimContact contact) {
+ if (mSelectedAccount == null || !mExistingMap.containsKey(mSelectedAccount)) {
+ return false;
+ }
+ return mExistingMap.get(mSelectedAccount).contains(contact);
+ }
+
+ private String getItemLabel(SimContact contact) {
+ if (contact.hasName()) {
+ return contact.getName();
+ } else if (contact.hasPhone()) {
+ return contact.getPhone();
+ } else if (contact.hasEmails()) {
+ return contact.getEmails()[0];
+ } else {
+ // This isn't really possible because we skip empty SIM contacts during loading
+ return "";
+ }
+ }
+ }
+
+
+ private static class SimContactLoader extends ListenableFutureLoader<LoaderResult> {
+ private SimContactDao mDao;
+ private AccountTypeManager mAccountTypeManager;
+ private final int mSubscriptionId;
+
+ public SimContactLoader(Context context, int subscriptionId) {
+ super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+ mDao = SimContactDao.create(context);
+ mAccountTypeManager = AccountTypeManager.getInstance(getContext());
+ mSubscriptionId = subscriptionId;
+ }
+
+ @Override
+ protected ListenableFuture<LoaderResult> loadData() {
+ final ListenableFuture<List<Object>> future = Futures.<Object>allAsList(
+ mAccountTypeManager
+ .filterAccountsAsync(AccountTypeManager.writableFilter()),
+ ContactsExecutors.getSimReadExecutor().<Object>submit(
+ new Callable<Object>() {
+ @Override
+ public LoaderResult call() throws Exception {
+ return loadFromSim();
+ }
+ }));
+ return Futures.transform(future, new Function<List<Object>, LoaderResult>() {
+ @Override
+ public LoaderResult apply(List<Object> input) {
+ final List<AccountInfo> accounts = (List<AccountInfo>) input.get(0);
+ final LoaderResult simLoadResult = (LoaderResult) input.get(1);
+ simLoadResult.accounts = accounts;
+ return simLoadResult;
+ }
+ });
+ }
+
+ private LoaderResult loadFromSim() {
+ final SimCard sim = mDao.getSimBySubscriptionId(mSubscriptionId);
+ LoaderResult result = new LoaderResult();
+ if (sim == null) {
+ result.contacts = new ArrayList<>();
+ result.accountsMap = Collections.emptyMap();
+ return result;
+ }
+ result.contacts = mDao.loadContactsForSim(sim);
+ result.accountsMap = mDao.findAccountsOfExistingSimContacts(result.contacts);
+ return result;
+ }
+ }
+
+ public static class LoaderResult {
+ public List<AccountInfo> accounts;
+ public ArrayList<SimContact> contacts;
+ public Map<AccountWithDataSet, Set<SimContact>> accountsMap;
+ }
+}
diff --git a/src/com/android/contacts/SimImportService.java b/src/com/android/contacts/SimImportService.java
new file mode 100644
index 000000000..1e41af005
--- /dev/null
+++ b/src/com/android/contacts/SimImportService.java
@@ -0,0 +1,346 @@
+/*
+ * 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;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.OperationApplicationException;
+import android.os.AsyncTask;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.util.TimingLogger;
+
+import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.ContactsNotificationChannelsUtil;
+import com.android.contactsbind.FeedbackHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Imports {@link SimContact}s from a background thread
+ */
+public class SimImportService extends Service {
+
+ private static final String TAG = "SimImportService";
+
+ /**
+ * Wrapper around the service state for testability
+ */
+ public interface StatusProvider {
+
+ /**
+ * Returns whether there is any imports still pending
+ *
+ * <p>This should be called from the UI thread</p>
+ */
+ boolean isRunning();
+
+ /**
+ * Returns whether an import for sim has been requested
+ *
+ * <p>This should be called from the UI thread</p>
+ */
+ boolean isImporting(SimCard sim);
+ }
+
+ public static final String EXTRA_ACCOUNT = "account";
+ public static final String EXTRA_SIM_CONTACTS = "simContacts";
+ public static final String EXTRA_SIM_SUBSCRIPTION_ID = "simSubscriptionId";
+ public static final String EXTRA_RESULT_CODE = "resultCode";
+ public static final String EXTRA_RESULT_COUNT = "count";
+ public static final String EXTRA_OPERATION_REQUESTED_AT_TIME = "requestedTime";
+
+ public static final String BROADCAST_SERVICE_STATE_CHANGED =
+ SimImportService.class.getName() + "#serviceStateChanged";
+ public static final String BROADCAST_SIM_IMPORT_COMPLETE =
+ SimImportService.class.getName() + "#simImportComplete";
+
+ public static final int RESULT_UNKNOWN = 0;
+ public static final int RESULT_SUCCESS = 1;
+ public static final int RESULT_FAILURE = 2;
+
+ // VCardService uses jobIds for it's notifications which count up from 0 so we just use a
+ // bigger number to prevent overlap.
+ private static final int NOTIFICATION_ID = 100;
+
+ private ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+
+ // Keeps track of current tasks. This is only modified from the UI thread.
+ private static List<ImportTask> sPending = new ArrayList<>();
+
+ private static StatusProvider sStatusProvider = new StatusProvider() {
+ @Override
+ public boolean isRunning() {
+ return !sPending.isEmpty();
+ }
+
+ @Override
+ public boolean isImporting(SimCard sim) {
+ return SimImportService.isImporting(sim);
+ }
+ };
+
+ /**
+ * Returns whether an import for sim has been requested
+ *
+ * <p>This should be called from the UI thread</p>
+ */
+ private static boolean isImporting(SimCard sim) {
+ for (ImportTask task : sPending) {
+ if (task.getSim().equals(sim)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static StatusProvider getStatusProvider() {
+ return sStatusProvider;
+ }
+
+ /**
+ * Starts an import of the contacts from the sim into the target account
+ *
+ * @param context context to use for starting the service
+ * @param subscriptionId the subscriptionId of the SIM card that is being imported. See
+ * {@link android.telephony.SubscriptionInfo#getSubscriptionId()}.
+ * Upon completion the SIM for that subscription ID will be marked as
+ * imported
+ * @param contacts the contacts to import
+ * @param targetAccount the account import the contacts into
+ */
+ public static void startImport(Context context, int subscriptionId,
+ ArrayList<SimContact> contacts, AccountWithDataSet targetAccount) {
+ context.startService(new Intent(context, SimImportService.class)
+ .putExtra(EXTRA_SIM_CONTACTS, contacts)
+ .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, subscriptionId)
+ .putExtra(EXTRA_ACCOUNT, targetAccount));
+ }
+
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, final int startId) {
+ ContactsNotificationChannelsUtil.createDefaultChannel(this);
+ final ImportTask task = createTaskForIntent(intent, startId);
+ if (task == null) {
+ new StopTask(this, startId).executeOnExecutor(mExecutor);
+ return START_NOT_STICKY;
+ }
+ sPending.add(task);
+ task.executeOnExecutor(mExecutor);
+ notifyStateChanged();
+ return START_REDELIVER_INTENT;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ mExecutor.shutdown();
+ }
+
+ private ImportTask createTaskForIntent(Intent intent, int startId) {
+ final AccountWithDataSet targetAccount = intent.getParcelableExtra(EXTRA_ACCOUNT);
+ final ArrayList<SimContact> contacts =
+ intent.getParcelableArrayListExtra(EXTRA_SIM_CONTACTS);
+
+ final int subscriptionId = intent.getIntExtra(EXTRA_SIM_SUBSCRIPTION_ID,
+ SimCard.NO_SUBSCRIPTION_ID);
+ final SimContactDao dao = SimContactDao.create(this);
+ final SimCard sim = dao.getSimBySubscriptionId(subscriptionId);
+ if (sim != null) {
+ return new ImportTask(sim, contacts, targetAccount, dao, startId);
+ } else {
+ return null;
+ }
+ }
+
+ private Notification getCompletedNotification() {
+ final Intent intent = new Intent(this, PeopleActivity.class);
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(
+ this, ContactsNotificationChannelsUtil.DEFAULT_CHANNEL);
+ builder.setOngoing(false)
+ .setAutoCancel(true)
+ .setContentTitle(this.getString(R.string.importing_sim_finished_title))
+ .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(R.drawable.quantum_ic_done_vd_theme_24)
+ .setContentIntent(PendingIntent.getActivity(this, 0, intent, 0));
+ return builder.build();
+ }
+
+ private Notification getFailedNotification() {
+ final Intent intent = new Intent(this, PeopleActivity.class);
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(
+ this, ContactsNotificationChannelsUtil.DEFAULT_CHANNEL);
+ builder.setOngoing(false)
+ .setAutoCancel(true)
+ .setContentTitle(this.getString(R.string.importing_sim_failed_title))
+ .setContentText(this.getString(R.string.importing_sim_failed_message))
+ .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(R.drawable.quantum_ic_error_vd_theme_24)
+ .setContentIntent(PendingIntent.getActivity(this, 0, intent, 0));
+ return builder.build();
+ }
+
+ private Notification getImportingNotification() {
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(
+ this, ContactsNotificationChannelsUtil.DEFAULT_CHANNEL);
+ final String description = getString(R.string.importing_sim_in_progress_title);
+ builder.setOngoing(true)
+ .setProgress(/* current */ 0, /* max */ 100, /* indeterminate */ true)
+ .setContentTitle(description)
+ .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(android.R.drawable.stat_sys_download);
+ return builder.build();
+ }
+
+ private void notifyStateChanged() {
+ LocalBroadcastManager.getInstance(this).sendBroadcast(
+ new Intent(BROADCAST_SERVICE_STATE_CHANGED));
+ }
+
+ // Schedule a task that calls stopSelf when it completes. This is used to ensure that the
+ // calls to stopSelf occur in the correct order (because this service uses a single thread
+ // executor this won't run until all work that was requested before it has finished)
+ private static class StopTask extends AsyncTask<Void, Void, Void> {
+ private Service mHost;
+ private final int mStartId;
+
+ private StopTask(Service host, int startId) {
+ mHost = host;
+ mStartId = startId;
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ super.onPostExecute(aVoid);
+ mHost.stopSelf(mStartId);
+ }
+ }
+
+ private class ImportTask extends AsyncTask<Void, Void, Boolean> {
+ private final SimCard mSim;
+ private final List<SimContact> mContacts;
+ private final AccountWithDataSet mTargetAccount;
+ private final SimContactDao mDao;
+ private final NotificationManager mNotificationManager;
+ private final int mStartId;
+ private final long mStartTime;
+
+ public ImportTask(SimCard sim, List<SimContact> contacts, AccountWithDataSet targetAccount,
+ SimContactDao dao, int startId) {
+ mSim = sim;
+ mContacts = contacts;
+ mTargetAccount = targetAccount;
+ mDao = dao;
+ mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+ mStartId = startId;
+ mStartTime = System.currentTimeMillis();
+ }
+
+ @Override
+ protected void onPreExecute() {
+ super.onPreExecute();
+ startForeground(NOTIFICATION_ID, getImportingNotification());
+ }
+
+ @Override
+ protected Boolean doInBackground(Void... params) {
+ final TimingLogger timer = new TimingLogger(TAG, "import");
+ try {
+ // Just import them all at once.
+ // Experimented with using smaller batches (e.g. 25 and 50) so that percentage
+ // progress could be displayed however this slowed down the import by over a factor
+ // of 2. If the batch size is over a 100 then most cases will only require a single
+ // batch so we don't even worry about displaying accurate progress
+ mDao.importContacts(mContacts, mTargetAccount);
+ mDao.persistSimState(mSim.withImportedState(true));
+ timer.addSplit("done");
+ timer.dumpToLog();
+ } catch (RemoteException|OperationApplicationException e) {
+ FeedbackHelper.sendFeedback(SimImportService.this, TAG,
+ "Failed to import contacts from SIM card", e);
+ return false;
+ }
+ return true;
+ }
+
+ public SimCard getSim() {
+ return mSim;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ super.onPostExecute(success);
+ stopSelf(mStartId);
+
+ Intent result;
+ final Notification notification;
+ if (success) {
+ result = new Intent(BROADCAST_SIM_IMPORT_COMPLETE)
+ .putExtra(EXTRA_RESULT_CODE, RESULT_SUCCESS)
+ .putExtra(EXTRA_RESULT_COUNT, mContacts.size())
+ .putExtra(EXTRA_OPERATION_REQUESTED_AT_TIME, mStartTime)
+ .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, mSim.getSubscriptionId());
+
+ notification = getCompletedNotification();
+ } else {
+ result = new Intent(BROADCAST_SIM_IMPORT_COMPLETE)
+ .putExtra(EXTRA_RESULT_CODE, RESULT_FAILURE)
+ .putExtra(EXTRA_OPERATION_REQUESTED_AT_TIME, mStartTime)
+ .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, mSim.getSubscriptionId());
+
+ notification = getFailedNotification();
+ }
+ LocalBroadcastManager.getInstance(SimImportService.this).sendBroadcast(result);
+
+ sPending.remove(this);
+
+ // Only notify of completion if all the import requests have finished. We're using
+ // the same notification for imports so in the rare case that a user has started
+ // multiple imports the notification won't go away until all of them complete.
+ if (sPending.isEmpty()) {
+ stopForeground(false);
+ mNotificationManager.notify(NOTIFICATION_ID, notification);
+ }
+ notifyStateChanged();
+ }
+ }
+}
diff --git a/src/com/android/contacts/SplitAggregateView.java b/src/com/android/contacts/SplitAggregateView.java
index 2281ec6ff..5c822ba76 100644
--- a/src/com/android/contacts/SplitAggregateView.java
+++ b/src/com/android/contacts/SplitAggregateView.java
@@ -35,8 +35,8 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/src/com/android/contacts/TypePrecedence.java b/src/com/android/contacts/TypePrecedence.java
index 0a193b5e5..53b834301 100644
--- a/src/com/android/contacts/TypePrecedence.java
+++ b/src/com/android/contacts/TypePrecedence.java
@@ -23,7 +23,7 @@ import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.model.RawContactModifier;
/**
* This class contains utility functions for determining the precedence of
diff --git a/src/com/android/contacts/ViewNotificationService.java b/src/com/android/contacts/ViewNotificationService.java
index 0f2922ae3..3bc5ed24e 100644
--- a/src/com/android/contacts/ViewNotificationService.java
+++ b/src/com/android/contacts/ViewNotificationService.java
@@ -23,8 +23,8 @@ import android.content.Loader.OnLoadCompleteListener;
import android.os.IBinder;
import android.util.Log;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
/**
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 9862b6fab..27bcc7a35 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -16,35 +16,42 @@
package com.android.contacts.activities;
+import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
-import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.TypedArray;
+import android.content.res.ColorStateList;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.support.v4.content.ContextCompat;
+import android.support.v7.app.ActionBar;
+import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.Window;
import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SearchView.OnCloseListener;
-import android.view.View.OnClickListener;
-import android.widget.EditText;
import android.widget.TextView;
-import android.widget.Toolbar;
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter.Listener.Action;
-import com.android.contacts.common.compat.CompatUtils;
+import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.compat.CompatUtils;
import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.util.MaterialColorMapUtils;
+
+import java.util.ArrayList;
/**
* Adapter for the action bar at the top of the Contacts activity.
@@ -62,40 +69,26 @@ public class ActionBarAdapter implements OnCloseListener {
void onAction(int action);
- /**
- * Called when the user selects a tab. The new tab can be obtained using
- * {@link #getCurrentTab}.
- */
- void onSelectedTabChanged();
-
void onUpButtonPressed();
}
private static final String EXTRA_KEY_SEARCH_MODE = "navBar.searchMode";
private static final String EXTRA_KEY_QUERY = "navBar.query";
- private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab";
private static final String EXTRA_KEY_SELECTED_MODE = "navBar.selectionMode";
- private static final String PERSISTENT_LAST_TAB = "actionBarAdapter.lastTab";
-
private boolean mSelectionMode;
private boolean mSearchMode;
private String mQueryString;
private EditText mSearchView;
private View mClearSearchView;
- /** The view that represents tabs when we are in portrait mode **/
- private View mPortraitTabs;
- /** The view that represents tabs when we are in landscape mode **/
- private View mLandscapeTabs;
private View mSearchContainer;
private View mSelectionContainer;
- private int mMaxPortraitTabHeight;
private int mMaxToolbarContentInsetStart;
+ private int mActionBarAnimationDuration;
private final Activity mActivity;
- private final SharedPreferences mPrefs;
private Listener mListener;
@@ -108,40 +101,42 @@ public class ActionBarAdapter implements OnCloseListener {
private final FrameLayout mToolBarFrame;
private boolean mShowHomeIcon;
+ private boolean mShowHomeAsUp;
- public interface TabState {
- public static int FAVORITES = 0;
- public static int ALL = 1;
+ private int mSearchHintResId;
- public static int COUNT = 2;
- public static int DEFAULT = ALL;
- }
+ private ValueAnimator mStatusBarAnimator;
- private int mCurrentTab = TabState.DEFAULT;
+ public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
+ Toolbar toolbar) {
+ this(activity, listener, actionBar, toolbar, R.string.hint_findContacts);
+ }
public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
- View portraitTabs, View landscapeTabs, Toolbar toolbar) {
+ Toolbar toolbar, int searchHintResId) {
mActivity = activity;
mListener = listener;
mActionBar = actionBar;
- mPrefs = PreferenceManager.getDefaultSharedPreferences(mActivity);
- mPortraitTabs = portraitTabs;
- mLandscapeTabs = landscapeTabs;
mToolbar = toolbar;
mToolBarFrame = (FrameLayout) mToolbar.getParent();
mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
- mShowHomeIcon = mActivity.getResources().getBoolean(R.bool.show_home_icon);
+ mSearchHintResId = searchHintResId;
+ mActionBarAnimationDuration =
+ mActivity.getResources().getInteger(R.integer.action_bar_animation_duration);
setupSearchAndSelectionViews();
- setupTabs(mActivity);
}
- private void setupTabs(Context context) {
- final TypedArray attributeArray = context.obtainStyledAttributes(
- new int[]{android.R.attr.actionBarSize});
- mMaxPortraitTabHeight = attributeArray.getDimensionPixelSize(0, 0);
- // Hide tabs initially
- setPortraitTabHeight(0);
+ public void setShowHomeIcon(boolean showHomeIcon) {
+ mShowHomeIcon = showHomeIcon;
+ }
+
+ public void setShowHomeAsUp(boolean showHomeAsUp) {
+ mShowHomeAsUp = showHomeAsUp;
+ }
+
+ public View getSelectionContainer() {
+ return mSelectionContainer;
}
private void setupSearchAndSelectionViews() {
@@ -156,9 +151,11 @@ public class ActionBarAdapter implements OnCloseListener {
mSearchContainer.setBackgroundColor(mActivity.getResources().getColor(
R.color.searchbox_background_color));
mSearchView = (EditText) mSearchContainer.findViewById(R.id.search_view);
- mSearchView.setHint(mActivity.getString(R.string.hint_findContacts));
+ mSearchView.setHint(mActivity.getString(mSearchHintResId));
mSearchView.addTextChangedListener(new SearchTextWatcher());
- mSearchContainer.findViewById(R.id.search_back_button).setOnClickListener(
+ final ImageButton searchBackButton = (ImageButton) mSearchContainer
+ .findViewById(R.id.search_back_button);
+ searchBackButton.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
@@ -167,6 +164,7 @@ public class ActionBarAdapter implements OnCloseListener {
}
}
});
+ searchBackButton.getDrawable().setAutoMirrored(true);
mClearSearchView = mSearchContainer.findViewById(R.id.search_close_button);
mClearSearchView.setOnClickListener(
@@ -198,19 +196,11 @@ public class ActionBarAdapter implements OnCloseListener {
if (savedState == null) {
mSearchMode = request.isSearchMode();
mQueryString = request.getQueryString();
- mCurrentTab = loadLastTabPreference();
mSelectionMode = false;
} else {
mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
mSelectionMode = savedState.getBoolean(EXTRA_KEY_SELECTED_MODE);
mQueryString = savedState.getString(EXTRA_KEY_QUERY);
-
- // Just set to the field here. The listener will be notified by update().
- mCurrentTab = savedState.getInt(EXTRA_KEY_SELECTED_TAB);
- }
- if (mCurrentTab >= TabState.COUNT || mCurrentTab < 0) {
- // Invalid tab index was saved (b/12938207). Restore the default.
- mCurrentTab = TabState.DEFAULT;
}
// Show tabs or the expanded {@link SearchView}, depending on whether or not we are in
// search mode.
@@ -253,30 +243,6 @@ public class ActionBarAdapter implements OnCloseListener {
}
/**
- * Save the current tab selection, and notify the listener.
- */
- public void setCurrentTab(int tab) {
- setCurrentTab(tab, true);
- }
-
- /**
- * Save the current tab selection.
- */
- public void setCurrentTab(int tab, boolean notifyListener) {
- if (tab == mCurrentTab) {
- return;
- }
- mCurrentTab = tab;
-
- if (notifyListener && mListener != null) mListener.onSelectedTabChanged();
- saveLastTabPreference(mCurrentTab);
- }
-
- public int getCurrentTab() {
- return mCurrentTab;
- }
-
- /**
* @return Whether in search mode, i.e. if the search view is visible/expanded.
*
* Note even if the action bar is in search mode, if the query is empty, the search fragment
@@ -355,6 +321,9 @@ public class ActionBarAdapter implements OnCloseListener {
int newFlags = 0;
if (mShowHomeIcon && !isSearchOrSelectionMode) {
newFlags |= ActionBar.DISPLAY_SHOW_HOME;
+ if (mShowHomeAsUp) {
+ newFlags |= ActionBar.DISPLAY_HOME_AS_UP;
+ }
}
if (mSearchMode && !mSelectionMode) {
// The search container is placed inside the toolbar. So we need to disable the
@@ -366,6 +335,9 @@ public class ActionBarAdapter implements OnCloseListener {
newFlags |= ActionBar.DISPLAY_SHOW_TITLE;
mToolbar.setContentInsetsRelative(mMaxToolbarContentInsetStart,
mToolbar.getContentInsetEnd());
+ mToolbar.setNavigationIcon(R.drawable.quantum_ic_menu_vd_theme_24);
+ } else {
+ mToolbar.setNavigationIcon(null);
}
if (mSelectionMode) {
@@ -389,7 +361,7 @@ public class ActionBarAdapter implements OnCloseListener {
}
private void update(boolean skipAnimation) {
- updateStatusBarColor();
+ updateOverflowButtonColor();
final boolean isSelectionModeChanging
= (mSelectionContainer.getParent() == null) == mSelectionMode;
@@ -399,23 +371,21 @@ public class ActionBarAdapter implements OnCloseListener {
= (mSearchContainer.getParent() == null) == mSearchMode;
final boolean isTabHeightChanging = isSearchModeChanging || isSelectionModeChanging;
+ // Update toolbar and status bar color.
+ mToolBarFrame.setBackgroundColor(MaterialColorMapUtils.getToolBarColor(mActivity));
+ updateStatusBarColor(isSelectionModeChanging && !isSearchModeChanging);
+
// When skipAnimation=true, it is possible that we will switch from search mode
// to selection mode directly. So we need to remove the undesired container in addition
// to adding the desired container.
if (skipAnimation || isSwitchingFromSearchToSelection) {
if (isTabHeightChanging || isSwitchingFromSearchToSelection) {
- mToolbar.removeView(mLandscapeTabs);
mToolbar.removeView(mSearchContainer);
mToolBarFrame.removeView(mSelectionContainer);
if (mSelectionMode) {
- setPortraitTabHeight(0);
addSelectionContainer();
} else if (mSearchMode) {
- setPortraitTabHeight(0);
addSearchContainer();
- } else {
- setPortraitTabHeight(mMaxPortraitTabHeight);
- addLandscapeViewPagerTabs();
}
updateDisplayOptions(isSearchModeChanging);
}
@@ -424,24 +394,21 @@ public class ActionBarAdapter implements OnCloseListener {
// Handle a switch to/from selection mode, due to UI interaction.
if (isSelectionModeChanging) {
- mToolbar.removeView(mLandscapeTabs);
if (mSelectionMode) {
addSelectionContainer();
mSelectionContainer.setAlpha(0);
- mSelectionContainer.animate().alpha(1);
- animateTabHeightChange(mMaxPortraitTabHeight, 0);
+ mSelectionContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
updateDisplayOptions(isSearchModeChanging);
} else {
if (mListener != null) {
mListener.onAction(Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE);
}
mSelectionContainer.setAlpha(1);
- animateTabHeightChange(0, mMaxPortraitTabHeight);
- mSelectionContainer.animate().alpha(0).withEndAction(new Runnable() {
+ mSelectionContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
+ .withEndAction(new Runnable() {
@Override
public void run() {
updateDisplayOptions(isSearchModeChanging);
- addLandscapeViewPagerTabs();
mToolBarFrame.removeView(mSelectionContainer);
}
});
@@ -450,21 +417,18 @@ public class ActionBarAdapter implements OnCloseListener {
// Handle a switch to/from search mode, due to UI interaction.
if (isSearchModeChanging) {
- mToolbar.removeView(mLandscapeTabs);
if (mSearchMode) {
addSearchContainer();
mSearchContainer.setAlpha(0);
- mSearchContainer.animate().alpha(1);
- animateTabHeightChange(mMaxPortraitTabHeight, 0);
+ mSearchContainer.animate().alpha(1).setDuration(mActionBarAnimationDuration);
updateDisplayOptions(isSearchModeChanging);
} else {
mSearchContainer.setAlpha(1);
- animateTabHeightChange(0, mMaxPortraitTabHeight);
- mSearchContainer.animate().alpha(0).withEndAction(new Runnable() {
+ mSearchContainer.animate().alpha(0).setDuration(mActionBarAnimationDuration)
+ .withEndAction(new Runnable() {
@Override
public void run() {
updateDisplayOptions(isSearchModeChanging);
- addLandscapeViewPagerTabs();
mToolbar.removeView(mSearchContainer);
}
});
@@ -472,6 +436,47 @@ public class ActionBarAdapter implements OnCloseListener {
}
}
+ /**
+ * Find overflow menu ImageView by its content description and update its color.
+ */
+ public void updateOverflowButtonColor() {
+ final String overflowDescription = mActivity.getResources().getString(
+ R.string.abc_action_menu_overflow_description);
+ final ViewGroup decorView = (ViewGroup) mActivity.getWindow().getDecorView();
+ final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver();
+ viewTreeObserver.addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ // Find the overflow ImageView.
+ final ArrayList<View> outViews = new ArrayList<>();
+ decorView.findViewsWithText(outViews, overflowDescription,
+ View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
+
+ for (View view : outViews) {
+ if (!(view instanceof ImageView)) {
+ continue;
+ }
+ final ImageView overflow = (ImageView) view;
+
+ // Update the overflow image color.
+ final int iconColor;
+ if (mSelectionMode) {
+ iconColor = mActivity.getResources().getColor(
+ R.color.actionbar_color_grey_solid);
+ } else {
+ iconColor = mActivity.getResources().getColor(
+ R.color.actionbar_text_color);
+ }
+ overflow.setImageTintList(ColorStateList.valueOf(iconColor));
+ }
+
+ // We're done, remove the listener.
+ decorView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ }
+ });
+ }
+
public void setSelectionCount(int selectionCount) {
TextView textView = (TextView) mSelectionContainer.findViewById(R.id.selection_count_text);
if (selectionCount == 0) {
@@ -482,25 +487,52 @@ public class ActionBarAdapter implements OnCloseListener {
textView.setText(String.valueOf(selectionCount));
}
- private void updateStatusBarColor() {
+ public void setActionBarTitle(String title) {
+ final TextView textView =
+ (TextView) mSelectionContainer.findViewById(R.id.selection_count_text);
+ textView.setVisibility(View.VISIBLE);
+ textView.setText(title);
+ }
+
+ private void updateStatusBarColor(boolean shouldAnimate) {
if (!CompatUtils.isLollipopCompatible()) {
return; // we can't change the status bar color prior to Lollipop
}
+
if (mSelectionMode) {
- final int cabStatusBarColor = mActivity.getResources().getColor(
- R.color.contextual_selection_bar_status_bar_color);
- mActivity.getWindow().setStatusBarColor(cabStatusBarColor);
+ final int cabStatusBarColor = ContextCompat.getColor(
+ mActivity, R.color.contextual_selection_bar_status_bar_color);
+ runStatusBarAnimation(/* colorTo */ cabStatusBarColor);
} else {
- final int normalStatusBarColor = ContextCompat.getColor(
- mActivity, R.color.primary_color_dark);
- mActivity.getWindow().setStatusBarColor(normalStatusBarColor);
+ if (shouldAnimate) {
+ runStatusBarAnimation(/* colorTo */
+ MaterialColorMapUtils.getStatusBarColor(mActivity));
+ } else if (mActivity instanceof PeopleActivity) {
+ ((PeopleActivity) mActivity).updateStatusBarBackground();
+ }
}
}
- private void addLandscapeViewPagerTabs() {
- if (mLandscapeTabs != null) {
- mToolbar.removeView(mLandscapeTabs);
- mToolbar.addView(mLandscapeTabs);
+ private void runStatusBarAnimation(int colorTo) {
+ final Window window = mActivity.getWindow();
+ if (window.getStatusBarColor() != colorTo) {
+ // Cancel running animation.
+ if (mStatusBarAnimator != null && mStatusBarAnimator.isRunning()) {
+ mStatusBarAnimator.cancel();
+ }
+ final int from = window.getStatusBarColor();
+ // Set up mStatusBarAnimator and run animation.
+ mStatusBarAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), from, colorTo);
+ mStatusBarAnimator.addUpdateListener(
+ new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animator) {
+ window.setStatusBarColor((Integer) animator.getAnimatedValue());
+ }
+ });
+ mStatusBarAnimator.setDuration(mActionBarAnimationDuration);
+ mStatusBarAnimator.setStartDelay(0);
+ mStatusBarAnimator.start();
}
}
@@ -538,7 +570,6 @@ public class ActionBarAdapter implements OnCloseListener {
}
if (!mSearchMode && !mSelectionMode) {
mListener.onAction(Action.STOP_SEARCH_AND_SELECTION_MODE);
- mListener.onSelectedTabChanged();
}
}
updateDisplayOptionsInner();
@@ -554,7 +585,6 @@ public class ActionBarAdapter implements OnCloseListener {
outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
outState.putBoolean(EXTRA_KEY_SELECTED_MODE, mSelectionMode);
outState.putString(EXTRA_KEY_QUERY, mQueryString);
- outState.putInt(EXTRA_KEY_SELECTED_TAB, mCurrentTab);
}
public void setFocusOnSearchView() {
@@ -569,41 +599,4 @@ public class ActionBarAdapter implements OnCloseListener {
imm.showSoftInput(view, 0);
}
}
-
- private void saveLastTabPreference(int tab) {
- mPrefs.edit().putInt(PERSISTENT_LAST_TAB, tab).apply();
- }
-
- private int loadLastTabPreference() {
- try {
- return mPrefs.getInt(PERSISTENT_LAST_TAB, TabState.DEFAULT);
- } catch (IllegalArgumentException e) {
- // Preference is corrupt?
- return TabState.DEFAULT;
- }
- }
-
- private void animateTabHeightChange(int start, int end) {
- if (mPortraitTabs == null) {
- return;
- }
- final ValueAnimator animator = ValueAnimator.ofInt(start, end);
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
- int value = (Integer) valueAnimator.getAnimatedValue();
- setPortraitTabHeight(value);
- }
- });
- animator.setDuration(100).start();
- }
-
- private void setPortraitTabHeight(int height) {
- if (mPortraitTabs == null) {
- return;
- }
- ViewGroup.LayoutParams layoutParams = mPortraitTabs.getLayoutParams();
- layoutParams.height = height;
- mPortraitTabs.setLayoutParams(layoutParams);
- }
}
diff --git a/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java b/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java
new file mode 100644
index 000000000..c638e2693
--- /dev/null
+++ b/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java
@@ -0,0 +1,66 @@
+/*
+ * 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.activities;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+/**
+ * A common superclass that keeps track of whether an {@link AppCompatActivity} has saved its state
+ * yet or not, copied from {@link TransactionSafeActivity},
+ * which will be deprecated after Kitkat backporting is done.
+ */
+public abstract class AppCompatTransactionSafeActivity extends AppCompatActivity {
+
+ private boolean mIsSafeToCommitTransactions;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mIsSafeToCommitTransactions = false;
+ }
+
+ /**
+ * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
+ * whether {@link FragmentActivity#onSaveInstanceState} has been called or not.
+ *
+ * Make sure that the current activity calls into
+ * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
+ * so the flag is properly set.
+ */
+ public boolean isSafeToCommitTransactions() {
+ return mIsSafeToCommitTransactions;
+ }
+}
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 1abbecfd1..b25c306c3 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -39,19 +39,23 @@ import android.widget.Toast;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.editor.ContactEditorUtils;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
import com.android.contacts.util.ContactPhotoUtils;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import java.io.FileNotFoundException;
import java.util.List;
@@ -78,6 +82,8 @@ public class AttachPhotoActivity extends ContactsActivity {
private ContentResolver mContentResolver;
+ private ListenableFuture<List<AccountInfo>> mAccountsFuture;
+
// Height and width (in pixels) to request for the photo - queried from the provider.
private static int mPhotoDim;
// Default photo dimension to use if unable to query the provider.
@@ -89,7 +95,7 @@ public class AttachPhotoActivity extends ContactsActivity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ if (RequestPermissionsActivity.startPermissionActivityIfNeeded(this)) {
return;
}
@@ -125,6 +131,10 @@ public class AttachPhotoActivity extends ContactsActivity {
}
}
}
+
+ // Start loading accounts in case they are needed.
+ mAccountsFuture = AccountTypeManager.getInstance(this).filterAccountsAsync(
+ AccountTypeManager.writableFilter());
}
@Override
@@ -327,7 +337,9 @@ public class AttachPhotoActivity extends ContactsActivity {
values.setPhoto(compressed);
// Finally, invoke the ContactSaveService.
- Log.v(TAG, "all prerequisites met, about to save photo to contact");
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "all prerequisites met, about to save photo to contact");
+ }
Intent intent = ContactSaveService.createSaveContactIntent(
this,
deltaList,
@@ -342,17 +354,28 @@ public class AttachPhotoActivity extends ContactsActivity {
}
private void selectAccountAndCreateContact() {
+ Preconditions.checkNotNull(mAccountsFuture, "Accounts future must be initialized first");
// If there is no default account or the accounts have changed such that we need to
// prompt the user again, then launch the account prompt.
- final ContactEditorUtils editorUtils = ContactEditorUtils.getInstance(this);
- if (editorUtils.shouldShowAccountChangedNotification()) {
- Intent intent = new Intent(this, ContactEditorAccountsChangedActivity.class);
+ final ContactEditorUtils editorUtils = ContactEditorUtils.create(this);
+
+ // Technically this could block but in reality this method won't be called until the user
+ // presses the save button which should allow plenty of time for the accounts to
+ // finish loading. Note also that this could be stale if the accounts have changed since
+ // we requested them but that's OK since ContactEditorAccountsChangedActivity will reload
+ // the accounts
+ final List<AccountInfo> accountInfos = Futures.getUnchecked(mAccountsFuture);
+
+ final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(accountInfos);
+ if (editorUtils.shouldShowAccountChangedNotification(accounts)) {
+ Intent intent = new Intent(this, ContactEditorAccountsChangedActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityForResult(intent, REQUEST_PICK_DEFAULT_ACCOUNT_FOR_NEW_CONTACT);
} else {
- // Otherwise, there should be a default account. Then either create a local contact
+ // Otherwise, there should be a default account. Then either create a null contact
// (if default account is null) or create a contact with the specified account.
- AccountWithDataSet defaultAccount = editorUtils.getDefaultAccount();
- createNewRawContact(defaultAccount);
+ final AccountWithDataSet targetAccount = editorUtils.getOnlyOrDefaultAccount(accounts);
+ createNewRawContact(targetAccount);
}
}
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
deleted file mode 100644
index dc1604977..000000000
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ /dev/null
@@ -1,280 +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.activities;
-
-import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.CompactContactEditorFragment;
-import com.android.contacts.editor.CompactPhotoSelectionFragment;
-import com.android.contacts.editor.PhotoSourceDialogFragment;
-
-import android.app.FragmentTransaction;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-
-/**
- * Contact editor with only the most important fields displayed initially.
- */
-public class CompactContactEditorActivity extends ContactEditorBaseActivity implements
- PhotoSourceDialogFragment.Listener, CompactPhotoSelectionFragment.Listener {
-
- private static final String TAG_COMPACT_EDITOR = "compact_editor";
- private static final String TAG_PHOTO_SELECTION = "photo_selector";
-
- private static final String STATE_PHOTO_MODE = "photo_mode";
- private static final String STATE_IS_PHOTO_SELECTION = "is_photo_selection";
- private static final String STATE_ACTION_BAR_TITLE = "action_bar_title";
- private static final String STATE_PHOTO_URI = "photo_uri";
-
- /**
- * Displays a PopupWindow with photo edit options.
- */
- private final class CompactPhotoSelectionHandler extends PhotoSelectionHandler {
-
- /**
- * Receiver of photo edit option callbacks.
- */
- private final class CompactPhotoActionListener extends PhotoActionListener {
-
- @Override
- public void onRemovePictureChosen() {
- getEditorFragment().removePhoto();
- if (mIsPhotoSelection) {
- showEditorFragment();
- }
- }
-
- @Override
- public void onPhotoSelected(Uri uri) throws FileNotFoundException {
- mPhotoUri = uri;
- getEditorFragment().updatePhoto(uri);
- if (mIsPhotoSelection) {
- showEditorFragment();
- }
-
- // Re-create the photo handler the next time we need it so that additional photo
- // selections create a new temp file (and don't hit the one that was just added
- // to the cache).
- mPhotoSelectionHandler = null;
- }
-
- @Override
- public Uri getCurrentPhotoUri() {
- return mPhotoUri;
- }
-
- @Override
- public void onPhotoSelectionDismissed() {
- if (mIsPhotoSelection) {
- showEditorFragment();
- }
- }
- }
-
- private final CompactPhotoActionListener mPhotoActionListener;
- private boolean mIsPhotoSelection;
-
- public CompactPhotoSelectionHandler(int photoMode, boolean isPhotoSelection) {
- // We pass a null changeAnchorView since we are overriding onClick so that we
- // can show the photo options in a dialog instead of a ListPopupWindow (which would
- // be anchored at changeAnchorView).
-
- // TODO: empty raw contact delta list
- super(CompactContactEditorActivity.this, /* changeAnchorView =*/ null, photoMode,
- /* isDirectoryContact =*/ false, new RawContactDeltaList());
- mPhotoActionListener = new CompactPhotoActionListener();
- mIsPhotoSelection = isPhotoSelection;
- }
-
- @Override
- public PhotoActionListener getListener() {
- return mPhotoActionListener;
- }
-
- @Override
- protected void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
- mPhotoUri = photoUri;
- startActivityForResult(intent, requestCode);
- }
- }
-
- private CompactPhotoSelectionFragment mPhotoSelectionFragment;
- private CompactPhotoSelectionHandler mPhotoSelectionHandler;
- private Uri mPhotoUri;
- private int mPhotoMode;
- private boolean mIsPhotoSelection;
-
- @Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
-
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
- return;
- }
-
- setContentView(R.layout.compact_contact_editor_activity);
-
- if (savedState == null) {
- // Create the editor and photo selection fragments
- mFragment = new CompactContactEditorFragment();
- mPhotoSelectionFragment = new CompactPhotoSelectionFragment();
- getFragmentManager().beginTransaction()
- .add(R.id.fragment_container, getEditorFragment(), TAG_COMPACT_EDITOR)
- .add(R.id.fragment_container, mPhotoSelectionFragment, TAG_PHOTO_SELECTION)
- .hide(mPhotoSelectionFragment)
- .commit();
- } else {
- // Restore state
- mPhotoMode = savedState.getInt(STATE_PHOTO_MODE);
- mIsPhotoSelection = savedState.getBoolean(STATE_IS_PHOTO_SELECTION);
- mActionBarTitleResId = savedState.getInt(STATE_ACTION_BAR_TITLE);
- mPhotoUri = Uri.parse(savedState.getString(STATE_PHOTO_URI));
-
- // Show/hide the editor and photo selection fragments (w/o animations)
- mFragment = (CompactContactEditorFragment) getFragmentManager()
- .findFragmentByTag(TAG_COMPACT_EDITOR);
- mPhotoSelectionFragment = (CompactPhotoSelectionFragment) getFragmentManager()
- .findFragmentByTag(TAG_PHOTO_SELECTION);
- final FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
- if (mIsPhotoSelection) {
- fragmentTransaction.hide(getEditorFragment()).show(mPhotoSelectionFragment);
- getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
- } else {
- fragmentTransaction.show(getEditorFragment()).hide(mPhotoSelectionFragment);
- getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
- }
- fragmentTransaction.commit();
- }
-
- // Set listeners
- mFragment.setListener(mFragmentListener);
- mPhotoSelectionFragment.setListener(this);
-
- // Load editor data (even if it's hidden)
- final String action = getIntent().getAction();
- final Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
- mFragment.load(action, uri, getIntent().getExtras());
- }
-
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
- outState.putBoolean(STATE_IS_PHOTO_SELECTION, mIsPhotoSelection);
- outState.putInt(STATE_ACTION_BAR_TITLE, mActionBarTitleResId);
- outState.putString(STATE_PHOTO_URI,
- mPhotoUri != null ? mPhotoUri.toString() : Uri.EMPTY.toString());
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (mPhotoSelectionHandler == null) {
- mPhotoSelectionHandler = (CompactPhotoSelectionHandler) getPhotoSelectionHandler();
- }
- if (mPhotoSelectionHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
- return;
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
-
- @Override
- public void onBackPressed() {
- if (mIsPhotoSelection) {
- mIsPhotoSelection = false;
- showEditorFragment();
- } else {
- super.onBackPressed();
- }
- }
-
- /**
- * Displays photos from all raw contacts, clicking one set it as the super primary photo.
- */
- public void selectPhoto(ArrayList<CompactPhotoSelectionFragment.Photo> photos, int photoMode) {
- mPhotoMode = photoMode;
- mIsPhotoSelection = true;
- mPhotoSelectionFragment.setPhotos(photos, photoMode);
- showPhotoSelectionFragment();
- }
-
- /**
- * Opens a dialog showing options for the user to change their photo (take, choose, or remove
- * photo).
- */
- public void changePhoto(int photoMode) {
- mPhotoMode = photoMode;
- mIsPhotoSelection = false;
- PhotoSourceDialogFragment.show(this, mPhotoMode);
- }
-
- private void showPhotoSelectionFragment() {
- getFragmentManager().beginTransaction()
- .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
- .hide(getEditorFragment())
- .show(mPhotoSelectionFragment)
- .commit();
- getActionBar().setTitle(getResources().getString(R.string.photo_picker_title));
- }
-
- private void showEditorFragment() {
- getFragmentManager().beginTransaction()
- .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
- .hide(mPhotoSelectionFragment)
- .show((CompactContactEditorFragment) mFragment)
- .commit();
- getActionBar().setTitle(getResources().getString(mActionBarTitleResId));
- mIsPhotoSelection = false;
- }
-
- @Override
- public void onRemovePictureChosen() {
- getPhotoSelectionHandler().getListener().onRemovePictureChosen();
- }
-
- @Override
- public void onTakePhotoChosen() {
- getPhotoSelectionHandler().getListener().onTakePhotoChosen();
- }
-
- @Override
- public void onPickFromGalleryChosen() {
- getPhotoSelectionHandler().getListener().onPickFromGalleryChosen();
- }
-
- @Override
- public void onPhotoSelected(CompactPhotoSelectionFragment.Photo photo) {
- getEditorFragment().setPrimaryPhoto(photo);
- showEditorFragment();
- }
-
- private PhotoSelectionHandler getPhotoSelectionHandler() {
- if (mPhotoSelectionHandler == null) {
- mPhotoSelectionHandler = new CompactPhotoSelectionHandler(
- mPhotoMode, mIsPhotoSelection);
- }
- return mPhotoSelectionHandler;
- }
-
- private CompactContactEditorFragment getEditorFragment() {
- return (CompactContactEditorFragment) mFragment;
- }
-}
diff --git a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java b/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
deleted file mode 100644
index f4e8c7893..000000000
--- a/src/com/android/contacts/activities/ConfirmAddDetailActivity.java
+++ /dev/null
@@ -1,909 +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.activities;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.AsyncQueryHandler;
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderResult;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.Intent;
-import android.content.OperationApplicationException;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.RawContactsEntity;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.util.Log;
-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 android.widget.Toast;
-
-import com.android.contacts.R;
-import com.android.contacts.editor.Editor;
-import com.android.contacts.editor.EditorUiUtils;
-import com.android.contacts.editor.ViewIdGenerator;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.util.DialogManager;
-import com.android.contacts.common.util.EmptyService;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * This is a dialog-themed activity for confirming the addition of a detail to an existing contact
- * (once the user has selected this contact from a list of all contacts). The incoming intent
- * must have an extra with max 1 phone or email specified, using
- * {@link android.provider.ContactsContract.Intents.Insert#PHONE} with type
- * {@link android.provider.ContactsContract.Intents.Insert#PHONE_TYPE} or
- * {@link android.provider.ContactsContract.Intents.Insert#EMAIL} with type
- * {@link android.provider.ContactsContract.Intents.Insert#EMAIL_TYPE} intent keys.
- *
- * If the selected contact doesn't contain editable raw_contacts, it'll create a new raw_contact
- * on the first editable account found, and the data will be added to this raw_contact. The newly
- * created raw_contact will be joined with the selected contact with aggregation-exceptions.
- *
- * TODO: Don't open this activity if there's no editable accounts.
- * If there's no editable accounts on the system, we'll set {@link #mIsReadOnly} and the dialog
- * just says "contact is not editable". It's slightly misleading because this really means
- * "there's no editable accounts", but in this case we shouldn't show the contact picker in the
- * first place.
- * Note when there's no accounts, it *is* okay to show the picker / dialog, because the local-only
- * contacts are writable.
- */
-public class ConfirmAddDetailActivity extends Activity implements
- DialogManager.DialogShowingViewActivity {
-
- private static final String TAG = "ConfirmAdd"; // The class name is too long to be a tag.
- private static final boolean VERBOSE_LOGGING = Log.isLoggable(TAG, Log.VERBOSE);
-
- private LayoutInflater mInflater;
- private View mRootView;
- private TextView mDisplayNameView;
- private TextView mReadOnlyWarningView;
- private ImageView mPhotoView;
- private ViewGroup mEditorContainerView;
- private static WeakReference<ProgressDialog> sProgressDialog;
-
- private AccountTypeManager mAccountTypeManager;
- private ContentResolver mContentResolver;
-
- private AccountType mEditableAccountType;
- private Uri mContactUri;
- private long mContactId;
- private String mDisplayName;
- private String mLookupKey;
- private boolean mIsReadOnly;
-
- private QueryHandler mQueryHandler;
-
- /** {@link RawContactDeltaList} for the entire selected contact. */
- private RawContactDeltaList mEntityDeltaList;
-
- /** {@link RawContactDeltaList} for the editable account */
- private RawContactDelta mRawContactDelta;
-
- private String mMimetype = Phone.CONTENT_ITEM_TYPE;
-
- /**
- * DialogManager may be needed if the user wants to apply a "custom" label to the contact detail
- */
- private final DialogManager mDialogManager = new DialogManager(this);
-
- /**
- * PhotoQuery contains the projection used for retrieving the name and photo
- * ID of a contact.
- */
- private interface ContactQuery {
- final String[] COLUMNS = new String[] {
- Contacts._ID,
- Contacts.LOOKUP_KEY,
- Contacts.PHOTO_ID,
- Contacts.DISPLAY_NAME,
- };
- final int _ID = 0;
- final int LOOKUP_KEY = 1;
- final int PHOTO_ID = 2;
- final int DISPLAY_NAME = 3;
- }
-
- /**
- * PhotoQuery contains the projection used for retrieving the raw bytes of
- * the contact photo.
- */
- private interface PhotoQuery {
- final String[] COLUMNS = new String[] {
- Photo.PHOTO
- };
-
- final int PHOTO = 0;
- }
-
- /**
- * ExtraInfoQuery contains the projection used for retrieving the extra info
- * on a contact (only needed if someone else exists with the same name as
- * this contact).
- */
- private interface ExtraInfoQuery {
- final String[] COLUMNS = new String[] {
- RawContacts.CONTACT_ID,
- Data.MIMETYPE,
- Data.DATA1,
- };
- final int CONTACT_ID = 0;
- final int MIMETYPE = 1;
- final int DATA1 = 2;
- }
-
- /**
- * List of mimetypes to use in order of priority to display for a contact in
- * a disambiguation case. For example, if the contact does not have a
- * nickname, use the email field, and etc.
- */
- private static final String[] MIME_TYPE_PRIORITY_LIST = new String[] {
- Nickname.CONTENT_ITEM_TYPE, Email.CONTENT_ITEM_TYPE, Im.CONTENT_ITEM_TYPE,
- StructuredPostal.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE };
-
- private static final int TOKEN_CONTACT_INFO = 0;
- private static final int TOKEN_PHOTO_QUERY = 1;
- private static final int TOKEN_DISAMBIGUATION_QUERY = 2;
- private static final int TOKEN_EXTRA_INFO_QUERY = 3;
-
- private final OnClickListener mDetailsButtonClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mIsReadOnly) {
- onSaveCompleted(true);
- } else {
- doSaveAction();
- }
- }
- };
-
- private final OnClickListener mDoneButtonClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- doSaveAction();
- }
- };
-
- private final OnClickListener mCancelButtonClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- setResult(RESULT_CANCELED);
- finish();
- }
- };
-
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mContentResolver = getContentResolver();
-
- final Intent intent = getIntent();
- mContactUri = intent.getData();
-
- if (mContactUri == null) {
- setResult(RESULT_CANCELED);
- finish();
- }
-
- Bundle extras = intent.getExtras();
- if (extras != null) {
- if (extras.containsKey(ContactsContract.Intents.Insert.PHONE)) {
- mMimetype = Phone.CONTENT_ITEM_TYPE;
- } else if (extras.containsKey(ContactsContract.Intents.Insert.EMAIL)) {
- mMimetype = Email.CONTENT_ITEM_TYPE;
- } else {
- throw new IllegalStateException("Error: No valid mimetype found in intent extras");
- }
- }
-
- mAccountTypeManager = AccountTypeManager.getInstance(this);
-
- setContentView(R.layout.confirm_add_detail_activity);
-
- mRootView = findViewById(R.id.root_view);
- mReadOnlyWarningView = (TextView) findViewById(R.id.read_only_warning);
-
- // Setup "header" (containing contact info) to save the detail and then go to the editor
- findViewById(R.id.open_details_push_layer).setOnClickListener(mDetailsButtonClickListener);
-
- // Setup "done" button to save the detail to the contact and exit.
- findViewById(R.id.btn_done).setOnClickListener(mDoneButtonClickListener);
-
- // Setup "cancel" button to return to previous activity.
- findViewById(R.id.btn_cancel).setOnClickListener(mCancelButtonClickListener);
-
- // Retrieve references to all the Views in the dialog activity.
- mDisplayNameView = (TextView) findViewById(R.id.name);
- mPhotoView = (ImageView) findViewById(R.id.photo);
- mPhotoView.setImageDrawable(ContactPhotoManager.getDefaultAvatarDrawableForContact(
- getResources(), false, null));
-
- mEditorContainerView = (ViewGroup) findViewById(R.id.editor_container);
-
- resetAsyncQueryHandler();
- startContactQuery(mContactUri);
-
- new QueryEntitiesTask(this).execute(intent);
- }
-
- @Override
- public DialogManager getDialogManager() {
- return mDialogManager;
- }
-
- @Override
- protected Dialog onCreateDialog(int id, Bundle args) {
- if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, args);
-
- // Nobody knows about the Dialog
- Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
- return null;
- }
-
- /**
- * Reset the query handler by creating a new QueryHandler instance.
- */
- private void resetAsyncQueryHandler() {
- // the api AsyncQueryHandler.cancelOperation() doesn't really work. Since we really
- // need the old async queries to be cancelled, let's do it the hard way.
- mQueryHandler = new QueryHandler(mContentResolver);
- }
-
- /**
- * Internal method to query contact by Uri.
- *
- * @param contactUri the contact uri
- */
- private void startContactQuery(Uri contactUri) {
- mQueryHandler.startQuery(TOKEN_CONTACT_INFO, contactUri, contactUri, ContactQuery.COLUMNS,
- null, null, null);
- }
-
- /**
- * Internal method to query contact photo by photo id and uri.
- *
- * @param photoId the photo id.
- * @param lookupKey the lookup uri.
- */
- private void startPhotoQuery(long photoId, Uri lookupKey) {
- mQueryHandler.startQuery(TOKEN_PHOTO_QUERY, lookupKey,
- ContentUris.withAppendedId(Data.CONTENT_URI, photoId),
- PhotoQuery.COLUMNS, null, null, null);
- }
-
- /**
- * Internal method to query for contacts with a given display name.
- *
- * @param contactDisplayName the display name to look for.
- */
- private void startDisambiguationQuery(String contactDisplayName) {
- // Apply a limit of 1 result to the query because we only need to
- // determine whether or not at least one other contact has the same
- // name. We don't need to find ALL other contacts with the same name.
- final Builder builder = Contacts.CONTENT_URI.buildUpon();
- builder.appendQueryParameter("limit", String.valueOf(1));
- final Uri uri = builder.build();
-
- final String displayNameSelection;
- final String[] selectionArgs;
- if (TextUtils.isEmpty(contactDisplayName)) {
- displayNameSelection = Contacts.DISPLAY_NAME_PRIMARY + " IS NULL";
- selectionArgs = new String[] { String.valueOf(mContactId) };
- } else {
- displayNameSelection = Contacts.DISPLAY_NAME_PRIMARY + " = ?";
- selectionArgs = new String[] { contactDisplayName, String.valueOf(mContactId) };
- }
- mQueryHandler.startQuery(TOKEN_DISAMBIGUATION_QUERY, null, uri,
- new String[] { Contacts._ID } /* unused projection but a valid one was needed */,
- displayNameSelection + " AND " + Contacts.PHOTO_ID + " IS NULL AND "
- + Contacts._ID + " <> ?", selectionArgs, null);
- }
-
- /**
- * Internal method to query for extra data fields for this contact.
- */
- private void startExtraInfoQuery() {
- mQueryHandler.startQuery(TOKEN_EXTRA_INFO_QUERY, null, Data.CONTENT_URI,
- ExtraInfoQuery.COLUMNS, RawContacts.CONTACT_ID + " = ?",
- new String[] { String.valueOf(mContactId) }, null);
- }
-
- private static class QueryEntitiesTask extends AsyncTask<Intent, Void, RawContactDeltaList> {
-
- private ConfirmAddDetailActivity activityTarget;
- private String mSelection;
-
- public QueryEntitiesTask(ConfirmAddDetailActivity target) {
- activityTarget = target;
- }
-
- @Override
- protected RawContactDeltaList doInBackground(Intent... params) {
-
- final Intent intent = params[0];
-
- final ContentResolver resolver = activityTarget.getContentResolver();
-
- // Handle both legacy and new authorities
- final Uri data = intent.getData();
- final String authority = data.getAuthority();
- final String mimeType = intent.resolveType(resolver);
-
- mSelection = "0";
- String selectionArg = null;
- if (ContactsContract.AUTHORITY.equals(authority)) {
- if (Contacts.CONTENT_ITEM_TYPE.equals(mimeType)) {
- // Handle selected aggregate
- final long contactId = ContentUris.parseId(data);
- selectionArg = String.valueOf(contactId);
- mSelection = RawContacts.CONTACT_ID + "=?";
- } else if (RawContacts.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final long rawContactId = ContentUris.parseId(data);
- final long contactId = queryForContactId(resolver, rawContactId);
- selectionArg = String.valueOf(contactId);
- mSelection = RawContacts.CONTACT_ID + "=?";
- }
- } else if (android.provider.Contacts.AUTHORITY.equals(authority)) {
- final long rawContactId = ContentUris.parseId(data);
- selectionArg = String.valueOf(rawContactId);
- mSelection = Data.RAW_CONTACT_ID + "=?";
- }
-
- // Note that this query does not need to concern itself with whether the contact is
- // the user's profile, since the profile does not show up in the picker.
- return RawContactDeltaList.fromQuery(RawContactsEntity.CONTENT_URI,
- activityTarget.getContentResolver(), mSelection,
- new String[] { selectionArg }, null);
- }
-
- private static long queryForContactId(ContentResolver resolver, long rawContactId) {
- Cursor contactIdCursor = null;
- long contactId = -1;
- try {
- contactIdCursor = resolver.query(RawContacts.CONTENT_URI,
- new String[] { RawContacts.CONTACT_ID },
- RawContacts._ID + "=?", new String[] { String.valueOf(rawContactId) },
- null);
- if (contactIdCursor != null && contactIdCursor.moveToFirst()) {
- contactId = contactIdCursor.getLong(0);
- }
- } finally {
- if (contactIdCursor != null) {
- contactIdCursor.close();
- }
- }
- return contactId;
- }
-
- @Override
- protected void onPostExecute(RawContactDeltaList entityList) {
- if (activityTarget.isFinishing()) {
- return;
- }
- if ((entityList == null) || (entityList.size() == 0)) {
- Log.e(TAG, "Contact not found.");
- activityTarget.finish();
- return;
- }
-
- activityTarget.setEntityDeltaList(entityList);
- }
- }
-
- private class QueryHandler extends AsyncQueryHandler {
-
- public QueryHandler(ContentResolver cr) {
- super(cr);
- }
-
- @Override
- protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
- try {
- if (this != mQueryHandler) {
- Log.d(TAG, "onQueryComplete: discard result, the query handler is reset!");
- return;
- }
- if (ConfirmAddDetailActivity.this.isFinishing()) {
- return;
- }
-
- switch (token) {
- case TOKEN_PHOTO_QUERY: {
- // Set the photo
- Bitmap photoBitmap = null;
- if (cursor != null && cursor.moveToFirst()
- && !cursor.isNull(PhotoQuery.PHOTO)) {
- byte[] photoData = cursor.getBlob(PhotoQuery.PHOTO);
- photoBitmap = BitmapFactory.decodeByteArray(photoData, 0,
- photoData.length, null);
- }
-
- if (photoBitmap != null) {
- mPhotoView.setImageBitmap(photoBitmap);
- }
-
- break;
- }
- case TOKEN_CONTACT_INFO: {
- // Set the contact's name
- if (cursor != null && cursor.moveToFirst()) {
- // Get the cursor values
- mDisplayName = cursor.getString(ContactQuery.DISPLAY_NAME);
- mLookupKey = cursor.getString(ContactQuery.LOOKUP_KEY);
- setDefaultContactImage(mDisplayName, mLookupKey);
- final long photoId = cursor.getLong(ContactQuery.PHOTO_ID);
-
- // If there is no photo ID, then do a disambiguation
- // query because other contacts could have the same
- // name as this contact.
- if (photoId == 0) {
- mContactId = cursor.getLong(ContactQuery._ID);
- startDisambiguationQuery(mDisplayName);
- } else if (TextUtils.isEmpty(mLookupKey)) {
- finish();
- return;
- } else {
- // Otherwise do the photo query.
- Uri lookupUri = Contacts.getLookupUri(mContactId, mLookupKey);
- startPhotoQuery(photoId, lookupUri);
- // Display the name because there is no
- // disambiguation query.
- setDisplayName();
- showDialogContent();
- }
- }
- break;
- }
- case TOKEN_DISAMBIGUATION_QUERY: {
- // If a cursor was returned with more than 0 results,
- // then at least one other contact exists with the same
- // name as this contact. Extra info on this contact must
- // be displayed to disambiguate the contact, so retrieve
- // those additional fields. Otherwise, no other contacts
- // with this name exists, so do nothing further.
- if (cursor != null && cursor.getCount() > 0) {
- startExtraInfoQuery();
- } else {
- // If there are no other contacts with this name,
- // then display the name.
- setDisplayName();
- showDialogContent();
- }
- break;
- }
- case TOKEN_EXTRA_INFO_QUERY: {
- // This case should only occur if there are one or more
- // other contacts with the same contact name.
- if (cursor != null && cursor.moveToFirst()) {
- HashMap<String, String> hashMapCursorData = new
- HashMap<String, String>();
-
- // Convert the cursor data into a hashmap of
- // (mimetype, data value) pairs. If a contact has
- // multiple values with the same mimetype, it's fine
- // to override that hashmap entry because we only
- // need one value of that type.
- while (!cursor.isAfterLast()) {
- final String mimeType = cursor.getString(ExtraInfoQuery.MIMETYPE);
- if (!TextUtils.isEmpty(mimeType)) {
- String value = cursor.getString(ExtraInfoQuery.DATA1);
- if (!TextUtils.isEmpty(value)) {
- // As a special case, phone numbers
- // should be formatted in a specific way.
- if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
- value = PhoneNumberUtils.formatNumber(value);
- }
- hashMapCursorData.put(mimeType, value);
- }
- }
- cursor.moveToNext();
- }
-
- // Find the first non-empty field according to the
- // mimetype priority list and display this under the
- // contact's display name to disambiguate the contact.
- for (String mimeType : MIME_TYPE_PRIORITY_LIST) {
- if (hashMapCursorData.containsKey(mimeType)) {
- setDisplayName();
- setExtraInfoField(hashMapCursorData.get(mimeType));
- break;
- }
- }
- showDialogContent();
- }
- break;
- }
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- }
- }
-
- private void setEntityDeltaList(RawContactDeltaList entityList) {
- if (entityList == null) {
- throw new IllegalStateException();
- }
- if (VERBOSE_LOGGING) {
- Log.v(TAG, "setEntityDeltaList: " + entityList);
- }
-
- mEntityDeltaList = entityList;
-
- // Find the editable raw_contact.
- mRawContactDelta = mEntityDeltaList.getFirstWritableRawContact(this);
-
- // If no editable raw_contacts are found, create one.
- if (mRawContactDelta == null) {
- mRawContactDelta = addEditableRawContact(this, mEntityDeltaList);
-
- if ((mRawContactDelta != null) && VERBOSE_LOGGING) {
- Log.v(TAG, "setEntityDeltaList: created editable raw_contact " + entityList);
- }
- }
-
- if (mRawContactDelta == null) {
- // Selected contact is read-only, and there's no editable account.
- mIsReadOnly = true;
- mEditableAccountType = null;
- } else {
- mIsReadOnly = false;
-
- mEditableAccountType = mRawContactDelta.getRawContactAccountType(this);
-
- // Handle any incoming values that should be inserted
- final Bundle extras = getIntent().getExtras();
- if (extras != null && extras.size() > 0) {
- // If there are any intent extras, add them as additional fields in the
- // RawContactDelta.
- RawContactModifier.parseExtras(this, mEditableAccountType, mRawContactDelta,
- extras);
- }
- }
-
- bindEditor();
- }
-
- /**
- * Create an {@link RawContactDelta} for a raw_contact on the first editable account found, and add
- * to the list. Also copy the structured name from an existing (read-only) raw_contact to the
- * new one, if any of the read-only contacts has a name.
- */
- private static RawContactDelta addEditableRawContact(Context context,
- RawContactDeltaList entityDeltaList) {
- // First, see if there's an editable account.
- final AccountTypeManager accounts = AccountTypeManager.getInstance(context);
- final List<AccountWithDataSet> editableAccounts = accounts.getAccounts(true);
- if (editableAccounts.size() == 0) {
- // No editable account type found. The dialog will be read-only mode.
- return null;
- }
- final AccountWithDataSet editableAccount = editableAccounts.get(0);
- final AccountType accountType = accounts.getAccountType(
- editableAccount.type, editableAccount.dataSet);
-
- // Create a new RawContactDelta for the new raw_contact.
- final RawContact rawContact = new RawContact();
- rawContact.setAccount(editableAccount);
-
- final RawContactDelta entityDelta = new RawContactDelta(ValuesDelta.fromAfter(
- rawContact.getValues()));
-
- // Then, copy the structure name from an existing (read-only) raw_contact.
- for (RawContactDelta entity : entityDeltaList) {
- final ArrayList<ValuesDelta> readOnlyNames =
- entity.getMimeEntries(StructuredName.CONTENT_ITEM_TYPE);
- if ((readOnlyNames != null) && (readOnlyNames.size() > 0)) {
- final ValuesDelta readOnlyName = readOnlyNames.get(0);
- final ValuesDelta newName = RawContactModifier.ensureKindExists(entityDelta,
- accountType, StructuredName.CONTENT_ITEM_TYPE);
-
- // Copy all the data fields.
- newName.copyStructuredNameFieldsFrom(readOnlyName);
- break;
- }
- }
-
- // Add the new RawContactDelta to the list.
- entityDeltaList.add(entityDelta);
-
- return entityDelta;
- }
-
- /**
- * Rebuild the editor to match our underlying {@link #mEntityDeltaList} object.
- */
- private void bindEditor() {
- if (mEntityDeltaList == null) {
- throw new IllegalStateException();
- }
-
- // If no valid raw contact (to insert the data) was found, we won't have an editable
- // account type to use. In this case, display an error message and hide the "OK" button.
- if (mIsReadOnly) {
- mReadOnlyWarningView.setText(getString(R.string.contact_read_only));
- mReadOnlyWarningView.setVisibility(View.VISIBLE);
- mEditorContainerView.setVisibility(View.GONE);
- findViewById(R.id.btn_done).setVisibility(View.GONE);
- // Nothing more to be done, just show the UI
- showDialogContent();
- return;
- }
-
- // Otherwise display an editor that allows the user to add the data to this raw contact.
- for (DataKind kind : mEditableAccountType.getSortedDataKinds()) {
- // Skip kind that are not editable
- if (!kind.editable) continue;
- if (mMimetype.equals(kind.mimeType)) {
- final ArrayList<ValuesDelta> deltas = mRawContactDelta.getMimeEntries(mMimetype);
- if (deltas != null) {
- for (ValuesDelta valuesDelta : deltas) {
- // Skip entries that aren't visible
- if (!valuesDelta.isVisible()) continue;
- if (valuesDelta.isInsert()) {
- inflateEditorView(kind, valuesDelta, mRawContactDelta);
- return;
- }
- }
- }
- }
- }
- }
-
- /**
- * Creates an EditorView for the given entry. This function must be used while constructing
- * the views corresponding to the the object-model. The resulting EditorView is also added
- * to the end of mEditors
- */
- private void inflateEditorView(DataKind dataKind, ValuesDelta valuesDelta, RawContactDelta state) {
- final int layoutResId = EditorUiUtils.getLayoutResourceId(dataKind.mimeType);
- final View view = mInflater.inflate(layoutResId, mEditorContainerView,
- false);
-
- if (view instanceof Editor) {
- Editor editor = (Editor) view;
- // Don't allow deletion of the field because there is only 1 detail in this editor.
- editor.setDeletable(false);
- editor.setValues(dataKind, valuesDelta, state, false, new ViewIdGenerator());
- }
-
- mEditorContainerView.addView(view);
- }
-
- /**
- * Set the display name to the correct TextView. Don't do this until it is
- * certain there is no need for a disambiguation field (otherwise the screen
- * will flicker because the name will be centered and then moved upwards).
- */
- private void setDisplayName() {
- mDisplayNameView.setText(mDisplayName);
- }
-
- /**
- * Set the TextView (for extra contact info) with the given value and make the
- * TextView visible.
- */
- private void setExtraInfoField(String value) {
- TextView extraTextView = (TextView) findViewById(R.id.extra_info);
- extraTextView.setVisibility(View.VISIBLE);
- extraTextView.setText(value);
- }
-
- private void setDefaultContactImage(String displayName, String lookupKey) {
- mPhotoView.setImageDrawable(ContactPhotoManager.getDefaultAvatarDrawableForContact(
- getResources(), false,
- new DefaultImageRequest(displayName, lookupKey, false /* isCircular */)));
- }
-
- /**
- * Shows all the contents of the dialog to the user at one time. This should only be called
- * once all the queries have completed, otherwise the screen will flash as additional data
- * comes in.
- */
- private void showDialogContent() {
- mRootView.setVisibility(View.VISIBLE);
- }
-
- /**
- * Saves or creates the contact based on the mode, and if successful
- * finishes the activity.
- */
- private void doSaveAction() {
- final PersistTask task = new PersistTask(this, mAccountTypeManager);
- task.execute(mEntityDeltaList);
- }
-
- /**
- * Background task for persisting edited contact data, using the changes
- * defined by a set of {@link RawContactDelta}. This task starts
- * {@link EmptyService} to make sure the background thread can finish
- * persisting in cases where the system wants to reclaim our process.
- */
- private static class PersistTask extends AsyncTask<RawContactDeltaList, Void, Integer> {
- // In the future, use ContactSaver instead of WeakAsyncTask because of
- // the danger of the activity being null during a save action
- private static final int PERSIST_TRIES = 3;
-
- private static final int RESULT_UNCHANGED = 0;
- private static final int RESULT_SUCCESS = 1;
- private static final int RESULT_FAILURE = 2;
-
- private ConfirmAddDetailActivity activityTarget;
-
- private AccountTypeManager mAccountTypeManager;
-
- public PersistTask(ConfirmAddDetailActivity target, AccountTypeManager accountTypeManager) {
- activityTarget = target;
- mAccountTypeManager = accountTypeManager;
- }
-
- @Override
- protected void onPreExecute() {
- sProgressDialog = new WeakReference<ProgressDialog>(ProgressDialog.show(activityTarget,
- null, activityTarget.getText(R.string.savingContact)));
-
- // Before starting this task, start an empty service to protect our
- // process from being reclaimed by the system.
- final Context context = activityTarget;
- context.startService(new Intent(context, EmptyService.class));
- }
-
- @Override
- protected Integer doInBackground(RawContactDeltaList... params) {
- final Context context = activityTarget;
- final ContentResolver resolver = context.getContentResolver();
-
- RawContactDeltaList state = params[0];
-
- if (state == null) {
- return RESULT_FAILURE;
- }
-
- // Trim any empty fields, and RawContacts, before persisting
- RawContactModifier.trimEmpty(state, mAccountTypeManager);
-
- // Attempt to persist changes
- int tries = 0;
- Integer result = RESULT_FAILURE;
- while (tries++ < PERSIST_TRIES) {
- try {
- // Build operations and try applying
- // Note: In case we've created a new raw_contact because the selected contact
- // is read-only, buildDiff() will create aggregation exceptions to join
- // the new one to the existing contact.
- final ArrayList<ContentProviderOperation> diff = state.buildDiff();
- ContentProviderResult[] results = null;
- if (!diff.isEmpty()) {
- results = resolver.applyBatch(ContactsContract.AUTHORITY, diff);
- }
-
- result = (diff.size() > 0) ? RESULT_SUCCESS : RESULT_UNCHANGED;
- break;
-
- } catch (RemoteException e) {
- // Something went wrong, bail without success
- Log.e(TAG, "Problem persisting user edits", e);
- break;
-
- } catch (OperationApplicationException e) {
- // Version consistency failed, bail without success
- Log.e(TAG, "Version consistency failed", e);
- break;
- }
- }
-
- return result;
- }
-
- /** {@inheritDoc} */
- @Override
- protected void onPostExecute(Integer result) {
- final Context context = activityTarget;
-
- dismissProgressDialog();
-
- // Show a toast message based on the success or failure of the save action.
- if (result == RESULT_SUCCESS) {
- Toast.makeText(context, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
- } else if (result == RESULT_FAILURE) {
- Toast.makeText(context, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
- }
-
- // Stop the service that was protecting us
- context.stopService(new Intent(context, EmptyService.class));
- activityTarget.onSaveCompleted(result != RESULT_FAILURE);
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- // Dismiss the progress dialog here to prevent leaking the window on orientation change.
- dismissProgressDialog();
- }
-
- /**
- * Dismiss the progress dialog (check if it is null because it is a {@link WeakReference}).
- */
- private static void dismissProgressDialog() {
- ProgressDialog dialog = (sProgressDialog == null) ? null : sProgressDialog.get();
- if (dialog != null) {
- dialog.dismiss();
- }
- sProgressDialog = null;
- }
-
- /**
- * This method is intended to be executed after the background task for saving edited info has
- * finished. The method sets the activity result (and intent if applicable) and finishes the
- * activity.
- * @param success is true if the save task completed successfully, or false otherwise.
- */
- private void onSaveCompleted(boolean success) {
- if (success) {
- Intent intent = new Intent(Intent.ACTION_VIEW, mContactUri);
- setResult(RESULT_OK, intent);
- } else {
- setResult(RESULT_CANCELED);
- }
- finish();
- }
-}
diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
index 78b0a3b58..dea134b5f 100644
--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
@@ -32,11 +32,12 @@ import android.widget.TextView;
import com.android.contacts.R;
import com.android.contacts.editor.ContactEditorUtils;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.ImplicitIntentsUtil;
import java.util.List;
@@ -48,14 +49,13 @@ import java.util.List;
* the new contact in. If the activity result doesn't contain intent data, then there is no
* account for this contact.
*/
-public class ContactEditorAccountsChangedActivity extends Activity {
-
- private static final String TAG = ContactEditorAccountsChangedActivity.class.getSimpleName();
-
+public class ContactEditorAccountsChangedActivity extends Activity
+ implements AccountsLoader.AccountsListener {
private static final int SUBACTIVITY_ADD_NEW_ACCOUNT = 1;
private AccountsListAdapter mAccountListAdapter;
private ContactEditorUtils mEditorUtils;
+ private AlertDialog mDialog;
private final OnItemClickListener mAccountListItemClickListener = new OnItemClickListener() {
@Override
@@ -70,18 +70,54 @@ public class ContactEditorAccountsChangedActivity extends Activity {
private final OnClickListener mAddAccountClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
- final Intent intent = ImplicitIntentsUtil.getIntentForAddingAccount();
+ final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
startActivityForResult(intent, SUBACTIVITY_ADD_NEW_ACCOUNT);
}
};
@Override
+ protected void onResume() {
+ super.onResume();
+ if (mDialog != null && !mDialog.isShowing()) {
+ mDialog.show();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if (mDialog != null) {
+ mDialog.dismiss();
+ }
+ }
+
+ @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ mEditorUtils = ContactEditorUtils.create(this);
+ AccountsLoader.loadAccounts(this, 0, AccountTypeManager.writableFilter());
+ }
- mEditorUtils = ContactEditorUtils.getInstance(this);
- final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this).
- getAccounts(true);
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == SUBACTIVITY_ADD_NEW_ACCOUNT) {
+ // If the user canceled the account setup process, then keep this activity visible to
+ // the user.
+ if (resultCode != RESULT_OK) {
+ return;
+ }
+ // Subactivity was successful, so pass the result back and finish the activity.
+ AccountWithDataSet account = mEditorUtils.getCreatedAccount(resultCode, data);
+ if (account == null) {
+ setResult(resultCode);
+ finish();
+ return;
+ }
+ saveAccountAndReturnResult(account);
+ }
+ }
+
+ private void updateDisplayedAccounts(List<AccountInfo> accounts) {
final int numAccounts = accounts.size();
if (numAccounts < 0) {
throw new IllegalStateException("Cannot have a negative number of accounts");
@@ -102,11 +138,10 @@ public class ContactEditorAccountsChangedActivity extends Activity {
button.setOnClickListener(mAddAccountClickListener);
final ListView accountListView = (ListView) view.findViewById(R.id.account_list);
- mAccountListAdapter = new AccountsListAdapter(this,
- AccountListFilter.ACCOUNTS_CONTACT_WRITABLE);
+ mAccountListAdapter = new AccountsListAdapter(this, accounts);
accountListView.setAdapter(mAccountListAdapter);
accountListView.setOnItemClickListener(mAccountListItemClickListener);
- } else if (numAccounts == 1) {
+ } else if (numAccounts == 1 && !accounts.get(0).getAccount().isNullAccount()) {
// If the user has 1 writable account we will just show the user a message with 2
// possible action buttons.
view = View.inflate(this,
@@ -116,9 +151,9 @@ public class ContactEditorAccountsChangedActivity extends Activity {
final Button leftButton = (Button) view.findViewById(R.id.left_button);
final Button rightButton = (Button) view.findViewById(R.id.right_button);
- final AccountWithDataSet account = accounts.get(0);
+ final AccountInfo accountInfo = accounts.get(0);
textView.setText(getString(R.string.contact_editor_prompt_one_account,
- account.name));
+ accountInfo.getNameLabel()));
// This button allows the user to add a new account to the device and return to
// this app afterwards.
@@ -131,7 +166,7 @@ public class ContactEditorAccountsChangedActivity extends Activity {
rightButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- saveAccountAndReturnResult(account);
+ saveAccountAndReturnResult(accountInfo.getAccount());
}
});
} else {
@@ -148,14 +183,13 @@ public class ContactEditorAccountsChangedActivity extends Activity {
// This button allows the user to continue editing the contact as a phone-only
// local contact.
- leftButton.setText(getString(R.string.keep_local));
+ leftButton.setText(getString(android.R.string.cancel));
leftButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Remember that the user wants to create local contacts, so the user is not
// prompted again with this activity.
- mEditorUtils.saveDefaultAndAllAccounts(null);
- setResult(RESULT_OK);
+ saveAccountAndReturnResult(AccountWithDataSet.getNullAccount());
finish();
}
});
@@ -166,7 +200,10 @@ public class ContactEditorAccountsChangedActivity extends Activity {
rightButton.setOnClickListener(mAddAccountClickListener);
}
- new AlertDialog.Builder(this)
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ }
+ mDialog = new AlertDialog.Builder(this)
.setView(view)
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
@@ -174,32 +211,13 @@ public class ContactEditorAccountsChangedActivity extends Activity {
finish();
}
})
- .create()
- .show();
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == SUBACTIVITY_ADD_NEW_ACCOUNT) {
- // If the user canceled the account setup process, then keep this activity visible to
- // the user.
- if (resultCode != RESULT_OK) {
- return;
- }
- // Subactivity was successful, so pass the result back and finish the activity.
- AccountWithDataSet account = mEditorUtils.getCreatedAccount(resultCode, data);
- if (account == null) {
- setResult(resultCode);
- finish();
- return;
- }
- saveAccountAndReturnResult(account);
- }
+ .create();
+ mDialog.show();
}
private void saveAccountAndReturnResult(AccountWithDataSet account) {
// Save this as the default account
- mEditorUtils.saveDefaultAndAllAccounts(account);
+ mEditorUtils.saveDefaultAccount(account);
// Pass account info in activity result intent
Intent intent = new Intent();
@@ -207,4 +225,9 @@ public class ContactEditorAccountsChangedActivity extends Activity {
setResult(RESULT_OK, intent);
finish();
}
+
+ @Override
+ public void onAccountsLoaded(List<AccountInfo> accounts) {
+ updateDisplayedAccounts(accounts);
+ }
}
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 293e8c0d4..ec49d48b5 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 The Android Open Source Project
+ * 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.
@@ -16,38 +16,492 @@
package com.android.contacts.activities;
+import android.app.Dialog;
+import android.app.FragmentTransaction;
+import android.content.ComponentName;
+import android.content.ContentValues;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract.QuickContact;
+import android.support.v7.widget.Toolbar;
+import android.util.Log;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+
+import com.android.contacts.AppCompatContactsActivity;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.DynamicShortcuts;
import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
+import com.android.contacts.detail.PhotoSelectionHandler;
import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.editor.PhotoSourceDialogFragment;
+import com.android.contacts.interactions.ContactDeletionInteraction;
+import com.android.contacts.model.RawContactDeltaList;
import com.android.contacts.util.DialogManager;
+import com.android.contacts.util.ImplicitIntentsUtil;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
/**
- * Contact editor with all fields displayed.
+ * Contact editor with only the most important fields displayed initially.
*/
-public class ContactEditorActivity extends ContactEditorBaseActivity
- implements DialogManager.DialogShowingViewActivity {
+public class ContactEditorActivity extends AppCompatContactsActivity implements
+ PhotoSourceDialogFragment.Listener,
+ DialogManager.DialogShowingViewActivity {
+ private static final String TAG = "ContactEditorActivity";
+
+ public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
+ public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
+
+ public static final int RESULT_CODE_SPLIT = 2;
+ // 3 used for ContactDeletionInteraction.RESULT_CODE_DELETED
+ public static final int RESULT_CODE_EDITED = 4;
+
+ /**
+ * The contact will be saved to this account when this is set for an insert. This
+ * is necessary because {@link android.accounts.Account} cannot be created with null values
+ * for the name and type and an Account is needed for
+ * {@link android.provider.ContactsContract.Intents.Insert#EXTRA_ACCOUNT}
+ */
+ public static final String EXTRA_ACCOUNT_WITH_DATA_SET =
+ "com.android.contacts.ACCOUNT_WITH_DATA_SET";
+
+ private static final String TAG_EDITOR_FRAGMENT = "editor_fragment";
+
+ private static final String STATE_PHOTO_MODE = "photo_mode";
+ private static final String STATE_ACTION_BAR_TITLE = "action_bar_title";
+ private static final String STATE_PHOTO_URI = "photo_uri";
+
+ /**
+ * Boolean intent key that specifies that this activity should finish itself
+ * (instead of launching a new view intent) after the editor changes have been
+ * saved.
+ */
+ public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED =
+ "finishActivityOnSaveCompleted";
+
+ /**
+ * Contract for contact editors Fragments that are managed by this Activity.
+ */
+ public interface ContactEditor {
+
+ /**
+ * Modes that specify what the AsyncTask has to perform after saving
+ */
+ interface SaveMode {
+ /**
+ * Close the editor after saving
+ */
+ int CLOSE = 0;
+
+ /**
+ * Reload the data so that the user can continue editing
+ */
+ int RELOAD = 1;
+
+ /**
+ * Split the contact after saving
+ */
+ int SPLIT = 2;
+
+ /**
+ * Join another contact after saving
+ */
+ int JOIN = 3;
+
+ /**
+ * Navigate to the editor view after saving.
+ */
+ int EDITOR = 4;
+ }
+
+ /**
+ * The status of the contact editor.
+ */
+ interface Status {
+ /**
+ * The loader is fetching data
+ */
+ int LOADING = 0;
+
+ /**
+ * Not currently busy. We are waiting for the user to enter data
+ */
+ int EDITING = 1;
+
+ /**
+ * The data is currently being saved. This is used to prevent more
+ * auto-saves (they shouldn't overlap)
+ */
+ int SAVING = 2;
+
+ /**
+ * Prevents any more saves. This is used if in the following cases:
+ * - After Save/Close
+ * - After Revert
+ * - After the user has accepted an edit suggestion
+ * - After the user chooses to expand the editor
+ */
+ int CLOSING = 3;
+
+ /**
+ * Prevents saving while running a child activity.
+ */
+ int SUB_ACTIVITY = 4;
+ }
+
+ /**
+ * Sets the hosting Activity that will receive callbacks from the contact editor.
+ */
+ void setListener(ContactEditorFragment.Listener listener);
+
+ /**
+ * Initialize the contact editor.
+ */
+ void load(String action, Uri lookupUri, Bundle intentExtras);
+
+ /**
+ * Applies extras from the hosting Activity to the writable raw contact.
+ */
+ void setIntentExtras(Bundle extras);
+
+ /**
+ * Saves or creates the contact based on the mode, and if successful
+ * finishes the activity.
+ */
+ boolean save(int saveMode);
+
+ /**
+ * If there are no unsaved changes, just close the editor, otherwise the user is prompted
+ * before discarding unsaved changes.
+ */
+ boolean revert();
+
+ /**
+ * Invoked after the contact is saved.
+ */
+ void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+ Uri contactLookupUri, Long joinContactId);
+
+ /**
+ * Invoked after the contact is joined.
+ */
+ void onJoinCompleted(Uri uri);
+ }
+
+ /**
+ * Displays a PopupWindow with photo edit options.
+ */
+ private final class EditorPhotoSelectionHandler extends PhotoSelectionHandler {
+
+ /**
+ * Receiver of photo edit option callbacks.
+ */
+ private final class EditorPhotoActionListener extends PhotoActionListener {
+
+ @Override
+ public void onRemovePictureChosen() {
+ getEditorFragment().removePhoto();
+ }
+
+ @Override
+ public void onPhotoSelected(Uri uri) throws FileNotFoundException {
+ mPhotoUri = uri;
+ getEditorFragment().updatePhoto(uri);
+
+ // Re-create the photo handler the next time we need it so that additional photo
+ // selections create a new temp file (and don't hit the one that was just added
+ // to the cache).
+ mPhotoSelectionHandler = null;
+ }
+
+ @Override
+ public Uri getCurrentPhotoUri() {
+ return mPhotoUri;
+ }
+
+ @Override
+ public void onPhotoSelectionDismissed() {
+ }
+ }
+
+ private final EditorPhotoActionListener mPhotoActionListener;
+
+ public EditorPhotoSelectionHandler(int photoMode) {
+ // We pass a null changeAnchorView since we are overriding onClick so that we
+ // can show the photo options in a dialog instead of a ListPopupWindow (which would
+ // be anchored at changeAnchorView).
+
+ // TODO: empty raw contact delta list
+ super(ContactEditorActivity.this, /* changeAnchorView =*/ null, photoMode,
+ /* isDirectoryContact =*/ false, new RawContactDeltaList());
+ mPhotoActionListener = new EditorPhotoActionListener();
+ }
+
+ @Override
+ public PhotoActionListener getListener() {
+ return mPhotoActionListener;
+ }
+
+ @Override
+ protected void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
+ mPhotoUri = photoUri;
+ startActivityForResult(intent, requestCode);
+ }
+ }
+
+ private int mActionBarTitleResId;
+ private ContactEditor mFragment;
+ private Toolbar mToolbar;
+ private boolean mFinishActivityOnSaveCompleted;
+ private DialogManager mDialogManager = new DialogManager(this);
+
+ private EditorPhotoSelectionHandler mPhotoSelectionHandler;
+ private Uri mPhotoUri;
+ private int mPhotoMode;
+
+ private final ContactEditorFragment.Listener mFragmentListener =
+ new ContactEditorFragment.Listener() {
+
+ @Override
+ public void onDeleteRequested(Uri contactUri) {
+ ContactDeletionInteraction.start(
+ ContactEditorActivity.this, contactUri, true);
+ }
+
+ @Override
+ public void onReverted() {
+ finish();
+ }
+
+ @Override
+ public void onSaveFinished(Intent resultIntent) {
+ if (mFinishActivityOnSaveCompleted) {
+ setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
+ } else if (resultIntent != null) {
+ ImplicitIntentsUtil.startActivityInApp(
+ ContactEditorActivity.this, resultIntent);
+ }
+ finish();
+ }
+
+ @Override
+ public void onContactSplit(Uri newLookupUri) {
+ setResult(RESULT_CODE_SPLIT, /* data */ null);
+ finish();
+ }
+
+ @Override
+ public void onContactNotFound() {
+ finish();
+ }
+
+ @Override
+ public void onEditOtherRawContactRequested(
+ Uri contactLookupUri, long rawContactId, ArrayList<ContentValues> values) {
+ final Intent intent = EditorIntents.createEditOtherRawContactIntent(
+ ContactEditorActivity.this, contactLookupUri, rawContactId, values);
+ ImplicitIntentsUtil.startActivityInApp(
+ ContactEditorActivity.this, intent);
+ finish();
+ }
+ };
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
+
+ final Intent intent = getIntent();
+ final String action = intent.getAction();
+
+ // Update the component name of our intent to be this class to clear out any activity
+ // aliases. Otherwise ContactSaveService won't notify this activity once a save is finished.
+ // See b/34154706 for more info.
+ intent.setComponent(new ComponentName(this, ContactEditorActivity.class));
+
+ // Determine whether or not this activity should be finished after the user is done
+ // editing the contact or if this activity should launch another activity to view the
+ // contact's details.
+ mFinishActivityOnSaveCompleted = intent.getBooleanExtra(
+ INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, false);
+
+ // The only situation where action could be ACTION_JOIN_COMPLETED is if the
+ // user joined the contact with another and closed the activity before
+ // the save operation was completed. The activity should remain closed then.
+ if (ACTION_JOIN_COMPLETED.equals(action)) {
+ finish();
+ return;
+ }
+
+ if (ACTION_SAVE_COMPLETED.equals(action)) {
+ finish();
return;
}
setContentView(R.layout.contact_editor_activity);
+ mToolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(mToolbar);
+ if (Intent.ACTION_EDIT.equals(action)) {
+ mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
+ } else {
+ mActionBarTitleResId = R.string.contact_editor_title_new_contact;
+ }
+ mToolbar.setTitle(mActionBarTitleResId);
+ // Set activity title for Talkback
+ setTitle(mActionBarTitleResId);
+
+ if (savedState == null) {
+ // Create the editor and photo selection fragments
+ mFragment = new ContactEditorFragment();
+ getFragmentManager().beginTransaction()
+ .add(R.id.fragment_container, getEditorFragment(), TAG_EDITOR_FRAGMENT)
+ .commit();
+ } else {
+ // Restore state
+ mPhotoMode = savedState.getInt(STATE_PHOTO_MODE);
+ mActionBarTitleResId = savedState.getInt(STATE_ACTION_BAR_TITLE);
+ mPhotoUri = Uri.parse(savedState.getString(STATE_PHOTO_URI));
+
+ // Show/hide the editor and photo selection fragments (w/o animations)
+ mFragment = (ContactEditorFragment) getFragmentManager()
+ .findFragmentByTag(TAG_EDITOR_FRAGMENT);
+ final FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
+ fragmentTransaction.show(getEditorFragment()).commit();
+ mToolbar.setTitle(mActionBarTitleResId);
+ }
- mFragment = (ContactEditorFragment) getFragmentManager().findFragmentById(
- R.id.contact_editor_fragment);
+ // Set listeners
mFragment.setListener(mFragmentListener);
- final String action = getIntent().getAction();
- final Uri uri = ContactEditorBaseActivity.ACTION_EDIT.equals(action)
- || Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
+ // Load editor data (even if it's hidden)
+ final Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
mFragment.load(action, uri, getIntent().getExtras());
+
+ if (Intent.ACTION_INSERT.equals(action)) {
+ DynamicShortcuts.reportShortcutUsed(this, DynamicShortcuts.SHORTCUT_ADD_CONTACT);
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
+ final View currentFocus = getCurrentFocus();
+ if (imm != null && currentFocus != null) {
+ imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
+ }
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+
+ if (mFragment == null) {
+ return;
+ }
+
+ final String action = intent.getAction();
+ if (Intent.ACTION_EDIT.equals(action)) {
+ mFragment.setIntentExtras(intent.getExtras());
+ } else if (ACTION_SAVE_COMPLETED.equals(action)) {
+ mFragment.onSaveCompleted(true,
+ intent.getIntExtra(ContactEditorFragment.SAVE_MODE_EXTRA_KEY,
+ ContactEditor.SaveMode.CLOSE),
+ intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
+ intent.getData(),
+ intent.getLongExtra(ContactEditorFragment.JOIN_CONTACT_ID_EXTRA_KEY, -1));
+ } else if (ACTION_JOIN_COMPLETED.equals(action)) {
+ mFragment.onJoinCompleted(intent.getData());
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle args) {
+ if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, args);
+
+ // Nobody knows about the Dialog
+ Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
+ return null;
+ }
+
+ @Override
+ public DialogManager getDialogManager() {
+ return mDialogManager;
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
+ outState.putInt(STATE_ACTION_BAR_TITLE, mActionBarTitleResId);
+ outState.putString(STATE_PHOTO_URI,
+ mPhotoUri != null ? mPhotoUri.toString() : Uri.EMPTY.toString());
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (mPhotoSelectionHandler == null) {
+ mPhotoSelectionHandler = (EditorPhotoSelectionHandler) getPhotoSelectionHandler();
+ }
+ if (mPhotoSelectionHandler.handlePhotoActivityResult(requestCode, resultCode, data)) {
+ return;
+ }
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mFragment != null) {
+ mFragment.revert();
+ }
+ }
+
+ /**
+ * Opens a dialog showing options for the user to change their photo (take, choose, or remove
+ * photo).
+ */
+ public void changePhoto(int photoMode) {
+ mPhotoMode = photoMode;
+ // This method is called from an onClick handler in the PhotoEditorView. It's possible for
+ // onClick methods to run after onSaveInstanceState is called for the activity, so check
+ // if it's safe to commit transactions before trying.
+ if (isSafeToCommitTransactions()) {
+ PhotoSourceDialogFragment.show(this, mPhotoMode);
+ }
+ }
+
+ public Toolbar getToolbar() {
+ return mToolbar;
+ }
+
+ @Override
+ public void onRemovePictureChosen() {
+ getPhotoSelectionHandler().getListener().onRemovePictureChosen();
+ }
+
+ @Override
+ public void onTakePhotoChosen() {
+ getPhotoSelectionHandler().getListener().onTakePhotoChosen();
+ }
+
+ @Override
+ public void onPickFromGalleryChosen() {
+ getPhotoSelectionHandler().getListener().onPickFromGalleryChosen();
+ }
+
+ private PhotoSelectionHandler getPhotoSelectionHandler() {
+ if (mPhotoSelectionHandler == null) {
+ mPhotoSelectionHandler = new EditorPhotoSelectionHandler(mPhotoMode);
+ }
+ return mPhotoSelectionHandler;
+ }
+
+ private ContactEditorFragment getEditorFragment() {
+ return (ContactEditorFragment) mFragment;
}
}
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
deleted file mode 100644
index ffbeb49d8..000000000
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ /dev/null
@@ -1,385 +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.activities;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsActivity;
-import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.editor.ContactEditorBaseFragment;
-import com.android.contacts.editor.ContactEditorFragment;
-import com.android.contacts.editor.EditorIntents;
-import com.android.contacts.interactions.ContactDeletionInteraction;
-import com.android.contacts.util.DialogManager;
-
-import android.app.ActionBar;
-import android.app.Dialog;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-
-import java.util.ArrayList;
-
-/**
- * Base Activity for contact editors.
- */
-abstract public class ContactEditorBaseActivity extends ContactsActivity
- implements DialogManager.DialogShowingViewActivity {
- protected static final String TAG = "ContactEditorActivity";
-
- /**
- * Intent action to edit a contact with all available field inputs displayed.
- *
- * Only used to open the "fully expanded" editor -- {@link ContactEditorActivity}.
- */
- public static final String ACTION_EDIT = "com.android.contacts.action.FULL_EDIT";
-
- /**
- * Intent action to insert a new contact with all available field inputs displayed.
- *
- * Only used to open the "fully expanded" editor -- {@link ContactEditorActivity}.
- */
- public static final String ACTION_INSERT = "com.android.contacts.action.FULL_INSERT";
-
- public static final String ACTION_JOIN_COMPLETED = "joinCompleted";
- public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
-
- public static final int RESULT_CODE_SPLIT = 2;
-
- protected int mActionBarTitleResId;
-
- /**
- * Contract for contact editors Fragments that are managed by this Activity.
- */
- public interface ContactEditor {
-
- /**
- * Modes that specify what the AsyncTask has to perform after saving
- */
- public interface SaveMode {
- /**
- * Close the editor after saving
- */
- public static final int CLOSE = 0;
-
- /**
- * Reload the data so that the user can continue editing
- */
- public static final int RELOAD = 1;
-
- /**
- * Split the contact after saving
- */
- public static final int SPLIT = 2;
-
- /**
- * Join another contact after saving
- */
- public static final int JOIN = 3;
-
- /**
- * Navigate to the compact editor view after saving.
- */
- public static final int COMPACT = 4;
- }
-
- /**
- * The status of the contact editor.
- */
- public interface Status {
- /**
- * The loader is fetching data
- */
- public static final int LOADING = 0;
-
- /**
- * Not currently busy. We are waiting for the user to enter data
- */
- public static final int EDITING = 1;
-
- /**
- * The data is currently being saved. This is used to prevent more
- * auto-saves (they shouldn't overlap)
- */
- public static final int SAVING = 2;
-
- /**
- * Prevents any more saves. This is used if in the following cases:
- * - After Save/Close
- * - After Revert
- * - After the user has accepted an edit suggestion
- * - After the user chooses to expand the compact editor
- */
- public static final int CLOSING = 3;
-
- /**
- * Prevents saving while running a child activity.
- */
- public static final int SUB_ACTIVITY = 4;
- }
-
- /**
- * Sets the hosting Activity that will receive callbacks from the contact editor.
- */
- void setListener(ContactEditorBaseFragment.Listener listener);
-
- /**
- * Initialize the contact editor.
- */
- void load(String action, Uri lookupUri, Bundle intentExtras);
-
- /**
- * Applies extras from the hosting Activity to the first writable raw contact.
- */
- void setIntentExtras(Bundle extras);
-
- /**
- * Saves or creates the contact based on the mode, and if successful
- * finishes the activity.
- */
- boolean save(int saveMode);
-
- /**
- * If there are no unsaved changes, just close the editor, otherwise the user is prompted
- * before discarding unsaved changes.
- */
- boolean revert();
-
- /**
- * Invoked after the contact is saved.
- */
- void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
- Uri contactLookupUri, Long joinContactId);
-
- /**
- * Invoked after the contact is joined.
- */
- void onJoinCompleted(Uri uri);
- }
-
- /**
- * Boolean intent key that specifies that this activity should finish itself
- * (instead of launching a new view intent) after the editor changes have been
- * saved.
- */
- public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED =
- "finishActivityOnSaveCompleted";
-
- protected ContactEditor mFragment;
- private boolean mFinishActivityOnSaveCompleted;
-
- private DialogManager mDialogManager = new DialogManager(this);
-
- @Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
-
- final Intent intent = getIntent();
- final String action = intent.getAction();
-
- // Determine whether or not this activity should be finished after the user is done
- // editing the contact or if this activity should launch another activity to view the
- // contact's details.
- mFinishActivityOnSaveCompleted = intent.getBooleanExtra(
- INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, false);
-
- // The only situation where action could be ACTION_JOIN_COMPLETED is if the
- // user joined the contact with another and closed the activity before
- // the save operation was completed. The activity should remain closed then.
- if (ACTION_JOIN_COMPLETED.equals(action)) {
- finish();
- return;
- }
-
- if (ACTION_SAVE_COMPLETED.equals(action)) {
- finish();
- return;
- }
-
- ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- if (Intent.ACTION_EDIT.equals(action) || ACTION_EDIT.equals(action)) {
- mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
- } else {
- mActionBarTitleResId = R.string.contact_editor_title_new_contact;
- }
- actionBar.setTitle(getResources().getString(mActionBarTitleResId));
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
- }
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
- final View currentFocus = getCurrentFocus();
- if (imm != null && currentFocus != null) {
- imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
- }
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
-
- if (mFragment == null) {
- return;
- }
-
- String action = intent.getAction();
- if (Intent.ACTION_EDIT.equals(action) || ACTION_EDIT.equals(action)) {
- mFragment.setIntentExtras(intent.getExtras());
- } else if (ACTION_SAVE_COMPLETED.equals(action)) {
- mFragment.onSaveCompleted(true,
- intent.getIntExtra(ContactEditorFragment.SAVE_MODE_EXTRA_KEY,
- ContactEditor.SaveMode.CLOSE),
- intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
- intent.getData(),
- intent.getLongExtra(ContactEditorFragment.JOIN_CONTACT_ID_EXTRA_KEY, -1));
- } else if (ACTION_JOIN_COMPLETED.equals(action)) {
- mFragment.onJoinCompleted(intent.getData());
- }
- }
-
- @Override
- protected Dialog onCreateDialog(int id, Bundle args) {
- if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, args);
-
- // Nobody knows about the Dialog
- Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
- return null;
- }
-
- @Override
- public void onBackPressed() {
- if (mFragment != null) {
- mFragment.revert();
- }
- }
-
- protected final ContactEditorBaseFragment.Listener mFragmentListener =
- new ContactEditorBaseFragment.Listener() {
-
- @Override
- public void onDeleteRequested(Uri contactUri) {
- ContactDeletionInteraction.start(ContactEditorBaseActivity.this, contactUri, true);
- }
-
- @Override
- public void onReverted() {
- finish();
- }
-
- @Override
- public void onSaveFinished(Intent resultIntent) {
- if (mFinishActivityOnSaveCompleted) {
- setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
- } else if (resultIntent != null) {
- ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this,
- resultIntent);
- }
- finish();
- }
-
- @Override
- public void onContactSplit(Uri newLookupUri) {
- setResult(RESULT_CODE_SPLIT, /* data */ null);
- finish();
- }
-
- @Override
- public void onContactNotFound() {
- finish();
- }
-
- @Override
- public void onEditOtherContactRequested(
- Uri contactLookupUri, ArrayList<ContentValues> values) {
- final Intent intent = EditorIntents.createEditOtherContactIntent(
- contactLookupUri, values);
- ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this, intent);
- finish();
- }
-
- @Override
- public void onCustomCreateContactActivityRequested(AccountWithDataSet account,
- Bundle intentExtras) {
- final AccountTypeManager accountTypes =
- AccountTypeManager.getInstance(ContactEditorBaseActivity.this);
- final AccountType accountType = accountTypes.getAccountType(
- account.type, account.dataSet);
-
- Intent intent = new Intent();
- intent.setClassName(accountType.syncAdapterPackageName,
- accountType.getCreateContactActivityClassName());
- intent.setAction(Intent.ACTION_INSERT);
- intent.setType(Contacts.CONTENT_ITEM_TYPE);
- if (intentExtras != null) {
- intent.putExtras(intentExtras);
- }
- intent.putExtra(RawContacts.ACCOUNT_NAME, account.name);
- intent.putExtra(RawContacts.ACCOUNT_TYPE, account.type);
- intent.putExtra(RawContacts.DATA_SET, account.dataSet);
- intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- startActivity(intent);
- finish();
- }
-
- @Override
- public void onCustomEditContactActivityRequested(AccountWithDataSet account,
- Uri rawContactUri, Bundle intentExtras, boolean redirect) {
- final AccountTypeManager accountTypes =
- AccountTypeManager.getInstance(ContactEditorBaseActivity.this);
- final AccountType accountType = accountTypes.getAccountType(
- account.type, account.dataSet);
-
- Intent intent = new Intent();
- intent.setClassName(accountType.syncAdapterPackageName,
- accountType.getEditContactActivityClassName());
- intent.setAction(Intent.ACTION_EDIT);
- intent.setData(rawContactUri);
- if (intentExtras != null) {
- intent.putExtras(intentExtras);
- }
-
- if (redirect) {
- intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- startActivity(intent);
- finish();
- } else {
- startActivity(intent);
- }
- }
- };
-
- @Override
- public DialogManager getDialogManager() {
- return mDialogManager;
- }
-}
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
new file mode 100644
index 000000000..cf2ce9cff
--- /dev/null
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -0,0 +1,292 @@
+package com.android.contacts.activities;
+
+import android.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.app.LoaderManager;
+import android.content.ContentUris;
+import android.content.Intent;
+import android.content.Loader;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.widget.Toast;
+
+import com.android.contacts.AppCompatContactsActivity;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.editor.PickRawContactDialogFragment;
+import com.android.contacts.editor.PickRawContactLoader;
+import com.android.contacts.editor.PickRawContactLoader.RawContactsMetadata;
+import com.android.contacts.editor.SplitContactConfirmationDialogFragment;
+import com.android.contacts.logging.EditorEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contactsbind.FeedbackHelper;
+
+/**
+ * Transparent springboard activity that hosts a dialog to select a raw contact to edit.
+ * All intents coming out from this activity have {@code FLAG_ACTIVITY_FORWARD_RESULT} set.
+ */
+public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity implements
+ PickRawContactDialogFragment.PickRawContactListener,
+ SplitContactConfirmationDialogFragment.Listener {
+
+ private static final String TAG = "EditorSpringBoard";
+ private static final String TAG_RAW_CONTACTS_DIALOG = "rawContactsDialog";
+ private static final String KEY_RAW_CONTACTS_METADATA = "rawContactsMetadata";
+ private static final int LOADER_RAW_CONTACTS = 1;
+
+ public static final String EXTRA_SHOW_READ_ONLY = "showReadOnly";
+
+ private Uri mUri;
+ private RawContactsMetadata mResult;
+ private MaterialPalette mMaterialPalette;
+ private boolean mHasWritableAccount;
+ private boolean mShowReadOnly;
+ private int mWritableAccountPosition;
+
+ /**
+ * The contact data loader listener.
+ */
+ protected final LoaderManager.LoaderCallbacks<RawContactsMetadata> mRawContactLoaderListener =
+ new LoaderManager.LoaderCallbacks<RawContactsMetadata>() {
+
+ @Override
+ public Loader<RawContactsMetadata> onCreateLoader(int id, Bundle args) {
+ return new PickRawContactLoader(ContactEditorSpringBoardActivity.this, mUri);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<RawContactsMetadata> loader,
+ RawContactsMetadata result) {
+ if (result == null) {
+ toastErrorAndFinish();
+ return;
+ }
+ mResult = result;
+ onLoad();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<RawContactsMetadata> loader) {
+ }
+ };
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (RequestPermissionsActivity.startPermissionActivityIfNeeded(this)) {
+ return;
+ }
+
+ final Intent intent = getIntent();
+ final String action = intent.getAction();
+
+ if (!Intent.ACTION_EDIT.equals(action)) {
+ finish();
+ return;
+ }
+ // Just for shorter variable names.
+ final String primary = ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR;
+ final String secondary =
+ ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR;
+ if (intent.hasExtra(primary) && intent.hasExtra(secondary)) {
+ mMaterialPalette = new MaterialPalette(intent.getIntExtra(primary, -1),
+ intent.getIntExtra(secondary, -1));
+ }
+ mShowReadOnly = intent.getBooleanExtra(EXTRA_SHOW_READ_ONLY, false);
+
+ mUri = intent.getData();
+ final String authority = mUri.getAuthority();
+ final String type = getContentResolver().getType(mUri);
+ // Go straight to editor if we're passed a raw contact Uri.
+ if (ContactsContract.AUTHORITY.equals(authority) &&
+ RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
+ Logger.logEditorEvent(
+ EditorEvent.EventType.SHOW_RAW_CONTACT_PICKER, /* numberRawContacts */ 0);
+ final long rawContactId = ContentUris.parseId(mUri);
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
+ } else if (android.provider.Contacts.AUTHORITY.equals(authority)) {
+ // Fail if given a legacy URI.
+ FeedbackHelper.sendFeedback(this, TAG,
+ "Legacy Uri was passed to editor.", new IllegalArgumentException());
+ toastErrorAndFinish();
+ } else {
+ getLoaderManager().initLoader(LOADER_RAW_CONTACTS, null, mRawContactLoaderListener);
+ }
+ }
+
+ @Override
+ public void onPickRawContact(long rawContactId) {
+ startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
+ }
+
+ /**
+ * Once the load is finished, decide whether to show the dialog or load the editor directly.
+ */
+ private void onLoad() {
+ maybeTrimReadOnly();
+ setHasWritableAccount();
+ if (mShowReadOnly || (mResult.rawContacts.size() > 1 && mHasWritableAccount)) {
+ showDialog();
+ } else {
+ loadEditor();
+ }
+ }
+
+ /**
+ * If not configured to show read only raw contact, trim them from the result.
+ */
+ private void maybeTrimReadOnly() {
+ mResult.showReadOnly = mShowReadOnly;
+ if (mShowReadOnly) {
+ return;
+ }
+
+ mResult.trimReadOnly(AccountTypeManager.getInstance(this));
+ }
+
+ /**
+ * Start the dialog to pick the raw contact to edit.
+ */
+ private void showDialog() {
+ final FragmentManager fm = getFragmentManager();
+ final SplitContactConfirmationDialogFragment split =
+ (SplitContactConfirmationDialogFragment) fm
+ .findFragmentByTag(SplitContactConfirmationDialogFragment.TAG);
+ // If we were showing the split confirmation before show it again.
+ if (split != null && split.isAdded()) {
+ fm.beginTransaction().show(split).commitAllowingStateLoss();
+ return;
+ }
+ PickRawContactDialogFragment pick = (PickRawContactDialogFragment) fm
+ .findFragmentByTag(TAG_RAW_CONTACTS_DIALOG);
+ if (pick == null) {
+ pick = PickRawContactDialogFragment.getInstance(mResult);
+ final FragmentTransaction ft = fm.beginTransaction();
+ ft.add(pick, TAG_RAW_CONTACTS_DIALOG);
+ // commitAllowingStateLoss is safe in this activity because the fragment entirely
+ // depends on the result of the loader. Even if we lose the fragment because the
+ // activity was in the background, when it comes back onLoadFinished will be called
+ // again which will have all the state the picker needs. This situation should be
+ // very rare, since the load should be quick.
+ ft.commitAllowingStateLoss();
+ }
+ }
+
+ /**
+ * Starts the editor for the only writable raw contact in the cursor if one exists. Otherwise,
+ * the editor is started normally and handles creation of a new writable raw contact.
+ */
+ private void loadEditor() {
+ Logger.logEditorEvent(
+ EditorEvent.EventType.SHOW_RAW_CONTACT_PICKER, /* numberRawContacts */ 0);
+ final Intent intent;
+ if (mHasWritableAccount) {
+ intent = getIntentForRawContact(mResult.rawContacts.get(mWritableAccountPosition).id);
+ } else {
+ // If the contact has only read-only raw contacts, we'll want to let the editor create
+ // the writable raw contact for it.
+ intent = EditorIntents.createEditContactIntent(this, mUri, mMaterialPalette, -1);
+ intent.setClass(this, ContactEditorActivity.class);
+ }
+ startEditorAndForwardExtras(intent);
+ }
+
+ /**
+ * Determines if this contact has a writable account.
+ */
+ private void setHasWritableAccount() {
+ mWritableAccountPosition = mResult.getIndexOfFirstWritableAccount(
+ AccountTypeManager.getInstance(this));
+ mHasWritableAccount = mWritableAccountPosition != -1;
+ }
+
+ /**
+ * Returns an intent to load the editor for the given raw contact. Sets
+ * {@code FLAG_ACTIVITY_FORWARD_RESULT} in case the activity that started us expects a result.
+ * @param rawContactId Raw contact to edit
+ */
+ private Intent getIntentForRawContact(long rawContactId) {
+ final Intent intent = EditorIntents.createEditContactIntentForRawContact(
+ this, mUri, rawContactId, mMaterialPalette);
+ intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ return intent;
+ }
+
+ /**
+ * Starts the given intent within the app, attaching any extras to it that were passed to us.
+ */
+ private void startEditorAndForwardExtras(Intent intent) {
+ final Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ intent.putExtras(extras);
+ }
+ ImplicitIntentsUtil.startActivityInApp(this, intent);
+ finish();
+ }
+
+ private void toastErrorAndFinish() {
+ Toast.makeText(ContactEditorSpringBoardActivity.this,
+ R.string.editor_failed_to_load, Toast.LENGTH_SHORT).show();
+ setResult(RESULT_CANCELED, null);
+ finish();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // Ignore failed requests
+ if (resultCode != Activity.RESULT_OK) {
+ finish();
+ }
+ if (data != null) {
+ final Intent intent = ContactSaveService.createJoinContactsIntent(
+ this, mResult.contactId, ContentUris.parseId(data.getData()),
+ QuickContactActivity.class, Intent.ACTION_VIEW);
+ startService(intent);
+ finish();
+ }
+ }
+
+ @Override
+ public void onSplitContactConfirmed(boolean hasPendingChanges) {
+ final long[][] rawContactIds = getRawContactIds();
+ final Intent intent = ContactSaveService.createHardSplitContactIntent(this, rawContactIds);
+ startService(intent);
+ finish();
+ }
+
+ @Override
+ public void onSplitContactCanceled() {
+ finish();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putParcelable(KEY_RAW_CONTACTS_METADATA, mResult);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ mResult = savedInstanceState.getParcelable(KEY_RAW_CONTACTS_METADATA);
+ }
+
+ private long[][] getRawContactIds() {
+ final long[][] result = new long[mResult.rawContacts.size()][1];
+ for (int i = 0; i < mResult.rawContacts.size(); i++) {
+ result[i][0] = mResult.rawContacts.get(i).id;
+ }
+ return result;
+ }
+}
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index ba1e0ddda..eaa89a1ea 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -16,62 +16,64 @@
package com.android.contacts.activities;
-import android.app.ActionBar;
-import android.app.ActionBar.LayoutParams;
-import android.app.Activity;
import android.app.Fragment;
import android.content.ActivityNotFoundException;
-import android.content.Context;
import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents.Insert;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.SearchView;
-import android.widget.SearchView.OnCloseListener;
-import android.widget.SearchView.OnQueryTextListener;
+import android.widget.TextView;
import android.widget.Toast;
-import com.android.contacts.ContactsActivity;
+import com.android.contacts.AppCompatContactsActivity;
import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.list.ContactEntryListFragment;
import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.list.ContactEntryListFragment;
import com.android.contacts.list.ContactPickerFragment;
import com.android.contacts.list.ContactsIntentResolver;
import com.android.contacts.list.ContactsRequest;
-import com.android.contacts.common.list.DirectoryListLoader;
+import com.android.contacts.list.DirectoryListLoader;
import com.android.contacts.list.EmailAddressPickerFragment;
+import com.android.contacts.list.GroupMemberPickerFragment;
import com.android.contacts.list.JoinContactListFragment;
import com.android.contacts.list.LegacyPhoneNumberPickerFragment;
+import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
+import com.android.contacts.list.MultiSelectEmailAddressesListFragment;
+import com.android.contacts.list.MultiSelectPhoneNumbersListFragment;
import com.android.contacts.list.OnContactPickerActionListener;
import com.android.contacts.list.OnEmailAddressPickerActionListener;
-import com.android.contacts.list.UiIntentActions;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.contacts.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.list.OnPostalAddressPickerActionListener;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
+import com.android.contacts.list.PhoneNumberPickerFragment;
import com.android.contacts.list.PostalAddressPickerFragment;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.ViewUtil;
-import java.util.Set;
+import java.util.ArrayList;
/**
* Displays a list of contacts (or phone numbers or postal addresses) for the
* purposes of selecting one.
*/
-public class ContactSelectionActivity extends ContactsActivity
- implements View.OnCreateContextMenuListener, OnQueryTextListener, OnClickListener,
- OnCloseListener, OnFocusChangeListener {
- private static final String TAG = "ContactSelectionActivity";
+public class ContactSelectionActivity extends AppCompatContactsActivity implements
+ View.OnCreateContextMenuListener, ActionBarAdapter.Listener, OnClickListener,
+ OnFocusChangeListener, OnCheckBoxListActionListener {
+ private static final String TAG = "ContactSelection";
private static final String KEY_ACTION_CODE = "actionCode";
private static final String KEY_SEARCH_MODE = "searchMode";
@@ -85,8 +87,9 @@ public class ContactSelectionActivity extends ContactsActivity
private boolean mIsSearchSupported;
private ContactsRequest mRequest;
- private SearchView mSearchView;
- private View mSearchViewContainer;
+
+ private ActionBarAdapter mActionBarAdapter;
+ private Toolbar mToolbar;
public ContactSelectionActivity() {
mIntentResolver = new ContactsIntentResolver(this);
@@ -104,9 +107,7 @@ public class ContactSelectionActivity extends ContactsActivity
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
- return;
- }
+ RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
if (savedState != null) {
mActionCode = savedState.getInt(KEY_ACTION_CODE);
@@ -121,8 +122,6 @@ public class ContactSelectionActivity extends ContactsActivity
return;
}
- configureActivityTitle();
-
setContentView(R.layout.contact_picker);
if (mActionCode != mRequest.getActionCode()) {
@@ -130,80 +129,58 @@ public class ContactSelectionActivity extends ContactsActivity
configureListFragment();
}
- prepareSearchViewAndActionBar();
+ prepareSearchViewAndActionBar(savedState);
+ configureActivityTitle();
}
- private void prepareSearchViewAndActionBar() {
- final ActionBar actionBar = getActionBar();
- mSearchViewContainer = LayoutInflater.from(actionBar.getThemedContext())
- .inflate(R.layout.custom_action_bar, null);
- mSearchView = (SearchView) mSearchViewContainer.findViewById(R.id.search_view);
-
- // Postal address pickers (and legacy pickers) don't support search, so just show
- // "HomeAsUp" button and title.
- if (mRequest.getActionCode() == ContactsRequest.ACTION_PICK_POSTAL ||
- mRequest.isLegacyCompatibilityMode()) {
- mSearchView.setVisibility(View.GONE);
- if (actionBar != null) {
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
- }
- mIsSearchSupported = false;
- configureSearchMode();
- return;
- }
+ public boolean isSelectionMode() {
+ return mActionBarAdapter.isSelectionMode();
+ }
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
+ public boolean isSearchMode() {
+ return mActionBarAdapter.isSearchMode();
+ }
- // In order to make the SearchView look like "shown via search menu", we need to
- // manually setup its state. See also DialtactsActivity.java and ActionBarAdapter.java.
- mSearchView.setIconifiedByDefault(true);
- mSearchView.setQueryHint(getString(R.string.hint_findContacts));
- mSearchView.setIconified(false);
- mSearchView.setFocusable(true);
+ private void prepareSearchViewAndActionBar(Bundle savedState) {
+ mToolbar = getView(R.id.toolbar);
+ setSupportActionBar(mToolbar);
- mSearchView.setOnQueryTextListener(this);
- mSearchView.setOnCloseListener(this);
- mSearchView.setOnQueryTextFocusChangeListener(this);
+ // Add a shadow under the toolbar.
+ ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
- actionBar.setCustomView(mSearchViewContainer,
- new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
- actionBar.setDisplayShowCustomEnabled(true);
+ mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(), mToolbar,
+ R.string.enter_contact_name);
+ mActionBarAdapter.setShowHomeIcon(true);
+ mActionBarAdapter.setShowHomeAsUp(true);
+ mActionBarAdapter.initialize(savedState, mRequest);
- mIsSearchSupported = true;
+ // Postal address pickers (and legacy pickers) don't support search, so just show
+ // "HomeAsUp" button and title.
+ mIsSearchSupported = mRequest.getActionCode() != ContactsRequest.ACTION_PICK_POSTAL
+ && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_EMAILS
+ && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_PHONES
+ && !mRequest.isLegacyCompatibilityMode();
configureSearchMode();
}
private void configureSearchMode() {
- final ActionBar actionBar = getActionBar();
- if (mIsSearchMode) {
- actionBar.setDisplayShowTitleEnabled(false);
- mSearchViewContainer.setVisibility(View.VISIBLE);
- mSearchView.requestFocus();
- } else {
- actionBar.setDisplayShowTitleEnabled(true);
- mSearchViewContainer.setVisibility(View.GONE);
- mSearchView.setQuery(null, true);
- }
+ mActionBarAdapter.setSearchMode(mIsSearchMode);
invalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- // Go back to previous screen, intending "cancel"
- setResult(RESULT_CANCELED);
- onBackPressed();
- return true;
- case R.id.menu_search:
- mIsSearchMode = !mIsSearchMode;
- configureSearchMode();
- return true;
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {// Go back to previous screen, intending "cancel"
+ setResult(RESULT_CANCELED);
+ onBackPressed();
+ } else if (id == R.id.menu_search) {
+ mIsSearchMode = !mIsSearchMode;
+ configureSearchMode();
+ } else {
+ return super.onOptionsItemSelected(item);
}
- return super.onOptionsItemSelected(item);
+ return true;
}
@Override
@@ -211,66 +188,75 @@ public class ContactSelectionActivity extends ContactsActivity
super.onSaveInstanceState(outState);
outState.putInt(KEY_ACTION_CODE, mActionCode);
outState.putBoolean(KEY_SEARCH_MODE, mIsSearchMode);
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.onSaveInstanceState(outState);
+ }
}
private void configureActivityTitle() {
if (!TextUtils.isEmpty(mRequest.getActivityTitle())) {
- setTitle(mRequest.getActivityTitle());
+ getSupportActionBar().setTitle(mRequest.getActivityTitle());
return;
}
-
+ int titleResId = -1;
int actionCode = mRequest.getActionCode();
switch (actionCode) {
case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
- setTitle(R.string.contactInsertOrEditActivityTitle);
+ titleResId = R.string.contactInsertOrEditActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_CONTACT: {
- setTitle(R.string.contactPickerActivityTitle);
+ titleResId = R.string.contactPickerActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
- setTitle(R.string.contactPickerActivityTitle);
+ titleResId = R.string.contactPickerActivityTitle;
break;
}
-
case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
- setTitle(R.string.shortcutActivityTitle);
+ titleResId = R.string.shortcutActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_PHONE: {
- setTitle(R.string.contactPickerActivityTitle);
+ titleResId = R.string.contactPickerActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_EMAIL: {
- setTitle(R.string.contactPickerActivityTitle);
+ titleResId = R.string.contactPickerActivityTitle;
+ break;
+ }
+ case ContactsRequest.ACTION_PICK_PHONES: {
+ titleResId = R.string.pickerSelectContactsActivityTitle;
+ break;
+ }
+ case ContactsRequest.ACTION_PICK_EMAILS: {
+ titleResId = R.string.pickerSelectContactsActivityTitle;
break;
}
-
case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
- setTitle(R.string.callShortcutActivityTitle);
+ titleResId = R.string.shortcutActivityTitle;
break;
}
-
case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
- setTitle(R.string.messageShortcutActivityTitle);
+ titleResId = R.string.shortcutActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_POSTAL: {
- setTitle(R.string.contactPickerActivityTitle);
+ titleResId = R.string.contactPickerActivityTitle;
break;
}
-
case ContactsRequest.ACTION_PICK_JOIN: {
- setTitle(R.string.titleJoinContactDataWith);
+ titleResId = R.string.titleJoinContactDataWith;
+ break;
+ }
+ case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: {
+ titleResId = R.string.groupMemberPickerActivityTitle;
break;
}
}
+ if (titleResId > 0) {
+ getSupportActionBar().setTitle(titleResId);
+ }
}
/**
@@ -283,6 +269,7 @@ public class ContactSelectionActivity extends ContactsActivity
fragment.setEditMode(true);
fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
fragment.setCreateContactEnabled(!mRequest.isSearchMode());
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT);
mListFragment = fragment;
break;
}
@@ -290,7 +277,8 @@ public class ContactSelectionActivity extends ContactsActivity
case ContactsRequest.ACTION_DEFAULT:
case ContactsRequest.ACTION_PICK_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
- fragment.setIncludeProfile(mRequest.shouldIncludeProfile());
+ fragment.setIncludeFavorites(mRequest.shouldIncludeFavorites());
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT);
mListFragment = fragment;
break;
}
@@ -298,6 +286,7 @@ public class ContactSelectionActivity extends ContactsActivity
case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setCreateContactEnabled(!mRequest.isSearchMode());
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT);
mListFragment = fragment;
break;
}
@@ -305,25 +294,39 @@ public class ContactSelectionActivity extends ContactsActivity
case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setShortcutRequested(true);
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
mListFragment = fragment;
break;
}
case ContactsRequest.ACTION_PICK_PHONE: {
PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
+ fragment.setListType(ListEvent.ListType.PICK_PHONE);
mListFragment = fragment;
break;
}
case ContactsRequest.ACTION_PICK_EMAIL: {
mListFragment = new EmailAddressPickerFragment();
+ mListFragment.setListType(ListEvent.ListType.PICK_EMAIL);
+ break;
+ }
+
+ case ContactsRequest.ACTION_PICK_PHONES: {
+ mListFragment = new MultiSelectPhoneNumbersListFragment();
+ mListFragment.setArguments(getIntent().getExtras());
break;
}
+ case ContactsRequest.ACTION_PICK_EMAILS: {
+ mListFragment = new MultiSelectEmailAddressesListFragment();
+ mListFragment.setArguments(getIntent().getExtras());
+ break;
+ }
case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
fragment.setShortcutAction(Intent.ACTION_CALL);
-
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
mListFragment = fragment;
break;
}
@@ -331,14 +334,14 @@ public class ContactSelectionActivity extends ContactsActivity
case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
fragment.setShortcutAction(Intent.ACTION_SENDTO);
-
+ fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
mListFragment = fragment;
break;
}
case ContactsRequest.ACTION_PICK_POSTAL: {
PostalAddressPickerFragment fragment = new PostalAddressPickerFragment();
-
+ fragment.setListType(ListEvent.ListType.PICK_POSTAL);
mListFragment = fragment;
break;
}
@@ -346,10 +349,26 @@ public class ContactSelectionActivity extends ContactsActivity
case ContactsRequest.ACTION_PICK_JOIN: {
JoinContactListFragment joinFragment = new JoinContactListFragment();
joinFragment.setTargetContactId(getTargetContactId());
+ joinFragment.setListType(ListEvent.ListType.PICK_JOIN);
mListFragment = joinFragment;
break;
}
+ case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: {
+ final String accountName = getIntent().getStringExtra(
+ UiIntentActions.GROUP_ACCOUNT_NAME);
+ final String accountType = getIntent().getStringExtra(
+ UiIntentActions.GROUP_ACCOUNT_TYPE);
+ final String accountDataSet = getIntent().getStringExtra(
+ UiIntentActions.GROUP_ACCOUNT_DATA_SET);
+ final ArrayList<String> contactIds = getIntent().getStringArrayListExtra(
+ UiIntentActions.GROUP_CONTACT_IDS);
+ mListFragment = GroupMemberPickerFragment.newInstance(
+ accountName, accountType, accountDataSet, contactIds);
+ mListFragment.setListType(ListEvent.ListType.PICK_GROUP_MEMBERS);
+ break;
+ }
+
default:
throw new IllegalStateException("Invalid action code: " + mActionCode);
}
@@ -386,14 +405,103 @@ public class ContactSelectionActivity extends ContactsActivity
} else if (mListFragment instanceof EmailAddressPickerFragment) {
((EmailAddressPickerFragment) mListFragment).setOnEmailAddressPickerActionListener(
new EmailAddressPickerActionListener());
+ } else if (mListFragment instanceof MultiSelectEmailAddressesListFragment) {
+ ((MultiSelectEmailAddressesListFragment) mListFragment).setCheckBoxListListener(this);
+ } else if (mListFragment instanceof MultiSelectPhoneNumbersListFragment) {
+ ((MultiSelectPhoneNumbersListFragment) mListFragment).setCheckBoxListListener(this);
} else if (mListFragment instanceof JoinContactListFragment) {
((JoinContactListFragment) mListFragment).setOnContactPickerActionListener(
new JoinContactActionListener());
+ } else if (mListFragment instanceof GroupMemberPickerFragment) {
+ ((GroupMemberPickerFragment) mListFragment).setListener(
+ new GroupMemberPickerListener());
+ getMultiSelectListFragment().setCheckBoxListListener(this);
} else {
throw new IllegalStateException("Unsupported list fragment type: " + mListFragment);
}
}
+ private MultiSelectContactsListFragment getMultiSelectListFragment() {
+ if (mListFragment instanceof MultiSelectContactsListFragment) {
+ return (MultiSelectContactsListFragment) mListFragment;
+ }
+ return null;
+ }
+
+ @Override
+ public void onAction(int action) {
+ switch (action) {
+ case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
+ mIsSearchMode = true;
+ configureSearchMode();
+ break;
+ case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
+ final String queryString = mActionBarAdapter.getQueryString();
+ mListFragment.setQueryString(queryString, /* delaySelection */ false);
+ break;
+ case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+ if (getMultiSelectListFragment() != null) {
+ getMultiSelectListFragment().displayCheckBoxes(true);
+ }
+ invalidateOptionsMenu();
+ break;
+ case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
+ mListFragment.setQueryString("", /* delaySelection */ false);
+ mActionBarAdapter.setSearchMode(false);
+ if (getMultiSelectListFragment() != null) {
+ getMultiSelectListFragment().displayCheckBoxes(false);
+ }
+ invalidateOptionsMenu();
+ break;
+ }
+ }
+
+ @Override
+ public void onUpButtonPressed() {
+ onBackPressed();
+ }
+
+ @Override
+ public void onStartDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(true);
+ }
+
+ @Override
+ public void onSelectedContactIdsChanged() {
+ if (mListFragment instanceof MultiSelectContactsListFragment) {
+ final int count = getMultiSelectListFragment().getSelectedContactIds().size();
+ mActionBarAdapter.setSelectionCount(count);
+ updateAddContactsButton(count);
+
+ // Show or hide the multi select "Done" button
+ invalidateOptionsMenu();
+ }
+ }
+
+ private void updateAddContactsButton(int count) {
+ final TextView textView = (TextView) mActionBarAdapter.getSelectionContainer()
+ .findViewById(R.id.add_contacts);
+ if (count > 0) {
+ textView.setVisibility(View.VISIBLE);
+ textView.setAllCaps(true);
+ textView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final long[] contactIds =
+ getMultiSelectListFragment().getSelectedContactIdsArray();
+ returnSelectedContacts(contactIds);
+ }
+ });
+ } else {
+ textView.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void onStopDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(false);
+ }
+
private final class ContactPickerActionListener implements OnContactPickerActionListener {
@Override
public void onCreateNewContactAction() {
@@ -403,7 +511,8 @@ public class ContactSelectionActivity extends ContactsActivity
@Override
public void onEditContactAction(Uri contactLookupUri) {
startActivityAndForwardResult(EditorIntents.createEditContactIntent(
- contactLookupUri, /* materialPalette =*/ null, /* photoId =*/ -1));
+ ContactSelectionActivity.this, contactLookupUri, /* materialPalette =*/ null,
+ /* photoId =*/ -1));
}
@Override
@@ -462,6 +571,27 @@ public class ContactSelectionActivity extends ContactsActivity
}
}
+ private final class GroupMemberPickerListener implements GroupMemberPickerFragment.Listener {
+
+ @Override
+ public void onGroupMemberClicked(long contactId) {
+ final Intent intent = new Intent();
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, contactId);
+ returnPickerResult(intent);
+ }
+
+ @Override
+ public void onSelectGroupMembers() {
+ mActionBarAdapter.setSelectionMode(true);
+ }
+ }
+
+ private void returnSelectedContacts(long[] contactIds) {
+ final Intent intent = new Intent();
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY, contactIds);
+ returnPickerResult(intent);
+ }
+
private final class PostalAddressPickerActionListener implements
OnPostalAddressPickerActionListener {
@Override
@@ -487,7 +617,7 @@ public class ContactSelectionActivity extends ContactsActivity
intent.putExtras(extras);
}
try {
- startActivity(intent);
+ ImplicitIntentsUtil.startActivityInApp(ContactSelectionActivity.this, intent);
} catch (ActivityNotFoundException e) {
Log.e(TAG, "startActivity() failed: " + e);
Toast.makeText(ContactSelectionActivity.this, R.string.missing_app,
@@ -497,31 +627,10 @@ public class ContactSelectionActivity extends ContactsActivity
}
@Override
- public boolean onQueryTextChange(String newText) {
- mListFragment.setQueryString(newText, true);
- return false;
- }
-
- @Override
- public boolean onQueryTextSubmit(String query) {
- return false;
- }
-
- @Override
- public boolean onClose() {
- if (!TextUtils.isEmpty(mSearchView.getQuery())) {
- mSearchView.setQuery(null, true);
- }
- return true;
- }
-
- @Override
public void onFocusChange(View view, boolean hasFocus) {
- switch (view.getId()) {
- case R.id.search_view: {
- if (hasFocus) {
- showInputMethod(mSearchView.findFocus());
- }
+ if (view.getId() == R.id.search_view) {
+ if (hasFocus) {
+ mActionBarAdapter.setFocusOnSearchView();
}
}
}
@@ -540,11 +649,8 @@ public class ContactSelectionActivity extends ContactsActivity
@Override
public void onClick(View view) {
- switch (view.getId()) {
- case R.id.floating_action_button: {
- startCreateNewContactActivity();
- break;
- }
+ if (view.getId() == R.id.floating_action_button) {
+ startCreateNewContactActivity();
}
}
@@ -564,20 +670,11 @@ public class ContactSelectionActivity extends ContactsActivity
private void startCreateNewContactActivity() {
Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- intent.putExtra(ContactEditorActivity.INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
+ intent.putExtra(ContactEditorActivity.
+ INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
startActivityAndForwardResult(intent);
}
- private void showInputMethod(View view) {
- final InputMethodManager imm = (InputMethodManager)
- getSystemService(Context.INPUT_METHOD_SERVICE);
- if (imm != null) {
- if (!imm.showSoftInput(view, 0)) {
- Log.w(TAG, "Failed to show soft input method.");
- }
- }
- }
-
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -587,6 +684,12 @@ public class ContactSelectionActivity extends ContactsActivity
final MenuItem searchItem = menu.findItem(R.id.menu_search);
searchItem.setVisible(!mIsSearchMode && mIsSearchSupported);
+
+ final Drawable searchIcon = searchItem.getIcon();
+ if (searchIcon != null) {
+ searchIcon.mutate().setColorFilter(ContextCompat.getColor(this,
+ R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
+ }
return true;
}
@@ -596,7 +699,12 @@ public class ContactSelectionActivity extends ContactsActivity
return;
}
- if (mIsSearchMode) {
+ if (isSelectionMode()) {
+ mActionBarAdapter.setSelectionMode(false);
+ if (getMultiSelectListFragment() != null) {
+ getMultiSelectListFragment().displayCheckBoxes(false);
+ }
+ } else if (mIsSearchMode) {
mIsSearchMode = false;
configureSearchMode();
} else {
diff --git a/src/com/android/contacts/activities/GroupDetailActivity.java b/src/com/android/contacts/activities/GroupDetailActivity.java
deleted file mode 100644
index 394e5e550..000000000
--- a/src/com/android/contacts/activities/GroupDetailActivity.java
+++ /dev/null
@@ -1,175 +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.activities;
-
-import android.app.ActionBar;
-import android.content.ContentUris;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Groups;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-
-import com.android.contacts.ContactsActivity;
-import com.android.contacts.R;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.group.GroupDetailDisplayUtils;
-import com.android.contacts.group.GroupDetailFragment;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
-public class GroupDetailActivity extends ContactsActivity {
-
- private static final String TAG = "GroupDetailActivity";
-
- private boolean mShowGroupSourceInActionBar;
-
- private String mAccountTypeString;
- private String mDataSet;
-
- private GroupDetailFragment mFragment;
-
- @Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
-
- // TODO: Create Intent Resolver to handle the different ways users can get to this list.
- // TODO: Handle search or key down
-
- setContentView(R.layout.group_detail_activity);
-
- mShowGroupSourceInActionBar = getResources().getBoolean(
- R.bool.config_show_group_action_in_action_bar);
-
- mFragment = (GroupDetailFragment) getFragmentManager().findFragmentById(
- R.id.group_detail_fragment);
- mFragment.setListener(mFragmentListener);
- mFragment.setShowGroupSourceInActionBar(mShowGroupSourceInActionBar);
- mFragment.loadGroup(getIntent().getData());
- mFragment.closeActivityAfterDelete(true);
-
- // We want the UP affordance but no app icon.
- ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE,
- ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE
- | ActionBar.DISPLAY_SHOW_HOME);
- }
- }
-
- private final GroupDetailFragment.Listener mFragmentListener =
- new GroupDetailFragment.Listener() {
-
- @Override
- public void onGroupSizeUpdated(String size) {
- getActionBar().setSubtitle(size);
- }
-
- @Override
- public void onGroupTitleUpdated(String title) {
- getActionBar().setTitle(title);
- }
-
- @Override
- public void onAccountTypeUpdated(String accountTypeString, String dataSet) {
- mAccountTypeString = accountTypeString;
- mDataSet = dataSet;
- invalidateOptionsMenu();
- }
-
- @Override
- public void onEditRequested(Uri groupUri) {
- final Intent intent = new Intent(GroupDetailActivity.this, GroupEditorActivity.class);
- intent.setData(groupUri);
- intent.setAction(Intent.ACTION_EDIT);
- startActivity(intent);
- }
-
- @Override
- public void onContactSelected(Uri contactUri) {
- Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
- ImplicitIntentsUtil.startActivityInApp(GroupDetailActivity.this, intent);
- }
-
- };
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- if (mShowGroupSourceInActionBar) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.group_source, menu);
- }
- return true;
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- if (!mShowGroupSourceInActionBar) {
- return false;
- }
- MenuItem groupSourceMenuItem = menu.findItem(R.id.menu_group_source);
- if (groupSourceMenuItem == null) {
- return false;
- }
- final AccountTypeManager manager = AccountTypeManager.getInstance(this);
- final AccountType accountType =
- manager.getAccountType(mAccountTypeString, mDataSet);
- if (TextUtils.isEmpty(mAccountTypeString)
- || TextUtils.isEmpty(accountType.getViewGroupActivity())) {
- groupSourceMenuItem.setVisible(false);
- return false;
- }
- View groupSourceView = GroupDetailDisplayUtils.getNewGroupSourceView(this);
- GroupDetailDisplayUtils.bindGroupSourceView(this, groupSourceView,
- mAccountTypeString, mDataSet);
- groupSourceView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI,
- mFragment.getGroupId());
- final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- intent.setClassName(accountType.syncAdapterPackageName,
- accountType.getViewGroupActivity());
- ImplicitIntentsUtil.startActivityInApp(GroupDetailActivity.this, intent);
- }
- });
- groupSourceMenuItem.setActionView(groupSourceView);
- groupSourceMenuItem.setVisible(true);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- Intent intent = new Intent(this, PeopleActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- finish();
- return true;
- default:
- break;
- }
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/src/com/android/contacts/activities/GroupEditorActivity.java b/src/com/android/contacts/activities/GroupEditorActivity.java
deleted file mode 100644
index b2044189f..000000000
--- a/src/com/android/contacts/activities/GroupEditorActivity.java
+++ /dev/null
@@ -1,162 +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.activities;
-
-import android.app.ActionBar;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-
-import com.android.contacts.ContactsActivity;
-import com.android.contacts.R;
-import com.android.contacts.group.GroupEditorFragment;
-import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.PhoneCapabilityTester;
-
-public class GroupEditorActivity extends ContactsActivity
- implements DialogManager.DialogShowingViewActivity {
-
- private static final String TAG = "GroupEditorActivity";
-
- public static final String ACTION_SAVE_COMPLETED = "saveCompleted";
- public static final String ACTION_ADD_MEMBER_COMPLETED = "addMemberCompleted";
- public static final String ACTION_REMOVE_MEMBER_COMPLETED = "removeMemberCompleted";
-
- private GroupEditorFragment mFragment;
-
- private DialogManager mDialogManager = new DialogManager(this);
-
- @Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
- String action = getIntent().getAction();
-
- if (ACTION_SAVE_COMPLETED.equals(action)) {
- finish();
- return;
- }
-
- setContentView(R.layout.group_editor_activity);
-
- ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- // Inflate a custom action bar that contains the "done" button for saving changes
- // to the group
- LayoutInflater inflater = (LayoutInflater) getSystemService
- (Context.LAYOUT_INFLATER_SERVICE);
- View customActionBarView = inflater.inflate(R.layout.editor_custom_action_bar,
- null);
- View saveMenuItem = customActionBarView.findViewById(R.id.save_menu_item);
- saveMenuItem.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mFragment.onDoneClicked();
- }
- });
- // Show the custom action bar but hide the home icon and title
- actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
- ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME |
- ActionBar.DISPLAY_SHOW_TITLE);
- actionBar.setCustomView(customActionBarView);
- }
-
- mFragment = (GroupEditorFragment) getFragmentManager().findFragmentById(
- R.id.group_editor_fragment);
- mFragment.setListener(mFragmentListener);
- mFragment.setContentResolver(getContentResolver());
-
- // NOTE The fragment will restore its state by itself after orientation changes, so
- // we need to do this only for a new instance.
- if (savedState == null) {
- Uri uri = Intent.ACTION_EDIT.equals(action) ? getIntent().getData() : null;
- mFragment.load(action, uri, getIntent().getExtras());
- }
- }
-
- @Override
- protected Dialog onCreateDialog(int id, Bundle args) {
- if (DialogManager.isManagedId(id)) {
- return mDialogManager.onCreateDialog(id, args);
- } else {
- // Nobody knows about the Dialog
- Log.w(TAG, "Unknown dialog requested, id: " + id + ", args: " + args);
- return null;
- }
- }
-
- @Override
- public void onBackPressed() {
- // If the change could not be saved, then revert to the default "back" button behavior.
- if (!mFragment.save()) {
- super.onBackPressed();
- }
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
-
- if (mFragment == null) {
- return;
- }
-
- String action = intent.getAction();
- if (ACTION_SAVE_COMPLETED.equals(action)) {
- mFragment.onSaveCompleted(true, intent.getData());
- }
- }
-
- private final GroupEditorFragment.Listener mFragmentListener =
- new GroupEditorFragment.Listener() {
- @Override
- public void onGroupNotFound() {
- finish();
- }
-
- @Override
- public void onReverted() {
- finish();
- }
-
- @Override
- public void onAccountsNotFound() {
- finish();
- }
-
- @Override
- public void onSaveFinished(int resultCode, Intent resultIntent) {
- if (resultIntent != null) {
- Intent intent = new Intent(GroupEditorActivity.this, GroupDetailActivity.class);
- intent.setData(resultIntent.getData());
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- finish();
- }
- }
- };
-
- @Override
- public DialogManager getDialogManager() {
- return mDialogManager;
- }
-}
diff --git a/src/com/android/contacts/activities/LicenseActivity.java b/src/com/android/contacts/activities/LicenseActivity.java
new file mode 100644
index 000000000..4ccaa93f6
--- /dev/null
+++ b/src/com/android/contacts/activities/LicenseActivity.java
@@ -0,0 +1,59 @@
+/*
+ * 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.activities;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.view.MenuItem;
+import android.webkit.WebView;
+
+import com.android.contacts.R;
+
+/**
+ * Displays the licenses for all open source libraries.
+ */
+public class LicenseActivity extends AppCompatActivity {
+ private static final String LICENSE_FILE = "file:///android_asset/licenses.html";
+ private WebView mWebView;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.licenses);
+ mWebView = (WebView) findViewById(R.id.webview);
+ mWebView.loadUrl(LICENSE_FILE);
+ final ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ mWebView.destroy();
+ super.onDestroy();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index a6c7b8b49..5a3804396 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -16,169 +16,315 @@
package com.android.contacts.activities;
+import android.accounts.Account;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
-import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.graphics.Rect;
+import android.content.IntentFilter;
+import android.content.SyncStatusObserver;
+import android.content.res.Configuration;
+import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.BlockedNumberContract;
+import android.os.Handler;
import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.ProviderStatus;
-import android.provider.ContactsContract.QuickContact;
-import android.provider.Settings;
-import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.view.PagerAdapter;
-import android.support.v4.view.ViewPager;
-import android.telecom.TelecomManager;
-import android.text.TextUtils;
+import android.support.annotation.LayoutRes;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.design.widget.Snackbar;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v4.view.GravityCompat;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.Window;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.widget.ImageButton;
import android.widget.Toast;
-import android.widget.Toolbar;
-import com.android.contacts.ContactsActivity;
+import com.android.contacts.AppCompatContactsActivity;
+import com.android.contacts.ContactSaveService;
import com.android.contacts.R;
-import com.android.contacts.activities.ActionBarAdapter.TabState;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.TelecomManagerUtil;
-import com.android.contacts.common.dialog.ClearFrequentsDialog;
-import com.android.contacts.common.interactions.ImportExportDialogFragment;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.list.ViewPagerTabs;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.preference.ContactsPreferenceActivity;
-import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.contacts.common.util.Constants;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.ViewUtil;
-import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.editor.EditorIntents;
-import com.android.contacts.interactions.ContactDeletionInteraction;
-import com.android.contacts.interactions.ContactMultiDeletionInteraction;
-import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
-import com.android.contacts.interactions.JoinContactsDialogFragment;
-import com.android.contacts.interactions.JoinContactsDialogFragment.JoinContactsListener;
-import com.android.contacts.list.ContactTileListFragment;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.drawer.DrawerFragment;
+import com.android.contacts.drawer.DrawerFragment.DrawerFragmentListener;
+import com.android.contacts.editor.ContactEditorFragment;
+import com.android.contacts.editor.SelectAccountDialogFragment;
+import com.android.contacts.group.GroupListItem;
+import com.android.contacts.group.GroupMembersFragment;
+import com.android.contacts.group.GroupNameEditDialogFragment;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.AccountFilterActivity;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.list.ContactListFilterController.ContactListFilterListener;
import com.android.contacts.list.ContactsIntentResolver;
import com.android.contacts.list.ContactsRequest;
import com.android.contacts.list.ContactsUnavailableFragment;
+import com.android.contacts.list.DefaultContactBrowseListFragment;
import com.android.contacts.list.MultiSelectContactsListFragment;
-import com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
-import com.android.contacts.list.OnContactBrowserActionListener;
-import com.android.contacts.list.OnContactsUnavailableActionListener;
import com.android.contacts.list.ProviderStatusWatcher;
import com.android.contacts.list.ProviderStatusWatcher.ProviderStatusListener;
-import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferenceActivity;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.Constants;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
+import com.android.contacts.util.SharedPreferenceUtil;
+import com.android.contacts.util.SyncUtil;
+import com.android.contacts.util.ViewUtil;
+import com.android.contacts.widget.FloatingActionButtonController;
+import com.android.contactsbind.FeatureHighlightHelper;
import com.android.contactsbind.HelpUtils;
+import com.android.contactsbind.ObjectFactory;
+import com.google.common.util.concurrent.Futures;
+
+import java.util.Collections;
import java.util.List;
-import java.util.Locale;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Displays a list to browse contacts.
*/
-public class PeopleActivity extends ContactsActivity implements
- View.OnCreateContextMenuListener,
- View.OnClickListener,
- ActionBarAdapter.Listener,
- DialogManager.DialogShowingViewActivity,
- ContactListFilterController.ContactListFilterListener,
- ProviderStatusListener,
- MultiContactDeleteListener,
- JoinContactsListener {
+public class PeopleActivity extends AppCompatContactsActivity implements
+ DrawerFragmentListener,
+ SelectAccountDialogFragment.Listener {
+
+ /** Possible views of Contacts app. */
+ public enum ContactsView {
+ NONE,
+ ALL_CONTACTS,
+ ASSISTANT,
+ GROUP_VIEW,
+ ACCOUNT_VIEW,
+ }
private static final String TAG = "PeopleActivity";
+ private static final String TAG_ALL = "contacts-all";
+ private static final String TAG_UNAVAILABLE = "contacts-unavailable";
+ private static final String TAG_GROUP_VIEW = "contacts-groups";
+ private static final String TAG_SELECT_ACCOUNT_DIALOG = "selectAccountDialog";
+ private static final String TAG_GROUP_NAME_EDIT_DIALOG = "groupNameEditDialog";
- private static final String ENABLE_DEBUG_OPTIONS_HIDDEN_CODE = "debug debug!";
+ public static final String TAG_ASSISTANT = "contacts-assistant";
+ public static final String TAG_SECOND_LEVEL = "second-level";
+ public static final String TAG_THIRD_LEVEL = "third-level";
+ public static final String TAG_ASSISTANT_HELPER = "assistant-helper";
+ public static final String TAG_DUPLICATES = "DuplicatesFragment";
+ public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
- // These values needs to start at 2. See {@link ContactEntryListFragment}.
- private static final int SUBACTIVITY_ACCOUNT_FILTER = 2;
+ private static final String KEY_GROUP_URI = "groupUri";
+ private static final String KEY_CONTACTS_VIEW = "contactsView";
+ private static final String KEY_NEW_GROUP_ACCOUNT = "newGroupAccount";
- private final DialogManager mDialogManager = new DialogManager(this);
+ private static final long DRAWER_CLOSE_DELAY = 300L;
private ContactsIntentResolver mIntentResolver;
private ContactsRequest mRequest;
+ private AccountTypeManager mAccountTypeManager;
- private ActionBarAdapter mActionBarAdapter;
private FloatingActionButtonController mFloatingActionButtonController;
private View mFloatingActionButtonContainer;
private boolean wasLastFabAnimationScaleIn = false;
- private ContactTileListFragment.Listener mFavoritesFragmentListener =
- new StrequentContactListFragmentListener();
-
- private ContactListFilterController mContactListFilterController;
-
- private ContactsUnavailableFragment mContactsUnavailableFragment;
private ProviderStatusWatcher mProviderStatusWatcher;
private Integer mProviderStatus;
- private boolean mOptionsMenuContactsAvailable;
+ private BroadcastReceiver mSaveServiceListener;
+
+ private boolean mShouldSwitchToGroupView;
+
+ private ContactsView mCurrentView;
+
+ private CoordinatorLayout mLayoutRoot;
/**
* Showing a list of Contacts. Also used for showing search results in search mode.
*/
- private MultiSelectContactsListFragment mAllFragment;
- private ContactTileListFragment mFavoritesFragment;
-
- /** ViewPager for swipe */
- private ViewPager mTabPager;
- private ViewPagerTabs mViewPagerTabs;
- private TabPagerAdapter mTabPagerAdapter;
- private String[] mTabTitles;
- private final TabPagerListener mTabPagerListener = new TabPagerListener();
+ private DefaultContactBrowseListFragment mContactsListFragment;
- private boolean mEnableDebugMenuOptions;
+ private GroupMembersFragment mMembersFragment;
+ private Uri mGroupUri;
/**
* True if this activity instance is a re-created one. i.e. set true after orientation change.
- * This is set in {@link #onCreate} for later use in {@link #onStart}.
*/
private boolean mIsRecreatedInstance;
- /**
- * If {@link #configureFragments(boolean)} is already called. Used to avoid calling it twice
- * in {@link #onStart}.
- * (This initialization only needs to be done once in onStart() when the Activity was just
- * created from scratch -- i.e. onCreate() was just called)
- */
- private boolean mFragmentInitialized;
-
- /**
- * This is to disable {@link #onOptionsItemSelected} when we trying to stop the activity.
- */
- private boolean mDisableOptionItemSelected;
+ private boolean mShouldSwitchToAllContacts;
/** Sequential ID assigned to each instance; used for logging */
private final int mInstanceId;
private static final AtomicInteger sNextInstanceId = new AtomicInteger();
+ private ContactListFilterController mContactListFilterController;
+
+ /** Navigation drawer related */
+ private DrawerLayout mDrawerLayout;
+ private DrawerFragment mDrawerFragment;
+ private ContactsActionBarDrawerToggle mToggle;
+ private Toolbar mToolbar;
+
+ // The account the new group will be created under.
+ private AccountWithDataSet mNewGroupAccount;
+
+ private Object mStatusChangeListenerHandle;
+
+ private final Handler mHandler = new Handler();
+
+ private SyncStatusObserver mSyncStatusObserver = new SyncStatusObserver() {
+ public void onStatusChanged(int which) {
+ mHandler.post(new Runnable() {
+ public void run() {
+ onSyncStateUpdated();
+ }
+ });
+ }
+ };
+
+ // Update sync status for accounts in current ContactListFilter
+ private void onSyncStateUpdated() {
+ if (isListFragmentInSearchMode() || isListFragmentInSelectionMode()) {
+ return;
+ }
+
+ final ContactListFilter filter = mContactListFilterController.getFilter();
+ if (filter != null) {
+ final SwipeRefreshLayout swipeRefreshLayout =
+ mContactsListFragment.getSwipeRefreshLayout();
+ if (swipeRefreshLayout == null) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Can not load swipeRefreshLayout, swipeRefreshLayout is null");
+ }
+ return;
+ }
+
+ final List<AccountWithDataSet> accounts;
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT &&
+ filter.isGoogleAccountType()) {
+ accounts = Collections.singletonList(new AccountWithDataSet(filter.accountName,
+ filter.accountType, null));
+ } else if (filter.shouldShowSyncState()) {
+ accounts = AccountInfo.extractAccounts(
+ mAccountTypeManager.getWritableGoogleAccounts());
+ } else {
+ accounts = Collections.emptyList();
+ }
+ if (SyncUtil.isAnySyncing(accounts)) {
+ return;
+ }
+ swipeRefreshLayout.setRefreshing(false);
+ }
+ }
+
+ public void showConnectionErrorMsg() {
+ Snackbar.make(mLayoutRoot, R.string.connection_error_message, Snackbar.LENGTH_LONG).show();
+ }
+
+ private final ContactListFilterListener mFilterListener = new ContactListFilterListener() {
+ @Override
+ public void onContactListFilterChanged() {
+ final ContactListFilter filter = mContactListFilterController.getFilter();
+ handleFilterChangeForFragment(filter);
+ handleFilterChangeForActivity(filter);
+ }
+ };
+
+ private final ProviderStatusListener mProviderStatusListener = new ProviderStatusListener() {
+ @Override
+ public void onProviderStatusChange() {
+ // TODO see if it works with drawer fragment.
+ updateViewConfiguration(false);
+ }
+ };
+
+ private class ContactsActionBarDrawerToggle extends ActionBarDrawerToggle {
+ private boolean mMenuClickedBefore = SharedPreferenceUtil.getHamburgerMenuClickedBefore(
+ PeopleActivity.this);
+
+ public ContactsActionBarDrawerToggle(AppCompatActivity activity, DrawerLayout drawerLayout,
+ Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
+ super(activity, drawerLayout, toolbar, openDrawerContentDescRes,
+ closeDrawerContentDescRes);
+ }
+
+ @Override
+ public void onDrawerOpened(View drawerView) {
+ super.onDrawerOpened(drawerView);
+ if (!mMenuClickedBefore) {
+ SharedPreferenceUtil.setHamburgerMenuClickedBefore(PeopleActivity.this);
+ mMenuClickedBefore = true;
+ }
+ drawerView.requestFocus();
+ invalidateOptionsMenu();
+ // Stop search and selection mode like Gmail and Keep. Otherwise, if user switches to
+ // another fragment in navigation drawer, the current search/selection mode will be
+ // overlaid by the action bar of the newly-created fragment.
+ stopSearchAndSelection();
+ updateStatusBarBackground();
+ }
+
+ private void stopSearchAndSelection() {
+ final MultiSelectContactsListFragment listFragment;
+ if (isAllContactsView() || isAccountView()) {
+ listFragment = getListFragment();
+ } else if (isGroupView()) {
+ listFragment = getGroupFragment();
+ } else {
+ listFragment = null;
+ }
+ if (listFragment == null) {
+ return;
+ }
+ final ActionBarAdapter actionBarAdapter = listFragment.getActionBarAdapter();
+ if (actionBarAdapter == null) {
+ return;
+ }
+ if (actionBarAdapter.isSearchMode()) {
+ actionBarAdapter.setSearchMode(false);
+ } else if (actionBarAdapter.isSelectionMode()) {
+ actionBarAdapter.setSelectionMode(false);
+ }
+ }
+
+ @Override
+ public void onDrawerClosed(View view) {
+ super.onDrawerClosed(view);
+ invalidateOptionsMenu();
+ }
+
+ @Override
+ public void onDrawerStateChanged(int newState) {
+ super.onDrawerStateChanged(newState);
+ // Set transparent status bar when drawer starts to move.
+ if (newState != DrawerLayout.STATE_IDLE) {
+ updateStatusBarBackground();
+ }
+ }
+ }
+
+
public PeopleActivity() {
mInstanceId = sNextInstanceId.getAndIncrement();
mIntentResolver = new ContactsIntentResolver(this);
@@ -191,57 +337,77 @@ public class PeopleActivity extends ContactsActivity implements
return String.format("%s@%d", getClass().getSimpleName(), mInstanceId);
}
- public boolean areContactsAvailable() {
+ private boolean areContactsAvailable() {
return (mProviderStatus != null) && mProviderStatus.equals(ProviderStatus.STATUS_NORMAL);
}
- private boolean areGroupWritableAccountsAvailable() {
- return ContactsUtils.areGroupWritableAccountsAvailable(this);
- }
-
- /**
- * Initialize fragments that are (or may not be) in the layout.
- *
- * For the fragments that are in the layout, we initialize them in
- * {@link #createViewsAndFragments(Bundle)} after inflating the layout.
- *
- * However, the {@link ContactsUnavailableFragment} is a special fragment which may not
- * be in the layout, so we have to do the initialization here.
- *
- * The ContactsUnavailableFragment is always created at runtime.
- */
- @Override
- public void onAttachFragment(Fragment fragment) {
- if (fragment instanceof ContactsUnavailableFragment) {
- mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
- mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
- new ContactsUnavailableFragmentListener());
- }
- }
-
@Override
protected void onCreate(Bundle savedState) {
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate start");
}
+
+ // Make sure this is *before* calling super.onCreate
+ setTheme(R.style.PeopleActivityTheme);
super.onCreate(savedState);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
- return;
- }
+ mAccountTypeManager = AccountTypeManager.getInstance(this);
+ mContactListFilterController = ContactListFilterController.getInstance(this);
+
+ RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
if (!processIntent(false)) {
finish();
return;
}
- mContactListFilterController = ContactListFilterController.getInstance(this);
+
mContactListFilterController.checkFilterValidity(false);
- mContactListFilterController.addListener(this);
- mProviderStatusWatcher.addListener(this);
+ super.setContentView(R.layout.contacts_drawer_activity);
+
+ // Set up the action bar.
+ mToolbar = getView(R.id.toolbar);
+ setSupportActionBar(mToolbar);
+
+ // Add shadow under toolbar.
+ ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
+
+ // Set up hamburger button.
+ mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+ mDrawerFragment = (DrawerFragment) getFragmentManager().findFragmentById(R.id.drawer);
+ mToggle = new ContactsActionBarDrawerToggle(this, mDrawerLayout, mToolbar,
+ R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+ mDrawerLayout.setDrawerListener(mToggle);
+ // Set fallback handler for when drawer is disabled.
+ mToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onBackPressed();
+ }
+ });
+
+ // Set up navigation mode.
+ if (savedState != null) {
+ mCurrentView = ContactsView.values()[savedState.getInt(KEY_CONTACTS_VIEW)];
+ } else {
+ mCurrentView = ContactsView.ALL_CONTACTS;
+ }
+
+ if (savedState != null && savedState.containsKey(KEY_NEW_GROUP_ACCOUNT)) {
+ mNewGroupAccount = AccountWithDataSet.unstringify(
+ savedState.getString(KEY_NEW_GROUP_ACCOUNT));
+ }
+
+ mContactListFilterController.addListener(mFilterListener);
+ mProviderStatusWatcher.addListener(mProviderStatusListener);
mIsRecreatedInstance = (savedState != null);
- createViewsAndFragments(savedState);
+
+ if (mIsRecreatedInstance) {
+ mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
+ }
+
+ createViewsAndFragments();
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate finish");
@@ -251,21 +417,72 @@ public class PeopleActivity extends ContactsActivity implements
@Override
protected void onNewIntent(Intent intent) {
+ final String action = intent.getAction();
+ if (GroupUtil.ACTION_CREATE_GROUP.equals(action)) {
+ mGroupUri = intent.getData();
+ if (mGroupUri == null) {
+ toast(R.string.groupSavedErrorToast);
+ return;
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
+ switchView(ContactsView.GROUP_VIEW);
+ mMembersFragment.toastForSaveAction(action);
+ return;
+ }
+
+ if (isGroupSaveAction(action)) {
+ mGroupUri = intent.getData();
+ if (mGroupUri == null) {
+ popSecondLevel();
+ toast(R.string.groupSavedErrorToast);
+ return;
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Received group URI " + mGroupUri);
+ // ACTION_REMOVE_FROM_GROUP doesn't reload data, so it shouldn't cause b/32223934
+ // but it's necessary to use the previous fragment since
+ // GroupMembersFragment#mIsEditMode needs to be persisted between remove actions.
+ if (GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action)) {
+ switchToOrUpdateGroupView(action);
+ } else {
+ switchView(ContactsView.GROUP_VIEW);
+ }
+ mMembersFragment.toastForSaveAction(action);
+ }
+
setIntent(intent);
+
if (!processIntent(true)) {
finish();
return;
}
- mActionBarAdapter.initialize(null, mRequest);
mContactListFilterController.checkFilterValidity(false);
- // Re-configure fragments.
- configureFragments(true /* from request */);
+ if (!isInSecondLevel()) {
+ // Re-initialize ActionBarAdapter because {@link #onNewIntent(Intent)} doesn't invoke
+ // {@link Fragment#onActivityCreated(Bundle)} where we initialize ActionBarAdapter
+ // initially.
+ mContactsListFragment.setParameters(/* ContactsRequest */ mRequest,
+ /* fromOnNewIntent */ true);
+ mContactsListFragment.initializeActionBarAdapter(null);
+ }
+
initializeFabVisibility();
invalidateOptionsMenuIfNeeded();
}
+ private static boolean isGroupSaveAction(String action) {
+ return GroupUtil.ACTION_UPDATE_GROUP.equals(action)
+ || GroupUtil.ACTION_ADD_TO_GROUP.equals(action)
+ || GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action);
+ }
+
+ private void toast(int resId) {
+ if (resId >= 0) {
+ Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
+ }
+ }
+
/**
* Resolve the intent and initialize {@link #mRequest}, and launch another activity if redirect
* is needed.
@@ -287,235 +504,182 @@ public class PeopleActivity extends ContactsActivity implements
return false;
}
- if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT) {
- final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
- mRequest.getContactUri(), QuickContactActivity.MODE_FULLY_EXPANDED);
- intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.UNKNOWN);
- ImplicitIntentsUtil.startActivityInApp(this, intent);
- return false;
+ switch (mRequest.getActionCode()) {
+ case ContactsRequest.ACTION_VIEW_CONTACT: {
+ ImplicitIntentsUtil.startQuickContact(
+ this, mRequest.getContactUri(), ScreenType.UNKNOWN);
+ return false;
+ }
+ case ContactsRequest.ACTION_INSERT_GROUP: {
+ onCreateGroupMenuItemClicked();
+ return true;
+ }
+ case ContactsRequest.ACTION_VIEW_GROUP:
+ case ContactsRequest.ACTION_EDIT_GROUP: {
+ mShouldSwitchToGroupView = true;
+ return true;
+ }
}
return true;
}
- private void createViewsAndFragments(Bundle savedState) {
- // Disable the ActionBar so that we can use a Toolbar. This needs to be called before
- // setContentView().
- getWindow().requestFeature(Window.FEATURE_NO_TITLE);
-
+ private void createViewsAndFragments() {
setContentView(R.layout.people_activity);
final FragmentManager fragmentManager = getFragmentManager();
- // Hide all tabs (the current tab will later be reshown once a tab is selected)
- final FragmentTransaction transaction = fragmentManager.beginTransaction();
-
- mTabTitles = new String[TabState.COUNT];
- mTabTitles[TabState.FAVORITES] = getString(R.string.favorites_tab_label);
- mTabTitles[TabState.ALL] = getString(R.string.all_contacts_tab_label);
- mTabPager = getView(R.id.tab_pager);
- mTabPagerAdapter = new TabPagerAdapter();
- mTabPager.setAdapter(mTabPagerAdapter);
- mTabPager.setOnPageChangeListener(mTabPagerListener);
-
- // Configure toolbar and toolbar tabs. If in landscape mode, we configure tabs differntly.
- final Toolbar toolbar = getView(R.id.toolbar);
- setActionBar(toolbar);
- final ViewPagerTabs portraitViewPagerTabs
- = (ViewPagerTabs) findViewById(R.id.lists_pager_header);
- ViewPagerTabs landscapeViewPagerTabs = null;
- if (portraitViewPagerTabs == null) {
- landscapeViewPagerTabs = (ViewPagerTabs) getLayoutInflater().inflate(
- R.layout.people_activity_tabs_lands, toolbar, /* attachToRoot = */ false);
- mViewPagerTabs = landscapeViewPagerTabs;
- } else {
- mViewPagerTabs = portraitViewPagerTabs;
- }
- mViewPagerTabs.setViewPager(mTabPager);
-
- final String FAVORITE_TAG = "tab-pager-favorite";
- final String ALL_TAG = "tab-pager-all";
-
- // Create the fragments and add as children of the view pager.
- // The pager adapter will only change the visibility; it'll never create/destroy
- // fragments.
- // However, if it's after screen rotation, the fragments have been re-created by
- // the fragment manager, so first see if there're already the target fragments
- // existing.
- mFavoritesFragment = (ContactTileListFragment)
- fragmentManager.findFragmentByTag(FAVORITE_TAG);
- mAllFragment = (MultiSelectContactsListFragment)
- fragmentManager.findFragmentByTag(ALL_TAG);
+ setUpListFragment(fragmentManager);
- if (mFavoritesFragment == null) {
- mFavoritesFragment = new ContactTileListFragment();
- mAllFragment = new MultiSelectContactsListFragment();
-
- transaction.add(R.id.tab_pager, mFavoritesFragment, FAVORITE_TAG);
- transaction.add(R.id.tab_pager, mAllFragment, ALL_TAG);
- }
-
- mFavoritesFragment.setListener(mFavoritesFragmentListener);
-
- mAllFragment.setOnContactListActionListener(new ContactBrowserActionListener());
- mAllFragment.setCheckBoxListListener(new CheckBoxListListener());
-
- // Hide all fragments for now. We adjust visibility when we get onSelectedTabChanged()
- // from ActionBarAdapter.
- transaction.hide(mFavoritesFragment);
- transaction.hide(mAllFragment);
-
- transaction.commitAllowingStateLoss();
- fragmentManager.executePendingTransactions();
-
- // Setting Properties after fragment is created
- mFavoritesFragment.setDisplayType(DisplayType.STREQUENT);
-
- mActionBarAdapter = new ActionBarAdapter(this, this, getActionBar(),
- portraitViewPagerTabs, landscapeViewPagerTabs, toolbar);
- mActionBarAdapter.initialize(savedState, mRequest);
-
- // Add shadow under toolbar
- ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
+ mMembersFragment = (GroupMembersFragment) fragmentManager.findFragmentByTag(TAG_GROUP_VIEW);
// Configure floating action button
mFloatingActionButtonContainer = findViewById(R.id.floating_action_button_container);
final ImageButton floatingActionButton
= (ImageButton) findViewById(R.id.floating_action_button);
- floatingActionButton.setOnClickListener(this);
+ floatingActionButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ AccountFilterUtil.startEditorIntent(PeopleActivity.this, getIntent(),
+ mContactListFilterController.getFilter());
+ }
+ });
mFloatingActionButtonController = new FloatingActionButtonController(this,
mFloatingActionButtonContainer, floatingActionButton);
- initializeFabVisibility();
invalidateOptionsMenuIfNeeded();
+
+ mLayoutRoot = (CoordinatorLayout) findViewById(R.id.root);
+
+ if (mShouldSwitchToGroupView && !mIsRecreatedInstance) {
+ mGroupUri = mRequest.getContactUri();
+ switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
+ mShouldSwitchToGroupView = false;
+ }
}
@Override
- protected void onStart() {
- if (!mFragmentInitialized) {
- mFragmentInitialized = true;
- /* Configure fragments if we haven't.
- *
- * Note it's a one-shot initialization, so we want to do this in {@link #onCreate}.
- *
- * However, because this method may indirectly touch views in fragments but fragments
- * created in {@link #configureContentView} using a {@link FragmentTransaction} will NOT
- * have views until {@link Activity#onCreate} finishes (they would if they were inflated
- * from a layout), we need to do it here in {@link #onStart()}.
- *
- * (When {@link Fragment#onCreateView} is called is different in the former case and
- * in the latter case, unfortunately.)
- *
- * Also, we skip most of the work in it if the activity is a re-created one.
- * (so the argument.)
- */
- configureFragments(!mIsRecreatedInstance);
- }
- super.onStart();
+ public void setContentView(@LayoutRes int layoutResID) {
+ final ViewGroup parent = (ViewGroup) findViewById(R.id.content_frame);
+ if (parent != null) {
+ parent.removeAllViews();
+ }
+ LayoutInflater.from(this).inflate(layoutResID, parent);
+ }
+
+ private void setUpListFragment(FragmentManager fragmentManager) {
+ mContactsListFragment = (DefaultContactBrowseListFragment)
+ fragmentManager.findFragmentByTag(TAG_ALL);
+
+ if (mContactsListFragment == null) {
+ mContactsListFragment = new DefaultContactBrowseListFragment();
+ mContactsListFragment.setAnimateOnLoad(true);
+ fragmentManager.beginTransaction()
+ .add(R.id.contacts_list_container, mContactsListFragment, TAG_ALL)
+ .commit();
+ fragmentManager.executePendingTransactions();
+ }
+
+ mContactsListFragment.setContactsAvailable(areContactsAvailable());
+ mContactsListFragment.setListType(mContactListFilterController.getFilterListType());
+ mContactsListFragment.setParameters(/* ContactsRequest */ mRequest,
+ /* fromOnNewIntent */ false);
}
@Override
protected void onPause() {
- mOptionsMenuContactsAvailable = false;
mProviderStatusWatcher.stop();
+
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(mSaveServiceListener);
+
super.onPause();
+
+ ContentResolver.removeStatusChangeListener(mStatusChangeListenerHandle);
+ onSyncStateUpdated();
}
@Override
- protected void onResume() {
- super.onResume();
-
- mProviderStatusWatcher.start();
- updateViewConfiguration(true);
-
- // Re-register the listener, which may have been cleared when onSaveInstanceState was
- // called. See also: onSaveInstanceState
- mActionBarAdapter.setListener(this);
- mDisableOptionItemSelected = false;
- if (mTabPager != null) {
- mTabPager.setOnPageChangeListener(mTabPagerListener);
- }
- // Current tab may have changed since the last onSaveInstanceState(). Make sure
- // the actual contents match the tab.
- updateFragmentsVisibility();
+ public void onMultiWindowModeChanged(boolean entering) {
+ initializeHomeVisibility();
}
@Override
- protected void onDestroy() {
- mProviderStatusWatcher.removeListener(this);
+ protected void onResume() {
+ super.onResume();
- // Some of variables will be null if this Activity redirects Intent.
- // See also onCreate() or other methods called during the Activity's initialization.
- if (mActionBarAdapter != null) {
- mActionBarAdapter.setListener(null);
+ if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ updateStatusBarBackground();
}
- if (mContactListFilterController != null) {
- mContactListFilterController.removeListener(this);
+
+ if (mShouldSwitchToAllContacts) {
+ switchToAllContacts();
}
- super.onDestroy();
- }
+ mProviderStatusWatcher.start();
+ updateViewConfiguration(true);
- private void configureFragments(boolean fromRequest) {
- if (fromRequest) {
- ContactListFilter filter = null;
- int actionCode = mRequest.getActionCode();
- boolean searchMode = mRequest.isSearchMode();
- final int tabToOpen;
- switch (actionCode) {
- case ContactsRequest.ACTION_ALL_CONTACTS:
- filter = ContactListFilter.createFilterWithType(
- ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
- tabToOpen = TabState.ALL;
- break;
- case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
- filter = ContactListFilter.createFilterWithType(
- ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY);
- tabToOpen = TabState.ALL;
- break;
+ mStatusChangeListenerHandle = ContentResolver.addStatusChangeListener(
+ ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE
+ | ContentResolver.SYNC_OBSERVER_TYPE_PENDING
+ | ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS,
+ mSyncStatusObserver);
+ onSyncStateUpdated();
- case ContactsRequest.ACTION_FREQUENT:
- case ContactsRequest.ACTION_STREQUENT:
- case ContactsRequest.ACTION_STARRED:
- tabToOpen = TabState.FAVORITES;
- break;
- case ContactsRequest.ACTION_VIEW_CONTACT:
- tabToOpen = TabState.ALL;
- break;
- default:
- tabToOpen = -1;
- break;
- }
- if (tabToOpen != -1) {
- mActionBarAdapter.setCurrentTab(tabToOpen);
- }
+ initializeFabVisibility();
+ initializeHomeVisibility();
- if (filter != null) {
- mContactListFilterController.setContactListFilter(filter, false);
- searchMode = false;
- }
+ mSaveServiceListener = new SaveServiceListener();
+ LocalBroadcastManager.getInstance(this).registerReceiver(mSaveServiceListener,
+ new IntentFilter(ContactSaveService.BROADCAST_GROUP_DELETED));
+ }
- if (mRequest.getContactUri() != null) {
- searchMode = false;
- }
+ public void updateStatusBarBackground() {
+ updateStatusBarBackground(/* color */ -1);
+ }
- mActionBarAdapter.setSearchMode(searchMode);
- configureContactListFragmentForRequest();
+ public void updateStatusBarBackground(int color) {
+ if (!CompatUtils.isLollipopCompatible()) return;
+ if (color == -1) {
+ mDrawerLayout.setStatusBarBackgroundColor(
+ MaterialColorMapUtils.getStatusBarColor(this));
+ } else {
+ mDrawerLayout.setStatusBarBackgroundColor(color);
}
+ mDrawerLayout.invalidate();
+ getWindow().setStatusBarColor(Color.TRANSPARENT);
+ }
- configureContactListFragment();
-
- invalidateOptionsMenuIfNeeded();
+ @Override
+ protected void onDestroy() {
+ mProviderStatusWatcher.removeListener(mProviderStatusListener);
+ mContactListFilterController.removeListener(mFilterListener);
+ super.onDestroy();
}
private void initializeFabVisibility() {
- final boolean hideFab = mActionBarAdapter.isSearchMode()
- || mActionBarAdapter.isSelectionMode();
- mFloatingActionButtonContainer.setVisibility(hideFab ? View.GONE : View.VISIBLE);
+ mFloatingActionButtonContainer.setVisibility(shouldHideFab() ? View.GONE : View.VISIBLE);
mFloatingActionButtonController.resetIn();
- wasLastFabAnimationScaleIn = !hideFab;
+ wasLastFabAnimationScaleIn = !shouldHideFab();
+ }
+
+ private void initializeHomeVisibility() {
+ // Remove the navigation icon if we return to the fragment in a search or select state
+ if (getToolbar() != null && (isListFragmentInSelectionMode()
+ || isListFragmentInSearchMode() || isGroupsFragmentInSelectionMode()
+ || isGroupsFragmentInSearchMode())) {
+ getToolbar().setNavigationIcon(null);
+ }
+ }
+
+ private boolean shouldHideFab() {
+ if (mContactsListFragment != null && mContactsListFragment.getActionBarAdapter() == null
+ || isInSecondLevel()) {
+ return true;
+ }
+ return isListFragmentInSearchMode()
+ || isListFragmentInSelectionMode();
}
- private void showFabWithAnimation(boolean showFab) {
+ public void showFabWithAnimation(boolean showFab) {
if (mFloatingActionButtonContainer == null) {
return;
}
@@ -535,908 +699,569 @@ public class PeopleActivity extends ContactsActivity implements
}
}
- @Override
- public void onContactListFilterChanged() {
- if (mAllFragment == null || !mAllFragment.isAdded()) {
- return;
- }
-
- mAllFragment.setFilter(mContactListFilterController.getFilter());
+ private void updateViewConfiguration(boolean forceUpdate) {
+ int providerStatus = mProviderStatusWatcher.getProviderStatus();
+ if (!forceUpdate && (mProviderStatus != null)
+ && (mProviderStatus.equals(providerStatus))) return;
+ mProviderStatus = providerStatus;
- invalidateOptionsMenuIfNeeded();
- }
+ final FragmentManager fragmentManager= getFragmentManager();
+ final FragmentTransaction transaction = fragmentManager.beginTransaction();
- /**
- * Handler for action bar actions.
- */
- @Override
- public void onAction(int action) {
- switch (action) {
- case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
- mAllFragment.displayCheckBoxes(true);
- startSearchOrSelectionMode();
- break;
- case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
- if (!mIsRecreatedInstance) {
- Logger.logScreenView(this, ScreenType.SEARCH);
+ // Change in CP2's provider status may not take effect immediately, see b/30566908.
+ // So we need to handle the case where provider status is STATUS_EMPTY and there is
+ // actually at least one real account (not "local" account) on device.
+ if (shouldShowList()) {
+ if (mContactsListFragment != null) {
+ final Fragment unavailableFragment = fragmentManager
+ .findFragmentByTag(TAG_UNAVAILABLE);
+ if (unavailableFragment != null) {
+ transaction.remove(unavailableFragment);
}
- startSearchOrSelectionMode();
- break;
- case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
- showFabWithAnimation(/* showFabWithAnimation = */ true);
- break;
- case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
- setQueryTextToFragment("");
- updateFragmentsVisibility();
- invalidateOptionsMenu();
- showFabWithAnimation(/* showFabWithAnimation = */ true);
- break;
- case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
- final String queryString = mActionBarAdapter.getQueryString();
- setQueryTextToFragment(queryString);
- updateDebugOptionsVisibility(
- ENABLE_DEBUG_OPTIONS_HIDDEN_CODE.equals(queryString));
- break;
- default:
- throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action);
- }
- }
-
- private void startSearchOrSelectionMode() {
- configureFragments(false /* from request */);
- updateFragmentsVisibility();
- invalidateOptionsMenu();
- showFabWithAnimation(/* showFabWithAnimation = */ false);
- }
-
- @Override
- public void onSelectedTabChanged() {
- updateFragmentsVisibility();
- }
-
- @Override
- public void onUpButtonPressed() {
- onBackPressed();
- }
-
- private void updateDebugOptionsVisibility(boolean visible) {
- if (mEnableDebugMenuOptions != visible) {
- mEnableDebugMenuOptions = visible;
- invalidateOptionsMenu();
- }
- }
-
- /**
- * Updates the fragment/view visibility according to the current mode, such as
- * {@link ActionBarAdapter#isSearchMode()} and {@link ActionBarAdapter#getCurrentTab()}.
- */
- private void updateFragmentsVisibility() {
- int tab = mActionBarAdapter.getCurrentTab();
-
- if (mActionBarAdapter.isSearchMode() || mActionBarAdapter.isSelectionMode()) {
- mTabPagerAdapter.setTabsHidden(true);
+ if (mContactsListFragment.isHidden()) {
+ transaction.show(mContactsListFragment);
+ }
+ mContactsListFragment.setContactsAvailable(areContactsAvailable());
+ mContactsListFragment.setEnabled(true);
+ }
} else {
- // No smooth scrolling if quitting from the search/selection mode.
- final boolean wereTabsHidden = mTabPagerAdapter.areTabsHidden()
- || mActionBarAdapter.isSelectionMode();
- mTabPagerAdapter.setTabsHidden(false);
- if (mTabPager.getCurrentItem() != tab) {
- mTabPager.setCurrentItem(tab, !wereTabsHidden);
+ // Setting up the page so that the user can still use the app
+ // even without an account.
+ if (mContactsListFragment != null) {
+ mContactsListFragment.setEnabled(false);
}
+ final ContactsUnavailableFragment fragment = new ContactsUnavailableFragment();
+ transaction.hide(mContactsListFragment);
+ transaction.replace(R.id.contacts_unavailable_container, fragment, TAG_UNAVAILABLE);
+ fragment.updateStatus(mProviderStatus);
}
- if (!mActionBarAdapter.isSelectionMode()) {
- mAllFragment.displayCheckBoxes(false);
+ if (!transaction.isEmpty()) {
+ transaction.commit();
+ fragmentManager.executePendingTransactions();
}
- invalidateOptionsMenu();
- showEmptyStateForTab(tab);
- }
- private void showEmptyStateForTab(int tab) {
- if (mContactsUnavailableFragment != null) {
- switch (getTabPositionForTextDirection(tab)) {
- case TabState.FAVORITES:
- mContactsUnavailableFragment.setTabInfo(
- R.string.listTotalAllContactsZeroStarred, TabState.FAVORITES);
- break;
- case TabState.ALL:
- mContactsUnavailableFragment.setTabInfo(R.string.noContacts, TabState.ALL);
- break;
- }
- // When using the mContactsUnavailableFragment the ViewPager doesn't contain two views.
- // Therefore, we have to trick the ViewPagerTabs into thinking we have changed tabs
- // when the mContactsUnavailableFragment changes. Otherwise the tab strip won't move.
- mViewPagerTabs.onPageScrolled(tab, 0, 0);
- }
+ invalidateOptionsMenuIfNeeded();
}
- private class TabPagerListener implements ViewPager.OnPageChangeListener {
-
- // This package-protected constructor is here because of a possible compiler bug.
- // PeopleActivity$1.class should be generated due to the private outer/inner class access
- // needed here. But for some reason, PeopleActivity$1.class is missing.
- // Since $1 class is needed as a jvm work around to get access to the inner class,
- // changing the constructor to package-protected or public will solve the problem.
- // To verify whether $1 class is needed, javap PeopleActivity$TabPagerListener and look for
- // references to PeopleActivity$1.
- //
- // When the constructor is private and PeopleActivity$1.class is missing, proguard will
- // correctly catch this and throw warnings and error out the build on user/userdebug builds.
- //
- // All private inner classes below also need this fix.
- TabPagerListener() {}
+ private boolean shouldShowList() {
+ return mProviderStatus != null
+ && ((mProviderStatus.equals(ProviderStatus.STATUS_EMPTY)
+ && mAccountTypeManager.hasNonLocalAccount())
+ || mProviderStatus.equals(ProviderStatus.STATUS_NORMAL));
+ }
- @Override
- public void onPageScrollStateChanged(int state) {
- if (!mTabPagerAdapter.areTabsHidden()) {
- mViewPagerTabs.onPageScrollStateChanged(state);
- }
+ private void invalidateOptionsMenuIfNeeded() {
+ if (mContactsListFragment != null
+ && mContactsListFragment.getOptionsMenuContactsAvailable()
+ != areContactsAvailable()) {
+ invalidateOptionsMenu();
}
+ }
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- if (!mTabPagerAdapter.areTabsHidden()) {
- mViewPagerTabs.onPageScrolled(position, positionOffset, positionOffsetPixels);
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ // If the drawer is open, consume KEYCODE_BACK event only.
+ if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ // Should eventually go to onBackPressed().
+ return super.onKeyDown(keyCode, event);
}
+ return false;
}
-
- @Override
- public void onPageSelected(int position) {
- // Make sure not in the search mode, in which case position != TabState.ordinal().
- if (!mTabPagerAdapter.areTabsHidden()) {
- mActionBarAdapter.setCurrentTab(position, false);
- mViewPagerTabs.onPageSelected(position);
- showEmptyStateForTab(position);
- invalidateOptionsMenu();
+ // Bring up the search UI if the user starts typing
+ final int unicodeChar = event.getUnicodeChar();
+ if ((unicodeChar != 0)
+ // If COMBINING_ACCENT is set, it's not a unicode character.
+ && ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) == 0)
+ && !Character.isWhitespace(unicodeChar)) {
+ if (mContactsListFragment.onKeyDown(unicodeChar)) {
+ return true;
}
}
- }
-
- /**
- * Adapter for the {@link ViewPager}. Unlike {@link FragmentPagerAdapter},
- * {@link #instantiateItem} returns existing fragments, and {@link #instantiateItem}/
- * {@link #destroyItem} show/hide fragments instead of attaching/detaching.
- *
- * In search mode, we always show the "all" fragment, and disable the swipe. We change the
- * number of items to 1 to disable the swipe.
- *
- * TODO figure out a more straight way to disable swipe.
- */
- private class TabPagerAdapter extends PagerAdapter {
- private final FragmentManager mFragmentManager;
- private FragmentTransaction mCurTransaction = null;
-
- private boolean mAreTabsHiddenInTabPager;
-
- private Fragment mCurrentPrimaryItem;
- public TabPagerAdapter() {
- mFragmentManager = getFragmentManager();
- }
+ return super.onKeyDown(keyCode, event);
+ }
- public boolean areTabsHidden() {
- return mAreTabsHiddenInTabPager;
+ @Override
+ public void onBackPressed() {
+ if (!isSafeToCommitTransactions()) {
+ return;
}
- public void setTabsHidden(boolean hideTabs) {
- if (hideTabs == mAreTabsHiddenInTabPager) {
- return;
- }
- mAreTabsHiddenInTabPager = hideTabs;
- notifyDataSetChanged();
+ // Handle the back event in drawer first.
+ if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
+ closeDrawer();
+ return;
}
- @Override
- public int getCount() {
- return mAreTabsHiddenInTabPager ? 1 : TabState.COUNT;
+ // Handle the back event in "second level".
+ if (isGroupView()) {
+ onBackPressedGroupView();
+ return;
}
- /** Gets called when the number of items changes. */
- @Override
- public int getItemPosition(Object object) {
- if (mAreTabsHiddenInTabPager) {
- if (object == mAllFragment) {
- return 0; // Only 1 page in search mode
- }
- } else {
- if (object == mFavoritesFragment) {
- return getTabPositionForTextDirection(TabState.FAVORITES);
- }
- if (object == mAllFragment) {
- return getTabPositionForTextDirection(TabState.ALL);
- }
- }
- return POSITION_NONE;
+ if (isAssistantView()) {
+ onBackPressedAssistantView();
+ return;
}
- @Override
- public void startUpdate(ViewGroup container) {
+ // If feature highlight is present, let it handle the back event before
+ // mContactsListFragment.
+ if (FeatureHighlightHelper.tryRemoveHighlight(this)) {
+ return;
}
- private Fragment getFragment(int position) {
- position = getTabPositionForTextDirection(position);
- if (mAreTabsHiddenInTabPager) {
- if (position != 0) {
- // This has only been observed in monkey tests.
- // Let's log this issue, but not crash
- Log.w(TAG, "Request fragment at position=" + position + ", eventhough we " +
- "are in search mode");
- }
- return mAllFragment;
- } else {
- if (position == TabState.FAVORITES) {
- return mFavoritesFragment;
- } else if (position == TabState.ALL) {
- return mAllFragment;
- }
- }
- throw new IllegalArgumentException("position: " + position);
+ // Handle the back event in "first level" - mContactsListFragment.
+ if (maybeHandleInListFragment()) {
+ return;
}
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- if (mCurTransaction == null) {
- mCurTransaction = mFragmentManager.beginTransaction();
- }
- Fragment f = getFragment(position);
- mCurTransaction.show(f);
-
- // Non primary pages are not visible.
- f.setUserVisibleHint(f == mCurrentPrimaryItem);
- return f;
- }
+ super.onBackPressed();
+ }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- if (mCurTransaction == null) {
- mCurTransaction = mFragmentManager.beginTransaction();
- }
- mCurTransaction.hide((Fragment) object);
+ private void onBackPressedGroupView() {
+ if (mMembersFragment.isEditMode()) {
+ mMembersFragment.exitEditMode();
+ } else if (mMembersFragment.getActionBarAdapter().isSelectionMode()) {
+ mMembersFragment.getActionBarAdapter().setSelectionMode(false);
+ mMembersFragment.displayCheckBoxes(false);
+ } else if (mMembersFragment.getActionBarAdapter().isSearchMode()) {
+ mMembersFragment.getActionBarAdapter().setSearchMode(false);
+ } else {
+ switchToAllContacts();
}
+ }
- @Override
- public void finishUpdate(ViewGroup container) {
- if (mCurTransaction != null) {
- mCurTransaction.commitAllowingStateLoss();
- mCurTransaction = null;
- mFragmentManager.executePendingTransactions();
- }
+ private void onBackPressedAssistantView() {
+ if (!isInThirdLevel()) {
+ switchToAllContacts();
+ } else {
+ setDrawerLockMode(/* enabled */ true);
+ super.onBackPressed();
}
+ }
- @Override
- public boolean isViewFromObject(View view, Object object) {
- return ((Fragment) object).getView() == view;
+ // Returns true if back event is handled in this method.
+ private boolean maybeHandleInListFragment() {
+ if (isListFragmentInSelectionMode()) {
+ mContactsListFragment.getActionBarAdapter().setSelectionMode(false);
+ return true;
}
- @Override
- public void setPrimaryItem(ViewGroup container, int position, Object object) {
- Fragment fragment = (Fragment) object;
- if (mCurrentPrimaryItem != fragment) {
- if (mCurrentPrimaryItem != null) {
- mCurrentPrimaryItem.setUserVisibleHint(false);
- }
- if (fragment != null) {
- fragment.setUserVisibleHint(true);
- }
- mCurrentPrimaryItem = fragment;
+ if (isListFragmentInSearchMode()) {
+ mContactsListFragment.getActionBarAdapter().setSearchMode(false);
+ if (mContactsListFragment.wasSearchResultClicked()) {
+ mContactsListFragment.resetSearchResultClicked();
+ } else {
+ Logger.logScreenView(this, ScreenType.SEARCH_EXIT);
+ Logger.logSearchEvent(mContactsListFragment.createSearchState());
}
+ return true;
}
- @Override
- public Parcelable saveState() {
- return null;
- }
-
- @Override
- public void restoreState(Parcelable state, ClassLoader loader) {
+ if (!AccountFilterUtil.isAllContactsFilter(mContactListFilterController.getFilter())
+ && !mContactsListFragment.isHidden()) {
+ // If mContactsListFragment is hidden, then mContactsUnavailableFragment is visible so we
+ // don't need to switch to all contacts.
+ switchToAllContacts();
+ return true;
}
- @Override
- public CharSequence getPageTitle(int position) {
- return mTabTitles[position];
- }
+ return false;
}
- private void setQueryTextToFragment(String query) {
- mAllFragment.setQueryString(query, true);
- mAllFragment.setVisibleScrollbarEnabled(!mAllFragment.isSearchMode());
+ private boolean isListFragmentInSelectionMode() {
+ return mContactsListFragment != null && mContactsListFragment.getActionBarAdapter() != null
+ && mContactsListFragment.getActionBarAdapter().isSelectionMode();
}
- private void configureContactListFragmentForRequest() {
- Uri contactUri = mRequest.getContactUri();
- if (contactUri != null) {
- mAllFragment.setSelectedContactUri(contactUri);
- }
-
- mAllFragment.setFilter(mContactListFilterController.getFilter());
- setQueryTextToFragment(mActionBarAdapter.getQueryString());
-
- if (mRequest.isDirectorySearchEnabled()) {
- mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
- } else {
- mAllFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
- }
+ private boolean isListFragmentInSearchMode() {
+ return mContactsListFragment != null && mContactsListFragment.getActionBarAdapter() != null
+ && mContactsListFragment.getActionBarAdapter().isSearchMode();
}
- private void configureContactListFragment() {
- // Filter may be changed when this Activity is in background.
- mAllFragment.setFilter(mContactListFilterController.getFilter());
-
- mAllFragment.setVerticalScrollbarPosition(getScrollBarPosition());
- mAllFragment.setSelectionVisible(false);
+ private boolean isGroupsFragmentInSelectionMode() {
+ return mMembersFragment != null && mMembersFragment.getActionBarAdapter() != null
+ && mMembersFragment.getActionBarAdapter().isSelectionMode();
}
- private int getScrollBarPosition() {
- return isRTL() ? View.SCROLLBAR_POSITION_LEFT : View.SCROLLBAR_POSITION_RIGHT;
+ private boolean isGroupsFragmentInSearchMode() {
+ return mMembersFragment != null && mMembersFragment.getActionBarAdapter() != null
+ && mMembersFragment.getActionBarAdapter().isSearchMode();
}
- private boolean isRTL() {
- final Locale locale = Locale.getDefault();
- return TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL;
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ if (mNewGroupAccount != null) {
+ outState.putString(KEY_NEW_GROUP_ACCOUNT, mNewGroupAccount.stringify());
+ }
+ outState.putInt(KEY_CONTACTS_VIEW, mCurrentView.ordinal());
+ outState.putParcelable(KEY_GROUP_URI, mGroupUri);
}
@Override
- public void onProviderStatusChange() {
- updateViewConfiguration(false);
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ mGroupUri = savedInstanceState.getParcelable(KEY_GROUP_URI);
}
- private void updateViewConfiguration(boolean forceUpdate) {
- int providerStatus = mProviderStatusWatcher.getProviderStatus();
- if (!forceUpdate && (mProviderStatus != null)
- && (mProviderStatus.equals(providerStatus))) return;
- mProviderStatus = providerStatus;
-
- View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view);
-
- if (mProviderStatus.equals(ProviderStatus.STATUS_NORMAL)) {
- // Ensure that the mTabPager is visible; we may have made it invisible below.
- contactsUnavailableView.setVisibility(View.GONE);
- if (mTabPager != null) {
- mTabPager.setVisibility(View.VISIBLE);
- }
-
- if (mAllFragment != null) {
- mAllFragment.setEnabled(true);
- }
- } else {
- // Setting up the page so that the user can still use the app
- // even without an account.
- if (mAllFragment != null) {
- mAllFragment.setEnabled(false);
- }
- if (mContactsUnavailableFragment == null) {
- mContactsUnavailableFragment = new ContactsUnavailableFragment();
- mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
- new ContactsUnavailableFragmentListener());
- getFragmentManager().beginTransaction()
- .replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment)
- .commitAllowingStateLoss();
- }
- mContactsUnavailableFragment.updateStatus(mProviderStatus);
-
- // Show the contactsUnavailableView, and hide the mTabPager so that we don't
- // see it sliding in underneath the contactsUnavailableView at the edges.
- contactsUnavailableView.setVisibility(View.VISIBLE);
- if (mTabPager != null) {
- mTabPager.setVisibility(View.GONE);
- }
-
- showEmptyStateForTab(mActionBarAdapter.getCurrentTab());
- }
-
- invalidateOptionsMenuIfNeeded();
+ private void onGroupDeleted(final Intent intent) {
+ if (!ContactSaveService.canUndo(intent)) return;
+
+ final AccessibilityManager am =
+ (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
+ //TODO set to INDEFINITE and track user interaction to dismiss b/33208886
+ final int accessibilityLength = 15000;
+ final int length = am.isEnabled() ? accessibilityLength : Snackbar.LENGTH_LONG;
+ final String message = getString(R.string.groupDeletedToast);
+
+ final Snackbar snackbar = Snackbar.make(mLayoutRoot, message, length)
+ .setAction(R.string.undo, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ContactSaveService.startService(PeopleActivity.this,
+ ContactSaveService.createUndoIntent(PeopleActivity.this, intent));
+ }
+ }).setActionTextColor(ContextCompat.getColor(this, R.color.snackbar_action_text));
+
+ // Announce for a11y talkback
+ mLayoutRoot.announceForAccessibility(message);
+ mLayoutRoot.announceForAccessibility(getString(R.string.undo));
+
+ snackbar.show();
}
- private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
- ContactBrowserActionListener() {}
-
+ private class SaveServiceListener extends BroadcastReceiver {
@Override
- public void onSelectionChange() {
-
- }
-
- @Override
- public void onViewContactAction(Uri contactLookupUri, boolean isEnterpriseContact) {
- if (isEnterpriseContact) {
- // No implicit intent as user may have a different contacts app in work profile.
- QuickContact.showQuickContact(PeopleActivity.this, new Rect(), contactLookupUri,
- QuickContactActivity.MODE_FULLY_EXPANDED, null);
- } else {
- final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
- contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED);
- intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
- mAllFragment.isSearchMode() ? ScreenType.SEARCH : ScreenType.ALL_CONTACTS);
- ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
- }
- }
-
- @Override
- public void onDeleteContactAction(Uri contactUri) {
- ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false);
- }
-
- @Override
- public void onFinishAction() {
- onBackPressed();
- }
-
- @Override
- public void onInvalidSelection() {
- ContactListFilter filter;
- ContactListFilter currentFilter = mAllFragment.getFilter();
- if (currentFilter != null
- && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
- filter = ContactListFilter.createFilterWithType(
- ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
- mAllFragment.setFilter(filter);
- } else {
- filter = ContactListFilter.createFilterWithType(
- ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
- mAllFragment.setFilter(filter, false);
+ public void onReceive(Context context, Intent intent) {
+ switch (intent.getAction()) {
+ case ContactSaveService.BROADCAST_GROUP_DELETED:
+ onGroupDeleted(intent);
+ break;
}
- mContactListFilterController.setContactListFilter(filter, true);
}
}
- private final class CheckBoxListListener implements OnCheckBoxListActionListener {
- @Override
- public void onStartDisplayingCheckBoxes() {
- mActionBarAdapter.setSelectionMode(true);
- invalidateOptionsMenu();
+ private void onGroupMenuItemClicked(long groupId) {
+ if (isGroupView() && mMembersFragment != null
+ && mMembersFragment.isCurrentGroup(groupId)) {
+ return;
}
+ mGroupUri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, groupId);
+ switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
+ }
- @Override
- public void onSelectedContactIdsChanged() {
- mActionBarAdapter.setSelectionCount(mAllFragment.getSelectedContactIds().size());
- invalidateOptionsMenu();
- }
+ private void onFilterMenuItemClicked(Intent intent) {
+ // We must pop second level first to "restart" mContactsListFragment before changing filter.
+ if (isInSecondLevel()) {
+ popSecondLevel();
+ showFabWithAnimation(/* showFab */ true);
+ // HACK: swap the current filter to force listeners to update because the group
+ // member view no longer changes the filter. Fix for b/32223767
+ final ContactListFilter current = mContactListFilterController.getFilter();
+ mContactListFilterController.setContactListFilter(
+ AccountFilterUtil.createContactsFilter(this), false);
+ mContactListFilterController.setContactListFilter(current, false);
+ }
+ mCurrentView = ContactsView.ACCOUNT_VIEW;
+ AccountFilterUtil.handleAccountFilterResult(mContactListFilterController,
+ AppCompatActivity.RESULT_OK, intent);
+ }
- @Override
- public void onStopDisplayingCheckBoxes() {
- mActionBarAdapter.setSelectionMode(false);
+ private void switchToOrUpdateGroupView(String action) {
+ // If group fragment is active and visible, we simply update it.
+ if (mMembersFragment != null && !mMembersFragment.isInactive()) {
+ mMembersFragment.updateExistingGroupFragment(mGroupUri, action);
+ } else {
+ switchView(ContactsView.GROUP_VIEW);
}
}
- private class ContactsUnavailableFragmentListener
- implements OnContactsUnavailableActionListener {
- ContactsUnavailableFragmentListener() {}
+ protected void launchAssistant() {
+ switchView(ContactsView.ASSISTANT);
+ }
- @Override
- public void onCreateNewContactAction() {
- ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this,
- EditorIntents.createCompactInsertContactIntent());
- }
+ private void switchView(ContactsView contactsView) {
+ mCurrentView = contactsView;
- @Override
- public void onAddAccountAction() {
- final Intent intent = ImplicitIntentsUtil.getIntentForAddingAccount();
- ImplicitIntentsUtil.startActivityOutsideApp(PeopleActivity.this, intent);
+ final FragmentManager fragmentManager = getFragmentManager();
+ final FragmentTransaction transaction = fragmentManager.beginTransaction();
+ popSecondLevel();
+ if (isGroupView()) {
+ mMembersFragment = GroupMembersFragment.newInstance(mGroupUri);
+ transaction.replace(
+ R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
+ } else if (isAssistantView()) {
+ Fragment uiFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
+ Fragment unavailableFragment = fragmentManager.findFragmentByTag(TAG_UNAVAILABLE);
+ if (uiFragment == null) {
+ uiFragment = ObjectFactory.getAssistantFragment();
+ }
+ if (unavailableFragment != null) {
+ transaction.remove(unavailableFragment);
+ }
+ transaction.replace(R.id.contacts_list_container, uiFragment, TAG_ASSISTANT);
+ resetToolBarStatusBarColor();
}
+ transaction.addToBackStack(TAG_SECOND_LEVEL);
+ transaction.commit();
+ fragmentManager.executePendingTransactions();
- @Override
- public void onImportContactsFromFileAction() {
- showImportExportDialogFragment();
- }
+ showFabWithAnimation(/* showFab */ false);
}
- private final class StrequentContactListFragmentListener
- implements ContactTileListFragment.Listener {
- StrequentContactListFragmentListener() {}
-
- @Override
- public void onContactSelected(Uri contactUri, Rect targetRect) {
- final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(contactUri,
- QuickContactActivity.MODE_FULLY_EXPANDED);
- intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.FAVORITES);
- ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
- }
+ public void switchToAllContacts() {
+ popSecondLevel();
+ mShouldSwitchToAllContacts = false;
+ mCurrentView = ContactsView.ALL_CONTACTS;
+ mDrawerFragment.setNavigationItemChecked(ContactsView.ALL_CONTACTS);
+ showFabWithAnimation(/* showFab */ true);
+ mContactsListFragment.scrollToTop();
+ resetFilter();
+ setTitle(getString(R.string.contactsList));
+ }
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- // No need to call phone number directly from People app.
- Log.w(TAG, "unexpected invocation of onCallNumberDirectly()");
- }
+ private void resetFilter() {
+ final Intent intent = new Intent();
+ final ContactListFilter filter = AccountFilterUtil.createContactsFilter(this);
+ intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
+ AccountFilterUtil.handleAccountFilterResult(
+ mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- if (!areContactsAvailable()) {
- // If contacts aren't available, hide all menu items.
- return false;
- }
- super.onCreateOptionsMenu(menu);
+ // Reset toolbar and status bar color to Contacts theme color.
+ private void resetToolBarStatusBarColor() {
+ findViewById(R.id.toolbar_frame).setBackgroundColor(
+ ContextCompat.getColor(this, R.color.primary_color));
+ updateStatusBarBackground(ContextCompat.getColor(this, R.color.primary_color_dark));
+ }
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.people_options, menu);
+ protected DefaultContactBrowseListFragment getListFragment() {
+ return mContactsListFragment;
+ }
- return true;
+ protected GroupMembersFragment getGroupFragment() {
+ return mMembersFragment;
}
- private void invalidateOptionsMenuIfNeeded() {
- if (isOptionsMenuChanged()) {
- invalidateOptionsMenu();
+ private void handleFilterChangeForFragment(ContactListFilter filter) {
+ if (mContactsListFragment.canSetActionBar()) {
+ mContactsListFragment.setFilterAndUpdateTitle(filter);
+ // Scroll to top after filter is changed.
+ mContactsListFragment.scrollToTop();
}
}
- public boolean isOptionsMenuChanged() {
- if (mOptionsMenuContactsAvailable != areContactsAvailable()) {
- return true;
+ private void handleFilterChangeForActivity(ContactListFilter filter) {
+ // The filter was changed while this activity was in the background. If we're in the
+ // assistant view Switch to the main contacts list when we resume to prevent
+ // b/31838582 and b/31829161
+ // TODO: this is a hack; we need to do some cleanup of the contact list filter stuff
+ if (isAssistantView() && filter.isContactsFilterType()) {
+ mShouldSwitchToAllContacts = true;
}
- if (mAllFragment != null && mAllFragment.isOptionsMenuChanged()) {
- return true;
+ if (CompatUtils.isNCompatible()) {
+ getWindow().getDecorView()
+ .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
}
-
- return false;
+ invalidateOptionsMenu();
}
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- mOptionsMenuContactsAvailable = areContactsAvailable();
- if (!mOptionsMenuContactsAvailable) {
- return false;
+ public void updateDrawerGroupMenu(long groupId) {
+ if (mDrawerFragment != null) {
+ mDrawerFragment.updateGroupMenu(groupId);
}
+ }
- // Get references to individual menu items in the menu
- final MenuItem contactsFilterMenu = menu.findItem(R.id.menu_contacts_filter);
- final MenuItem clearFrequentsMenu = menu.findItem(R.id.menu_clear_frequents);
- final MenuItem helpMenu = menu.findItem(R.id.menu_help);
+ public void setDrawerLockMode(boolean enabled) {
+ // Prevent drawer from being opened by sliding from the start of screen.
+ mDrawerLayout.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
+ : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
- final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
- || mActionBarAdapter.isSelectionMode();
- if (isSearchOrSelectionMode) {
- contactsFilterMenu.setVisible(false);
- clearFrequentsMenu.setVisible(false);
- helpMenu.setVisible(false);
+ // Order of these statements matter.
+ // Display back button and disable drawer indicator.
+ if (enabled) {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(false);
+ mToggle.setDrawerIndicatorEnabled(true);
} else {
- switch (getTabPositionForTextDirection(mActionBarAdapter.getCurrentTab())) {
- case TabState.FAVORITES:
- contactsFilterMenu.setVisible(false);
- clearFrequentsMenu.setVisible(hasFrequents());
- break;
- case TabState.ALL:
- contactsFilterMenu.setVisible(true);
- clearFrequentsMenu.setVisible(false);
- break;
- }
- helpMenu.setVisible(HelpUtils.isHelpAndFeedbackAvailable());
- }
- final boolean showMiscOptions = !isSearchOrSelectionMode;
- final boolean showBlockedNumbers = PhoneCapabilityTester.isPhone(this)
- && ContactsUtils.FLAG_N_FEATURE
- && BlockedNumberContract.canCurrentUserBlockNumbers(this);
- makeMenuItemVisible(menu, R.id.menu_search, showMiscOptions);
- makeMenuItemVisible(menu, R.id.menu_import_export, showMiscOptions);
- makeMenuItemVisible(menu, R.id.menu_accounts, showMiscOptions);
- makeMenuItemVisible(menu, R.id.menu_blocked_numbers, showMiscOptions && showBlockedNumbers);
- makeMenuItemVisible(menu, R.id.menu_settings,
- showMiscOptions && !ContactsPreferenceActivity.isEmpty(this));
-
- final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
- && mAllFragment.getSelectedContactIds().size() != 0;
- makeMenuItemVisible(menu, R.id.menu_share, showSelectedContactOptions);
- makeMenuItemVisible(menu, R.id.menu_delete, showSelectedContactOptions);
- final boolean showLinkContactsOptions = mActionBarAdapter.isSelectionMode()
- && mAllFragment.getSelectedContactIds().size() > 1;
- makeMenuItemVisible(menu, R.id.menu_join, showLinkContactsOptions);
-
- // Debug options need to be visible even in search mode.
- makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions &&
- hasExportIntentHandler());
+ mToggle.setDrawerIndicatorEnabled(false);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+ }
- return true;
+ public Toolbar getToolbar() {
+ return mToolbar;
}
- private boolean hasExportIntentHandler() {
- final Intent intent = new Intent();
- intent.setAction("com.android.providers.contacts.DUMP_DATABASE");
- final List<ResolveInfo> receivers = getPackageManager().queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY);
- return receivers != null && receivers.size() > 0;
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ mToggle.syncState();
}
- /**
- * Returns whether there are any frequently contacted people being displayed
- * @return
- */
- private boolean hasFrequents() {
- return mFavoritesFragment.hasFrequents();
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ mToggle.onConfigurationChanged(newConfig);
}
- private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
- final MenuItem item = menu.findItem(itemId);
- if (item != null) {
- item.setVisible(visible);
+ protected void onCreateGroupMenuItemClicked() {
+ // Select the account to create the group
+ final Bundle extras = getIntent().getExtras();
+ final Account account = extras == null ? null :
+ (Account) extras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
+ if (account == null) {
+ selectAccountForNewGroup();
+ } else {
+ final String dataSet = extras == null
+ ? null : extras.getString(Intents.Insert.EXTRA_DATA_SET);
+ final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
+ account.name, account.type, dataSet);
+ onAccountChosen(accountWithDataSet, /* extraArgs */ null);
}
}
- private void makeMenuItemEnabled(Menu menu, int itemId, boolean visible) {
- final MenuItem item = menu.findItem(itemId);
- if (item != null) {
- item.setEnabled(visible);
+ private void selectAccountForNewGroup() {
+ // This should never block because the DrawerFragment loads the accounts and the
+ // "Create Label" item only exists when that loading finishes
+ final List<AccountInfo> accounts = Futures.getUnchecked(AccountTypeManager.getInstance(this)
+ .filterAccountsAsync(AccountTypeManager.AccountFilter.GROUPS_WRITABLE));
+ if (accounts.isEmpty()) {
+ // We shouldn't present the add group button if there are no writable accounts
+ // but check it since it's possible we are started with an Intent.
+ Toast.makeText(this, R.string.groupCreateFailedToast, Toast.LENGTH_SHORT).show();
+ return;
+ }
+ // If there is a single writable account, use it w/o showing a dialog.
+ if (accounts.size() == 1) {
+ onAccountChosen(accounts.get(0).getAccount(), /* extraArgs */ null);
+ return;
}
+ SelectAccountDialogFragment.show(getFragmentManager(), R.string.dialog_new_group_account,
+ AccountTypeManager.AccountFilter.GROUPS_WRITABLE, /* extraArgs */ null,
+ TAG_SELECT_ACCOUNT_DIALOG);
}
+ // Implementation of SelectAccountDialogFragment.Listener
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (mDisableOptionItemSelected) {
- return false;
- }
-
- switch (item.getItemId()) {
- case android.R.id.home: {
- // The home icon on the action bar is pressed
- if (mActionBarAdapter.isUpShowing()) {
- // "UP" icon press -- should be treated as "back".
- onBackPressed();
- }
- return true;
- }
- case R.id.menu_settings: {
- startActivity(new Intent(this, ContactsPreferenceActivity.class));
- return true;
- }
- case R.id.menu_contacts_filter: {
- AccountFilterUtil.startAccountFilterActivityForResult(
- this, SUBACTIVITY_ACCOUNT_FILTER,
- mContactListFilterController.getFilter());
- return true;
- }
- case R.id.menu_search: {
- onSearchRequested();
- return true;
- }
- case R.id.menu_share:
- shareSelectedContacts();
- return true;
- case R.id.menu_join:
- joinSelectedContacts();
- return true;
- case R.id.menu_delete:
- deleteSelectedContacts();
- return true;
- case R.id.menu_import_export: {
- showImportExportDialogFragment();
- return true;
- }
- case R.id.menu_clear_frequents: {
- ClearFrequentsDialog.show(getFragmentManager());
- return true;
- }
- case R.id.menu_help:
- HelpUtils.launchHelpAndFeedbackForMainScreen(this);
- return true;
- case R.id.menu_accounts: {
- final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
- intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
- ContactsContract.AUTHORITY
- });
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
- return true;
- }
- case R.id.menu_blocked_numbers: {
- final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
- (TelecomManager) getSystemService(Context.TELECOM_SERVICE));
- if (intent != null) {
- startActivity(intent);
- }
- return true;
- }
- case R.id.export_database: {
- final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- ImplicitIntentsUtil.startActivityOutsideApp(this, intent);
- return true;
- }
- }
- return false;
+ public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
+ mNewGroupAccount = account;
+ GroupNameEditDialogFragment.newInstanceForCreation(
+ mNewGroupAccount, GroupUtil.ACTION_CREATE_GROUP)
+ .show(getFragmentManager(), TAG_GROUP_NAME_EDIT_DIALOG);
}
- private void showImportExportDialogFragment(){
- final boolean isOnFavoriteTab = mTabPagerAdapter.mCurrentPrimaryItem == mFavoritesFragment;
- if (isOnFavoriteTab) {
- ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
- PeopleActivity.class, ImportExportDialogFragment.EXPORT_MODE_FAVORITES);
- } else {
- ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
- PeopleActivity.class, ImportExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
- }
+ @Override
+ public void onAccountSelectorCancelled() {
}
+ // Implementation of DrawerFragmentListener
@Override
- public boolean onSearchRequested() { // Search key pressed.
- if (!mActionBarAdapter.isSelectionMode()) {
- mActionBarAdapter.setSearchMode(true);
- }
- return true;
+ public void onDrawerItemClicked(){
+ closeDrawer();
}
- /**
- * Share all contacts that are currently selected in mAllFragment. This method is pretty
- * inefficient for handling large numbers of contacts. I don't expect this to be a problem.
- */
- private void shareSelectedContacts() {
- final StringBuilder uriListBuilder = new StringBuilder();
- for (Long contactId : mAllFragment.getSelectedContactIds()) {
- final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
- final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), contactUri);
- if (lookupUri == null) {
- continue;
- }
- final List<String> pathSegments = lookupUri.getPathSegments();
- if (pathSegments.size() < 2) {
- continue;
- }
- final String lookupKey = pathSegments.get(pathSegments.size() - 2);
- if (uriListBuilder.length() > 0) {
- uriListBuilder.append(':');
- }
- uriListBuilder.append(Uri.encode(lookupKey));
- }
- if (uriListBuilder.length() == 0) {
- return;
+ @Override
+ public void onContactsViewSelected(ContactsView mode) {
+ if (mode == ContactsView.ALL_CONTACTS) {
+ switchToAllContacts();
+ } else if (mode == ContactsView.ASSISTANT) {
+ launchAssistant();
+ } else {
+ throw new IllegalStateException("Unknown view " + mode);
}
- final Uri uri = Uri.withAppendedPath(
- Contacts.CONTENT_MULTI_VCARD_URI,
- Uri.encode(uriListBuilder.toString()));
- final Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setType(Contacts.CONTENT_VCARD_TYPE);
- intent.putExtra(Intent.EXTRA_STREAM, uri);
- ImplicitIntentsUtil.startActivityOutsideApp(this, intent);
}
- private void joinSelectedContacts() {
- JoinContactsDialogFragment.start(this, mAllFragment.getSelectedContactIds());
+ @Override
+ public void onCreateLabelButtonClicked() {
+ onCreateGroupMenuItemClicked();
}
@Override
- public void onContactsJoined() {
- mActionBarAdapter.setSelectionMode(false);
+ public void onOpenSettings() {
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ startActivity(createPreferenceIntent());
+ }
+ }, DRAWER_CLOSE_DELAY);
}
- private void deleteSelectedContacts() {
- ContactMultiDeletionInteraction.start(PeopleActivity.this,
- mAllFragment.getSelectedContactIds());
+ @Override
+ public void onLaunchHelpFeedback() {
+ HelpUtils.launchHelpAndFeedbackForMainScreen(this);
}
@Override
- public void onDeletionFinished() {
- mActionBarAdapter.setSelectionMode(false);
+ public void onGroupViewSelected(GroupListItem groupListItem) {
+ onGroupMenuItemClicked(groupListItem.getGroupId());
}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case SUBACTIVITY_ACCOUNT_FILTER: {
- AccountFilterUtil.handleAccountFilterResult(
- mContactListFilterController, resultCode, data);
- break;
- }
-
- // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
- // anymore
- case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
- if (resultCode == RESULT_OK) {
- mAllFragment.onPickerResult(data);
- }
+ public void onAccountViewSelected(ContactListFilter filter) {
+ final Intent intent = new Intent();
+ intent.putExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER, filter);
+ onFilterMenuItemClicked(intent);
+ }
-// TODO fix or remove multipicker code
-// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
-// // Finish the activity if the sub activity was canceled as back key is used
-// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
-// finish();
-// }
-// break;
- }
+ public boolean isGroupView() {
+ return mCurrentView == ContactsView.GROUP_VIEW;
}
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // TODO move to the fragment
+ protected boolean isAssistantView() {
+ return mCurrentView == ContactsView.ASSISTANT;
+ }
- // Bring up the search UI if the user starts typing
- final int unicodeChar = event.getUnicodeChar();
- if ((unicodeChar != 0)
- // If COMBINING_ACCENT is set, it's not a unicode character.
- && ((unicodeChar & KeyCharacterMap.COMBINING_ACCENT) == 0)
- && !Character.isWhitespace(unicodeChar)) {
- if (mActionBarAdapter.isSelectionMode()) {
- // Ignore keyboard input when in selection mode.
- return true;
- }
- String query = new String(new int[]{unicodeChar}, 0, 1);
- if (!mActionBarAdapter.isSearchMode()) {
- mActionBarAdapter.setSearchMode(true);
- mActionBarAdapter.setQueryString(query);
- return true;
- }
- }
+ protected boolean isAllContactsView() {
+ return mCurrentView == ContactsView.ALL_CONTACTS;
+ }
- return super.onKeyDown(keyCode, event);
+ protected boolean isAccountView() {
+ return mCurrentView == ContactsView.ACCOUNT_VIEW;
}
- @Override
- public void onBackPressed() {
- if (!isSafeToCommitTransactions()) {
- return;
- }
+ public boolean isInSecondLevel() {
+ return isGroupView() || isAssistantView();
+ }
- if (mActionBarAdapter.isSelectionMode()) {
- mActionBarAdapter.setSelectionMode(false);
- mAllFragment.displayCheckBoxes(false);
- } else if (mActionBarAdapter.isSearchMode()) {
- mActionBarAdapter.setSearchMode(false);
+ private boolean isInThirdLevel() {
+ return isLastBackStackTag(TAG_THIRD_LEVEL);
+ }
- if (mAllFragment.wasSearchResultClicked()) {
- mAllFragment.resetSearchResultClicked();
- } else {
- Logger.logScreenView(this, ScreenType.SEARCH_EXIT);
- Logger.logSearchEvent(mAllFragment.createSearchState());
+ private boolean isLastBackStackTag(String tag) {
+ final int count = getFragmentManager().getBackStackEntryCount();
+ if (count > 0) {
+ final FragmentManager.BackStackEntry last =
+ getFragmentManager().getBackStackEntryAt(count - 1);
+ if (tag == null) {
+ return last.getName() == null;
}
- } else {
- super.onBackPressed();
+ return tag.equals(last.getName());
}
+ return false;
}
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mActionBarAdapter.onSaveInstanceState(outState);
-
- // Clear the listener to make sure we don't get callbacks after onSaveInstanceState,
- // in order to avoid doing fragment transactions after it.
- // TODO Figure out a better way to deal with the issue.
- mDisableOptionItemSelected = true;
- mActionBarAdapter.setListener(null);
- if (mTabPager != null) {
- mTabPager.setOnPageChangeListener(null);
- }
+ private void popSecondLevel() {
+ getFragmentManager().popBackStackImmediate(
+ TAG_ASSISTANT_HELPER, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ getFragmentManager().popBackStackImmediate(
+ TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ mMembersFragment = null;
+ resetToolBarStatusBarColor();
}
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- // In our own lifecycle, the focus is saved and restore but later taken away by the
- // ViewPager. As a hack, we force focus on the SearchView if we know that we are searching.
- // This fixes the keyboard going away on screen rotation
- if (mActionBarAdapter.isSearchMode()) {
- mActionBarAdapter.setFocusOnSearchView();
- }
+ public void closeDrawer() {
+ mDrawerLayout.closeDrawer(GravityCompat.START);
}
- @Override
- public DialogManager getDialogManager() {
- return mDialogManager;
+ private Intent createPreferenceIntent() {
+ final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
+ intent.putExtra(ContactsPreferenceActivity.EXTRA_NEW_LOCAL_PROFILE,
+ ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE);
+ return intent;
}
- @Override
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.floating_action_button:
- Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- intent.putExtras(extras);
- }
- try {
- ImplicitIntentsUtil.startActivityInApp(PeopleActivity.this, intent);
- } catch (ActivityNotFoundException ex) {
- Toast.makeText(PeopleActivity.this, R.string.missing_app,
- Toast.LENGTH_SHORT).show();
- }
- break;
- default:
- Log.wtf(TAG, "Unexpected onClick event from " + view);
- }
- }
- /**
- * Returns the tab position adjusted for the text direction.
- */
- private int getTabPositionForTextDirection(int position) {
- if (isRTL()) {
- return TabState.COUNT - 1 - position;
- }
- return position;
- }
}
diff --git a/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java b/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java
new file mode 100644
index 000000000..0e0d5da91
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java
@@ -0,0 +1,88 @@
+/*
+ * 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.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Requests permissions that are not absolutely required by the calling Activity;
+ * if permissions are denied, the calling Activity is still restarted.
+ *
+ * Activities that have a set of permissions that must be granted in order for the Activity to
+ * function propertly should call
+ * {@link RequestPermissionsActivity#startPermissionActivity(Activity, String[], Class)}
+ * before calling {@link RequestDesiredPermissionsActivity#startPermissionActivity(Activity)}.
+ */
+public class RequestDesiredPermissionsActivity extends RequestPermissionsActivityBase {
+
+ private static String[] sDesiredPermissions;
+
+ @Override
+ protected String[] getPermissions() {
+ return getPermissions(getPackageManager());
+ }
+
+ /**
+ * If any desired permission that Contacts app needs are missing, open an Activity
+ * to prompt user for these permissions. After that calling activity is restarted
+ * and in the second run permission check is skipped.
+ *
+ * This is designed to be called inside {@link android.app.Activity#onCreate}
+ */
+ public static boolean startPermissionActivity(Activity activity) {
+ final Bundle extras = activity.getIntent().getExtras();
+ if (extras != null && extras.getBoolean(EXTRA_STARTED_PERMISSIONS_ACTIVITY, false)) {
+ return false;
+ }
+ return startPermissionActivity(activity,
+ getPermissions(activity.getPackageManager()),
+ RequestDesiredPermissionsActivity.class);
+ }
+
+ private static String[] getPermissions(PackageManager packageManager) {
+ if (sDesiredPermissions == null) {
+ final List<String> permissions = new ArrayList<>();
+ // Calendar group
+ permissions.add(permission.READ_CALENDAR);
+
+ if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+ // SMS group
+ permissions.add(permission.READ_SMS);
+ }
+ sDesiredPermissions = permissions.toArray(new String[0]);
+ }
+ return sDesiredPermissions;
+ }
+
+ @Override
+ public void onRequestPermissionsResult(
+ int requestCode, String permissions[], int[] grantResults) {
+ mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ startActivity(mPreviousActivityIntent);
+ overridePendingTransition(0, 0);
+
+ finish();
+ overridePendingTransition(0, 0);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
new file mode 100644
index 000000000..224339af7
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
@@ -0,0 +1,53 @@
+/*
+ * 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.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+
+/**
+ * Activity that requests permissions needed for ImportVCardActivity.
+ */
+public class RequestImportVCardPermissionsActivity extends RequestPermissionsActivity {
+
+ private static final String[] REQUIRED_PERMISSIONS = new String[] {
+ // Contacts group
+ permission.GET_ACCOUNTS,
+ permission.READ_CONTACTS,
+ permission.WRITE_CONTACTS,
+ // Storage group
+ permission.READ_EXTERNAL_STORAGE,
+ };
+
+ @Override
+ protected String[] getPermissions() {
+ return REQUIRED_PERMISSIONS;
+ }
+
+ /**
+ * If any permissions the Contacts app needs are missing, open an Activity
+ * to prompt the user for these permissions. Moreover, finish the current activity.
+ *
+ * This is designed to be called inside {@link android.app.Activity#onCreate}
+ *
+ * @param isCallerSelf whether the vcard import was started from the contacts app itself.
+ */
+ public static boolean startPermissionActivity(Activity activity, boolean isCallerSelf) {
+ return startPermissionActivity(activity, REQUIRED_PERMISSIONS, isCallerSelf,
+ RequestImportVCardPermissionsActivity.class);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/activities/RequestPermissionsActivity.java b/src/com/android/contacts/activities/RequestPermissionsActivity.java
new file mode 100644
index 000000000..bcfa12842
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestPermissionsActivity.java
@@ -0,0 +1,102 @@
+/*
+ * 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.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.support.v4.content.LocalBroadcastManager;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Activity that requests permissions needed for activities exported from Contacts.
+ */
+public class RequestPermissionsActivity extends RequestPermissionsActivityBase {
+
+ public static final String BROADCAST_PERMISSIONS_GRANTED = "broadcastPermissionsGranted";
+
+ private static String[] sRequiredPermissions;
+
+ @Override
+ protected String[] getPermissions() {
+ return getPermissions(getPackageManager());
+ }
+
+ /**
+ * Method to check if the required permissions are given.
+ */
+ public static boolean hasRequiredPermissions(Context context) {
+ return hasPermissions(context, getPermissions(context.getPackageManager()));
+ }
+
+ public static boolean startPermissionActivityIfNeeded(Activity activity) {
+ return startPermissionActivity(activity,
+ getPermissions(activity.getPackageManager()),
+ RequestPermissionsActivity.class);
+ }
+
+ private static String[] getPermissions(PackageManager packageManager) {
+ if (sRequiredPermissions == null) {
+ final List<String> permissions = new ArrayList<>();
+ // Contacts group
+ permissions.add(permission.GET_ACCOUNTS);
+ permissions.add(permission.READ_CONTACTS);
+ permissions.add(permission.WRITE_CONTACTS);
+
+ if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+ // Phone group
+ // These are only used in a few places such as QuickContactActivity and
+ // ImportExportDialogFragment. We work around missing this permission when
+ // telephony is not available on the device (i.e. on tablets).
+ permissions.add(permission.CALL_PHONE);
+ permissions.add(permission.READ_CALL_LOG);
+ permissions.add(permission.READ_PHONE_STATE);
+ }
+ sRequiredPermissions = permissions.toArray(new String[0]);
+ }
+ return sRequiredPermissions;
+ }
+
+ @Override
+ public void onRequestPermissionsResult(
+ int requestCode, String permissions[], int[] grantResults) {
+ if (permissions != null && permissions.length > 0
+ && isAllGranted(permissions, grantResults)) {
+ mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+ if (mIsCallerSelf) {
+ startActivityForResult(mPreviousActivityIntent, 0);
+ } else {
+ startActivity(mPreviousActivityIntent);
+ }
+ finish();
+ overridePendingTransition(0, 0);
+
+ LocalBroadcastManager.getInstance(this).sendBroadcast(
+ new Intent(BROADCAST_PERMISSIONS_GRANTED));
+ } else {
+ Toast.makeText(this, R.string.missing_required_permission, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+ }
+}
diff --git a/src/com/android/contacts/activities/RequestPermissionsActivityBase.java b/src/com/android/contacts/activities/RequestPermissionsActivityBase.java
new file mode 100644
index 000000000..1c11905dc
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestPermissionsActivityBase.java
@@ -0,0 +1,160 @@
+/*
+ * 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.activities;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.os.Trace;
+import android.support.v4.app.ActivityCompat;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.util.PermissionsUtil;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Activity that asks the user for all {@link #getPermissions} if any are missing.
+ *
+ * NOTE: As a result of b/22095159, this can behave oddly in the case where the final permission
+ * you are requesting causes an application restart.
+ */
+public abstract class RequestPermissionsActivityBase extends Activity
+ implements ActivityCompat.OnRequestPermissionsResultCallback {
+
+ public static final String PREVIOUS_ACTIVITY_INTENT = "previous_intent";
+
+ /** Whether the permissions activity was already started. */
+ protected static final String EXTRA_STARTED_PERMISSIONS_ACTIVITY =
+ "started_permissions_activity";
+
+ protected static final String EXTRA_IS_CALLER_SELF = "is_caller_self";
+
+ private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;
+
+ /**
+ * @return list of permissions that are needed in order for {@link #PREVIOUS_ACTIVITY_INTENT}
+ * to operate. You only need to return a single permission per permission group you care about.
+ */
+ protected abstract String[] getPermissions();
+
+ protected Intent mPreviousActivityIntent;
+
+ /** If true then start the target activity "for result" after permissions are granted. */
+ protected boolean mIsCallerSelf;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mPreviousActivityIntent = (Intent) getIntent().getExtras().get(PREVIOUS_ACTIVITY_INTENT);
+ mIsCallerSelf = getIntent().getBooleanExtra(EXTRA_IS_CALLER_SELF, false);
+
+ // Only start a requestPermissions() flow when first starting this activity the first time.
+ // The process is likely to be restarted during the permission flow (necessary to enable
+ // permissions) so this is important to track.
+ if (savedInstanceState == null) {
+ requestPermissions();
+ }
+ }
+
+ /**
+ * If any permissions the Contacts app needs are missing, open an Activity
+ * to prompt the user for these permissions. Moreover, finish the current activity.
+ *
+ * This is designed to be called inside {@link android.app.Activity#onCreate}
+ */
+ protected static boolean startPermissionActivity(Activity activity,
+ String[] requiredPermissions, Class<?> newActivityClass) {
+ return startPermissionActivity(activity, requiredPermissions, /* isCallerSelf */ false,
+ newActivityClass);
+ }
+
+ protected static boolean startPermissionActivity(Activity activity,
+ String[] requiredPermissions, boolean isCallerSelf, Class<?> newActivityClass) {
+ if (!hasPermissions(activity, requiredPermissions)) {
+ final Intent intent = new Intent(activity, newActivityClass);
+ activity.getIntent().putExtra(EXTRA_STARTED_PERMISSIONS_ACTIVITY, true);
+ intent.putExtra(PREVIOUS_ACTIVITY_INTENT, activity.getIntent());
+ intent.putExtra(EXTRA_IS_CALLER_SELF, isCallerSelf);
+ activity.startActivity(intent);
+ activity.finish();
+ return true;
+ }
+
+ // Account type initialization must be delayed until the Contacts permission group
+ // has been granted (since GET_ACCOUNTS) falls under that groups. Previously it
+ // was initialized in ContactApplication which would cause problems as
+ // AccountManager.getAccounts would return an empty array. See b/22690336
+ AccountTypeManager.getInstance(activity);
+
+ return false;
+ }
+
+ protected boolean isAllGranted(String permissions[], int[] grantResult) {
+ for (int i = 0; i < permissions.length; i++) {
+ if (grantResult[i] != PackageManager.PERMISSION_GRANTED
+ && isPermissionRequired(permissions[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isPermissionRequired(String p) {
+ return Arrays.asList(getPermissions()).contains(p);
+ }
+
+ private void requestPermissions() {
+ Trace.beginSection("requestPermissions");
+ try {
+ // Construct a list of missing permissions
+ final ArrayList<String> unsatisfiedPermissions = new ArrayList<>();
+ for (String permission : getPermissions()) {
+ if (!PermissionsUtil.hasPermission(this, permission)) {
+ unsatisfiedPermissions.add(permission);
+ }
+ }
+ if (unsatisfiedPermissions.size() == 0) {
+ throw new RuntimeException("Request permission activity was called even"
+ + " though all permissions are satisfied.");
+ }
+ ActivityCompat.requestPermissions(
+ this,
+ unsatisfiedPermissions.toArray(new String[unsatisfiedPermissions.size()]),
+ PERMISSIONS_REQUEST_ALL_PERMISSIONS);
+ } finally {
+ Trace.endSection();
+ }
+ }
+
+ protected static boolean hasPermissions(Context context, String[] permissions) {
+ Trace.beginSection("hasPermission");
+ try {
+ for (String permission : permissions) {
+ if (!PermissionsUtil.hasPermission(context, permission)) {
+ return false;
+ }
+ }
+ return true;
+ } finally {
+ Trace.endSection();
+ }
+ }
+}
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index 6a516ad1b..8c943640e 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -34,11 +34,10 @@ import android.telecom.PhoneAccount;
import android.text.TextUtils;
import android.util.Log;
-import com.android.contacts.common.ContactsUtils;
import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
import com.android.contacts.util.NotifyingAsyncQueryHandler;
/**
@@ -88,7 +87,7 @@ public final class ShowOrCreateActivity extends ContactsActivity
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (RequestPermissionsActivity.startPermissionActivity(this)) {
+ if (RequestPermissionsActivity.startPermissionActivityIfNeeded(this)) {
return;
}
diff --git a/src/com/android/contacts/activities/SimImportActivity.java b/src/com/android/contacts/activities/SimImportActivity.java
new file mode 100644
index 000000000..2dff45b43
--- /dev/null
+++ b/src/com/android/contacts/activities/SimImportActivity.java
@@ -0,0 +1,49 @@
+/*
+ * 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.activities;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.os.Bundle;
+
+import com.android.contacts.AppCompatContactsActivity;
+import com.android.contacts.R;
+import com.android.contacts.SimImportFragment;
+import com.android.contacts.model.SimCard;
+
+/**
+ * Host activity for SimImportFragment
+ *
+ * Initially SimImportFragment was a DialogFragment but there were accessibility issues with
+ * that so it was changed to an activity
+ */
+public class SimImportActivity extends AppCompatContactsActivity {
+
+ public static final String EXTRA_SUBSCRIPTION_ID = "extraSubscriptionId";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.sim_import_activity);
+ final FragmentManager fragmentManager = getFragmentManager();
+ Fragment fragment = fragmentManager.findFragmentByTag("SimImport");
+ if (fragment == null) {
+ fragment = SimImportFragment.newInstance(getIntent().getIntExtra(EXTRA_SUBSCRIPTION_ID,
+ SimCard.NO_SUBSCRIPTION_ID));
+ fragmentManager.beginTransaction().add(R.id.root, fragment, "SimImport").commit();
+ }
+ }
+}
diff --git a/src/com/android/contacts/activities/TransactionSafeActivity.java b/src/com/android/contacts/activities/TransactionSafeActivity.java
new file mode 100644
index 000000000..b17766544
--- /dev/null
+++ b/src/com/android/contacts/activities/TransactionSafeActivity.java
@@ -0,0 +1,65 @@
+/*
+ * 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.activities;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
+ * not.
+ */
+public abstract class TransactionSafeActivity extends Activity {
+
+ private boolean mIsSafeToCommitTransactions;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mIsSafeToCommitTransactions = true;
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mIsSafeToCommitTransactions = false;
+ }
+
+ /**
+ * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
+ * whether {@link Activity#onSaveInstanceState} has been called or not.
+ *
+ * Make sure that the current activity calls into
+ * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
+ * so the flag is properly set.
+ */
+ public boolean isSafeToCommitTransactions() {
+ return mIsSafeToCommitTransactions;
+ }
+}
diff --git a/src/com/android/contacts/compat/CallSdkCompat.java b/src/com/android/contacts/compat/CallSdkCompat.java
new file mode 100644
index 000000000..d8fbc9a3a
--- /dev/null
+++ b/src/com/android/contacts/compat/CallSdkCompat.java
@@ -0,0 +1,57 @@
+/*
+ * 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.compat;
+
+import android.telecom.Call;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class CallSdkCompat {
+ public static class Details {
+ // TODO: This property is hidden in the N release; replace with actual when the API is
+ // made public.
+ public static final int PROPERTY_IS_EXTERNAL_CALL = 0x00000040;
+ public static final int PROPERTY_ENTERPRISE_CALL = Call.Details.PROPERTY_ENTERPRISE_CALL;
+ // TODO: This capability is hidden in the N release; replace with actual when the API is
+ // made public.
+ public static final int CAPABILITY_CAN_PULL_CALL = 0x00800000;
+ public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO =
+ Call.Details.CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO;
+ }
+
+ /**
+ * TODO: This API is hidden in the N release; replace the implementation with a call to the
+ * actual once it is made public.
+ */
+ public static void pullExternalCall(Call call) {
+ if (!CompatUtils.isNCompatible()) {
+ return;
+ }
+ Class<?> callClass = Call.class;
+ try {
+ Method pullExternalCallMethod = callClass.getDeclaredMethod("pullExternalCall");
+ pullExternalCallMethod.invoke(call);
+ } catch (NoSuchMethodException e) {
+ // Ignore requests to pull call if there is a problem.
+ } catch (InvocationTargetException e) {
+ // Ignore requests to pull call if there is a problem.
+ } catch (IllegalAccessException e) {
+ // Ignore requests to pull call if there is a problem.
+ }
+ }
+}
diff --git a/src/com/android/contacts/compat/CallableCompat.java b/src/com/android/contacts/compat/CallableCompat.java
new file mode 100644
index 000000000..bcc675ccb
--- /dev/null
+++ b/src/com/android/contacts/compat/CallableCompat.java
@@ -0,0 +1,36 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
+
+import com.android.contacts.ContactsUtils;
+
+public class CallableCompat {
+
+ // TODO: Use N APIs
+ private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+ Uri.withAppendedPath(Callable.CONTENT_URI, "filter_enterprise");
+
+ public static Uri getContentFilterUri() {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return ENTERPRISE_CONTENT_FILTER_URI;
+ }
+ return Callable.CONTENT_FILTER_URI;
+ }
+}
diff --git a/src/com/android/contacts/compat/CompatUtils.java b/src/com/android/contacts/compat/CompatUtils.java
new file mode 100644
index 000000000..10b627b2b
--- /dev/null
+++ b/src/com/android/contacts/compat/CompatUtils.java
@@ -0,0 +1,286 @@
+/*
+ * 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.compat;
+
+import android.os.Build;
+import android.os.Build.VERSION;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.model.CPOWrapper;
+
+import java.lang.reflect.InvocationTargetException;
+
+public final class CompatUtils {
+
+ private static final String TAG = CompatUtils.class.getSimpleName();
+
+ /**
+ * These 4 variables are copied from ContentProviderOperation for compatibility.
+ */
+ public final static int TYPE_INSERT = 1;
+
+ public final static int TYPE_UPDATE = 2;
+
+ public final static int TYPE_DELETE = 3;
+
+ public final static int TYPE_ASSERT = 4;
+
+ /**
+ * Returns whether the operation in CPOWrapper is of TYPE_INSERT;
+ */
+ public static boolean isInsertCompat(CPOWrapper cpoWrapper) {
+ if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+ return cpoWrapper.getOperation().isInsert();
+ }
+ return (cpoWrapper.getType() == TYPE_INSERT);
+ }
+
+ /**
+ * Returns whether the operation in CPOWrapper is of TYPE_UPDATE;
+ */
+ public static boolean isUpdateCompat(CPOWrapper cpoWrapper) {
+ if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+ return cpoWrapper.getOperation().isUpdate();
+ }
+ return (cpoWrapper.getType() == TYPE_UPDATE);
+ }
+
+ /**
+ * Returns whether the operation in CPOWrapper is of TYPE_DELETE;
+ */
+ public static boolean isDeleteCompat(CPOWrapper cpoWrapper) {
+ if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+ return cpoWrapper.getOperation().isDelete();
+ }
+ return (cpoWrapper.getType() == TYPE_DELETE);
+ }
+ /**
+ * Returns whether the operation in CPOWrapper is of TYPE_ASSERT;
+ */
+ public static boolean isAssertQueryCompat(CPOWrapper cpoWrapper) {
+ if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+ return cpoWrapper.getOperation().isAssertQuery();
+ }
+ return (cpoWrapper.getType() == TYPE_ASSERT);
+ }
+
+ /**
+ * PrioritizedMimeType is added in API level 23.
+ */
+ public static boolean hasPrioritizedMimeType() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
+ >= Build.VERSION_CODES.M;
+ }
+
+ /**
+ * Determines if this version is compatible with multi-SIM and the phone account APIs. Can also
+ * force the version to be lower through SdkVersionOverride.
+ *
+ * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
+ */
+ public static boolean isMSIMCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+ >= Build.VERSION_CODES.LOLLIPOP_MR1;
+ }
+
+ /**
+ * Determines if this version is compatible with video calling. Can also force the version to be
+ * lower through SdkVersionOverride.
+ *
+ * @return {@code true} if video calling is allowed, {@code false} otherwise.
+ */
+ public static boolean isVideoCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+ >= Build.VERSION_CODES.M;
+ }
+
+ /**
+ * Determines if this version is capable of using presence checking for video calling. Support
+ * for video call presence indication is added in SDK 24.
+ *
+ * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
+ */
+ public static boolean isVideoPresenceCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
+ > Build.VERSION_CODES.M;
+ }
+
+ /**
+ * Determines if this version is compatible with call subject. Can also force the version to be
+ * lower through SdkVersionOverride.
+ *
+ * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
+ */
+ public static boolean isCallSubjectCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+ >= Build.VERSION_CODES.M;
+ }
+
+ /**
+ * Determines if this version is compatible with a default dialer. Can also force the version to
+ * be lower through {@link SdkVersionOverride}.
+ *
+ * @return {@code true} if default dialer is a feature on this device, {@code false} otherwise.
+ */
+ public static boolean isDefaultDialerCompatible() {
+ return isMarshmallowCompatible();
+ }
+
+ /**
+ * Determines if this version is compatible with Lollipop Mr1-specific APIs. Can also force the
+ * version to be lower through SdkVersionOverride.
+ *
+ * @return {@code true} if runtime sdk is compatible with Lollipop MR1, {@code false} otherwise.
+ */
+ public static boolean isLollipopMr1Compatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP_MR1)
+ >= Build.VERSION_CODES.LOLLIPOP_MR1;
+ }
+
+ /**
+ * Determines if this version is compatible with Marshmallow-specific APIs. Can also force the
+ * version to be lower through SdkVersionOverride.
+ *
+ * @return {@code true} if runtime sdk is compatible with Marshmallow, {@code false} otherwise.
+ */
+ public static boolean isMarshmallowCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+ >= Build.VERSION_CODES.M;
+ }
+
+ /**
+ * Determines if this version is compatible with N-specific APIs.
+ *
+ * @return {@code true} if runtime sdk is compatible with N and the app is built with N, {@code
+ * false} otherwise.
+ */
+ public static boolean isNCompatible() {
+ return VERSION.SDK_INT >= 24;
+ }
+
+
+ public static boolean isNougatMr1Compatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.N_MR1)
+ >= Build.VERSION_CODES.N_MR1;
+ }
+
+ public static boolean isLauncherShortcutCompatible() {
+ return isNougatMr1Compatible();
+ }
+
+ /**
+ * Determines if the given class is available. Can be used to check if system apis exist at
+ * runtime.
+ *
+ * @param className the name of the class to look for.
+ * @return {@code true} if the given class is available, {@code false} otherwise or if className
+ * is empty.
+ */
+ public static boolean isClassAvailable(@Nullable String className) {
+ if (TextUtils.isEmpty(className)) {
+ return false;
+ }
+ try {
+ Class.forName(className);
+ return true;
+ } catch (ClassNotFoundException e) {
+ return false;
+ } catch (Throwable t) {
+ Log.e(TAG, "Unexpected exception when checking if class:" + className + " exists at "
+ + "runtime", t);
+ return false;
+ }
+ }
+
+ /**
+ * Determines if the given class's method is available to call. Can be used to check if system
+ * apis exist at runtime.
+ *
+ * @param className the name of the class to look for
+ * @param methodName the name of the method to look for
+ * @param parameterTypes the needed parameter types for the method to look for
+ * @return {@code true} if the given class is available, {@code false} otherwise or if className
+ * or methodName are empty.
+ */
+ public static boolean isMethodAvailable(@Nullable String className, @Nullable String methodName,
+ Class<?>... parameterTypes) {
+ if (TextUtils.isEmpty(className) || TextUtils.isEmpty(methodName)) {
+ return false;
+ }
+
+ try {
+ Class.forName(className).getMethod(methodName, parameterTypes);
+ return true;
+ } catch (ClassNotFoundException | NoSuchMethodException e) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Could not find method: " + className + "#" + methodName);
+ }
+ return false;
+ } catch (Throwable t) {
+ Log.e(TAG, "Unexpected exception when checking if method: " + className + "#"
+ + methodName + " exists at runtime", t);
+ return false;
+ }
+ }
+
+ /**
+ * Invokes a given class's method using reflection. Can be used to call system apis that exist
+ * at runtime but not in the SDK.
+ *
+ * @param instance The instance of the class to invoke the method on.
+ * @param methodName The name of the method to invoke.
+ * @param parameterTypes The needed parameter types for the method.
+ * @param parameters The parameter values to pass into the method.
+ * @return The result of the invocation or {@code null} if instance or methodName are empty, or
+ * if the reflection fails.
+ */
+ @Nullable
+ public static Object invokeMethod(@Nullable Object instance, @Nullable String methodName,
+ Class<?>[] parameterTypes, Object[] parameters) {
+ if (instance == null || TextUtils.isEmpty(methodName)) {
+ return null;
+ }
+
+ String className = instance.getClass().getName();
+ try {
+ return Class.forName(className).getMethod(methodName, parameterTypes)
+ .invoke(instance, parameters);
+ } catch (ClassNotFoundException | NoSuchMethodException | IllegalArgumentException
+ | IllegalAccessException | InvocationTargetException e) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Could not invoke method: " + className + "#" + methodName);
+ }
+ return null;
+ } catch (Throwable t) {
+ Log.e(TAG, "Unexpected exception when invoking method: " + className
+ + "#" + methodName + " at runtime", t);
+ return null;
+ }
+ }
+
+ /**
+ * Determines if this version is compatible with Lollipop-specific APIs. Can also force the
+ * version to be lower through SdkVersionOverride.
+ *
+ * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
+ */
+ public static boolean isLollipopCompatible() {
+ return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+ >= Build.VERSION_CODES.LOLLIPOP;
+ }
+}
diff --git a/src/com/android/contacts/compat/ContactsCompat.java b/src/com/android/contacts/compat/ContactsCompat.java
new file mode 100644
index 000000000..3b090b5d2
--- /dev/null
+++ b/src/com/android/contacts/compat/ContactsCompat.java
@@ -0,0 +1,61 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+
+import com.android.contacts.ContactsUtils;
+
+/**
+ * Compatibility class for {@link ContactsContract.Contacts}
+ */
+public class ContactsCompat {
+ /**
+ * Not instantiable.
+ */
+ private 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;
+
+ public static Uri getContentUri() {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return ENTERPRISE_CONTENT_FILTER_URI;
+ }
+ 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/src/com/android/contacts/compat/DirectoryCompat.java b/src/com/android/contacts/compat/DirectoryCompat.java
new file mode 100644
index 000000000..95e021f7e
--- /dev/null
+++ b/src/com/android/contacts/compat/DirectoryCompat.java
@@ -0,0 +1,53 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.Directory;
+
+import com.android.contacts.ContactsUtils;
+
+public class DirectoryCompat {
+
+ public static Uri getContentUri() {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return DirectorySdkCompat.ENTERPRISE_CONTENT_URI;
+ }
+ return Directory.CONTENT_URI;
+ }
+
+ public static boolean isInvisibleDirectory(long directoryId) {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return (directoryId == Directory.LOCAL_INVISIBLE
+ || directoryId == DirectorySdkCompat.ENTERPRISE_LOCAL_INVISIBLE);
+ }
+ return directoryId == Directory.LOCAL_INVISIBLE;
+ }
+
+ public static boolean isRemoteDirectoryId(long directoryId) {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return DirectorySdkCompat.isRemoteDirectoryId(directoryId);
+ }
+ return !(directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE);
+ }
+
+ public static boolean isEnterpriseDirectoryId(long directoryId) {
+ return ContactsUtils.FLAG_N_FEATURE
+ ? DirectorySdkCompat.isEnterpriseDirectoryId(directoryId)
+ : false;
+ }
+}
diff --git a/src/com/android/contacts/compat/DirectorySdkCompat.java b/src/com/android/contacts/compat/DirectorySdkCompat.java
new file mode 100644
index 000000000..32b918c7b
--- /dev/null
+++ b/src/com/android/contacts/compat/DirectorySdkCompat.java
@@ -0,0 +1,37 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.Directory;
+
+public class DirectorySdkCompat {
+
+ private static final String TAG = "DirectorySdkCompat";
+
+ public static final Uri ENTERPRISE_CONTENT_URI = Directory.ENTERPRISE_CONTENT_URI;
+ public static final long ENTERPRISE_LOCAL_DEFAULT = Directory.ENTERPRISE_DEFAULT;
+ public static final long ENTERPRISE_LOCAL_INVISIBLE = Directory.ENTERPRISE_LOCAL_INVISIBLE;
+
+ public static boolean isRemoteDirectoryId(long directoryId) {
+ return CompatUtils.isNCompatible() ? Directory.isRemoteDirectoryId(directoryId) : false;
+ }
+
+ public static boolean isEnterpriseDirectoryId(long directoryId) {
+ return CompatUtils.isNCompatible() ? Directory.isEnterpriseDirectoryId(directoryId) : false;
+ }
+}
diff --git a/src/com/android/contacts/compat/EdgeEffectCompat.java b/src/com/android/contacts/compat/EdgeEffectCompat.java
index 92999a083..b93ff9042 100644
--- a/src/com/android/contacts/compat/EdgeEffectCompat.java
+++ b/src/com/android/contacts/compat/EdgeEffectCompat.java
@@ -17,7 +17,6 @@
package com.android.contacts.compat;
import android.widget.EdgeEffect;
-import com.android.contacts.common.compat.CompatUtils;
/**
* Compatibility class for {@link android.widget.EdgeEffect}
diff --git a/src/com/android/contacts/compat/EventCompat.java b/src/com/android/contacts/compat/EventCompat.java
new file mode 100644
index 000000000..2ce8148b2
--- /dev/null
+++ b/src/com/android/contacts/compat/EventCompat.java
@@ -0,0 +1,58 @@
+/*
+ * 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.compat;
+
+import android.content.res.Resources;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.text.TextUtils;
+
+/**
+ * Compatibility class for {@link Event}
+ */
+public class EventCompat {
+ /**
+ * Not instantiable.
+ */
+ private EventCompat() {
+ }
+
+ /**
+ * Return a {@link CharSequence} that best describes the given type, possibly substituting
+ * the given label value for TYPE_CUSTOM.
+ */
+ public static CharSequence getTypeLabel(Resources res, int type, CharSequence label) {
+ if (CompatUtils.isLollipopCompatible()) {
+ return Event.getTypeLabel(res, type, label);
+ } else {
+ return getTypeLabelInternal(res, type, label);
+ }
+ }
+
+ /**
+ * The method was added in API level 21, and below is the implementation copied from
+ * {@link Event#getTypeLabel(Resources, int, CharSequence)}
+ */
+ private static CharSequence getTypeLabelInternal(Resources res, int type, CharSequence label) {
+ if (type == BaseTypes.TYPE_CUSTOM && !TextUtils.isEmpty(label)) {
+ return label;
+ } else {
+ return res.getText(Event.getTypeResource(type));
+ }
+ }
+
+}
diff --git a/src/com/android/contacts/compat/MultiWindowCompat.java b/src/com/android/contacts/compat/MultiWindowCompat.java
new file mode 100644
index 000000000..61af51635
--- /dev/null
+++ b/src/com/android/contacts/compat/MultiWindowCompat.java
@@ -0,0 +1,28 @@
+/*
+ * 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.compat;
+
+import android.app.Activity;
+
+public class MultiWindowCompat {
+ /**
+ * Returns true if the activity is currently in multi-window mode.
+ */
+ public static boolean isInMultiWindowMode(Activity activity) {
+ return CompatUtils.isNCompatible() ? activity.isInMultiWindowMode() : false;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/compat/PhoneAccountCompat.java b/src/com/android/contacts/compat/PhoneAccountCompat.java
new file mode 100644
index 000000000..5c396f54f
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneAccountCompat.java
@@ -0,0 +1,101 @@
+/*
+ * 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.compat;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccount;
+import android.util.Log;
+
+/**
+ * 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.
+ *
+ * @param phoneAccount the PhoneAccount from which to build the icon.
+ * @param context A {@code Context} to use for loading Drawables.
+ *
+ * @return An icon for this PhoneAccount, or null
+ */
+ @Nullable
+ public static Drawable createIconDrawable(@Nullable PhoneAccount phoneAccount,
+ @Nullable Context context) {
+ if (phoneAccount == null || context == null) {
+ return null;
+ }
+
+ if (CompatUtils.isMarshmallowCompatible()) {
+ return createIconDrawableMarshmallow(phoneAccount, context);
+ }
+
+ if (CompatUtils.isLollipopMr1Compatible()) {
+ return createIconDrawableLollipopMr1(phoneAccount, context);
+ }
+ return null;
+ }
+
+ @Nullable
+ private static Drawable createIconDrawableMarshmallow(PhoneAccount phoneAccount,
+ Context context) {
+ Icon accountIcon = getIcon(phoneAccount);
+ 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/src/com/android/contacts/compat/PhoneAccountSdkCompat.java b/src/com/android/contacts/compat/PhoneAccountSdkCompat.java
new file mode 100644
index 000000000..cb150c0f5
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneAccountSdkCompat.java
@@ -0,0 +1,37 @@
+/*
+ * 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.compat;
+
+import android.os.Bundle;
+import android.telecom.PhoneAccount;
+
+public class PhoneAccountSdkCompat {
+
+ private static final String TAG = "PhoneAccountSdkCompat";
+
+ public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH =
+ PhoneAccount.EXTRA_CALL_SUBJECT_MAX_LENGTH;
+ public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING =
+ PhoneAccount.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING;
+
+ public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE =
+ PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE;
+
+ public static Bundle getExtras(PhoneAccount account) {
+ return CompatUtils.isNCompatible() ? account.getExtras() : null;
+ }
+}
diff --git a/src/com/android/contacts/compat/PhoneCompat.java b/src/com/android/contacts/compat/PhoneCompat.java
new file mode 100644
index 000000000..67ef558a4
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneCompat.java
@@ -0,0 +1,36 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import com.android.contacts.ContactsUtils;
+
+public class PhoneCompat {
+
+ // TODO: Use N APIs
+ private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+ Uri.withAppendedPath(Phone.CONTENT_URI, "filter_enterprise");
+
+ public static Uri getContentFilterUri() {
+ if (ContactsUtils.FLAG_N_FEATURE) {
+ return ENTERPRISE_CONTENT_FILTER_URI;
+ }
+ return Phone.CONTENT_FILTER_URI;
+ }
+}
diff --git a/src/com/android/contacts/compat/PhoneLookupSdkCompat.java b/src/com/android/contacts/compat/PhoneLookupSdkCompat.java
new file mode 100644
index 000000000..770216f50
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneLookupSdkCompat.java
@@ -0,0 +1,23 @@
+/*
+ * 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.compat;
+
+import android.provider.ContactsContract;
+
+public class PhoneLookupSdkCompat {
+ public static final String CONTACT_ID = ContactsContract.PhoneLookup.CONTACT_ID;
+}
diff --git a/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java b/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java
new file mode 100644
index 000000000..46d727e26
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java
@@ -0,0 +1,27 @@
+/*
+ * 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.compat;
+
+import android.telephony.PhoneNumberFormattingTextWatcher;
+
+public class PhoneNumberFormattingTextWatcherCompat {
+ public static PhoneNumberFormattingTextWatcher newInstance(String countryCode) {
+ if (CompatUtils.isLollipopCompatible()) {
+ return new PhoneNumberFormattingTextWatcher(countryCode);
+ }
+ return new PhoneNumberFormattingTextWatcher();
+ }
+}
diff --git a/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java b/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java
new file mode 100644
index 000000000..0399b6860
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java
@@ -0,0 +1,188 @@
+/*
+ * 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.compat;
+
+import android.telephony.PhoneNumberUtils;
+import android.text.Spannable;
+import android.text.TextUtils;
+import android.text.style.TtsSpan;
+
+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 added in API level 23. In this way, we could enable the corresponding functionality
+ * for pre-M devices. We need maintain this class and keep it synced with PhoneNumberUtils.
+ * Another thing to keep in mind is that we use com.google.i18n rather than com.android.i18n in
+ * here, so we need make sure the application behavior is preserved.
+ */
+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);
+ }
+ }
+
+ 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();
+ }
+
+}
diff --git a/src/com/android/contacts/compat/PinnedPositionsCompat.java b/src/com/android/contacts/compat/PinnedPositionsCompat.java
index 044ef2019..59a48e392 100644
--- a/src/com/android/contacts/compat/PinnedPositionsCompat.java
+++ b/src/com/android/contacts/compat/PinnedPositionsCompat.java
@@ -20,8 +20,6 @@ import android.content.ContentResolver;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PinnedPositions;
-import com.android.contacts.common.compat.CompatUtils;
-
/**
* Compatibility class for {@link android.provider.ContactsContract.PinnedPositions}
*/
diff --git a/src/com/android/contacts/compat/ProviderStatusCompat.java b/src/com/android/contacts/compat/ProviderStatusCompat.java
index 2b5c820b4..35d514e21 100644
--- a/src/com/android/contacts/compat/ProviderStatusCompat.java
+++ b/src/com/android/contacts/compat/ProviderStatusCompat.java
@@ -1,3 +1,4 @@
+
/*
* Copyright (C) 2015 The Android Open Source Project
*
@@ -16,12 +17,8 @@
package com.android.contacts.compat;
-import android.os.Build;
import android.provider.ContactsContract.ProviderStatus;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.SdkVersionOverride;
-
/**
* This class contains constants from the pre-M version of ContactsContract.ProviderStatus class
* and also the mappings between pre-M constants and M constants for compatibility purpose,
diff --git a/src/com/android/contacts/compat/SdkVersionOverride.java b/src/com/android/contacts/compat/SdkVersionOverride.java
new file mode 100644
index 000000000..5f50fefc4
--- /dev/null
+++ b/src/com/android/contacts/compat/SdkVersionOverride.java
@@ -0,0 +1,45 @@
+/*
+ * 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.compat;
+
+import android.os.Build.VERSION;
+
+/**
+ * Class used to override the current sdk version to test specific branches of compatibility
+ * logic. When such branching occurs, use {@link #getSdkVersion(int)} rather than explicitly
+ * calling {@link VERSION#SDK_INT}. This allows the sdk version to be forced to a specific value.
+ */
+public class SdkVersionOverride {
+
+ /**
+ * Flag used to determine if override sdk versions are returned.
+ */
+ private static final boolean ALLOW_OVERRIDE_VERSION = false;
+
+ private SdkVersionOverride() {}
+
+ /**
+ * Gets the sdk version
+ *
+ * @param overrideVersion the version to attempt using
+ * @return overrideVersion if the {@link #ALLOW_OVERRIDE_VERSION} flag is set to {@code true},
+ * otherwise the current version
+ */
+ public static int getSdkVersion(int overrideVersion) {
+ return ALLOW_OVERRIDE_VERSION ? overrideVersion : VERSION.SDK_INT;
+ }
+}
diff --git a/src/com/android/contacts/compat/TelecomManagerUtil.java b/src/com/android/contacts/compat/TelecomManagerUtil.java
new file mode 100644
index 000000000..b6a030a4f
--- /dev/null
+++ b/src/com/android/contacts/compat/TelecomManagerUtil.java
@@ -0,0 +1,31 @@
+/*
+ * 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.compat;
+
+import android.content.Intent;
+import android.telecom.TelecomManager;
+
+/**
+ * Utility class for TelecomManager
+ */
+public class TelecomManagerUtil {
+ /**
+ * Creates {@link Intent} to launch the activity to manage blocked numbers.
+ */
+ public static Intent createManageBlockedNumbersIntent(TelecomManager tm) {
+ return CompatUtils.isNCompatible() ? tm.createManageBlockedNumbersIntent() : null;
+ }
+}
diff --git a/src/com/android/contacts/compat/TelephonyManagerCompat.java b/src/com/android/contacts/compat/TelephonyManagerCompat.java
new file mode 100644
index 000000000..07523b197
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyManagerCompat.java
@@ -0,0 +1,171 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+
+public class TelephonyManagerCompat {
+ public static final String TELEPHONY_MANAGER_CLASS = "android.telephony.TelephonyManager";
+
+ /**
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ * @return true if the current device is "voice capable".
+ * <p>
+ * "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.
+ * <p>
+ * 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)
+ *
+ * Returns 1 if the method or telephonyManager is not available.
+ *
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ */
+ public static int getPhoneCount(@Nullable TelephonyManager telephonyManager) {
+ 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.
+ *
+ * <p>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;
+ }
+
+ /**
+ * Whether the phone supports TTY mode.
+ *
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ * @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;
+ }
+
+ /**
+ * Whether the phone supports hearing aid compatibility.
+ *
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ * @return {@code true} if the device supports hearing aid compatibility, and {@code false}
+ * otherwise.
+ */
+ 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;
+ }
+
+ /**
+ * Returns the URI for the per-account voicemail ringtone set in Phone settings.
+ *
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
+ * retrieve the voicemail ringtone.
+ * @return The URI for the ringtone to play when receiving a voicemail from a specific
+ * PhoneAccount.
+ */
+ @Nullable
+ public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
+ PhoneAccountHandle accountHandle) {
+ if (!CompatUtils.isNCompatible()) {
+ return null;
+ }
+ return TelephonyManagerSdkCompat
+ .getVoicemailRingtoneUri(telephonyManager, accountHandle);
+ }
+
+ /**
+ * Returns whether vibration is set for voicemail notification in Phone settings.
+ *
+ * @param telephonyManager The telephony manager instance to use for method calls.
+ * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
+ * retrieve the voicemail vibration setting.
+ * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise.
+ */
+ public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
+ PhoneAccountHandle accountHandle) {
+ if (!CompatUtils.isNCompatible()) {
+ return true;
+ }
+ return TelephonyManagerSdkCompat
+ .isVoicemailVibrationEnabled(telephonyManager, accountHandle);
+ }
+}
diff --git a/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java b/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java
new file mode 100644
index 000000000..dec486ba8
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java
@@ -0,0 +1,38 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+
+/**
+ * On N and above, this will look up voicemail notification settings from Telephony.
+ */
+public class TelephonyManagerSdkCompat {
+ public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
+ PhoneAccountHandle accountHandle) {
+ return CompatUtils.isNCompatible()
+ ? telephonyManager.getVoicemailRingtoneUri(accountHandle) : null;
+ }
+
+ public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
+ PhoneAccountHandle accountHandle) {
+ return CompatUtils.isNCompatible()
+ ? telephonyManager.isVoicemailVibrationEnabled(accountHandle) : false;
+ }
+}
diff --git a/src/com/android/contacts/compat/TelephonyThreadsCompat.java b/src/com/android/contacts/compat/TelephonyThreadsCompat.java
new file mode 100644
index 000000000..545e1856d
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyThreadsCompat.java
@@ -0,0 +1,168 @@
+/*
+ * 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.compat;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.Patterns;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * This class contains static utility methods and variables extracted from Telephony and
+ * SqliteWrapper, and the methods were made visible in API level 23. In this way, we could
+ * enable the corresponding functionality for pre-M devices. We need maintain this class and keep
+ * it synced with Telephony and SqliteWrapper.
+ */
+public class TelephonyThreadsCompat {
+ /**
+ * Not instantiable.
+ */
+ private TelephonyThreadsCompat() {}
+
+ private static final String TAG = "TelephonyThreadsCompat";
+
+ public static long getOrCreateThreadId(Context context, String recipient) {
+ if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+ return Telephony.Threads.getOrCreateThreadId(context, recipient);
+ } else {
+ return getOrCreateThreadIdInternal(context, recipient);
+ }
+ }
+
+ // Below is code copied from Telephony and SqliteWrapper
+ /**
+ * Private {@code content://} style URL for this table. Used by
+ * {@link #getOrCreateThreadId(Context, Set)}.
+ */
+ private static final Uri THREAD_ID_CONTENT_URI = Uri.parse("content://mms-sms/threadID");
+
+ private static final String[] ID_PROJECTION = { BaseColumns._ID };
+
+ /**
+ * Regex pattern for names and email addresses.
+ * <ul>
+ * <li><em>mailbox</em> = {@code name-addr}</li>
+ * <li><em>name-addr</em> = {@code [display-name] angle-addr}</li>
+ * <li><em>angle-addr</em> = {@code [CFWS] "<" addr-spec ">" [CFWS]}</li>
+ * </ul>
+ */
+ private static final Pattern NAME_ADDR_EMAIL_PATTERN =
+ Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*");
+
+ /**
+ * Copied from {@link Telephony.Threads#getOrCreateThreadId(Context, String)}
+ */
+ private static long getOrCreateThreadIdInternal(Context context, String recipient) {
+ Set<String> recipients = new HashSet<String>();
+
+ recipients.add(recipient);
+ return getOrCreateThreadIdInternal(context, recipients);
+ }
+
+ /**
+ * Given the recipients list and subject of an unsaved message,
+ * return its thread ID. If the message starts a new thread,
+ * allocate a new thread ID. Otherwise, use the appropriate
+ * existing thread ID.
+ *
+ * <p>Find the thread ID of the same set of recipients (in any order,
+ * without any additions). If one is found, return it. Otherwise,
+ * return a unique thread ID.</p>
+ */
+ private static long getOrCreateThreadIdInternal(Context context, Set<String> recipients) {
+ Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
+
+ for (String recipient : recipients) {
+ if (isEmailAddress(recipient)) {
+ recipient = extractAddrSpec(recipient);
+ }
+
+ uriBuilder.appendQueryParameter("recipient", recipient);
+ }
+
+ Uri uri = uriBuilder.build();
+
+ Cursor cursor = query(
+ context.getContentResolver(), uri, ID_PROJECTION, null, null, null);
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ return cursor.getLong(0);
+ } else {
+ Log.e(TAG, "getOrCreateThreadId returned no rows!");
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+
+ Log.e(TAG, "getOrCreateThreadId failed with uri " + uri.toString());
+ throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
+ }
+
+ /**
+ * Copied from {@link SqliteWrapper#query}
+ */
+ private static Cursor query(ContentResolver resolver, Uri uri, String[] projection,
+ String selection, String[] selectionArgs, String sortOrder) {
+ try {
+ return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
+ } catch (Exception e) {
+ Log.e(TAG, "Catch an exception when query: ", e);
+ return null;
+ }
+ }
+
+ /**
+ * Is the specified address an email address?
+ *
+ * @param address the input address to test
+ * @return true if address is an email address; false otherwise.
+ */
+ private static boolean isEmailAddress(String address) {
+ if (TextUtils.isEmpty(address)) {
+ return false;
+ }
+
+ String s = extractAddrSpec(address);
+ Matcher match = Patterns.EMAIL_ADDRESS.matcher(s);
+ return match.matches();
+ }
+
+ /**
+ * Helper method to extract email address from address string.
+ */
+ private static String extractAddrSpec(String address) {
+ Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address);
+
+ if (match.matches()) {
+ return match.group(2);
+ }
+ return address;
+ }
+}
diff --git a/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java b/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java
new file mode 100644
index 000000000..881c1a45e
--- /dev/null
+++ b/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java
@@ -0,0 +1,48 @@
+/*
+ * 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.compat.telecom;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.telecom.TelecomManager;
+
+import com.android.contacts.compat.CompatUtils;
+
+/**
+ * Compatibility class for {@link android.telecom.TelecomManager}.
+ */
+public class TelecomManagerCompat {
+ /**
+ * 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);
+ }
+}
diff --git a/src/com/android/contacts/database/ContactUpdateUtils.java b/src/com/android/contacts/database/ContactUpdateUtils.java
new file mode 100644
index 000000000..233368812
--- /dev/null
+++ b/src/com/android/contacts/database/ContactUpdateUtils.java
@@ -0,0 +1,47 @@
+/*
+ * 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.database;
+
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.util.Log;
+
+/**
+ * Static methods to update contact information.
+ */
+public class ContactUpdateUtils {
+
+ private static final String TAG = ContactUpdateUtils.class.getSimpleName();
+
+ public static void setSuperPrimary(Context context, long dataId) {
+ if (dataId == -1) {
+ Log.e(TAG, "Invalid arguments for setSuperPrimary request");
+ return;
+ }
+
+ // Update the primary values in the data record.
+ ContentValues values = new ContentValues(2);
+ values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
+ values.put(ContactsContract.Data.IS_PRIMARY, 1);
+
+ context.getContentResolver().update(
+ ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, dataId),
+ values, null, null);
+ }
+}
diff --git a/src/com/android/contacts/database/EmptyCursor.java b/src/com/android/contacts/database/EmptyCursor.java
new file mode 100644
index 000000000..a6c17602e
--- /dev/null
+++ b/src/com/android/contacts/database/EmptyCursor.java
@@ -0,0 +1,84 @@
+/*
+* 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.database;
+
+import android.database.AbstractCursor;
+import android.database.CursorIndexOutOfBoundsException;
+
+/**
+ * A cursor that is empty.
+ * <p>
+ * If you want an empty cursor, this class is better than a MatrixCursor because it has less
+ * overhead.
+ */
+final public class EmptyCursor extends AbstractCursor {
+
+ private String[] mColumns;
+
+ public EmptyCursor(String[] columns) {
+ this.mColumns = columns;
+ }
+
+ @Override
+ public int getCount() {
+ return 0;
+ }
+
+ @Override
+ public String[] getColumnNames() {
+ return mColumns;
+ }
+
+ @Override
+ public String getString(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public short getShort(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public int getInt(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public long getLong(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public float getFloat(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public double getDouble(int column) {
+ throw cursorException();
+ }
+
+ @Override
+ public boolean isNull(int column) {
+ throw cursorException();
+ }
+
+ private CursorIndexOutOfBoundsException cursorException() {
+ return new CursorIndexOutOfBoundsException("Operation not permitted on an empty cursor.");
+ }
+}
diff --git a/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java b/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java
new file mode 100644
index 000000000..a7ff2618c
--- /dev/null
+++ b/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java
@@ -0,0 +1,69 @@
+/*
+ * 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.database;
+
+import android.content.AsyncQueryHandler;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+
+/**
+ * An {@AsyncQueryHandler} that will never return a null cursor.
+ * <p>
+ * Instead, will return a {@link Cursor} with 0 records.
+ */
+public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler {
+
+ public NoNullCursorAsyncQueryHandler(ContentResolver cr) {
+ super(cr);
+ }
+
+ @Override
+ public void startQuery(int token, Object cookie, Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String orderBy) {
+ final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection);
+ super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs,
+ orderBy);
+ }
+
+ @Override
+ protected final void onQueryComplete(int token, Object cookie, Cursor cursor) {
+ CookieWithProjection projectionCookie = (CookieWithProjection) cookie;
+
+ super.onQueryComplete(token, projectionCookie.originalCookie, cursor);
+
+ if (cursor == null) {
+ cursor = new EmptyCursor(projectionCookie.projection);
+ }
+ onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor);
+ }
+
+ protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor);
+
+ /**
+ * Class to add projection to an existing cookie.
+ */
+ private static class CookieWithProjection {
+ public final Object originalCookie;
+ public final String[] projection;
+
+ public CookieWithProjection(Object cookie, String[] projection) {
+ this.originalCookie = cookie;
+ this.projection = projection;
+ }
+ }
+}
diff --git a/src/com/android/contacts/database/SimContactDao.java b/src/com/android/contacts/database/SimContactDao.java
new file mode 100644
index 000000000..d6ed88d28
--- /dev/null
+++ b/src/com/android/contacts/database/SimContactDao.java
@@ -0,0 +1,110 @@
+/*
+ * 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.database;
+
+import android.content.ContentProviderResult;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.os.RemoteException;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.base.Function;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Provides data access methods for loading contacts from a SIM card and and migrating these
+ * SIM contacts to a CP2 account.
+ */
+public abstract class SimContactDao {
+
+ // Set to true for manual testing on an emulator or phone without a SIM card
+ // DO NOT SUBMIT if set to true
+ private static final boolean USE_FAKE_INSTANCE = false;
+
+ public static final Function<Context, SimContactDao> DEFAULT_FACTORY =
+ new Function<Context, SimContactDao>() {
+ @Override
+ public SimContactDao apply(Context context) {
+ return USE_FAKE_INSTANCE ?
+ createDebugInstance(context) :
+ new SimContactDaoImpl(context);
+ }
+ };
+ private static Function<? super Context, SimContactDao> sInstanceFactory = DEFAULT_FACTORY;
+
+ private static SimContactDao createDebugInstance(Context context) {
+ return new SimContactDaoImpl.DebugImpl(context)
+ .addSimCard(new SimCard("fake-sim-id1", 1, "Fake Carrier",
+ "Card 1", "15095550101", "us").withContacts(
+ new SimContact(1, "Sim One", "15095550111", null),
+ new SimContact(2, "Sim Two", "15095550112", null),
+ new SimContact(3, "Sim Three", "15095550113", null),
+ new SimContact(4, "Sim Four", "15095550114", null),
+ new SimContact(5, "411 & more", "411", null)
+ ))
+ .addSimCard(new SimCard("fake-sim-id2", 2, "Carrier Two",
+ "Card 2", "15095550102", "us").withContacts(
+ new SimContact(1, "John Sim", "15095550121", null),
+ new SimContact(2, "Bob Sim", "15095550122", null),
+ new SimContact(3, "Mary Sim", "15095550123", null),
+ new SimContact(4, "Alice Sim", "15095550124", null),
+ new SimContact(5, "Sim Duplicate", "15095550121", null)
+ ));
+ }
+
+ public static synchronized SimContactDao create(Context context) {
+ return sInstanceFactory.apply(context);
+ }
+
+ /**
+ * Sets the factory function used by {@link SimContactDao#create}
+ */
+ @VisibleForTesting
+ public static synchronized void setFactoryForTest(
+ Function<? super Context, SimContactDao> factory) {
+ sInstanceFactory = factory;
+ }
+
+ public abstract boolean canReadSimContacts();
+
+ public abstract List<SimCard> getSimCards();
+
+ public abstract ArrayList<SimContact> loadContactsForSim(SimCard sim);
+
+ public abstract ContentProviderResult[] importContacts(List<SimContact> contacts,
+ AccountWithDataSet targetAccount)
+ throws RemoteException, OperationApplicationException;
+
+ public abstract void persistSimStates(List<SimCard> simCards);
+
+ public abstract SimCard getSimBySubscriptionId(int subscriptionId);
+
+ public abstract Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+ List<SimContact> contacts);
+
+ public void persistSimState(SimCard sim) {
+ persistSimStates(Collections.singletonList(sim));
+ }
+}
diff --git a/src/com/android/contacts/database/SimContactDaoImpl.java b/src/com/android/contacts/database/SimContactDaoImpl.java
new file mode 100644
index 000000000..be6b32317
--- /dev/null
+++ b/src/com/android/contacts/database/SimContactDaoImpl.java
@@ -0,0 +1,485 @@
+/*
+ * 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.database;
+
+import android.annotation.TargetApi;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.RemoteException;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.support.annotation.VisibleForTesting;
+import android.support.v4.util.ArrayMap;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.SparseArray;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.SharedPreferenceUtil;
+import com.google.common.base.Joiner;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Provides data access methods for loading contacts from a SIM card and and migrating these
+ * SIM contacts to a CP2 account.
+ */
+public class SimContactDaoImpl extends SimContactDao {
+ private static final String TAG = "SimContactDao";
+
+ // Maximum number of SIM contacts to import in a single ContentResolver.applyBatch call.
+ // This is necessary to avoid TransactionTooLargeException when there are a large number of
+ // contacts. This has been tested on Nexus 6 NME70B and is probably be conservative enough
+ // to work on any phone.
+ private static final int IMPORT_MAX_BATCH_SIZE = 300;
+
+ // How many SIM contacts to consider in a single query. This prevents hitting the SQLite
+ // query parameter limit.
+ static final int QUERY_MAX_BATCH_SIZE = 100;
+
+ @VisibleForTesting
+ public static final Uri ICC_CONTENT_URI = Uri.parse("content://icc/adn");
+
+ public static String _ID = BaseColumns._ID;
+ public static String NAME = "name";
+ public static String NUMBER = "number";
+ public static String EMAILS = "emails";
+
+ private final Context mContext;
+ private final ContentResolver mResolver;
+ private final TelephonyManager mTelephonyManager;
+
+ public SimContactDaoImpl(Context context) {
+ this(context, context.getContentResolver(),
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
+ }
+
+ public SimContactDaoImpl(Context context, ContentResolver resolver,
+ TelephonyManager telephonyManager) {
+ mContext = context;
+ mResolver = resolver;
+ mTelephonyManager = telephonyManager;
+ }
+
+ public Context getContext() {
+ return mContext;
+ }
+
+ @Override
+ public boolean canReadSimContacts() {
+ // Require SIM_STATE_READY because the TelephonyManager methods related to SIM require
+ // this state
+ return hasTelephony() && hasPermissions() &&
+ mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
+ }
+
+ @Override
+ public List<SimCard> getSimCards() {
+ if (!canReadSimContacts()) {
+ return Collections.emptyList();
+ }
+ final List<SimCard> sims = CompatUtils.isMSIMCompatible() ?
+ getSimCardsFromSubscriptions() :
+ Collections.singletonList(SimCard.create(mTelephonyManager,
+ mContext.getString(R.string.single_sim_display_label)));
+ return SharedPreferenceUtil.restoreSimStates(mContext, sims);
+ }
+
+ @Override
+ public ArrayList<SimContact> loadContactsForSim(SimCard sim) {
+ if (sim.hasValidSubscriptionId()) {
+ return loadSimContacts(sim.getSubscriptionId());
+ }
+ return loadSimContacts();
+ }
+
+ public ArrayList<SimContact> loadSimContacts(int subscriptionId) {
+ return loadFrom(ICC_CONTENT_URI.buildUpon()
+ .appendPath("subId")
+ .appendPath(String.valueOf(subscriptionId))
+ .build());
+ }
+
+ public ArrayList<SimContact> loadSimContacts() {
+ return loadFrom(ICC_CONTENT_URI);
+ }
+
+ @Override
+ public ContentProviderResult[] importContacts(List<SimContact> contacts,
+ AccountWithDataSet targetAccount)
+ throws RemoteException, OperationApplicationException {
+ if (contacts.size() < IMPORT_MAX_BATCH_SIZE) {
+ return importBatch(contacts, targetAccount);
+ }
+ final List<ContentProviderResult> results = new ArrayList<>();
+ for (int i = 0; i < contacts.size(); i += IMPORT_MAX_BATCH_SIZE) {
+ results.addAll(Arrays.asList(importBatch(
+ contacts.subList(i, Math.min(contacts.size(), i + IMPORT_MAX_BATCH_SIZE)),
+ targetAccount)));
+ }
+ return results.toArray(new ContentProviderResult[results.size()]);
+ }
+
+ public void persistSimState(SimCard sim) {
+ SharedPreferenceUtil.persistSimStates(mContext, Collections.singletonList(sim));
+ }
+
+ @Override
+ public void persistSimStates(List<SimCard> simCards) {
+ SharedPreferenceUtil.persistSimStates(mContext, simCards);
+ }
+
+ @Override
+ public SimCard getSimBySubscriptionId(int subscriptionId) {
+ final List<SimCard> sims = SharedPreferenceUtil.restoreSimStates(mContext, getSimCards());
+ if (subscriptionId == SimCard.NO_SUBSCRIPTION_ID && !sims.isEmpty()) {
+ return sims.get(0);
+ }
+ for (SimCard sim : getSimCards()) {
+ if (sim.getSubscriptionId() == subscriptionId) {
+ return sim;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Finds SIM contacts that exist in CP2 and associates the account of the CP2 contact with
+ * the SIM contact
+ */
+ public Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+ List<SimContact> contacts) {
+ final Map<AccountWithDataSet, Set<SimContact>> result = new ArrayMap<>();
+ for (int i = 0; i < contacts.size(); i += QUERY_MAX_BATCH_SIZE) {
+ findAccountsOfExistingSimContacts(
+ contacts.subList(i, Math.min(contacts.size(), i + QUERY_MAX_BATCH_SIZE)),
+ result);
+ }
+ return result;
+ }
+
+ private void findAccountsOfExistingSimContacts(List<SimContact> contacts,
+ Map<AccountWithDataSet, Set<SimContact>> result) {
+ final Map<Long, List<SimContact>> rawContactToSimContact = new HashMap<>();
+ Collections.sort(contacts, SimContact.compareByPhoneThenName());
+
+ final Cursor dataCursor = queryRawContactsForSimContacts(contacts);
+
+ try {
+ while (dataCursor.moveToNext()) {
+ final String number = DataQuery.getPhoneNumber(dataCursor);
+ final String name = DataQuery.getDisplayName(dataCursor);
+
+ final int index = SimContact.findByPhoneAndName(contacts, number, name);
+ if (index < 0) {
+ continue;
+ }
+ final SimContact contact = contacts.get(index);
+ final long id = DataQuery.getRawContactId(dataCursor);
+ if (!rawContactToSimContact.containsKey(id)) {
+ rawContactToSimContact.put(id, new ArrayList<SimContact>());
+ }
+ rawContactToSimContact.get(id).add(contact);
+ }
+ } finally {
+ dataCursor.close();
+ }
+
+ final Cursor accountsCursor = queryAccountsOfRawContacts(rawContactToSimContact.keySet());
+ try {
+ while (accountsCursor.moveToNext()) {
+ final AccountWithDataSet account = AccountQuery.getAccount(accountsCursor);
+ final long id = AccountQuery.getId(accountsCursor);
+ if (!result.containsKey(account)) {
+ result.put(account, new HashSet<SimContact>());
+ }
+ for (SimContact contact : rawContactToSimContact.get(id)) {
+ result.get(account).add(contact);
+ }
+ }
+ } finally {
+ accountsCursor.close();
+ }
+ }
+
+
+ private ContentProviderResult[] importBatch(List<SimContact> contacts,
+ AccountWithDataSet targetAccount)
+ throws RemoteException, OperationApplicationException {
+ final ArrayList<ContentProviderOperation> ops =
+ createImportOperations(contacts, targetAccount);
+ return mResolver.applyBatch(ContactsContract.AUTHORITY, ops);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
+ private List<SimCard> getSimCardsFromSubscriptions() {
+ final SubscriptionManager subscriptionManager = (SubscriptionManager)
+ mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+ final List<SubscriptionInfo> subscriptions = subscriptionManager
+ .getActiveSubscriptionInfoList();
+ final ArrayList<SimCard> result = new ArrayList<>();
+ for (SubscriptionInfo subscriptionInfo : subscriptions) {
+ result.add(SimCard.create(subscriptionInfo));
+ }
+ return result;
+ }
+
+ private List<SimContact> getContactsForSim(SimCard sim) {
+ final List<SimContact> contacts = sim.getContacts();
+ return contacts != null ? contacts : loadContactsForSim(sim);
+ }
+
+ // See b/32831092
+ // Sometimes the SIM contacts provider seems to get stuck if read from multiple threads
+ // concurrently. So we just have a global lock around it to prevent potential issues.
+ private static final Object SIM_READ_LOCK = new Object();
+ private ArrayList<SimContact> loadFrom(Uri uri) {
+ synchronized (SIM_READ_LOCK) {
+ final Cursor cursor = mResolver.query(uri, null, null, null, null);
+ if (cursor == null) {
+ // Assume null means there are no SIM contacts.
+ return new ArrayList<>(0);
+ }
+
+ try {
+ return loadFromCursor(cursor);
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+
+ private ArrayList<SimContact> loadFromCursor(Cursor cursor) {
+ final int colId = cursor.getColumnIndex(_ID);
+ final int colName = cursor.getColumnIndex(NAME);
+ final int colNumber = cursor.getColumnIndex(NUMBER);
+ final int colEmails = cursor.getColumnIndex(EMAILS);
+
+ final ArrayList<SimContact> result = new ArrayList<>();
+
+ while (cursor.moveToNext()) {
+ final long id = cursor.getLong(colId);
+ final String name = cursor.getString(colName);
+ final String number = cursor.getString(colNumber);
+ final String emails = cursor.getString(colEmails);
+
+ final SimContact contact = new SimContact(id, name, number, parseEmails(emails));
+ // Only include contact if it has some useful data
+ if (contact.hasName() || contact.hasPhone() || contact.hasEmails()) {
+ result.add(contact);
+ }
+ }
+ return result;
+ }
+
+ private Cursor queryRawContactsForSimContacts(List<SimContact> contacts) {
+ final StringBuilder selectionBuilder = new StringBuilder();
+
+ int phoneCount = 0;
+ int nameCount = 0;
+ for (SimContact contact : contacts) {
+ if (contact.hasPhone()) {
+ phoneCount++;
+ } else if (contact.hasName()) {
+ nameCount++;
+ }
+ }
+ List<String> selectionArgs = new ArrayList<>(phoneCount + 1);
+
+ selectionBuilder.append('(');
+ selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
+ selectionArgs.add(Phone.CONTENT_ITEM_TYPE);
+
+ selectionBuilder.append(Phone.NUMBER).append(" IN (")
+ .append(Joiner.on(',').join(Collections.nCopies(phoneCount, '?')))
+ .append(')');
+ for (SimContact contact : contacts) {
+ if (contact.hasPhone()) {
+ selectionArgs.add(contact.getPhone());
+ }
+ }
+ selectionBuilder.append(')');
+
+ if (nameCount > 0) {
+ selectionBuilder.append(" OR (");
+
+ selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
+ selectionArgs.add(StructuredName.CONTENT_ITEM_TYPE);
+
+ selectionBuilder.append(Data.DISPLAY_NAME).append(" IN (")
+ .append(Joiner.on(',').join(Collections.nCopies(nameCount, '?')))
+ .append(')');
+ for (SimContact contact : contacts) {
+ if (!contact.hasPhone() && contact.hasName()) {
+ selectionArgs.add(contact.getName());
+ }
+ }
+ selectionBuilder.append(')');
+ }
+
+ return mResolver.query(Data.CONTENT_URI.buildUpon()
+ .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true")
+ .build(),
+ DataQuery.PROJECTION,
+ selectionBuilder.toString(),
+ selectionArgs.toArray(new String[selectionArgs.size()]),
+ null);
+ }
+
+ private Cursor queryAccountsOfRawContacts(Set<Long> ids) {
+ final StringBuilder selectionBuilder = new StringBuilder();
+
+ final String[] args = new String[ids.size()];
+
+ selectionBuilder.append(RawContacts._ID).append(" IN (")
+ .append(Joiner.on(',').join(Collections.nCopies(args.length, '?')))
+ .append(")");
+ int i = 0;
+ for (long id : ids) {
+ args[i++] = String.valueOf(id);
+ }
+ return mResolver.query(RawContacts.CONTENT_URI,
+ AccountQuery.PROJECTION,
+ selectionBuilder.toString(),
+ args,
+ null);
+ }
+
+ private ArrayList<ContentProviderOperation> createImportOperations(List<SimContact> contacts,
+ AccountWithDataSet targetAccount) {
+ final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+ for (SimContact contact : contacts) {
+ contact.appendCreateContactOperations(ops, targetAccount);
+ }
+ return ops;
+ }
+
+ private String[] parseEmails(String emails) {
+ return !TextUtils.isEmpty(emails) ? emails.split(",") : null;
+ }
+
+ private boolean hasTelephony() {
+ return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+ }
+
+ private boolean hasPermissions() {
+ return PermissionsUtil.hasContactsPermissions(mContext) &&
+ PermissionsUtil.hasPhonePermissions(mContext);
+ }
+
+ // TODO remove this class and the USE_FAKE_INSTANCE flag once this code is not under
+ // active development or anytime after 3/1/2017
+ public static class DebugImpl extends SimContactDaoImpl {
+
+ private List<SimCard> mSimCards = new ArrayList<>();
+ private SparseArray<SimCard> mCardsBySubscription = new SparseArray<>();
+
+ public DebugImpl(Context context) {
+ super(context);
+ }
+
+ public DebugImpl addSimCard(SimCard sim) {
+ mSimCards.add(sim);
+ mCardsBySubscription.put(sim.getSubscriptionId(), sim);
+ return this;
+ }
+
+ @Override
+ public List<SimCard> getSimCards() {
+ return SharedPreferenceUtil.restoreSimStates(getContext(), mSimCards);
+ }
+
+ @Override
+ public ArrayList<SimContact> loadContactsForSim(SimCard card) {
+ return new ArrayList<>(card.getContacts());
+ }
+
+ @Override
+ public boolean canReadSimContacts() {
+ return true;
+ }
+ }
+
+ // Query used for detecting existing contacts that may match a SimContact.
+ private static final class DataQuery {
+
+ public static final String[] PROJECTION = new String[] {
+ Data.RAW_CONTACT_ID, Phone.NUMBER, Data.DISPLAY_NAME, Data.MIMETYPE
+ };
+
+ public static final int RAW_CONTACT_ID = 0;
+ public static final int PHONE_NUMBER = 1;
+ public static final int DISPLAY_NAME = 2;
+ public static final int MIMETYPE = 3;
+
+ public static long getRawContactId(Cursor cursor) {
+ return cursor.getLong(RAW_CONTACT_ID);
+ }
+
+ public static String getPhoneNumber(Cursor cursor) {
+ return isPhoneNumber(cursor) ? cursor.getString(PHONE_NUMBER) : null;
+ }
+
+ public static String getDisplayName(Cursor cursor) {
+ return cursor.getString(DISPLAY_NAME);
+ }
+
+ public static boolean isPhoneNumber(Cursor cursor) {
+ return Phone.CONTENT_ITEM_TYPE.equals(cursor.getString(MIMETYPE));
+ }
+ }
+
+ private static final class AccountQuery {
+ public static final String[] PROJECTION = new String[] {
+ RawContacts._ID, RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
+ RawContacts.DATA_SET
+ };
+
+ public static long getId(Cursor cursor) {
+ return cursor.getLong(0);
+ }
+
+ public static AccountWithDataSet getAccount(Cursor cursor) {
+ return new AccountWithDataSet(cursor.getString(1), cursor.getString(2),
+ cursor.getString(3));
+ }
+ }
+}
diff --git a/src/com/android/contacts/datepicker/DatePickerDialog.java b/src/com/android/contacts/datepicker/DatePickerDialog.java
index 1ae1e6130..82eed24be 100644
--- a/src/com/android/contacts/datepicker/DatePickerDialog.java
+++ b/src/com/android/contacts/datepicker/DatePickerDialog.java
@@ -28,8 +28,8 @@ import android.view.LayoutInflater;
import android.view.View;
import com.android.contacts.R;
-import com.android.contacts.common.util.DateUtils;
import com.android.contacts.datepicker.DatePicker.OnDateChangedListener;
+import com.android.contacts.util.DateUtils;
import java.text.DateFormat;
import java.util.Calendar;
diff --git a/src/com/android/contacts/detail/ContactDisplayUtils.java b/src/com/android/contacts/detail/ContactDisplayUtils.java
index 85e60261b..ef9124aed 100644
--- a/src/com/android/contacts/detail/ContactDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDisplayUtils.java
@@ -16,16 +16,6 @@
package com.android.contacts.detail;
-import com.google.common.collect.Iterables;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.OrganizationDataItem;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.util.MoreMath;
-
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -41,10 +31,18 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
-import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
+import com.android.contacts.R;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.OrganizationDataItem;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.MoreMath;
+import com.google.common.collect.Iterables;
+
import java.util.List;
/**
@@ -156,34 +154,14 @@ public class ContactDisplayUtils {
/**
* Sets the starred state of this contact.
*/
- public static void configureStarredImageView(ImageView starredView, boolean isDirectoryEntry,
- boolean isUserProfile, boolean isStarred) {
- // Check if the starred state should be visible
- if (!isDirectoryEntry && !isUserProfile) {
- starredView.setVisibility(View.VISIBLE);
- final int resId = isStarred
- ? R.drawable.btn_star_on_normal_holo_light
- : R.drawable.btn_star_off_normal_holo_light;
- starredView.setImageResource(resId);
- starredView.setTag(isStarred);
- starredView.setContentDescription(starredView.getResources().getString(
- isStarred ? R.string.menu_removeStar : R.string.menu_addStar));
- } else {
- starredView.setVisibility(View.GONE);
- }
- }
-
- /**
- * Sets the starred state of this contact.
- */
public static void configureStarredMenuItem(MenuItem starredMenuItem, boolean isDirectoryEntry,
boolean isUserProfile, boolean isStarred) {
// Check if the starred state should be visible
if (!isDirectoryEntry && !isUserProfile) {
starredMenuItem.setVisible(true);
final int resId = isStarred
- ? R.drawable.ic_star_24dp
- : R.drawable.ic_star_outline_24dp;
+ ? R.drawable.quantum_ic_star_vd_theme_24
+ : R.drawable.quantum_ic_star_border_vd_theme_24;
starredMenuItem.setIcon(resId);
starredMenuItem.setChecked(isStarred);
starredMenuItem.setTitle(isStarred ? R.string.menu_removeStar : R.string.menu_addStar);
@@ -277,11 +255,15 @@ public class ContactDisplayUtils {
try {
uri = Uri.parse(source);
} catch (Throwable e) {
- Log.d(TAG, "Could not parse image source: " + source);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Could not parse image source: " + source);
+ }
return null;
}
if (!RES_SCHEME.equals(uri.getScheme())) {
- Log.d(TAG, "Image source does not correspond to a resource: " + source);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Image source does not correspond to a resource: " + source);
+ }
return null;
}
// The URI authority represents the package name.
@@ -289,13 +271,17 @@ public class ContactDisplayUtils {
Resources resources = getResourcesForResourceName(packageName);
if (resources == null) {
- Log.d(TAG, "Could not parse image source: " + source);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Could not parse image source: " + source);
+ }
return null;
}
List<String> pathSegments = uri.getPathSegments();
if (pathSegments.size() != 1) {
- Log.d(TAG, "Could not parse image source: " + source);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Could not parse image source: " + source);
+ }
return null;
}
@@ -304,14 +290,18 @@ public class ContactDisplayUtils {
if (resId == 0) {
// Use the default image icon in this case.
- Log.d(TAG, "Cannot resolve resource identifier: " + source);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Cannot resolve resource identifier: " + source);
+ }
return null;
}
try {
return getResourceDrawable(resources, resId);
} catch (NotFoundException e) {
- Log.d(TAG, "Resource not found: " + source, e);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Resource not found: " + source, e);
+ }
return null;
}
}
@@ -329,7 +319,9 @@ public class ContactDisplayUtils {
try {
return mPackageManager.getResourcesForApplication(packageName);
} catch (NameNotFoundException e) {
- Log.d(TAG, "Could not find package: " + packageName);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Could not find package: " + packageName);
+ }
return null;
}
}
diff --git a/src/com/android/contacts/detail/PhotoSelectionHandler.java b/src/com/android/contacts/detail/PhotoSelectionHandler.java
index d2e5763a0..053ee2216 100644
--- a/src/com/android/contacts/detail/PhotoSelectionHandler.java
+++ b/src/com/android/contacts/detail/PhotoSelectionHandler.java
@@ -38,12 +38,12 @@ import android.widget.Toast;
import com.android.contacts.R;
import com.android.contacts.editor.PhotoActionPopup;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.RawContactDeltaList;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
import com.android.contacts.util.ContactPhotoUtils;
import com.android.contacts.util.UiClosables;
@@ -127,17 +127,16 @@ public abstract class PhotoSelectionHandler implements OnClickListener {
switch (requestCode) {
// Cropped photo was returned
case REQUEST_CROP_PHOTO: {
- final Uri uri;
if (data != null && data.getData() != null) {
- uri = data.getData();
- } else {
- uri = mCroppedPhotoUri;
+ final Uri croppedUri = data.getData();
+ ContactPhotoUtils.savePhotoFromUriToUri(mContext, croppedUri,
+ mCroppedPhotoUri, /* deleteAfterSave */ false);
}
try {
// delete the original temporary photo if it exists
mContext.getContentResolver().delete(mTempPhotoUri, null, null);
- listener.onPhotoSelected(uri);
+ listener.onPhotoSelected(mCroppedPhotoUri);
return true;
} catch (FileNotFoundException e) {
return false;
@@ -169,7 +168,9 @@ public abstract class PhotoSelectionHandler implements OnClickListener {
return false;
}
} catch (SecurityException e) {
- Log.d(TAG, "Did not have read-access to uri : " + uri);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Did not have read-access to uri : " + uri);
+ }
return false;
}
}
diff --git a/src/com/android/contacts/dialog/CallSubjectDialog.java b/src/com/android/contacts/dialog/CallSubjectDialog.java
new file mode 100644
index 000000000..036a0f3e7
--- /dev/null
+++ b/src/com/android/contacts/dialog/CallSubjectDialog.java
@@ -0,0 +1,623 @@
+/*
+ * 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.dialog;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.text.Editable;
+import android.text.InputFilter;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneAccountSdkCompat;
+import com.android.contacts.compat.telecom.TelecomManagerCompat;
+import com.android.contacts.util.UriUtils;
+import com.android.phone.common.animation.AnimUtils;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Implements a dialog which prompts for a call subject for an outgoing call. The dialog includes
+ * a pop up list of historical call subjects.
+ */
+public class CallSubjectDialog extends Activity {
+ private static final String TAG = "CallSubjectDialog";
+ private static final int CALL_SUBJECT_LIMIT = 16;
+ private static final int CALL_SUBJECT_HISTORY_SIZE = 5;
+
+ private static final int REQUEST_SUBJECT = 1001;
+
+ public static final String PREF_KEY_SUBJECT_HISTORY_COUNT = "subject_history_count";
+ public static final String PREF_KEY_SUBJECT_HISTORY_ITEM = "subject_history_item";
+
+ /**
+ * Activity intent argument bundle keys:
+ */
+ public static final String ARG_PHOTO_ID = "PHOTO_ID";
+ public static final String ARG_PHOTO_URI = "PHOTO_URI";
+ public static final String ARG_CONTACT_URI = "CONTACT_URI";
+ public static final String ARG_NAME_OR_NUMBER = "NAME_OR_NUMBER";
+ public static final String ARG_IS_BUSINESS = "IS_BUSINESS";
+ public static final String ARG_NUMBER = "NUMBER";
+ public static final String ARG_DISPLAY_NUMBER = "DISPLAY_NUMBER";
+ public static final String ARG_NUMBER_LABEL = "NUMBER_LABEL";
+ public static final String ARG_PHONE_ACCOUNT_HANDLE = "PHONE_ACCOUNT_HANDLE";
+
+ private int mAnimationDuration;
+ private Charset mMessageEncoding;
+ private View mBackgroundView;
+ private View mDialogView;
+ private QuickContactBadge mContactPhoto;
+ private TextView mNameView;
+ private TextView mNumberView;
+ private EditText mCallSubjectView;
+ private TextView mCharacterLimitView;
+ private View mHistoryButton;
+ private View mSendAndCallButton;
+ private ListView mSubjectList;
+
+ private int mLimit = CALL_SUBJECT_LIMIT;
+ private int mPhotoSize;
+ private SharedPreferences mPrefs;
+ private List<String> mSubjectHistory;
+
+ private long mPhotoID;
+ private Uri mPhotoUri;
+ private Uri mContactUri;
+ private String mNameOrNumber;
+ private boolean mIsBusiness;
+ private String mNumber;
+ private String mDisplayNumber;
+ private String mNumberLabel;
+ private PhoneAccountHandle mPhoneAccountHandle;
+
+ /**
+ * Handles changes to the text in the subject box. Ensures the character limit is updated.
+ */
+ private final TextWatcher mTextWatcher = new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // no-op
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ updateCharacterLimit();
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ // no-op
+ }
+ };
+
+ /**
+ * Click listener which handles user clicks outside of the dialog.
+ */
+ private View.OnClickListener mBackgroundListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ };
+
+ /**
+ * Handles displaying the list of past call subjects.
+ */
+ private final View.OnClickListener mHistoryOnClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ hideSoftKeyboard(CallSubjectDialog.this, mCallSubjectView);
+ showCallHistory(mSubjectList.getVisibility() == View.GONE);
+ }
+ };
+
+ /**
+ * Handles starting a call with a call subject specified.
+ */
+ private final View.OnClickListener mSendAndCallOnClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String subject = mCallSubjectView.getText().toString();
+ Intent intent = CallUtil.getCallWithSubjectIntent(mNumber, mPhoneAccountHandle,
+ subject);
+
+ TelecomManagerCompat.placeCall(
+ CallSubjectDialog.this,
+ (TelecomManager) getSystemService(Context.TELECOM_SERVICE),
+ intent);
+
+ mSubjectHistory.add(subject);
+ saveSubjectHistory(mSubjectHistory);
+ finish();
+ }
+ };
+
+ /**
+ * Handles auto-hiding the call history when user clicks in the call subject field to give it
+ * focus.
+ */
+ private final View.OnClickListener mCallSubjectClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mSubjectList.getVisibility() == View.VISIBLE) {
+ showCallHistory(false);
+ }
+ }
+ };
+
+ /**
+ * Item click listener which handles user clicks on the items in the list view. Dismisses
+ * the activity, returning the subject to the caller and closing the activity with the
+ * {@link Activity#RESULT_OK} result code.
+ */
+ private AdapterView.OnItemClickListener mItemClickListener =
+ new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
+ mCallSubjectView.setText(mSubjectHistory.get(position));
+ showCallHistory(false);
+ }
+ };
+
+ /**
+ * Show the call subject dialog given a phone number to dial (e.g. from the dialpad).
+ *
+ * @param activity The activity.
+ * @param number The number to dial.
+ */
+ public static void start(Activity activity, String number) {
+ start(activity,
+ -1 /* photoId */,
+ null /* photoUri */,
+ null /* contactUri */,
+ number /* nameOrNumber */,
+ false /* isBusiness */,
+ number /* number */,
+ null /* displayNumber */,
+ null /* numberLabel */,
+ null /* phoneAccountHandle */);
+ }
+
+ /**
+ * Creates a call subject dialog.
+ *
+ * @param activity The current activity.
+ * @param photoId The photo ID (used to populate contact photo).
+ * @param photoUri The photo Uri (used to populate contact photo).
+ * @param contactUri The Contact URI (used so quick contact can be invoked from contact photo).
+ * @param nameOrNumber The name or number of the callee.
+ * @param isBusiness {@code true} if a business is being called (used for contact photo).
+ * @param number The raw number to dial.
+ * @param displayNumber The number to dial, formatted for display.
+ * @param numberLabel The label for the number (if from a contact).
+ * @param phoneAccountHandle The phone account handle.
+ */
+ public static void start(Activity activity, long photoId, Uri photoUri, Uri contactUri,
+ String nameOrNumber, boolean isBusiness, String number, String displayNumber,
+ String numberLabel, PhoneAccountHandle phoneAccountHandle) {
+ Bundle arguments = new Bundle();
+ arguments.putLong(ARG_PHOTO_ID, photoId);
+ arguments.putParcelable(ARG_PHOTO_URI, photoUri);
+ arguments.putParcelable(ARG_CONTACT_URI, contactUri);
+ arguments.putString(ARG_NAME_OR_NUMBER, nameOrNumber);
+ arguments.putBoolean(ARG_IS_BUSINESS, isBusiness);
+ arguments.putString(ARG_NUMBER, number);
+ arguments.putString(ARG_DISPLAY_NUMBER, displayNumber);
+ arguments.putString(ARG_NUMBER_LABEL, numberLabel);
+ arguments.putParcelable(ARG_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+ start(activity, arguments);
+ }
+
+ /**
+ * Shows the call subject dialog given a Bundle containing all the arguments required to
+ * display the dialog (e.g. from Quick Contacts).
+ *
+ * @param activity The activity.
+ * @param arguments The arguments bundle.
+ */
+ public static void start(Activity activity, Bundle arguments) {
+ Intent intent = new Intent(activity, CallSubjectDialog.class);
+ intent.putExtras(arguments);
+ activity.startActivity(intent);
+ }
+
+ /**
+ * Creates the dialog, inflating the layout and populating it with the name and phone number.
+ *
+ * @param savedInstanceState The last saved instance state of the Fragment,
+ * or null if this is a freshly created Fragment.
+ *
+ * @return Dialog instance.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mAnimationDuration = getResources().getInteger(R.integer.call_subject_animation_duration);
+ mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ mPhotoSize = getResources().getDimensionPixelSize(
+ R.dimen.call_subject_dialog_contact_photo_size);
+ readArguments();
+ loadConfiguration();
+ mSubjectHistory = loadSubjectHistory(mPrefs);
+
+ setContentView(R.layout.dialog_call_subject);
+ getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT);
+ mBackgroundView = findViewById(R.id.call_subject_dialog);
+ mBackgroundView.setOnClickListener(mBackgroundListener);
+ mDialogView = findViewById(R.id.dialog_view);
+ mContactPhoto = (QuickContactBadge) findViewById(R.id.contact_photo);
+ mNameView = (TextView) findViewById(R.id.name);
+ mNumberView = (TextView) findViewById(R.id.number);
+ mCallSubjectView = (EditText) findViewById(R.id.call_subject);
+ mCallSubjectView.addTextChangedListener(mTextWatcher);
+ mCallSubjectView.setOnClickListener(mCallSubjectClickListener);
+ InputFilter[] filters = new InputFilter[1];
+ filters[0] = new InputFilter.LengthFilter(mLimit);
+ mCallSubjectView.setFilters(filters);
+ mCharacterLimitView = (TextView) findViewById(R.id.character_limit);
+ mHistoryButton = findViewById(R.id.history_button);
+ mHistoryButton.setOnClickListener(mHistoryOnClickListener);
+ mHistoryButton.setVisibility(mSubjectHistory.isEmpty() ? View.GONE : View.VISIBLE);
+ mSendAndCallButton = findViewById(R.id.send_and_call_button);
+ mSendAndCallButton.setOnClickListener(mSendAndCallOnClickListener);
+ mSubjectList = (ListView) findViewById(R.id.subject_list);
+ mSubjectList.setOnItemClickListener(mItemClickListener);
+ mSubjectList.setVisibility(View.GONE);
+
+ updateContactInfo();
+ updateCharacterLimit();
+ }
+
+ /**
+ * Populates the contact info fields based on the current contact information.
+ */
+ private void updateContactInfo() {
+ if (mContactUri != null) {
+ setPhoto(mPhotoID, mPhotoUri, mContactUri, mNameOrNumber, mIsBusiness);
+ } else {
+ mContactPhoto.setVisibility(View.GONE);
+ }
+ mNameView.setText(mNameOrNumber);
+ if (!TextUtils.isEmpty(mNumberLabel) && !TextUtils.isEmpty(mDisplayNumber)) {
+ mNumberView.setVisibility(View.VISIBLE);
+ mNumberView.setText(getString(R.string.call_subject_type_and_number,
+ mNumberLabel, mDisplayNumber));
+ } else {
+ mNumberView.setVisibility(View.GONE);
+ mNumberView.setText(null);
+ }
+ }
+
+ /**
+ * Reads arguments from the fragment arguments and populates the necessary instance variables.
+ */
+ private void readArguments() {
+ Bundle arguments = getIntent().getExtras();
+ if (arguments == null) {
+ Log.e(TAG, "Arguments cannot be null.");
+ return;
+ }
+ mPhotoID = arguments.getLong(ARG_PHOTO_ID);
+ mPhotoUri = arguments.getParcelable(ARG_PHOTO_URI);
+ mContactUri = arguments.getParcelable(ARG_CONTACT_URI);
+ mNameOrNumber = arguments.getString(ARG_NAME_OR_NUMBER);
+ mIsBusiness = arguments.getBoolean(ARG_IS_BUSINESS);
+ mNumber = arguments.getString(ARG_NUMBER);
+ mDisplayNumber = arguments.getString(ARG_DISPLAY_NUMBER);
+ mNumberLabel = arguments.getString(ARG_NUMBER_LABEL);
+ mPhoneAccountHandle = arguments.getParcelable(ARG_PHONE_ACCOUNT_HANDLE);
+ }
+
+ /**
+ * Updates the character limit display, coloring the text RED when the limit is reached or
+ * exceeded.
+ */
+ private void updateCharacterLimit() {
+ String subjectText = mCallSubjectView.getText().toString();
+ final int length;
+
+ // If a message encoding is specified, use that to count bytes in the message.
+ if (mMessageEncoding != null) {
+ length = subjectText.getBytes(mMessageEncoding).length;
+ } else {
+ // No message encoding specified, so just count characters entered.
+ length = subjectText.length();
+ }
+
+ mCharacterLimitView.setText(
+ getString(R.string.call_subject_limit, length, mLimit));
+ if (length >= mLimit) {
+ mCharacterLimitView.setTextColor(getResources().getColor(
+ R.color.call_subject_limit_exceeded));
+ } else {
+ mCharacterLimitView.setTextColor(getResources().getColor(
+ R.color.dialtacts_secondary_text_color));
+ }
+ }
+
+ /**
+ * Sets the photo on the quick contact photo.
+ *
+ * @param photoId
+ * @param photoUri
+ * @param contactUri
+ * @param displayName
+ * @param isBusiness
+ */
+ private void setPhoto(long photoId, Uri photoUri, Uri contactUri, String displayName,
+ boolean isBusiness) {
+ mContactPhoto.assignContactUri(contactUri);
+ if (CompatUtils.isLollipopCompatible()) {
+ mContactPhoto.setOverlay(null);
+ }
+
+ int contactType;
+ if (isBusiness) {
+ contactType = ContactPhotoManager.TYPE_BUSINESS;
+ } else {
+ contactType = ContactPhotoManager.TYPE_DEFAULT;
+ }
+
+ String lookupKey = null;
+ if (contactUri != null) {
+ lookupKey = UriUtils.getLookupKeyFromUri(contactUri);
+ }
+
+ ContactPhotoManager.DefaultImageRequest
+ request = new ContactPhotoManager.DefaultImageRequest(
+ displayName, lookupKey, contactType, true /* isCircular */);
+
+ if (photoId == 0 && photoUri != null) {
+ ContactPhotoManager.getInstance(this).loadPhoto(mContactPhoto, photoUri,
+ mPhotoSize, false /* darkTheme */, true /* isCircular */, request);
+ } else {
+ ContactPhotoManager.getInstance(this).loadThumbnail(mContactPhoto, photoId,
+ false /* darkTheme */, true /* isCircular */, request);
+ }
+ }
+
+ /**
+ * Loads the subject history from shared preferences.
+ *
+ * @param prefs Shared preferences.
+ * @return List of subject history strings.
+ */
+ public static List<String> loadSubjectHistory(SharedPreferences prefs) {
+ int historySize = prefs.getInt(PREF_KEY_SUBJECT_HISTORY_COUNT, 0);
+ List<String> subjects = new ArrayList(historySize);
+
+ for (int ix = 0 ; ix < historySize; ix++) {
+ String historyItem = prefs.getString(PREF_KEY_SUBJECT_HISTORY_ITEM + ix, null);
+ if (!TextUtils.isEmpty(historyItem)) {
+ subjects.add(historyItem);
+ }
+ }
+
+ return subjects;
+ }
+
+ /**
+ * Saves the subject history list to shared prefs, removing older items so that there are only
+ * {@link #CALL_SUBJECT_HISTORY_SIZE} items at most.
+ *
+ * @param history The history.
+ */
+ private void saveSubjectHistory(List<String> history) {
+ // Remove oldest subject(s).
+ while (history.size() > CALL_SUBJECT_HISTORY_SIZE) {
+ history.remove(0);
+ }
+
+ SharedPreferences.Editor editor = mPrefs.edit();
+ int historyCount = 0;
+ for (String subject : history) {
+ if (!TextUtils.isEmpty(subject)) {
+ editor.putString(PREF_KEY_SUBJECT_HISTORY_ITEM + historyCount,
+ subject);
+ historyCount++;
+ }
+ }
+ editor.putInt(PREF_KEY_SUBJECT_HISTORY_COUNT, historyCount);
+ editor.apply();
+ }
+
+ /**
+ * Hide software keyboard for the given {@link View}.
+ */
+ public void hideSoftKeyboard(Context context, View view) {
+ InputMethodManager imm = (InputMethodManager) context.getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+ }
+ }
+
+ /**
+ * Hides or shows the call history list.
+ *
+ * @param show {@code true} if the call history should be shown, {@code false} otherwise.
+ */
+ private void showCallHistory(final boolean show) {
+ // Bail early if the visibility has not changed.
+ if ((show && mSubjectList.getVisibility() == View.VISIBLE) ||
+ (!show && mSubjectList.getVisibility() == View.GONE)) {
+ return;
+ }
+
+ final int dialogStartingBottom = mDialogView.getBottom();
+ if (show) {
+ // Showing the subject list; bind the list of history items to the list and show it.
+ ArrayAdapter<String> adapter = new ArrayAdapter<String>(CallSubjectDialog.this,
+ R.layout.call_subject_history_list_item, mSubjectHistory);
+ mSubjectList.setAdapter(adapter);
+ mSubjectList.setVisibility(View.VISIBLE);
+ } else {
+ // Hiding the subject list.
+ mSubjectList.setVisibility(View.GONE);
+ }
+
+ // Use a ViewTreeObserver so that we can animate between the pre-layout and post-layout
+ // states.
+ final ViewTreeObserver observer = mBackgroundView.getViewTreeObserver();
+ observer.addOnPreDrawListener(
+ new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ // We don't want to continue getting called.
+ if (observer.isAlive()) {
+ observer.removeOnPreDrawListener(this);
+ }
+
+ // Determine the amount the dialog has shifted due to the relayout.
+ int shiftAmount = dialogStartingBottom - mDialogView.getBottom();
+
+ // If the dialog needs to be shifted, do that now.
+ if (shiftAmount != 0) {
+ // Start animation in translated state and animate to translationY 0.
+ mDialogView.setTranslationY(shiftAmount);
+ mDialogView.animate()
+ .translationY(0)
+ .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+ .setDuration(mAnimationDuration)
+ .start();
+ }
+
+ if (show) {
+ // Show the subhect list.
+ mSubjectList.setTranslationY(mSubjectList.getHeight());
+
+ mSubjectList.animate()
+ .translationY(0)
+ .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+ .setDuration(mAnimationDuration)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ }
+
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ mSubjectList.setVisibility(View.VISIBLE);
+ }
+ })
+ .start();
+ } else {
+ // Hide the subject list.
+ mSubjectList.setTranslationY(0);
+
+ mSubjectList.animate()
+ .translationY(mSubjectList.getHeight())
+ .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+ .setDuration(mAnimationDuration)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ mSubjectList.setVisibility(View.GONE);
+ }
+
+ @Override
+ public void onAnimationStart(Animator animation) {
+ super.onAnimationStart(animation);
+ }
+ })
+ .start();
+ }
+ return true;
+ }
+ }
+ );
+ }
+
+ /**
+ * Loads the message encoding and maximum message length from the phone account extras for the
+ * current phone account.
+ */
+ private void loadConfiguration() {
+ // Only attempt to load configuration from the phone account extras if the SDK is N or
+ // later. If we've got a prior SDK the default encoding and message length will suffice.
+ int sdk = android.os.Build.VERSION.SDK_INT;
+ if(sdk <= android.os.Build.VERSION_CODES.M) {
+ return;
+ }
+
+ if (mPhoneAccountHandle == null) {
+ return;
+ }
+
+ TelecomManager telecomManager =
+ (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
+ final PhoneAccount account = telecomManager.getPhoneAccount(mPhoneAccountHandle);
+
+ Bundle phoneAccountExtras = PhoneAccountSdkCompat.getExtras(account);
+ if (phoneAccountExtras == null) {
+ return;
+ }
+
+ // Get limit, if provided; otherwise default to existing value.
+ mLimit = phoneAccountExtras
+ .getInt(PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_MAX_LENGTH, mLimit);
+
+ // Get charset; default to none (e.g. count characters 1:1).
+ String charsetName = phoneAccountExtras.getString(
+ PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING);
+
+ if (!TextUtils.isEmpty(charsetName)) {
+ try {
+ mMessageEncoding = Charset.forName(charsetName);
+ } catch (java.nio.charset.UnsupportedCharsetException uce) {
+ // Character set was invalid; log warning and fallback to none.
+ Log.w(TAG, "Invalid charset: " + charsetName);
+ mMessageEncoding = null;
+ }
+ } else {
+ // No character set specified, so count characters 1:1.
+ mMessageEncoding = null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/dialog/ClearFrequentsDialog.java b/src/com/android/contacts/dialog/ClearFrequentsDialog.java
new file mode 100644
index 000000000..7591de3ff
--- /dev/null
+++ b/src/com/android/contacts/dialog/ClearFrequentsDialog.java
@@ -0,0 +1,81 @@
+/*
+ * 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.dialog;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+
+import com.android.contacts.R;
+import com.android.contacts.util.PermissionsUtil;
+
+/**
+ * Dialog that clears the frequently contacted list after confirming with the user.
+ */
+public class ClearFrequentsDialog extends DialogFragment {
+ /** Preferred way to show this dialog */
+ public static void show(FragmentManager fragmentManager) {
+ ClearFrequentsDialog dialog = new ClearFrequentsDialog();
+ dialog.show(fragmentManager, "clearFrequents");
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Context context = getActivity().getApplicationContext();
+ final ContentResolver resolver = getActivity().getContentResolver();
+ final OnClickListener okListener = new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (!PermissionsUtil.hasContactsPermissions(context)) {
+ return;
+ }
+ final IndeterminateProgressDialog progressDialog = IndeterminateProgressDialog.show(
+ getFragmentManager(), getString(R.string.clearFrequentsProgress_title),
+ null, 500);
+ final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ resolver.delete(ContactsContract.DataUsageFeedback.DELETE_USAGE_URI,
+ null, null);
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ progressDialog.dismiss();
+ }
+ };
+ task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ };
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.clearFrequentsConfirmation_title)
+ .setMessage(R.string.clearFrequentsConfirmation)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok, okListener)
+ .setCancelable(true)
+ .create();
+ }
+}
diff --git a/src/com/android/contacts/dialog/IndeterminateProgressDialog.java b/src/com/android/contacts/dialog/IndeterminateProgressDialog.java
new file mode 100644
index 000000000..f0b7eec8c
--- /dev/null
+++ b/src/com/android/contacts/dialog/IndeterminateProgressDialog.java
@@ -0,0 +1,208 @@
+/*
+ * 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.dialog;
+
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Handler;
+
+/**
+ * Indeterminate progress dialog wrapped up in a DialogFragment to work even when the device
+ * orientation is changed. Currently, only supports adding a title and/or message to the progress
+ * dialog. There is an additional parameter of the minimum amount of time to display the progress
+ * dialog even after a call to dismiss the dialog {@link #dismiss()} or
+ * {@link #dismissAllowingStateLoss()}.
+ * <p>
+ * To create and show the progress dialog, use
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)} and retain the reference to the
+ * IndeterminateProgressDialog instance.
+ * <p>
+ * To dismiss the dialog, use {@link #dismiss()} or {@link #dismissAllowingStateLoss()} on the
+ * instance. The instance returned by
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)} is guaranteed to be valid
+ * after a device orientation change because the {@link #setRetainInstance(boolean)} is called
+ * internally with true.
+ */
+public class IndeterminateProgressDialog extends DialogFragment {
+ private static final String TAG = "IndeterminateProgress";
+
+ private CharSequence mTitle;
+ private CharSequence mMessage;
+ private long mMinDisplayTime;
+ private long mShowTime = 0;
+ private boolean mActivityReady = false;
+ private Dialog mOldDialog;
+ private final Handler mHandler = new Handler();
+ private boolean mCalledSuperDismiss = false;
+ private boolean mAllowStateLoss;
+ private final Runnable mDismisser = new Runnable() {
+ @Override
+ public void run() {
+ superDismiss();
+ }
+ };
+
+ /**
+ * Creates and shows an indeterminate progress dialog. Once the progress dialog is shown, it
+ * will be shown for at least the minDisplayTime (in milliseconds), so that the progress dialog
+ * does not flash in and out to quickly.
+ */
+ public static IndeterminateProgressDialog show(FragmentManager fragmentManager,
+ CharSequence title, CharSequence message, long minDisplayTime) {
+ IndeterminateProgressDialog dialogFragment = new IndeterminateProgressDialog();
+ dialogFragment.mTitle = title;
+ dialogFragment.mMessage = message;
+ dialogFragment.mMinDisplayTime = minDisplayTime;
+ dialogFragment.show(fragmentManager, TAG);
+ dialogFragment.mShowTime = System.currentTimeMillis();
+ dialogFragment.setCancelable(false);
+
+ return dialogFragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Create the progress dialog and set its properties
+ final ProgressDialog dialog = new ProgressDialog(getActivity());
+ dialog.setIndeterminate(true);
+ dialog.setIndeterminateDrawable(null);
+ dialog.setTitle(mTitle);
+ dialog.setMessage(mMessage);
+
+ return dialog;
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ mActivityReady = true;
+
+ // Check if superDismiss() had been called before. This can happen if in a long
+ // running operation, the user hits the home button and closes this fragment's activity.
+ // Upon returning, we want to dismiss this progress dialog fragment.
+ if (mCalledSuperDismiss) {
+ superDismiss();
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ mActivityReady = false;
+ }
+
+ /**
+ * There is a race condition that is not handled properly by the DialogFragment class.
+ * If we don't check that this onDismiss callback isn't for the old progress dialog from before
+ * the device orientation change, then this will cause the newly created dialog after the
+ * orientation change to be dismissed immediately.
+ */
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ if (mOldDialog != null && mOldDialog == dialog) {
+ // This is the callback from the old progress dialog that was already dismissed before
+ // the device orientation change, so just ignore it.
+ return;
+ }
+ super.onDismiss(dialog);
+ }
+
+ /**
+ * Save the old dialog that is about to get destroyed in case this is due to a change
+ * in device orientation. This will allow us to intercept the callback to
+ * {@link #onDismiss(DialogInterface)} in case the callback happens after a new progress dialog
+ * instance was created.
+ */
+ @Override
+ public void onDestroyView() {
+ mOldDialog = getDialog();
+ super.onDestroyView();
+ }
+
+ /**
+ * This tells the progress dialog to dismiss itself after guaranteeing to be shown for the
+ * specified time in {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+ */
+ @Override
+ public void dismiss() {
+ mAllowStateLoss = false;
+ dismissWhenReady();
+ }
+
+ /**
+ * This tells the progress dialog to dismiss itself (with state loss) after guaranteeing to be
+ * shown for the specified time in
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+ */
+ @Override
+ public void dismissAllowingStateLoss() {
+ mAllowStateLoss = true;
+ dismissWhenReady();
+ }
+
+ /**
+ * Tells the progress dialog to dismiss itself after guaranteeing that the dialog had been
+ * showing for at least the minimum display time as set in
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+ */
+ private void dismissWhenReady() {
+ // Compute how long the dialog has been showing
+ final long shownTime = System.currentTimeMillis() - mShowTime;
+ if (shownTime >= mMinDisplayTime) {
+ // dismiss immediately
+ mHandler.post(mDismisser);
+ } else {
+ // Need to wait some more, so compute the amount of time to sleep.
+ final long sleepTime = mMinDisplayTime - shownTime;
+ mHandler.postDelayed(mDismisser, sleepTime);
+ }
+ }
+
+ /**
+ * Actually dismiss the dialog fragment.
+ */
+ private void superDismiss() {
+ mCalledSuperDismiss = true;
+ if (mActivityReady) {
+ // The fragment is either in onStart or past it, but has not gotten to onStop yet.
+ // It is safe to dismiss this dialog fragment.
+ if (mAllowStateLoss) {
+ super.dismissAllowingStateLoss();
+ } else {
+ super.dismiss();
+ }
+ }
+ // If mActivityReady is false, then this dialog fragment has already passed the onStop
+ // state. This can happen if the user hit the 'home' button before this dialog fragment was
+ // dismissed or if there is a configuration change.
+ // In the event that this dialog fragment is re-attached and reaches onStart (e.g.,
+ // because the user returns to this fragment's activity or the device configuration change
+ // has re-attached this dialog fragment), because the mCalledSuperDismiss flag was set to
+ // true, this dialog fragment will be dismissed within onStart. So, there's nothing else
+ // that needs to be done.
+ }
+}
diff --git a/src/com/android/contacts/drawer/DrawerAdapter.java b/src/com/android/contacts/drawer/DrawerAdapter.java
new file mode 100644
index 000000000..963c12588
--- /dev/null
+++ b/src/com/android/contacts/drawer/DrawerAdapter.java
@@ -0,0 +1,447 @@
+/*
+ * 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.contacts.drawer;
+
+import android.app.Activity;
+import android.graphics.PorterDuff;
+import android.support.annotation.LayoutRes;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity.ContactsView;
+import com.android.contacts.group.GroupListItem;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.util.SharedPreferenceUtil;
+import com.android.contactsbind.ObjectFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DrawerAdapter extends BaseAdapter {
+
+ private static final int VIEW_TYPE_PRIMARY_ITEM = 0;
+ private static final int VIEW_TYPE_MISC_ITEM = 1;
+ private static final int VIEW_TYPE_HEADER_ITEM = 2;
+ private static final int VIEW_TYPE_GROUP_ENTRY = 3;
+ private static final int VIEW_TYPE_ACCOUNT_ENTRY = 4;
+ private static final int VIEW_TYPE_CREATE_LABEL = 5;
+ private static final int VIEW_TYPE_NAV_SPACER = 6;
+ private static final int VIEW_TYPE_STATUS_SPACER = 7;
+ private static final int VIEW_TYPE_NAV_DIVIDER = 8;
+
+ // This count must be updated if we add more view types.
+ private static final int VIEW_TYPE_COUNT = 9;
+
+ private static final int TYPEFACE_STYLE_ACTIVATE = R.style.DrawerItemTextActiveStyle;
+ private static final int TYPEFACE_STYLE_INACTIVE = R.style.DrawerItemTextInactiveStyle;
+
+ private final Activity mActivity;
+ private final LayoutInflater mInflater;
+ private ContactsView mSelectedView;
+ private boolean mAreGroupWritableAccountsAvailable;
+
+ // The group/account that was last clicked.
+ private long mSelectedGroupId;
+ private ContactListFilter mSelectedAccount;
+
+ // Adapter elements, ordered in this way mItemsList. The ordering is based on:
+ // [Status bar spacer item]
+ // [Navigation spacer item]
+ // [Primary items] (Contacts, Suggestions)
+ // [Group Header]
+ // [Groups]
+ // [Create Label button]
+ // [Account Header]
+ // [Accounts]
+ // [Misc items] (a divider, Settings, Help & Feedback)
+ // [Navigation spacer item]
+ private StatusBarSpacerItem mStatusBarSpacerItem = null;
+ private NavSpacerItem mNavSpacerItem = null;
+ private List<PrimaryItem> mPrimaryItems = new ArrayList<>();
+ private HeaderItem mGroupHeader = null;
+ private List<GroupEntryItem> mGroupEntries = new ArrayList<>();
+ private BaseDrawerItem mCreateLabelButton = null;
+ private HeaderItem mAccountHeader = null;
+ private List<AccountEntryItem> mAccountEntries = new ArrayList<>();
+ private List<BaseDrawerItem> mMiscItems = new ArrayList<>();
+
+ private List<BaseDrawerItem> mItemsList = new ArrayList<>();
+ private AccountDisplayInfoFactory mAccountDisplayFactory;
+
+ public DrawerAdapter(Activity activity) {
+ super();
+ mInflater = LayoutInflater.from(activity);
+ mActivity = activity;
+ initializeDrawerMenuItems();
+ }
+
+ private void initializeDrawerMenuItems() {
+ // Spacer item for dividing sections in drawer
+ mNavSpacerItem = new NavSpacerItem(R.id.nav_drawer_spacer);
+ mStatusBarSpacerItem = new StatusBarSpacerItem(R.id.nav_status_bar_spacer);
+ // Primary items
+ mPrimaryItems.add(new PrimaryItem(R.id.nav_all_contacts, R.string.contactsList,
+ R.drawable.quantum_ic_account_circle_vd_theme_24, ContactsView.ALL_CONTACTS));
+ if (ObjectFactory.getAssistantFragment() != null) {
+ mPrimaryItems.add(new PrimaryItem(R.id.nav_assistant, R.string.menu_assistant,
+ R.drawable.quantum_ic_assistant_vd_theme_24, ContactsView.ASSISTANT));
+ }
+ // Group Header
+ mGroupHeader = new HeaderItem(R.id.nav_groups, R.string.menu_title_groups);
+ // Account Header
+ mAccountHeader = new HeaderItem(R.id.nav_filters, R.string.menu_title_filters);
+ // Create Label Button
+ mCreateLabelButton = new BaseDrawerItem(VIEW_TYPE_CREATE_LABEL, R.id.nav_create_label,
+ R.string.menu_new_group_action_bar, R.drawable.quantum_ic_add_vd_theme_24);
+ // Misc Items
+ mMiscItems.add(new DividerItem());
+ mMiscItems.add(new MiscItem(R.id.nav_settings, R.string.menu_settings,
+ R.drawable.quantum_ic_settings_vd_theme_24));
+ mMiscItems.add(new MiscItem(R.id.nav_help, R.string.menu_help,
+ R.drawable.quantum_ic_help_vd_theme_24));
+ rebuildItemsList();
+ }
+
+ private void rebuildItemsList() {
+ mItemsList.clear();
+ mItemsList.add(mStatusBarSpacerItem);
+ mItemsList.add(mNavSpacerItem);
+ mItemsList.addAll(mPrimaryItems);
+ if (mAreGroupWritableAccountsAvailable || !mGroupEntries.isEmpty()) {
+ mItemsList.add(mGroupHeader);
+ }
+ mItemsList.addAll(mGroupEntries);
+ if (mAreGroupWritableAccountsAvailable) {
+ mItemsList.add(mCreateLabelButton);
+ }
+ if (mAccountEntries.size() > 0) {
+ mItemsList.add(mAccountHeader);
+ }
+ mItemsList.addAll(mAccountEntries);
+ mItemsList.addAll(mMiscItems);
+ mItemsList.add(mNavSpacerItem);
+ }
+
+ public void setGroups(List<GroupListItem> groupListItems, boolean areGroupWritable) {
+ final ArrayList<GroupEntryItem> groupEntries = new ArrayList<GroupEntryItem>();
+ for (GroupListItem group : groupListItems) {
+ groupEntries.add(new GroupEntryItem(R.id.nav_group, group));
+ }
+ mGroupEntries.clear();
+ mGroupEntries.addAll(groupEntries);
+ mAreGroupWritableAccountsAvailable = areGroupWritable;
+ notifyChangeAndRebuildList();
+ }
+
+ public void setAccounts(List<ContactListFilter> accountFilterItems) {
+ ArrayList<AccountEntryItem> accountItems = new ArrayList<AccountEntryItem>();
+ for (ContactListFilter filter : accountFilterItems) {
+ accountItems.add(new AccountEntryItem(R.id.nav_filter, filter));
+ }
+ mAccountDisplayFactory = AccountDisplayInfoFactory.fromListFilters(mActivity,
+ accountFilterItems);
+ mAccountEntries.clear();
+ mAccountEntries.addAll(accountItems);
+ // TODO investigate performance of calling notifyDataSetChanged
+ notifyChangeAndRebuildList();
+ }
+
+ @Override
+ public int getCount() {
+ return mItemsList.size();
+ }
+
+ public BaseDrawerItem getItem(int position) {
+ return mItemsList.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return getItem(position).id;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return VIEW_TYPE_COUNT;
+ }
+
+ @Override
+ public View getView(int position, View view, ViewGroup viewGroup) {
+ final BaseDrawerItem drawerItem = getItem(position);
+ switch (drawerItem.viewType) {
+ case VIEW_TYPE_STATUS_SPACER:
+ return getBaseItemView(R.layout.nav_header_main, view, viewGroup);
+ case VIEW_TYPE_PRIMARY_ITEM:
+ return getPrimaryItemView((PrimaryItem) drawerItem, view, viewGroup);
+ case VIEW_TYPE_HEADER_ITEM:
+ return getHeaderItemView((HeaderItem) drawerItem, view, viewGroup);
+ case VIEW_TYPE_CREATE_LABEL:
+ return getDrawerItemView(drawerItem, view, viewGroup);
+ case VIEW_TYPE_GROUP_ENTRY:
+ return getGroupEntryView((GroupEntryItem) drawerItem, view, viewGroup);
+ case VIEW_TYPE_ACCOUNT_ENTRY:
+ return getAccountItemView((AccountEntryItem) drawerItem, view, viewGroup);
+ case VIEW_TYPE_MISC_ITEM:
+ return getDrawerItemView(drawerItem, view, viewGroup);
+ case VIEW_TYPE_NAV_SPACER:
+ return getBaseItemView(R.layout.nav_drawer_spacer, view, viewGroup);
+ case VIEW_TYPE_NAV_DIVIDER:
+ return getBaseItemView(R.layout.drawer_horizontal_divider, view, viewGroup);
+ }
+ throw new IllegalStateException("Unknown drawer item " + drawerItem);
+ }
+
+ private View getBaseItemView(@LayoutRes int layoutResID, View result,ViewGroup parent) {
+ if (result == null) {
+ result = mInflater.inflate(layoutResID, parent, false);
+ }
+ return result;
+ }
+
+ private View getPrimaryItemView(PrimaryItem item, View result, ViewGroup parent) {
+ if (result == null) {
+ result = mInflater.inflate(R.layout.drawer_primary_item, parent, false);
+ }
+ final TextView titleView = (TextView) result.findViewById(R.id.title);
+ titleView.setText(item.text);
+ final ImageView iconView = (ImageView) result.findViewById(R.id.icon);
+ iconView.setImageResource(item.icon);
+ final TextView newBadge = (TextView) result.findViewById(R.id.assistant_new_badge);
+ final boolean showWelcomeBadge = !SharedPreferenceUtil.isWelcomeCardDismissed(mActivity);
+ newBadge.setVisibility(item.contactsView == ContactsView.ASSISTANT && showWelcomeBadge
+ ? View.VISIBLE : View.GONE);
+ result.setActivated(item.contactsView == mSelectedView);
+ updateSelectedStatus(titleView, iconView, item.contactsView == mSelectedView);
+ result.setId(item.id);
+ return result;
+ }
+
+ private View getHeaderItemView(HeaderItem item, View result, ViewGroup parent) {
+ if (result == null) {
+ result = mInflater.inflate(R.layout.drawer_header, parent, false);
+ }
+ final TextView textView = (TextView) result.findViewById(R.id.title);
+ textView.setText(item.text);
+ result.setId(item.id);
+ return result;
+ }
+
+ private View getGroupEntryView(GroupEntryItem item, View result, ViewGroup parent) {
+ if (result == null || !(result.getTag() instanceof GroupEntryItem)) {
+ result = mInflater.inflate(R.layout.drawer_item, parent, false);
+ result.setId(item.id);
+ }
+
+ final GroupListItem groupListItem = item.group;
+ final TextView title = (TextView) result.findViewById(R.id.title);
+ title.setText(groupListItem.getTitle());
+ final ImageView icon = (ImageView) result.findViewById(R.id.icon);
+ icon.setImageResource(R.drawable.quantum_ic_label_vd_theme_24);
+ final boolean activated = groupListItem.getGroupId() == mSelectedGroupId &&
+ mSelectedView == ContactsView.GROUP_VIEW;
+ updateSelectedStatus(title, icon, activated);
+ result.setActivated(activated);
+
+ result.setTag(groupListItem);
+ result.setContentDescription(
+ mActivity.getString(R.string.navigation_drawer_label, groupListItem.getTitle()));
+ return result;
+ }
+
+ private View getAccountItemView(AccountEntryItem item, View result, ViewGroup parent) {
+ if (result == null || !(result.getTag() instanceof ContactListFilter)) {
+ result = mInflater.inflate(R.layout.drawer_item, parent, false);
+ result.setId(item.id);
+ }
+ final ContactListFilter account = item.account;
+ final TextView textView = ((TextView) result.findViewById(R.id.title));
+ textView.setText(account.accountName);
+ final boolean activated = account.equals(mSelectedAccount)
+ && mSelectedView == ContactsView.ACCOUNT_VIEW;
+ textView.setTextAppearance(mActivity, activated
+ ? TYPEFACE_STYLE_ACTIVATE : TYPEFACE_STYLE_INACTIVE);
+
+ final ImageView icon = (ImageView) result.findViewById(R.id.icon);
+ final AccountDisplayInfo displayableAccount =
+ mAccountDisplayFactory.getAccountDisplayInfoFor(item.account);
+ icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
+ icon.setImageDrawable(displayableAccount.getIcon());
+
+ result.setTag(account);
+ result.setActivated(activated);
+ result.setContentDescription(
+ displayableAccount.getTypeLabel() + " " + item.account.accountName);
+ return result;
+ }
+
+ private View getDrawerItemView(BaseDrawerItem item, View result, ViewGroup parent) {
+ if (result == null) {
+ result = mInflater.inflate(R.layout.drawer_item, parent, false);
+ }
+
+ final TextView textView = (TextView) result.findViewById(R.id.title);
+ textView.setText(item.text);
+ final ImageView iconView = (ImageView) result.findViewById(R.id.icon);
+ iconView.setImageResource(item.icon);
+ result.setId(item.id);
+ updateSelectedStatus(textView, iconView, false);
+ return result;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return getItem(position).viewType;
+ }
+
+ private void updateSelectedStatus(TextView textView, ImageView imageView, boolean activated) {
+ textView.setTextAppearance(mActivity, activated
+ ? TYPEFACE_STYLE_ACTIVATE : TYPEFACE_STYLE_INACTIVE);
+ if (activated) {
+ imageView.setColorFilter(mActivity.getResources().getColor(R.color.primary_color),
+ PorterDuff.Mode.SRC_ATOP);
+ } else {
+ imageView.clearColorFilter();
+ }
+ }
+
+ private void notifyChangeAndRebuildList() {
+ rebuildItemsList();
+ notifyDataSetChanged();
+ }
+
+ public void setSelectedContactsView(ContactsView contactsView) {
+ if (mSelectedView == contactsView) {
+ return;
+ }
+ mSelectedView = contactsView;
+ notifyChangeAndRebuildList();
+ }
+
+
+ public void setSelectedGroupId(long groupId) {
+ if (mSelectedGroupId == groupId) {
+ return;
+ }
+ mSelectedGroupId = groupId;
+ notifyChangeAndRebuildList();
+ }
+
+ public long getSelectedGroupId() {
+ return mSelectedGroupId;
+ }
+
+ public void setSelectedAccount(ContactListFilter filter) {
+ if (mSelectedAccount == filter) {
+ return;
+ }
+ mSelectedAccount = filter;
+ notifyChangeAndRebuildList();
+ }
+
+ public ContactListFilter getSelectedAccount() {
+ return mSelectedAccount;
+ }
+
+ public static class BaseDrawerItem {
+ public final int viewType;
+ public final int id;
+ public final int text;
+ public final int icon;
+
+ public BaseDrawerItem(int adapterViewType, int viewId, int textResId, int iconResId) {
+ viewType = adapterViewType;
+ id = viewId;
+ text = textResId;
+ icon = iconResId;
+ }
+ }
+
+ // Navigation drawer item for Contacts or Suggestions view which contains a name, an icon and
+ // contacts view.
+ public static class PrimaryItem extends BaseDrawerItem {
+ public final ContactsView contactsView;
+
+ public PrimaryItem(int id, int pageName, int iconId, ContactsView contactsView) {
+ super(VIEW_TYPE_PRIMARY_ITEM, id, pageName, iconId);
+ this.contactsView = contactsView;
+ }
+ }
+
+ // Navigation drawer item for Settings, help and feedback, etc.
+ public static class MiscItem extends BaseDrawerItem {
+ public MiscItem(int id, int textId, int iconId) {
+ super(VIEW_TYPE_MISC_ITEM, id, textId, iconId);
+ }
+ }
+
+ // Header for a list of sub-items in the drawer.
+ public static class HeaderItem extends BaseDrawerItem {
+ public HeaderItem(int id, int textId) {
+ super(VIEW_TYPE_HEADER_ITEM, id, textId, /* iconResId */ 0);
+ }
+ }
+
+
+ // Navigation drawer item for status bar spacer item to take up the height of status bar in the
+ // drawer.
+ public static class StatusBarSpacerItem extends BaseDrawerItem {
+ public StatusBarSpacerItem(int id) {
+ super(VIEW_TYPE_STATUS_SPACER, id, /* textResId */ 0, /* iconResId */ 0);
+ }
+ }
+
+ // Navigation drawer item for spacer item for dividing sections in the drawer.
+ public static class NavSpacerItem extends BaseDrawerItem {
+ public NavSpacerItem(int id) {
+ super(VIEW_TYPE_NAV_SPACER, id, /* textResId */ 0, /* iconResId */ 0);
+ }
+ }
+
+ // Divider for drawing a line between sections in the drawer.
+ public static class DividerItem extends BaseDrawerItem {
+ public DividerItem() {
+ super(VIEW_TYPE_NAV_DIVIDER, /* id */ 0, /* textResId */ 0, /* iconResId */ 0);
+ }
+ }
+
+ // Navigation drawer item for a group.
+ public static class GroupEntryItem extends BaseDrawerItem {
+ private final GroupListItem group;
+
+ public GroupEntryItem(int id, GroupListItem group) {
+ super(VIEW_TYPE_GROUP_ENTRY, id, /* textResId */ 0, /* iconResId */ 0);
+ this.group = group;
+ }
+ }
+
+ // Navigation drawer item for an account.
+ public static class AccountEntryItem extends BaseDrawerItem {
+ private final ContactListFilter account;
+
+ public AccountEntryItem(int id, ContactListFilter account) {
+ super(VIEW_TYPE_ACCOUNT_ENTRY, id, /* textResId */ 0, /* iconResId */ 0);
+ this.account = account;
+ }
+ }
+}
diff --git a/src/com/android/contacts/drawer/DrawerFragment.java b/src/com/android/contacts/drawer/DrawerFragment.java
new file mode 100644
index 000000000..0aaa26270
--- /dev/null
+++ b/src/com/android/contacts/drawer/DrawerFragment.java
@@ -0,0 +1,313 @@
+/*
+ * 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.contacts.drawer;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.FrameLayout;
+import android.widget.ListView;
+
+import com.android.contacts.GroupListLoader;
+import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity.ContactsView;
+import com.android.contacts.group.GroupListItem;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.model.account.AccountsLoader.AccountsListener;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contactsbind.ObjectFactory;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class DrawerFragment extends Fragment implements AccountsListener {
+
+ private static final int LOADER_GROUPS = 1;
+ private static final int LOADER_ACCOUNTS = 2;
+ private static final int LOADER_FILTERS = 3;
+
+ private static final String KEY_CONTACTS_VIEW = "contactsView";
+ private static final String KEY_SELECTED_GROUP = "selectedGroup";
+ private static final String KEY_SELECTED_ACCOUNT = "selectedAccount";
+
+ private WelcomeContentObserver mObserver;
+ private ListView mDrawerListView;
+ private DrawerAdapter mDrawerAdapter;
+ private ContactsView mCurrentContactsView;
+ private DrawerFragmentListener mListener;
+ // Transparent scrim drawn at the top of the drawer fragment.
+ private ScrimDrawable mScrimDrawable;
+
+ private List<GroupListItem> mGroupListItems = new ArrayList<>();
+ private boolean mGroupsLoaded;
+ private boolean mAccountsLoaded;
+ private boolean mHasGroupWritableAccounts;
+
+ private final class WelcomeContentObserver extends ContentObserver {
+ private WelcomeContentObserver(Handler handler) {
+ super(handler);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ mDrawerAdapter.notifyDataSetChanged();
+ }
+ }
+
+ private final LoaderManager.LoaderCallbacks<List<ContactListFilter>> mFiltersLoaderListener =
+ new LoaderManager.LoaderCallbacks<List<ContactListFilter>> () {
+ @Override
+ public Loader<List<ContactListFilter>> onCreateLoader(int id, Bundle args) {
+ return new AccountFilterUtil.FilterLoader(getActivity());
+ }
+
+ @Override
+ public void onLoadFinished(
+ Loader<List<ContactListFilter>> loader, List<ContactListFilter> data) {
+ if (data != null) {
+ if (data == null || data.size() < 2) {
+ mDrawerAdapter.setAccounts(new ArrayList<ContactListFilter>());
+ } else {
+ mDrawerAdapter.setAccounts(data);
+ }
+ }
+ }
+
+ public void onLoaderReset(Loader<List<ContactListFilter>> loader) {
+ }
+ };
+
+ private final LoaderManager.LoaderCallbacks<Cursor> mGroupListLoaderListener =
+ new LoaderManager.LoaderCallbacks<Cursor>() {
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ return new GroupListLoader(getActivity());
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (data == null) {
+ return;
+ }
+ mGroupListItems.clear();
+ for (int i = 0; i < data.getCount(); i++) {
+ if (data.moveToNext()) {
+ mGroupListItems.add(GroupUtil.getGroupListItem(data, i));
+ }
+ }
+ mGroupsLoaded = true;
+ notifyIfReady();
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+ };
+
+ public DrawerFragment() {}
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ if (activity instanceof DrawerFragmentListener) {
+ mListener = (DrawerFragmentListener) activity;
+ } else {
+ throw new IllegalArgumentException(
+ "Activity must implement " + DrawerFragmentListener.class.getName());
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View contentView = inflater.inflate(R.layout.drawer_fragment, null);
+ mDrawerListView = (ListView) contentView.findViewById(R.id.list);
+ mDrawerAdapter = new DrawerAdapter(getActivity());
+ mDrawerAdapter.setSelectedContactsView(mCurrentContactsView);
+ loadGroupsAndFilters();
+ mDrawerListView.setAdapter(mDrawerAdapter);
+ mDrawerListView.setOnItemClickListener(mOnDrawerItemClickListener);
+
+ if (savedInstanceState != null) {
+ final ContactsView contactsView =
+ ContactsView.values()[savedInstanceState.getInt(KEY_CONTACTS_VIEW)];
+ setNavigationItemChecked(contactsView);
+ final long groupId = savedInstanceState.getLong(KEY_SELECTED_GROUP);
+ mDrawerAdapter.setSelectedGroupId(groupId);
+ final ContactListFilter filter = savedInstanceState.getParcelable(KEY_SELECTED_ACCOUNT);
+ mDrawerAdapter.setSelectedAccount(filter);
+ } else {
+ setNavigationItemChecked(ContactsView.ALL_CONTACTS);
+ }
+
+ final FrameLayout root = (FrameLayout) contentView.findViewById(R.id.drawer_fragment_root);
+ root.setFitsSystemWindows(true);
+ root.setOnApplyWindowInsetsListener(new WindowInsetsListener());
+ root.setForegroundGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL);
+
+ mScrimDrawable = new ScrimDrawable();
+ root.setForeground(mScrimDrawable);
+
+ return contentView;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // todo double check on the new Handler() thing
+ final Uri uri = ObjectFactory.getWelcomeUri();
+ if (uri != null) {
+ mObserver = new WelcomeContentObserver(new Handler());
+ getActivity().getContentResolver().registerContentObserver(uri, false, mObserver);
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_CONTACTS_VIEW, mCurrentContactsView.ordinal());
+ outState.putLong(KEY_SELECTED_GROUP, mDrawerAdapter.getSelectedGroupId());
+ outState.putParcelable(KEY_SELECTED_ACCOUNT, mDrawerAdapter.getSelectedAccount());
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (mObserver != null) {
+ getActivity().getContentResolver().unregisterContentObserver(mObserver);
+ }
+ }
+
+ private void loadGroupsAndFilters() {
+ getLoaderManager().initLoader(LOADER_FILTERS, null, mFiltersLoaderListener);
+ AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS,
+ AccountTypeManager.AccountFilter.GROUPS_WRITABLE);
+ getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupListLoaderListener);
+ }
+
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ mListener = null;
+ }
+
+ private final OnItemClickListener mOnDrawerItemClickListener = new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
+ if (mListener == null) {
+ return;
+ }
+ final int viewId = v.getId();
+ if (viewId == R.id.nav_all_contacts) {
+ mListener.onContactsViewSelected(ContactsView.ALL_CONTACTS);
+ setNavigationItemChecked(ContactsView.ALL_CONTACTS);
+ } else if (viewId == R.id.nav_assistant) {
+ mListener.onContactsViewSelected(ContactsView.ASSISTANT);
+ setNavigationItemChecked(ContactsView.ASSISTANT);
+ } else if (viewId == R.id.nav_group) {
+ final GroupListItem groupListItem = (GroupListItem) v.getTag();
+ mListener.onGroupViewSelected(groupListItem);
+ mDrawerAdapter.setSelectedGroupId(groupListItem.getGroupId());
+ setNavigationItemChecked(ContactsView.GROUP_VIEW);
+ } else if (viewId == R.id.nav_filter) {
+ final ContactListFilter filter = (ContactListFilter) v.getTag();
+ mListener.onAccountViewSelected(filter);
+ mDrawerAdapter.setSelectedAccount(filter);
+ setNavigationItemChecked(ContactsView.ACCOUNT_VIEW);
+ } else if (viewId == R.id.nav_create_label) {
+ mListener.onCreateLabelButtonClicked();
+ } else if (viewId == R.id.nav_settings) {
+ mListener.onOpenSettings();
+ } else if (viewId == R.id.nav_help) {
+ mListener.onLaunchHelpFeedback();
+ } else {
+ return;
+ }
+ mListener.onDrawerItemClicked();
+ }
+ };
+
+ public void setNavigationItemChecked(ContactsView contactsView) {
+ mCurrentContactsView = contactsView;
+ if (mDrawerAdapter != null) {
+ mDrawerAdapter.setSelectedContactsView(contactsView);
+ }
+ }
+
+ public void updateGroupMenu(long groupId) {
+ mDrawerAdapter.setSelectedGroupId(groupId);
+ setNavigationItemChecked(ContactsView.GROUP_VIEW);
+ }
+
+ @Override
+ public void onAccountsLoaded(List<AccountInfo> accounts) {
+ mHasGroupWritableAccounts = !accounts.isEmpty();
+ mAccountsLoaded = true;
+ notifyIfReady();
+ }
+
+ private void notifyIfReady() {
+ if (mAccountsLoaded && mGroupsLoaded) {
+ final Iterator<GroupListItem> iterator = mGroupListItems.iterator();
+ while (iterator.hasNext()) {
+ final GroupListItem groupListItem = iterator.next();
+ if (GroupUtil.isEmptyFFCGroup(groupListItem)) {
+ iterator.remove();
+ }
+ }
+ mDrawerAdapter.setGroups(mGroupListItems, mHasGroupWritableAccounts);
+ }
+ }
+
+ public interface DrawerFragmentListener {
+ void onDrawerItemClicked();
+ void onContactsViewSelected(ContactsView mode);
+ void onGroupViewSelected(GroupListItem groupListItem);
+ void onAccountViewSelected(ContactListFilter filter);
+ void onCreateLabelButtonClicked();
+ void onOpenSettings();
+ void onLaunchHelpFeedback();
+ }
+
+ private class WindowInsetsListener implements View.OnApplyWindowInsetsListener {
+ @Override
+ public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
+ final int insetTop = insets.getSystemWindowInsetTop();
+ // set height of the scrim
+ mScrimDrawable.setIntrinsicHeight(insetTop);
+ return insets;
+ }
+ }
+}
diff --git a/src/com/android/contacts/drawer/ScrimDrawable.java b/src/com/android/contacts/drawer/ScrimDrawable.java
new file mode 100644
index 000000000..5663b1b59
--- /dev/null
+++ b/src/com/android/contacts/drawer/ScrimDrawable.java
@@ -0,0 +1,54 @@
+/*
+ * 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.contacts.drawer;
+
+import android.graphics.drawable.ColorDrawable;
+
+/**
+ * Create a simple scrim that covers just the status bar area when necessary.
+ * Copied from com.google.android.gms.people.accountswitcherview.ScrimDrawable;
+ */
+public class ScrimDrawable extends ColorDrawable {
+ public static final int DEFAULT_COLOR = 0x33000000;
+
+ /**
+ * Default constructor. Uses default color.
+ */
+ public ScrimDrawable() {
+ this(DEFAULT_COLOR);
+ }
+
+ /**
+ * Set a color if necessary.
+ *
+ * @param color
+ */
+ public ScrimDrawable(int color) {
+ super(color);
+ }
+
+ private int mIntrinsicHeight;
+
+ @Override
+ public int getIntrinsicHeight() {
+ return mIntrinsicHeight;
+ }
+
+ public void setIntrinsicHeight(int intrinsicHeight) {
+ mIntrinsicHeight = intrinsicHeight;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/editor/AccountHeaderPresenter.java b/src/com/android/contacts/editor/AccountHeaderPresenter.java
new file mode 100644
index 000000000..4e4f35a0a
--- /dev/null
+++ b/src/com/android/contacts/editor/AccountHeaderPresenter.java
@@ -0,0 +1,218 @@
+/*
+ * 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.editor;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ImageView;
+import android.widget.ListPopupWindow;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.UiClosables;
+
+import java.util.List;
+
+/**
+ * Controls the display of an account selector or header.
+ *
+ * TODO: This was mostly copied from {@link RawContactEditorView}. The code in that class
+ * should probably be modified to use this instead of leaving it duplicated.
+ */
+public class AccountHeaderPresenter {
+
+ private static final String KEY_SELECTED_ACCOUNT = "accountHeaderSelectedAccount";
+
+ public interface Observer {
+ void onChange(AccountHeaderPresenter sender);
+
+ public static final Observer NONE = new Observer() {
+ @Override
+ public void onChange(AccountHeaderPresenter sender) {
+ }
+ };
+ }
+
+ private final Context mContext;
+
+ private List<AccountInfo> mAccounts;
+ private AccountWithDataSet mCurrentAccount;
+
+ // Account header
+ private final View mAccountHeaderContainer;
+ private TextView mAccountHeaderType;
+ private TextView mAccountHeaderName;
+ private ImageView mAccountHeaderIcon;
+ private ImageView mAccountHeaderExpanderIcon;
+
+ // This would be different if the account was readonly
+ @StringRes
+ private int mSelectorTitle = R.string.editor_account_selector_title;
+
+ private Observer mObserver = Observer.NONE;
+
+ public AccountHeaderPresenter(View container) {
+ mContext = container.getContext();
+ mAccountHeaderContainer = container;
+ // mAccountHeaderType is optional and may not be in the container view in which case
+ // the variable will be null
+ mAccountHeaderType = (TextView) container.findViewById(R.id.account_type);
+ mAccountHeaderName = (TextView) container.findViewById(R.id.account_name);
+ mAccountHeaderIcon = (ImageView) container.findViewById(R.id.account_type_icon);
+ mAccountHeaderExpanderIcon = (ImageView) container.findViewById(R.id.account_expander_icon);
+ }
+
+ public void setObserver(Observer observer) {
+ mObserver = observer;
+ }
+
+ public void setCurrentAccount(@NonNull AccountWithDataSet account) {
+ if (mCurrentAccount != null && mCurrentAccount.equals(account)) {
+ return;
+ }
+ mCurrentAccount = account;
+ if (mObserver != null) {
+ mObserver.onChange(this);
+ }
+ updateDisplayedAccount();
+ }
+
+ public void setAccounts(List<AccountInfo> accounts) {
+ mAccounts = accounts;
+ // If the current account hasn't been set or it has been removed just use the first
+ // account.
+ if (mCurrentAccount == null || !AccountInfo.contains(mAccounts, mCurrentAccount)) {
+ mCurrentAccount = mAccounts.isEmpty() ? null : accounts.get(0).getAccount();
+ mObserver.onChange(this);
+ }
+ updateDisplayedAccount();
+ }
+
+ public AccountWithDataSet getCurrentAccount() {
+ return mCurrentAccount != null ? mCurrentAccount : null;
+ }
+
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putParcelable(KEY_SELECTED_ACCOUNT, mCurrentAccount);
+ }
+
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ if (savedInstanceState == null) return;
+ if (mCurrentAccount == null) {
+ mCurrentAccount = savedInstanceState.getParcelable(KEY_SELECTED_ACCOUNT);
+ }
+ updateDisplayedAccount();
+ }
+
+ private void updateDisplayedAccount() {
+ mAccountHeaderContainer.setVisibility(View.GONE);
+ if (mCurrentAccount == null) return;
+ if (mAccounts == null) return;
+
+ final String accountLabel = getAccountLabel(mCurrentAccount);
+
+ if (mAccounts.size() > 1) {
+ addAccountSelector(accountLabel);
+ } else {
+ addAccountHeader(accountLabel);
+ }
+ }
+
+ private void addAccountHeader(String accountLabel) {
+ mAccountHeaderContainer.setVisibility(View.VISIBLE);
+
+ // Set the account name
+ mAccountHeaderName.setVisibility(View.VISIBLE);
+ mAccountHeaderName.setText(accountLabel);
+
+ // Set the account type
+ final String selectorTitle = mContext.getResources().getString(mSelectorTitle);
+ if (mAccountHeaderType != null) {
+ mAccountHeaderType.setText(selectorTitle);
+ }
+
+ final AccountInfo accountInfo = AccountInfo.getAccount(mAccounts, mCurrentAccount);
+
+ // Set the icon
+ mAccountHeaderIcon.setImageDrawable(accountInfo.getIcon());
+
+ // Set the content description
+ mAccountHeaderContainer.setContentDescription(
+ EditorUiUtils.getAccountInfoContentDescription(accountLabel,
+ selectorTitle));
+ }
+
+ private void addAccountSelector(CharSequence nameLabel) {
+ final View.OnClickListener onClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showPopup();
+ }
+ };
+ setUpAccountSelector(nameLabel.toString(), onClickListener);
+ }
+
+ private void showPopup() {
+ final ListPopupWindow popup = new ListPopupWindow(mContext);
+ final AccountsListAdapter adapter =
+ new AccountsListAdapter(mContext, mAccounts, mCurrentAccount);
+ popup.setWidth(mAccountHeaderContainer.getWidth());
+ popup.setAnchorView(mAccountHeaderContainer);
+ popup.setAdapter(adapter);
+ popup.setModal(true);
+ popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position,
+ long id) {
+ UiClosables.closeQuietly(popup);
+ final AccountWithDataSet newAccount = adapter.getItem(position);
+ setCurrentAccount(newAccount);
+ // Make sure the new selection will be announced once it's changed
+ mAccountHeaderContainer.setAccessibilityLiveRegion(
+ View.ACCESSIBILITY_LIVE_REGION_POLITE);
+ }
+ });
+ mAccountHeaderContainer.post(new Runnable() {
+ @Override
+ public void run() {
+ popup.show();
+ }
+ });
+ }
+
+ private void setUpAccountSelector(String nameLabel, View.OnClickListener listener) {
+ addAccountHeader(nameLabel);
+ // Add handlers for choosing another account to save to.
+ mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
+ // Add the listener to the icon so that it will be announced by talkback as a clickable
+ // element
+ mAccountHeaderExpanderIcon.setOnClickListener(listener);
+ mAccountHeaderContainer.setOnClickListener(listener);
+ }
+
+ private String getAccountLabel(AccountWithDataSet account) {
+ final AccountInfo accountInfo = AccountInfo.getAccount(mAccounts, account);
+ return accountInfo != null ? accountInfo.getNameLabel().toString() : null;
+ }
+}
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index 6447ff41f..adc20d277 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -38,8 +38,11 @@ import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.text.TextUtils;
-import com.android.contacts.common.model.ValuesDelta;
import com.android.contacts.compat.AggregationSuggestionsCompat;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.base.MoreObjects;
import com.google.common.collect.Lists;
import java.util.ArrayList;
@@ -50,42 +53,32 @@ import java.util.List;
* Runs asynchronous queries to obtain aggregation suggestions in the as-you-type mode.
*/
public class AggregationSuggestionEngine extends HandlerThread {
- public static final String TAG = "AggregationSuggestionEngine";
-
public interface Listener {
void onAggregationSuggestionChange();
}
- public static final class RawContact {
- public long rawContactId;
- public String accountType;
- public String accountName;
- public String dataSet;
-
- @Override
- public String toString() {
- return "ID: " + rawContactId + " account: " + accountType + "/" + accountName
- + " dataSet: " + dataSet;
- }
- }
-
public static final class Suggestion {
-
public long contactId;
- public long photoId;
- public String lookupKey;
+ public String contactLookupKey;
+ public long rawContactId;
+ public long photoId = -1;
public String name;
public String phoneNumber;
public String emailAddress;
public String nickname;
- public byte[] photo;
- public List<RawContact> rawContacts;
@Override
public String toString() {
- return "ID: " + contactId + " rawContacts: " + rawContacts + " name: " + name
- + " phone: " + phoneNumber + " email: " + emailAddress + " nickname: "
- + nickname + (photo != null ? " [has photo]" : "");
+ return MoreObjects.toStringHelper(Suggestion.class)
+ .add("contactId", contactId)
+ .add("contactLookupKey", contactLookupKey)
+ .add("rawContactId", rawContactId)
+ .add("photoId", photoId)
+ .add("name", name)
+ .add("phoneNumber", phoneNumber)
+ .add("emailAddress", emailAddress)
+ .add("nickname", nickname)
+ .toString();
}
}
@@ -106,19 +99,19 @@ public class AggregationSuggestionEngine extends HandlerThread {
private static final long SUGGESTION_LOOKUP_DELAY_MILLIS = 300;
+ private static final int SUGGESTIONS_LIMIT = 3;
+
private final Context mContext;
private long[] mSuggestedContactIds = new long[0];
-
private Handler mMainHandler;
private Handler mHandler;
private long mContactId;
+ private AccountWithDataSet mAccountFilter;
private Listener mListener;
private Cursor mDataCursor;
private ContentObserver mContentObserver;
private Uri mSuggestionsUri;
- private int mSuggestionsLimit = 3;
- private boolean mPruneInvisibleContacts = true;
public AggregationSuggestionEngine(Context context) {
super("AggregationSuggestions", Process.THREAD_PRIORITY_BACKGROUND);
@@ -150,12 +143,8 @@ public class AggregationSuggestionEngine extends HandlerThread {
}
}
- public void setSuggestionsLimit(int suggestionsLimit) {
- mSuggestionsLimit = suggestionsLimit;
- }
-
- public void setPruneInvisibleContacts (boolean pruneInvisibleContacts) {
- mPruneInvisibleContacts = pruneInvisibleContacts;
+ public void setAccountFilter(AccountWithDataSet account) {
+ mAccountFilter = account;
}
public void setListener(Listener listener) {
@@ -216,10 +205,6 @@ public class AggregationSuggestionEngine extends HandlerThread {
appendValue(nameSb, values, StructuredName.FAMILY_NAME);
appendValue(nameSb, values, StructuredName.SUFFIX);
- if (nameSb.length() == 0) {
- appendValue(nameSb, values, StructuredName.DISPLAY_NAME);
- }
-
StringBuilder phoneticNameSb = new StringBuilder();
appendValue(phoneticNameSb, values, StructuredName.PHONETIC_FAMILY_NAME);
appendValue(phoneticNameSb, values, StructuredName.PHONETIC_MIDDLE_NAME);
@@ -232,7 +217,7 @@ public class AggregationSuggestionEngine extends HandlerThread {
// AggregationSuggestions.Builder() became visible in API level 23, so use it if applicable.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
final Builder uriBuilder = new AggregationSuggestions.Builder()
- .setLimit(mSuggestionsLimit)
+ .setLimit(SUGGESTIONS_LIMIT)
.setContactId(mContactId);
if (nameSb.length() != 0) {
uriBuilder.addNameParameter(nameSb.toString());
@@ -246,7 +231,7 @@ public class AggregationSuggestionEngine extends HandlerThread {
// For previous SDKs, use the backup plan.
final AggregationSuggestionsCompat.Builder uriBuilder =
new AggregationSuggestionsCompat.Builder()
- .setLimit(mSuggestionsLimit)
+ .setLimit(SUGGESTIONS_LIMIT)
.setContactId(mContactId);
if (nameSb.length() != 0) {
uriBuilder.addNameParameter(nameSb.toString());
@@ -282,42 +267,36 @@ public class AggregationSuggestionEngine extends HandlerThread {
public static final String SELECTION_PREFIX =
Data.MIMETYPE + " IN ('"
- + Phone.CONTENT_ITEM_TYPE + "','"
- + Email.CONTENT_ITEM_TYPE + "','"
- + StructuredName.CONTENT_ITEM_TYPE + "','"
- + Nickname.CONTENT_ITEM_TYPE + "','"
- + Photo.CONTENT_ITEM_TYPE + "')"
- + " AND " + Data.CONTACT_ID + " IN (";
+ + Phone.CONTENT_ITEM_TYPE + "','"
+ + Email.CONTENT_ITEM_TYPE + "','"
+ + StructuredName.CONTENT_ITEM_TYPE + "','"
+ + Nickname.CONTENT_ITEM_TYPE + "','"
+ + Photo.CONTENT_ITEM_TYPE + "')"
+ + " AND " + Data.CONTACT_ID + " IN (";
public static final String[] COLUMNS = {
- Data._ID,
- Data.CONTACT_ID,
- Data.LOOKUP_KEY,
- Data.PHOTO_ID,
- Data.DISPLAY_NAME,
- Data.RAW_CONTACT_ID,
- Data.MIMETYPE,
- Data.DATA1,
- Data.IS_SUPER_PRIMARY,
- Photo.PHOTO,
- RawContacts.ACCOUNT_TYPE,
- RawContacts.ACCOUNT_NAME,
- RawContacts.DATA_SET
+ Data.CONTACT_ID,
+ Data.LOOKUP_KEY,
+ Data.RAW_CONTACT_ID,
+ Data.MIMETYPE,
+ Data.DATA1,
+ Data.IS_SUPER_PRIMARY,
+ RawContacts.ACCOUNT_TYPE,
+ RawContacts.ACCOUNT_NAME,
+ RawContacts.DATA_SET,
+ Contacts.Photo._ID
};
- public static final int ID = 0;
- public static final int CONTACT_ID = 1;
- public static final int LOOKUP_KEY = 2;
- public static final int PHOTO_ID = 3;
- public static final int DISPLAY_NAME = 4;
- public static final int RAW_CONTACT_ID = 5;
- public static final int MIMETYPE = 6;
- public static final int DATA1 = 7;
- public static final int IS_SUPERPRIMARY = 8;
- public static final int PHOTO = 9;
- public static final int ACCOUNT_TYPE = 10;
- public static final int ACCOUNT_NAME = 11;
- public static final int DATA_SET = 12;
+ public static final int CONTACT_ID = 0;
+ public static final int LOOKUP_KEY = 1;
+ public static final int RAW_CONTACT_ID = 2;
+ public static final int MIMETYPE = 3;
+ public static final int DATA1 = 4;
+ public static final int IS_SUPERPRIMARY = 5;
+ public static final int ACCOUNT_TYPE = 6;
+ public static final int ACCOUNT_NAME = 7;
+ public static final int DATA_SET = 8;
+ public static final int PHOTO_ID = 9;
}
private void loadAggregationSuggestions(Uri uri) {
@@ -346,12 +325,12 @@ public class AggregationSuggestionEngine extends HandlerThread {
sb.append(mSuggestedContactIds[i]);
}
sb.append(')');
- sb.toString();
Cursor dataCursor = contentResolver.query(Data.CONTENT_URI,
DataQuery.COLUMNS, sb.toString(), null, Data.CONTACT_ID);
if (dataCursor != null) {
- mMainHandler.sendMessage(mMainHandler.obtainMessage(MESSAGE_DATA_CURSOR, dataCursor));
+ mMainHandler.sendMessage(
+ mMainHandler.obtainMessage(MESSAGE_DATA_CURSOR, dataCursor));
}
} finally {
cursor.close();
@@ -364,8 +343,7 @@ public class AggregationSuggestionEngine extends HandlerThread {
final ArrayList<Long> newIds = new ArrayList<Long>(count);
while (cursor.moveToNext()) {
final long contactId = cursor.getLong(0);
- if (!changed &&
- Arrays.binarySearch(mSuggestedContactIds, contactId) < 0) {
+ if (!changed && Arrays.binarySearch(mSuggestedContactIds, contactId) < 0) {
changed = true;
}
newIds.add(contactId);
@@ -398,99 +376,64 @@ public class AggregationSuggestionEngine extends HandlerThread {
}
public List<Suggestion> getSuggestions() {
- final ArrayList<Long> visibleContacts = new ArrayList<>();
- if (mPruneInvisibleContacts) {
- final Uri contactFilterUri = Data.CONTENT_URI.buildUpon()
- .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true")
- .build();
- final ContentResolver contentResolver = mContext.getContentResolver();
- final Cursor contactCursor = contentResolver.query(contactFilterUri,
- new String[]{Data.CONTACT_ID}, null, null, null);
- try {
- if (contactCursor != null) {
- while (contactCursor.moveToNext()) {
- final long contactId = contactCursor.getLong(0);
- visibleContacts.add(contactId);
- }
- }
- } finally {
- contactCursor.close();
- }
-
- }
+ final ArrayList<Suggestion> list = Lists.newArrayList();
- ArrayList<Suggestion> list = Lists.newArrayList();
- if (mDataCursor != null) {
+ if (mDataCursor != null && mAccountFilter != null) {
Suggestion suggestion = null;
- long currentContactId = -1;
+ long currentRawContactId = -1;
mDataCursor.moveToPosition(-1);
while (mDataCursor.moveToNext()) {
- long contactId = mDataCursor.getLong(DataQuery.CONTACT_ID);
- if (mPruneInvisibleContacts && !visibleContacts.contains(contactId)) {
- continue;
- }
- if (contactId != currentContactId) {
+ final long rawContactId = mDataCursor.getLong(DataQuery.RAW_CONTACT_ID);
+ if (rawContactId != currentRawContactId) {
suggestion = new Suggestion();
- suggestion.contactId = contactId;
- suggestion.name = mDataCursor.getString(DataQuery.DISPLAY_NAME);
- suggestion.lookupKey = mDataCursor.getString(DataQuery.LOOKUP_KEY);
- suggestion.rawContacts = Lists.newArrayList();
- list.add(suggestion);
- currentContactId = contactId;
- }
-
- long rawContactId = mDataCursor.getLong(DataQuery.RAW_CONTACT_ID);
- if (!containsRawContact(suggestion, rawContactId)) {
- RawContact rawContact = new RawContact();
- rawContact.rawContactId = rawContactId;
- rawContact.accountName = mDataCursor.getString(DataQuery.ACCOUNT_NAME);
- rawContact.accountType = mDataCursor.getString(DataQuery.ACCOUNT_TYPE);
- rawContact.dataSet = mDataCursor.getString(DataQuery.DATA_SET);
- suggestion.rawContacts.add(rawContact);
+ suggestion.rawContactId = rawContactId;
+ suggestion.contactId = mDataCursor.getLong(DataQuery.CONTACT_ID);
+ suggestion.contactLookupKey = mDataCursor.getString(DataQuery.LOOKUP_KEY);
+ final String accountName = mDataCursor.getString(DataQuery.ACCOUNT_NAME);
+ final String accountType = mDataCursor.getString(DataQuery.ACCOUNT_TYPE);
+ final String dataSet = mDataCursor.getString(DataQuery.DATA_SET);
+ final AccountWithDataSet account = new AccountWithDataSet(
+ accountName, accountType, dataSet);
+ if (mAccountFilter.equals(account)) {
+ list.add(suggestion);
+ }
+ currentRawContactId = rawContactId;
}
- String mimetype = mDataCursor.getString(DataQuery.MIMETYPE);
+ final String mimetype = mDataCursor.getString(DataQuery.MIMETYPE);
if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) {
- String data = mDataCursor.getString(DataQuery.DATA1);
+ final String data = mDataCursor.getString(DataQuery.DATA1);
int superprimary = mDataCursor.getInt(DataQuery.IS_SUPERPRIMARY);
if (!TextUtils.isEmpty(data)
&& (superprimary != 0 || suggestion.phoneNumber == null)) {
suggestion.phoneNumber = data;
}
} else if (Email.CONTENT_ITEM_TYPE.equals(mimetype)) {
- String data = mDataCursor.getString(DataQuery.DATA1);
+ final String data = mDataCursor.getString(DataQuery.DATA1);
int superprimary = mDataCursor.getInt(DataQuery.IS_SUPERPRIMARY);
if (!TextUtils.isEmpty(data)
&& (superprimary != 0 || suggestion.emailAddress == null)) {
suggestion.emailAddress = data;
}
} else if (Nickname.CONTENT_ITEM_TYPE.equals(mimetype)) {
- String data = mDataCursor.getString(DataQuery.DATA1);
+ final String data = mDataCursor.getString(DataQuery.DATA1);
if (!TextUtils.isEmpty(data)) {
suggestion.nickname = data;
}
+ } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) {
+ // DATA1 stores the display name for the raw contact.
+ final String data = mDataCursor.getString(DataQuery.DATA1);
+ if (!TextUtils.isEmpty(data) && suggestion.name == null) {
+ suggestion.name = data;
+ }
} else if (Photo.CONTENT_ITEM_TYPE.equals(mimetype)) {
- long dataId = mDataCursor.getLong(DataQuery.ID);
- long photoId = mDataCursor.getLong(DataQuery.PHOTO_ID);
- if (dataId == photoId && !mDataCursor.isNull(DataQuery.PHOTO)) {
- suggestion.photo = mDataCursor.getBlob(DataQuery.PHOTO);
- suggestion.photoId = photoId;
+ final Long id = mDataCursor.getLong(DataQuery.PHOTO_ID);
+ if (suggestion.photoId == -1) {
+ suggestion.photoId = id;
}
}
}
}
return list;
}
-
- public boolean containsRawContact(Suggestion suggestion, long rawContactId) {
- if (suggestion.rawContacts != null) {
- int count = suggestion.rawContacts.size();
- for (int i = 0; i < count; i++) {
- if (suggestion.rawContacts.get(i).rawContactId == rawContactId) {
- return true;
- }
- }
- }
- return false;
- }
}
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index 5a3da0017..d391c400a 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -17,7 +17,6 @@
package com.android.contacts.editor;
import android.content.Context;
-import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
@@ -27,17 +26,9 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
-import com.android.contacts.editor.AggregationSuggestionEngine.RawContact;
import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
/**
* A view that contains a name, picture and other data for a contact aggregation suggestion.
@@ -45,25 +36,15 @@ import java.util.List;
public class AggregationSuggestionView extends LinearLayout {
public interface Listener {
-
- /**
- * Callback that passes the contact ID to join with and, for convenience,
- * also the list of constituent raw contact IDs to avoid a separate query
- * for those.
- */
- public void onJoinAction(long contactId, List<Long> rawContacIds);
-
/**
- * Callback that passes the contact ID to edit instead of the current contact.
+ * Callback that passes the contact URI and raw contact ID to edit instead of the
+ * current contact.
*/
- public void onEditAction(Uri contactLookupUri);
+ void onEditAction(Uri contactLookupUri, long rawContactId);
}
private Listener mListener;
- private long mContactId;
- private String mLookupKey;
- private List<RawContact> mRawContacts = Lists.newArrayList();
- private boolean mNewContact;
+ private Suggestion mSuggestion;
public AggregationSuggestionView(Context context) {
super(context);
@@ -77,27 +58,23 @@ public class AggregationSuggestionView extends LinearLayout {
super(context, attrs, defStyle);
}
- public void setNewContact(boolean flag) {
- mNewContact = flag;
- }
-
public void bindSuggestion(Suggestion suggestion) {
- mContactId = suggestion.contactId;
- mLookupKey = suggestion.lookupKey;
- mRawContacts = suggestion.rawContacts;
- ImageView photo = (ImageView) findViewById(R.id.aggregation_suggestion_photo);
- if (suggestion.photo != null) {
- photo.setImageBitmap(BitmapFactory.decodeByteArray(
- suggestion.photo, 0, suggestion.photo.length));
- } else {
- photo.setImageDrawable(ContactPhotoManager.getDefaultAvatarDrawableForContact(
- getResources(), false, null));
- }
-
- TextView name = (TextView) findViewById(R.id.aggregation_suggestion_name);
+ mSuggestion = suggestion;
+ final ContactPhotoManager.DefaultImageRequest
+ request = new ContactPhotoManager.DefaultImageRequest(
+ suggestion.name, String.valueOf(suggestion.rawContactId), /* isCircular = */ false);
+ final ImageView photoView = (ImageView) findViewById(
+ R.id.aggregation_suggestion_photo);
+ ContactPhotoManager.getInstance(getContext()).loadThumbnail(photoView,
+ suggestion.photoId,
+ /* darkTheme = */ false,
+ /* isCircular = */ false,
+ request);
+
+ final TextView name = (TextView) findViewById(R.id.aggregation_suggestion_name);
name.setText(suggestion.name);
- TextView data = (TextView) findViewById(R.id.aggregation_suggestion_data);
+ final TextView data = (TextView) findViewById(R.id.aggregation_suggestion_data);
String dataText = null;
if (suggestion.nickname != null) {
dataText = suggestion.nickname;
@@ -111,48 +88,18 @@ public class AggregationSuggestionView extends LinearLayout {
data.setText(dataText);
}
- /**
- * Returns true if the suggested contact can be edited.
- */
- private boolean canEditSuggestedContact() {
- if (!mNewContact) {
- return false;
- }
-
- AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
- for (RawContact rawContact : mRawContacts) {
- String accountType = rawContact.accountType;
- String dataSet = rawContact.dataSet;
- if (accountType == null) {
- return true;
- }
- AccountType type = accountTypes.getAccountType(accountType, dataSet);
- if (type.areContactsWritable()) {
- return true;
- }
- }
-
- return false;
- }
-
public void setListener(Listener listener) {
mListener = listener;
}
public boolean handleItemClickEvent() {
if (mListener != null && isEnabled()) {
- if (canEditSuggestedContact()) {
- if (TextUtils.isEmpty(mLookupKey)) {
- return false;
- }
- mListener.onEditAction(Contacts.getLookupUri(mContactId, mLookupKey));
- } else {
- ArrayList<Long> rawContactIds = Lists.newArrayList();
- for (RawContact rawContact : mRawContacts) {
- rawContactIds.add(rawContact.rawContactId);
- }
- mListener.onJoinAction(mContactId, rawContactIds);
+ if (TextUtils.isEmpty(mSuggestion.contactLookupKey)) {
+ return false;
}
+ mListener.onEditAction(
+ Contacts.getLookupUri(mSuggestion.contactId, mSuggestion.contactLookupKey),
+ mSuggestion.rawContactId);
return true;
}
return false;
diff --git a/src/com/android/contacts/editor/BaseRawContactEditorView.java b/src/com/android/contacts/editor/BaseRawContactEditorView.java
deleted file mode 100644
index e99af619f..000000000
--- a/src/com/android/contacts/editor/BaseRawContactEditorView.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.Data;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-/**
- * Base view that provides common code for the editor interaction for a specific
- * RawContact represented through an {@link RawContactDelta}.
- * <p>
- * Internal updates are performed against {@link ValuesDelta} so that the
- * source {@link RawContact} can be swapped out. Any state-based changes, such as
- * adding {@link Data} rows or changing {@link EditType}, are performed through
- * {@link RawContactModifier} to ensure that {@link AccountType} are enforced.
- */
-public abstract class BaseRawContactEditorView extends LinearLayout {
-
- private PhotoEditorView mPhoto;
-
- private View mAccountHeaderContainer;
- private ImageView mExpandAccountButton;
- private LinearLayout mCollapsibleSection;
- private TextView mAccountName;
- private TextView mAccountType;
-
- protected Listener mListener;
-
- public interface Listener {
- void onExternalEditorRequest(AccountWithDataSet account, Uri uri);
- void onEditorExpansionChanged();
- }
-
- public BaseRawContactEditorView(Context context) {
- super(context);
- }
-
- public BaseRawContactEditorView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- mPhoto = (PhotoEditorView)findViewById(R.id.edit_photo);
- mPhoto.setEnabled(isEnabled());
-
- mAccountHeaderContainer = findViewById(R.id.account_header_container);
- mExpandAccountButton = (ImageView) findViewById(R.id.expand_account_button);
- mCollapsibleSection = (LinearLayout) findViewById(R.id.collapsable_section);
- mAccountName = (TextView) findViewById(R.id.account_name);
- mAccountType = (TextView) findViewById(R.id.account_type);
-
- setCollapsed(false);
- setCollapsible(true);
- }
-
- public void setGroupMetaData(Cursor groupMetaData) {
- }
-
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- /**
- * Assign the given {@link Bitmap} to the internal {@link PhotoEditorView}
- * in order to update the {@link RawContactDelta} currently being edited.
- */
- public void setPhotoEntry(Bitmap bitmap) {
- mPhoto.setPhotoEntry(bitmap);
- }
-
- /**
- * Assign the given photo {@link Uri} to UI of the {@link PhotoEditorView}, so that it can
- * display a full sized photo.
- */
- public void setFullSizedPhoto(Uri uri) {
- mPhoto.setFullSizedPhoto(uri);
- }
-
- protected void setHasPhotoEditor(boolean hasPhotoEditor) {
- mPhoto.setVisibility(hasPhotoEditor ? View.VISIBLE : View.GONE);
- }
-
- /**
- * Return true if internal {@link PhotoEditorView} has a {@link Photo} set.
- */
- public boolean hasSetPhoto() {
- return mPhoto.hasSetPhoto();
- }
-
- public PhotoEditorView getPhotoEditor() {
- return mPhoto;
- }
-
- /**
- * @return the RawContact ID that this editor is editing.
- */
- public abstract long getRawContactId();
-
- /**
- * If {@param isCollapsible} is TRUE, then this editor can be collapsed by clicking on its
- * account header.
- */
- public void setCollapsible(boolean isCollapsible) {
- if (isCollapsible) {
- mAccountHeaderContainer.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final int startingHeight = mCollapsibleSection.getMeasuredHeight();
- final boolean isCollapsed = isCollapsed();
- setCollapsed(!isCollapsed);
- // The slideAndFadeIn animation only looks good when collapsing. For expanding,
- // it looks like the editor is loading sluggishly. I tried animating the
- // clipping bounds instead of the alpha value. But because the editors are very
- // tall, this animation looked very similar to doing no animation at all. It
- // wasn't worth the significant additional complexity.
- if (!isCollapsed) {
- EditorAnimator.getInstance().slideAndFadeIn(mCollapsibleSection,
- startingHeight);
- // We want to place the focus near the top of the screen now that a
- // potentially focused editor is being collapsed.
- EditorAnimator.placeFocusAtTopOfScreenAfterReLayout(mCollapsibleSection);
- } else {
- // When expanding we should scroll the expanded view onto the screen.
- // Otherwise, user's may not notice that any expansion happened.
- EditorAnimator.getInstance().scrollViewToTop(mAccountHeaderContainer);
- mCollapsibleSection.requestFocus();
- }
- if (mListener != null) {
- mListener.onEditorExpansionChanged();
- }
- updateAccountHeaderContentDescription();
- }
- });
- mExpandAccountButton.setVisibility(View.VISIBLE);
- mAccountHeaderContainer.setClickable(true);
- } else {
- mAccountHeaderContainer.setOnClickListener(null);
- mExpandAccountButton.setVisibility(View.GONE);
- mAccountHeaderContainer.setClickable(false);
- }
- }
-
- public boolean isCollapsed() {
- return mCollapsibleSection.getLayoutParams().height == 0;
- }
-
- public void setCollapsed(boolean isCollapsed) {
- final LinearLayout.LayoutParams params
- = (LayoutParams) mCollapsibleSection.getLayoutParams();
- if (isCollapsed) {
- params.height = 0;
- mCollapsibleSection.setLayoutParams(params);
- mExpandAccountButton.setImageResource(R.drawable.ic_menu_expander_minimized_holo_light);
- } else {
- params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
- mCollapsibleSection.setLayoutParams(params);
- mExpandAccountButton.setImageResource(R.drawable.ic_menu_expander_maximized_holo_light);
- }
- }
-
- protected void updateAccountHeaderContentDescription() {
- final StringBuilder builder = new StringBuilder();
- builder.append(EditorUiUtils.getAccountInfoContentDescription(
- mAccountName.getText(), mAccountType.getText()));
- if (mExpandAccountButton.getVisibility() == View.VISIBLE) {
- builder.append(getResources().getString(isCollapsed()
- ? R.string.content_description_expand_editor
- : R.string.content_description_collapse_editor));
- }
- mAccountHeaderContainer.setContentDescription(builder);
- }
-
- /**
- * Set the internal state for this view, given a current
- * {@link RawContactDelta} state and the {@link AccountType} that
- * apply to that state.
- */
- public abstract void setState(RawContactDelta state, AccountType source, ViewIdGenerator vig,
- boolean isProfile);
-}
diff --git a/src/com/android/contacts/editor/CancelEditDialogFragment.java b/src/com/android/contacts/editor/CancelEditDialogFragment.java
index ba5f9fa37..48cedff86 100644
--- a/src/com/android/contacts/editor/CancelEditDialogFragment.java
+++ b/src/com/android/contacts/editor/CancelEditDialogFragment.java
@@ -16,13 +16,13 @@
package com.android.contacts.editor;
-import com.android.contacts.R;
-
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
+
+import com.android.contacts.R;
/**
* Asks the user whether to cancel editing the contact.
@@ -35,7 +35,7 @@ public class CancelEditDialogFragment extends DialogFragment {
* Shows a {@link CancelEditDialogFragment} after setting the given Fragment as the
* target of the dialog.
*/
- public static void show(ContactEditorBaseFragment fragment) {
+ public static void show(ContactEditorFragment fragment) {
final CancelEditDialogFragment dialog = new CancelEditDialogFragment();
dialog.setTargetFragment(fragment, 0);
dialog.show(fragment.getFragmentManager(), TAG);
@@ -69,4 +69,4 @@ public class CancelEditDialogFragment extends DialogFragment {
*/
void onCancelEditConfirmed();
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
deleted file mode 100644
index 4a731db23..000000000
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ /dev/null
@@ -1,317 +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.editor;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.activities.CompactContactEditorActivity;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.util.ContactPhotoUtils;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.Toast;
-
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-
-/**
- * Contact editor with only the most important fields displayed initially.
- */
-public class CompactContactEditorFragment extends ContactEditorBaseFragment implements
- CompactRawContactsEditorView.Listener, CompactPhotoEditorView.Listener {
-
- private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
- private static final String KEY_UPDATED_PHOTOS = "updated_photos";
-
- private long mPhotoRawContactId;
- private Bundle mUpdatedPhotos = new Bundle();
-
- @Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
-
- if (savedState != null) {
- mPhotoRawContactId = savedState.getLong(KEY_PHOTO_RAW_CONTACT_ID);
- mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
- }
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- setHasOptionsMenu(true);
-
- final View view = inflater.inflate(
- R.layout.compact_contact_editor_fragment, container, false);
- mContent = (LinearLayout) view.findViewById(R.id.raw_contacts_editor_view);
- return view;
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putLong(KEY_PHOTO_RAW_CONTACT_ID, mPhotoRawContactId);
- outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- return revert();
- }
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- protected void bindEditors() {
- if (!isReadyToBindEditors()) {
- return;
- }
-
- // Add input fields for the loaded Contact
- final CompactRawContactsEditorView editorView = getContent();
- editorView.setListener(this);
- editorView.setState(mState, getMaterialPalette(), mViewIdGenerator, mPhotoId,
- mHasNewContact, mIsUserProfile, mAccountWithDataSet);
- if (mHasNewContact && !TextUtils.isEmpty(mReadOnlyDisplayName)) {
- mReadOnlyNameEditorView = editorView.getPrimaryNameEditorView();
- editorView.maybeSetReadOnlyDisplayNameAsPrimary(mReadOnlyDisplayName);
- }
-
- // Set up the photo widget
- editorView.setPhotoListener(this);
- mPhotoRawContactId = editorView.getPhotoRawContactId();
- // If there is an updated full resolution photo apply it now, this will be the case if
- // the user selects or takes a new photo, then rotates the device.
- final Uri uri = (Uri) mUpdatedPhotos.get(String.valueOf(mPhotoRawContactId));
- if (uri != null) {
- editorView.setFullSizePhoto(uri);
- }
-
- // The editor is ready now so make it visible
- editorView.setEnabled(isEnabled());
- editorView.setVisibility(View.VISIBLE);
-
- // Refresh the ActionBar as the visibility of the join command
- // Activity can be null if we have been detached from the Activity.
- invalidateOptionsMenu();
- }
-
- private boolean isReadyToBindEditors() {
- if (mState.isEmpty()) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "No data to bind editors");
- }
- return false;
- }
- if (mIsEdit && !mExistingContactDataReady) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "Existing contact data is not ready to bind editors.");
- }
- return false;
- }
- if (mHasNewContact && !mNewContactDataReady) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "New contact data is not ready to bind editors.");
- }
- return false;
- }
- return true;
- }
-
- @Override
- protected View getAggregationAnchorView(long rawContactId) {
- return getContent().getAggregationAnchorView();
- }
-
- @Override
- protected void setGroupMetaData() {
- if (mGroupMetaData != null) {
- getContent().setGroupMetaData(mGroupMetaData);
- }
- }
-
- @Override
- protected boolean doSaveAction(int saveMode, Long joinContactId) {
- final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
- SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
- ((Activity) mContext).getClass(),
- CompactContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos,
- JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
- return startSaveService(mContext, intent, saveMode);
- }
-
- @Override
- protected void joinAggregate(final long contactId) {
- final Intent intent = ContactSaveService.createJoinContactsIntent(
- mContext, mContactIdForJoin, contactId, CompactContactEditorActivity.class,
- CompactContactEditorActivity.ACTION_JOIN_COMPLETED);
- mContext.startService(intent);
- }
-
- public void removePhoto() {
- getContent().removePhoto();
- mUpdatedPhotos.remove(String.valueOf(mPhotoRawContactId));
- }
-
- public void updatePhoto(Uri uri) throws FileNotFoundException {
- final Bitmap bitmap = ContactPhotoUtils.getBitmapFromUri(getActivity(), uri);
- if (bitmap == null || bitmap.getHeight() <= 0 || bitmap.getWidth() <= 0) {
- Toast.makeText(mContext, R.string.contactPhotoSavedErrorToast,
- Toast.LENGTH_SHORT).show();
- return;
- }
- mUpdatedPhotos.putParcelable(String.valueOf(mPhotoRawContactId), uri);
- getContent().updatePhoto(uri);
- }
-
- public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
- getContent().setPrimaryPhoto(photo);
-
- // Update the photo ID we will try to match when selecting the photo to display
- mPhotoId = photo.photoId;
- }
-
- @Override
- public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta) {
- final Activity activity = getActivity();
- if (activity == null || activity.isFinishing()) {
- return;
- }
- acquireAggregationSuggestions(activity, rawContactId, valuesDelta);
- }
-
- @Override
- public void onRebindEditorsForNewContact(RawContactDelta oldState,
- AccountWithDataSet oldAccount, AccountWithDataSet newAccount) {
- mNewContactAccountChanged = true;
- mAccountWithDataSet = newAccount;
- rebindEditorsForNewContact(oldState, oldAccount, newAccount);
- }
-
- @Override
- public void onBindEditorsFailed() {
- final Activity activity = getActivity();
- if (activity != null && !activity.isFinishing()) {
- Toast.makeText(activity, R.string.compact_editor_failed_to_load,
- Toast.LENGTH_SHORT).show();
- activity.setResult(Activity.RESULT_CANCELED);
- activity.finish();
- }
- }
-
- @Override
- public void onEditorsBound() {
- getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
- }
-
- @Override
- public void onPhotoEditorViewClicked() {
- if (isEditingMultipleRawContacts()) {
- final ArrayList<CompactPhotoSelectionFragment.Photo> photos = getContent().getPhotos();
- if (photos.size() > 1) {
- updatePrimaryForSelection(photos);
- // For aggregate contacts, the user may select a new super primary photo from among
- // the (non-default) raw contact photos, or source a new photo.
- getEditorActivity().selectPhoto(photos, getPhotoMode());
- return;
- }
- }
- // For contacts composed of a single writable raw contact, or raw contacts have no more
- // than 1 photo, clicking the photo view simply opens the source photo dialog
- getEditorActivity().changePhoto(getPhotoMode());
- }
-
- // This method override photo's primary flag based on photoId and set the photo currently
- // shown in the editor to be the new primary no matter how many primary photos there are in
- // the photo picker. This is because the photos returned by "getPhoto" may contain 0, 1,
- // or 2+ primary photos and when we link contacts in the editor, the photos returned may change.
- // We need to put check mark on the photo currently shown in editor, so we override "primary".
- // This doesn't modify anything in the database,so there would be no pending changes.
- private void updatePrimaryForSelection(ArrayList<CompactPhotoSelectionFragment.Photo> photos) {
- for (CompactPhotoSelectionFragment.Photo photo : photos) {
- if (photo.photoId == mPhotoId) {
- photo.primary = true;
- } else {
- photo.primary = false;
- }
- updateContentDescription(photo);
- }
- }
-
- private void updateContentDescription(CompactPhotoSelectionFragment.Photo photo) {
- if (!TextUtils.isEmpty(photo.accountType)) {
- photo.contentDescription = getResources().getString(photo.primary ?
- R.string.photo_view_description_checked :
- R.string.photo_view_description_not_checked,
- photo.accountType, photo.accountName);
- photo.contentDescriptionChecked = getResources().getString(
- R.string.photo_view_description_checked,
- photo.accountType, photo.accountName);
- } else {
- photo.contentDescription = getResources().getString(photo.primary ?
- R.string.photo_view_description_checked_no_info :
- R.string.photo_view_description_not_checked_no_info);
- photo.contentDescriptionChecked = getResources().getString(
- R.string.photo_view_description_checked_no_info);
- }
- }
-
- @Override
- public void onRawContactSelected(Uri uri, long rawContactId, boolean isReadOnly) {
- final Activity activity = getActivity();
- if (activity != null && !activity.isFinishing()) {
- final Intent intent = EditorIntents.createEditContactIntentForRawContact(
- activity, uri, rawContactId, isReadOnly);
- activity.startActivity(intent);
- }
- }
-
- @Override
- public Bundle getUpdatedPhotos() {
- return mUpdatedPhotos;
- }
-
- private int getPhotoMode() {
- if (getContent().isWritablePhotoSet()) {
- return isEditingMultipleRawContacts()
- ? PhotoActionPopup.Modes.MULTIPLE_WRITE_ABLE_PHOTOS
- : PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
- }
- return PhotoActionPopup.Modes.NO_PHOTO;
- }
-
- private CompactContactEditorActivity getEditorActivity() {
- return (CompactContactEditorActivity) getActivity();
- }
-
- private CompactRawContactsEditorView getContent() {
- return (CompactRawContactsEditorView) mContent;
- }
-}
diff --git a/src/com/android/contacts/editor/CompactKindSectionView.java b/src/com/android/contacts/editor/CompactKindSectionView.java
deleted file mode 100644
index 7e5ff1176..000000000
--- a/src/com/android/contacts/editor/CompactKindSectionView.java
+++ /dev/null
@@ -1,601 +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.editor;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Version of {@link KindSectionView} that supports multiple RawContactDeltas.
- */
-public class CompactKindSectionView extends LinearLayout {
-
- /**
- * Marks a name as super primary when it is changed.
- *
- * This is for the case when two or more raw contacts with names are joined where neither is
- * marked as super primary.
- */
- private static final class StructuredNameEditorListener implements Editor.EditorListener {
-
- private final ValuesDelta mValuesDelta;
- private final long mRawContactId;
- private final CompactRawContactsEditorView.Listener mListener;
-
- public StructuredNameEditorListener(ValuesDelta valuesDelta, long rawContactId,
- CompactRawContactsEditorView.Listener listener) {
- mValuesDelta = valuesDelta;
- mRawContactId = rawContactId;
- mListener = listener;
- }
-
- @Override
- public void onRequest(int request) {
- if (request == Editor.EditorListener.FIELD_CHANGED) {
- mValuesDelta.setSuperPrimary(true);
- if (mListener != null) {
- mListener.onNameFieldChanged(mRawContactId, mValuesDelta);
- }
- } else if (request == Editor.EditorListener.FIELD_TURNED_EMPTY) {
- mValuesDelta.setSuperPrimary(false);
- }
- }
-
- @Override
- public void onDeleteRequested(Editor editor) {
- editor.clearAllFields();
- }
- }
-
- /**
- * Clears fields when deletes are requested (on phonetic and nickename fields);
- * does not change the number of editors.
- */
- private static final class OtherNameKindEditorListener implements Editor.EditorListener {
-
- @Override
- public void onRequest(int request) {
- }
-
- @Override
- public void onDeleteRequested(Editor editor) {
- editor.clearAllFields();
- }
- }
-
- /**
- * Updates empty fields when fields are deleted or turns empty.
- * Whether a new empty editor is added is controlled by {@link #setShowOneEmptyEditor} and
- * {@link #setHideWhenEmpty}.
- */
- private class NonNameEditorListener implements Editor.EditorListener {
-
- @Override
- public void onRequest(int request) {
- // If a field has become empty or non-empty, then check if another row
- // can be added dynamically.
- if (request == FIELD_TURNED_EMPTY || request == FIELD_TURNED_NON_EMPTY) {
- updateEmptyEditors(/* shouldAnimate = */ true);
- }
- }
-
- @Override
- public void onDeleteRequested(Editor editor) {
- if (mShowOneEmptyEditor && mEditors.getChildCount() == 1) {
- // If there is only 1 editor in the section, then don't allow the user to
- // delete it. Just clear the fields in the editor.
- editor.clearAllFields();
- } else {
- editor.deleteEditor();
- }
- }
- }
-
- private class EventEditorListener extends NonNameEditorListener {
-
- @Override
- public void onRequest(int request) {
- super.onRequest(request);
- }
-
- @Override
- public void onDeleteRequested(Editor editor) {
- if (editor instanceof EventFieldEditorView){
- final EventFieldEditorView delView = (EventFieldEditorView) editor;
- if (delView.isBirthdayType() && mEditors.getChildCount() > 1) {
- final EventFieldEditorView bottomView = (EventFieldEditorView) mEditors
- .getChildAt(mEditors.getChildCount() - 1);
- bottomView.restoreBirthday();
- }
- }
- super.onDeleteRequested(editor);
- }
- }
-
- private KindSectionDataList mKindSectionDataList;
- private ViewIdGenerator mViewIdGenerator;
- private CompactRawContactsEditorView.Listener mListener;
-
- private boolean mIsUserProfile;
- private boolean mShowOneEmptyEditor = false;
- private boolean mHideIfEmpty = true;
-
- private LayoutInflater mLayoutInflater;
- private ViewGroup mEditors;
- private ImageView mIcon;
-
- public CompactKindSectionView(Context context) {
- this(context, /* attrs =*/ null);
- }
-
- public CompactKindSectionView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- if (mEditors != null) {
- int childCount = mEditors.getChildCount();
- for (int i = 0; i < childCount; i++) {
- mEditors.getChildAt(i).setEnabled(enabled);
- }
- }
- }
-
- @Override
- protected void onFinishInflate() {
- setDrawingCacheEnabled(true);
- setAlwaysDrawnWithCacheEnabled(true);
-
- mLayoutInflater = (LayoutInflater) getContext().getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
-
- mEditors = (ViewGroup) findViewById(R.id.kind_editors);
- mIcon = (ImageView) findViewById(R.id.kind_icon);
- }
-
- public void setIsUserProfile(boolean isUserProfile) {
- mIsUserProfile = isUserProfile;
- }
-
- /**
- * @param showOneEmptyEditor If true, we will always show one empty editor, otherwise an empty
- * editor will not be shown until the user enters a value. Note, this does not apply
- * to name editors since those are always displayed.
- */
- public void setShowOneEmptyEditor(boolean showOneEmptyEditor) {
- mShowOneEmptyEditor = showOneEmptyEditor;
- }
-
- /**
- * @param hideWhenEmpty If true, the entire section will be hidden if all inputs are empty,
- * otherwise one empty input will always be displayed. Note, this does not apply
- * to name editors since those are always displayed.
- */
- public void setHideWhenEmpty(boolean hideWhenEmpty) {
- mHideIfEmpty = hideWhenEmpty;
- }
-
- /** Binds the given group data to every {@link GroupMembershipView}. */
- public void setGroupMetaData(Cursor cursor) {
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof GroupMembershipView) {
- ((GroupMembershipView) view).setGroupMetaData(cursor);
- }
- }
- }
-
- /**
- * Whether this is a name kind section view and all name fields (structured, phonetic,
- * and nicknames) are empty.
- */
- public boolean isEmptyName() {
- if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())) {
- return false;
- }
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof Editor) {
- final Editor editor = (Editor) view;
- if (!editor.isEmpty()) {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Sets the given display name as the structured name as if the user input it, but
- * without informing editor listeners.
- */
- public void setName(String displayName) {
- if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())) {
- return;
- }
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof StructuredNameEditorView) {
- final StructuredNameEditorView editor = (StructuredNameEditorView) view;
-
- // Detach listeners since so we don't show suggested aggregations
- final Editor.EditorListener editorListener = editor.getEditorListener();
- editor.setEditorListener(null);
-
- editor.setDisplayName(displayName);
-
- // Reattach listeners
- editor.setEditorListener(editorListener);
-
- return;
- }
- }
- }
-
- public StructuredNameEditorView getPrimaryNameEditorView() {
- if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionDataList.getMimeType())
- || mEditors.getChildCount() == 0) {
- return null;
- }
- return (StructuredNameEditorView) mEditors.getChildAt(0);
- }
-
- /**
- * Binds views for the given {@link KindSectionData} list.
- *
- * We create a structured name and phonetic name editor for each {@link DataKind} with a
- * {@link StructuredName#CONTENT_ITEM_TYPE} mime type. The number and order of editors are
- * rendered as they are given to {@link #setState}.
- *
- * Empty name editors are never added and at least one structured name editor is always
- * displayed, even if it is empty.
- */
- public void setState(KindSectionDataList kindSectionDataList,
- ViewIdGenerator viewIdGenerator, CompactRawContactsEditorView.Listener listener,
- ValuesDelta primaryValuesDelta) {
- mKindSectionDataList = kindSectionDataList;
- mViewIdGenerator = viewIdGenerator;
- mListener = listener;
-
- // Set the icon using the first DataKind
- final DataKind dataKind = mKindSectionDataList.getDataKind();
- if (dataKind != null) {
- mIcon.setImageDrawable(EditorUiUtils.getMimeTypeDrawable(getContext(),
- dataKind.mimeType));
- if (mIcon.getDrawable() != null) {
- mIcon.setContentDescription(dataKind.titleRes == -1 || dataKind.titleRes == 0
- ? "" : getResources().getString(dataKind.titleRes));
- }
- }
-
- rebuildFromState(primaryValuesDelta);
-
- updateEmptyEditors(/* shouldAnimate = */ false);
- }
-
- private void rebuildFromState(ValuesDelta primaryValuesDelta) {
- mEditors.removeAllViews();
-
- final String mimeType = mKindSectionDataList.getMimeType();
- for (KindSectionData kindSectionData : mKindSectionDataList) {
- if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
- addNameEditorViews(kindSectionData.getAccountType(),
- primaryValuesDelta, kindSectionData.getRawContactDelta());
- } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
- addGroupEditorView(kindSectionData.getRawContactDelta(),
- kindSectionData.getDataKind());
- } else {
- final Editor.EditorListener editorListener;
- if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
- editorListener = new OtherNameKindEditorListener();
- } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
- editorListener = new EventEditorListener();
- } else {
- editorListener = new NonNameEditorListener();
- }
- for (ValuesDelta valuesDelta : kindSectionData.getVisibleValuesDeltas()) {
- addNonNameEditorView(kindSectionData.getRawContactDelta(),
- kindSectionData.getDataKind(), valuesDelta, editorListener);
- }
- }
- }
- }
-
- private void addNameEditorViews(AccountType accountType,
- ValuesDelta valuesDelta, RawContactDelta rawContactDelta) {
- final boolean readOnly = !accountType.areContactsWritable();
-
- if (readOnly) {
- final View nameView = mLayoutInflater.inflate(
- R.layout.structured_name_readonly_editor_view, mEditors,
- /* attachToRoot =*/ false);
-
- // Display name
- ((TextView) nameView.findViewById(R.id.display_name))
- .setText(valuesDelta.getDisplayName());
-
- // Account type info
- final LinearLayout accountTypeLayout = (LinearLayout)
- nameView.findViewById(R.id.account_type);
- accountTypeLayout.setVisibility(View.VISIBLE);
- ((ImageView) accountTypeLayout.findViewById(R.id.account_type_icon))
- .setImageDrawable(accountType.getDisplayIcon(getContext()));
- ((TextView) accountTypeLayout.findViewById(R.id.account_type_name))
- .setText(accountType.getDisplayLabel(getContext()));
-
- mEditors.addView(nameView);
- return;
- }
-
- // Structured name
- final StructuredNameEditorView nameView = (StructuredNameEditorView) mLayoutInflater
- .inflate(R.layout.structured_name_editor_view, mEditors, /* attachToRoot =*/ false);
- if (!mIsUserProfile) {
- // Don't set super primary for the me contact
- nameView.setEditorListener(new StructuredNameEditorListener(
- valuesDelta, rawContactDelta.getRawContactId(), mListener));
- }
- nameView.setDeletable(false);
- nameView.setValues(
- accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME),
- valuesDelta, rawContactDelta, /* readOnly =*/ false, mViewIdGenerator);
-
- // Correct start margin since there is a second icon in the structured name layout
- nameView.findViewById(R.id.kind_icon).setVisibility(View.GONE);
- mEditors.addView(nameView);
-
- // Phonetic name
- final PhoneticNameEditorView phoneticNameView = (PhoneticNameEditorView) mLayoutInflater
- .inflate(R.layout.phonetic_name_editor_view, mEditors, /* attachToRoot =*/ false);
- phoneticNameView.setEditorListener(new OtherNameKindEditorListener());
- phoneticNameView.setDeletable(false);
- phoneticNameView.setValues(
- accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME),
- valuesDelta, rawContactDelta, /* readOnly =*/ false, mViewIdGenerator);
-
- // Fix the start margin for phonetic name views
- final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
- layoutParams.setMargins(0, 0, 0, 0);
- phoneticNameView.setLayoutParams(layoutParams);
- mEditors.addView(phoneticNameView);
- }
-
- private void addGroupEditorView(RawContactDelta rawContactDelta, DataKind dataKind) {
- final GroupMembershipView view = (GroupMembershipView) mLayoutInflater.inflate(
- R.layout.item_group_membership, mEditors, /* attachToRoot =*/ false);
- view.setKind(dataKind);
- view.setEnabled(isEnabled());
- view.setState(rawContactDelta);
-
- // Correct start margin since there is a second icon in the group layout
- view.findViewById(R.id.kind_icon).setVisibility(View.GONE);
-
- mEditors.addView(view);
- }
-
- private View addNonNameEditorView(RawContactDelta rawContactDelta, DataKind dataKind,
- ValuesDelta valuesDelta, Editor.EditorListener editorListener) {
- // Inflate the layout
- final View view = mLayoutInflater.inflate(
- EditorUiUtils.getLayoutResourceId(dataKind.mimeType), mEditors, false);
- view.setEnabled(isEnabled());
- if (view instanceof Editor) {
- final Editor editor = (Editor) view;
- editor.setDeletable(true);
- editor.setEditorListener(editorListener);
- editor.setValues(dataKind, valuesDelta, rawContactDelta, !dataKind.editable,
- mViewIdGenerator);
- }
- mEditors.addView(view);
-
- return view;
- }
-
- /**
- * Updates the editors being displayed to the user removing extra empty
- * {@link Editor}s, so there is only max 1 empty {@link Editor} view at a time.
- * If there is only 1 empty editor and {@link #setHideWhenEmpty} was set to true,
- * then the entire section is hidden.
- */
- public void updateEmptyEditors(boolean shouldAnimate) {
- final boolean isNameKindSection = StructuredName.CONTENT_ITEM_TYPE.equals(
- mKindSectionDataList.getMimeType());
- final boolean isGroupKindSection = GroupMembership.CONTENT_ITEM_TYPE.equals(
- mKindSectionDataList.getMimeType());
-
- if (isNameKindSection) {
- // The name kind section is always visible
- setVisibility(VISIBLE);
- updateEmptyNameEditors(shouldAnimate);
- } else if (isGroupKindSection) {
- // Check whether metadata has been bound for all group views
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof GroupMembershipView) {
- final GroupMembershipView groupView = (GroupMembershipView) view;
- if (!groupView.wasGroupMetaDataBound() || !groupView.accountHasGroups()) {
- setVisibility(GONE);
- return;
- }
- }
- }
- // Check that the user has selected to display all fields
- if (mHideIfEmpty) {
- setVisibility(GONE);
- return;
- }
- setVisibility(VISIBLE);
-
- // We don't check the emptiness of the group views
- } else {
- // Determine if the entire kind section should be visible
- final int editorCount = mEditors.getChildCount();
- final List<View> emptyEditors = getEmptyEditors();
- if (editorCount == emptyEditors.size() && mHideIfEmpty) {
- setVisibility(GONE);
- return;
- }
- setVisibility(VISIBLE);
-
- updateEmptyNonNameEditors(shouldAnimate);
- }
- }
-
- private void updateEmptyNameEditors(boolean shouldAnimate) {
- boolean isEmptyNameEditorVisible = false;
-
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof Editor) {
- final Editor editor = (Editor) view;
- if (view instanceof StructuredNameEditorView) {
- // We always show one empty structured name view
- if (editor.isEmpty()) {
- if (isEmptyNameEditorVisible) {
- // If we're already showing an empty editor then hide any other empties
- if (mHideIfEmpty) {
- view.setVisibility(View.GONE);
- }
- } else {
- isEmptyNameEditorVisible = true;
- }
- } else {
- showView(view, shouldAnimate);
- isEmptyNameEditorVisible = true;
- }
- } else {
- // Since we can't add phonetic names and nicknames, just show or hide them
- if (mHideIfEmpty && editor.isEmpty()) {
- hideView(view);
- } else {
- showView(view, /* shouldAnimate =*/ false); // Animation here causes jank
- }
- }
- } else {
- // For read only names, only show them if we're not hiding empty views
- if (mHideIfEmpty) {
- hideView(view);
- } else {
- showView(view, shouldAnimate);
- }
- }
- }
- }
-
- private void updateEmptyNonNameEditors(boolean shouldAnimate) {
- // Prune excess empty editors
- final List<View> emptyEditors = getEmptyEditors();
- if (emptyEditors.size() > 1) {
- // If there is more than 1 empty editor, then remove it from the list of editors.
- int deleted = 0;
- for (final View view : emptyEditors) {
- // If no child {@link View}s are being focused on within this {@link View}, then
- // remove this empty editor. We can assume that at least one empty editor has
- // focus. One way to get two empty editors is by deleting characters from a
- // non-empty editor, in which case this editor has focus. Another way is if
- // there is more values delta so we must also count number of editors deleted.
- if (view.findFocus() == null) {
- deleteView(view, shouldAnimate);
- deleted++;
- if (deleted == emptyEditors.size() - 1) break;
- }
- }
- return;
- }
- // Determine if we should add a new empty editor
- final DataKind dataKind = mKindSectionDataList.get(0).getDataKind();
- final RawContactDelta rawContactDelta =
- mKindSectionDataList.get(0).getRawContactDelta();
- if (dataKind == null // There is nothing we can do.
- // We have already reached the maximum number of editors, don't add any more.
- || !RawContactModifier.canInsert(rawContactDelta, dataKind)
- // We have already reached the maximum number of empty editors, don't add any more.
- || emptyEditors.size() == 1) {
- return;
- }
- // Add a new empty editor
- if (mShowOneEmptyEditor) {
- final String mimeType = mKindSectionDataList.getMimeType();
- if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && mEditors.getChildCount() > 0) {
- return;
- }
- final ValuesDelta values = RawContactModifier.insertChild(rawContactDelta, dataKind);
- final Editor.EditorListener editorListener = Event.CONTENT_ITEM_TYPE.equals(mimeType)
- ? new EventEditorListener() : new NonNameEditorListener();
- final View view = addNonNameEditorView(rawContactDelta, dataKind, values,
- editorListener);
- showView(view, shouldAnimate);
- }
- }
-
- private void hideView(View view) {
- view.setVisibility(View.GONE);
- }
-
- private void deleteView(View view, boolean shouldAnimate) {
- if (shouldAnimate) {
- final Editor editor = (Editor) view;
- editor.deleteEditor();
- } else {
- mEditors.removeView(view);
- }
- }
-
- private void showView(View view, boolean shouldAnimate) {
- if (shouldAnimate) {
- view.setVisibility(View.GONE);
- EditorAnimator.getInstance().showFieldFooter(view);
- } else {
- view.setVisibility(View.VISIBLE);
- }
- }
-
- private List<View> getEmptyEditors() {
- final List<View> emptyEditors = new ArrayList<>();
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- final View view = mEditors.getChildAt(i);
- if (view instanceof Editor && ((Editor) view).isEmpty()) {
- emptyEditors.add(view);
- }
- }
- return emptyEditors;
- }
-}
diff --git a/src/com/android/contacts/editor/CompactPhotoEditorView.java b/src/com/android/contacts/editor/CompactPhotoEditorView.java
deleted file mode 100644
index 899e22aff..000000000
--- a/src/com/android/contacts/editor/CompactPhotoEditorView.java
+++ /dev/null
@@ -1,233 +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.editor;
-
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.util.SchedulingUtils;
-import com.android.contacts.widget.QuickContactImageView;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.util.TypedValue;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-
-/**
- * Displays a photo and calls the host back when the user clicks it.
- */
-public class CompactPhotoEditorView extends RelativeLayout implements View.OnClickListener {
-
- /**
- * Callbacks for the host of this view.
- */
- public interface Listener {
-
- /**
- * Invoked when the user wants to change their photo.
- */
- void onPhotoEditorViewClicked();
- }
-
- private Listener mListener;
-
- private final float mLandscapePhotoRatio;
- private final float mPortraitPhotoRatio;
- private final boolean mIsTwoPanel;
-
- private final int mActionBarHeight;
- private final int mStatusBarHeight;
-
- private QuickContactImageView mPhotoImageView;
- private View mPhotoIcon;
- private View mPhotoIconOverlay;
- private View mPhotoTouchInterceptOverlay;
-
- private boolean mReadOnly;
- private boolean mIsNonDefaultPhotoBound;
-
- public CompactPhotoEditorView(Context context) {
- this(context, null);
- }
-
- public CompactPhotoEditorView(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- mLandscapePhotoRatio = getTypedFloat(R.dimen.quickcontact_landscape_photo_ratio);
- mPortraitPhotoRatio = getTypedFloat(R.dimen.editor_portrait_photo_ratio);
- mIsTwoPanel = getResources().getBoolean(R.bool.contacteditor_two_panel);
-
- final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
- new int[] { android.R.attr.actionBarSize });
- mActionBarHeight = (int) styledAttributes.getDimension(0, 0);
- styledAttributes.recycle();
-
- final int resourceId = getResources().getIdentifier(
- "status_bar_height", "dimen", "android");
- mStatusBarHeight = resourceId > 0 ? getResources().getDimensionPixelSize(resourceId) : 0;
- }
-
- private float getTypedFloat(int resourceId) {
- final TypedValue typedValue = new TypedValue();
- getResources().getValue(resourceId, typedValue, /* resolveRefs =*/ true);
- return typedValue.getFloat();
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo);
- mPhotoIcon = findViewById(R.id.photo_icon);
- mPhotoIconOverlay = findViewById(R.id.photo_icon_overlay);
- mPhotoTouchInterceptOverlay = findViewById(R.id.photo_touch_intercept_overlay);
- }
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- public void setReadOnly(boolean readOnly) {
- mReadOnly = readOnly;
- if (mReadOnly) {
- mPhotoIcon.setVisibility(View.GONE);
- mPhotoIconOverlay.setVisibility(View.GONE);
- } else {
- mPhotoTouchInterceptOverlay.setOnClickListener(this);
- }
- }
-
- /**
- * Tries to bind a full size photo or a bitmap loaded from the given ValuesDelta,
- * and falls back to the default avatar, tinted using the given MaterialPalette (if it's not
- * null);
- */
- public void setPhoto(ValuesDelta valuesDelta, MaterialPalette materialPalette) {
- // Check if we can update to the full size photo immediately
- final Long photoFileId = EditorUiUtils.getPhotoFileId(valuesDelta);
- if (photoFileId != null) {
- final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
- .appendPath(photoFileId.toString()).build();
- setFullSizedPhoto(photoUri);
- adjustDimensions();
- return;
- }
-
- // Use the bitmap image from the values delta
- final Bitmap bitmap = EditorUiUtils.getPhotoBitmap(valuesDelta);
- if (bitmap != null) {
- setPhoto(bitmap);
- adjustDimensions();
- return;
- }
-
- setDefaultPhoto(materialPalette);
- adjustDimensions();
- }
-
- private void adjustDimensions() {
- // Follow the same logic as MultiShrinkScroll.initialize
- SchedulingUtils.doOnPreDraw(this, /* drawNextFrame =*/ false, new Runnable() {
- @Override
- public void run() {
- final int photoHeight, photoWidth;
- if (mIsTwoPanel) {
- photoHeight = getContentViewHeight();
- photoWidth = (int) (photoHeight * mLandscapePhotoRatio);
- } else {
- // Make the photo slightly shorter that it is wide
- photoWidth = getContentViewWidth();
- photoHeight = (int) (photoWidth / mPortraitPhotoRatio);
- }
- final ViewGroup.LayoutParams layoutParams = getLayoutParams();
- layoutParams.height = photoHeight;
- layoutParams.width = photoWidth;
- setLayoutParams(layoutParams);
- }
- });
- }
-
- private int getContentViewWidth() {
- final Activity activity = (Activity) getContext();
- final DisplayMetrics displayMetrics = new DisplayMetrics();
- activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
- return displayMetrics.widthPixels;
- }
-
- // We're calculating the height the hard way because using the height of the content view
- // (found using android.view.Window.ID_ANDROID_CONTENT) with the soft keyboard up when
- // going from portrait to landscape mode results in a very small height value.
- // See b/20526470
- private int getContentViewHeight() {
- final Activity activity = (Activity) getContext();
- final DisplayMetrics displayMetrics = new DisplayMetrics();
- activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
- return displayMetrics.heightPixels - mActionBarHeight - mStatusBarHeight;
- }
-
- /**
- * Whether a removable, non-default photo is bound to this view.
- */
- public boolean isWritablePhotoSet() {
- return !mReadOnly && mIsNonDefaultPhotoBound;
- }
-
- /**
- * Binds the given bitmap.
- */
- private void setPhoto(Bitmap bitmap) {
- mPhotoImageView.setImageBitmap(bitmap);
- mIsNonDefaultPhotoBound = true;
- }
-
- private void setDefaultPhoto(MaterialPalette materialPalette) {
- EditorUiUtils.setDefaultPhoto(mPhotoImageView, getResources(), materialPalette);
- }
-
- /**
- * Binds a full size photo loaded from the given Uri.
- */
- public void setFullSizedPhoto(Uri photoUri) {
- EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(getContext()),
- mPhotoImageView, photoUri);
- mIsNonDefaultPhotoBound = true;
- }
-
- /**
- * Removes the current bound photo bitmap.
- */
- public void removePhoto() {
- mPhotoImageView.setImageBitmap(/* bitmap =*/ null);
- mIsNonDefaultPhotoBound = false;
- setDefaultPhoto(/* materialPalette =*/ null);
- }
-
- @Override
- public void onClick(View view) {
- if (mListener != null) {
- mListener.onPhotoEditorViewClicked();
- }
- }
-}
diff --git a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java b/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
deleted file mode 100644
index 0a8894f5a..000000000
--- a/src/com/android/contacts/editor/CompactPhotoSelectionFragment.java
+++ /dev/null
@@ -1,360 +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.editor;
-
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract;
-import android.util.DisplayMetrics;
-import android.view.Display;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.GridView;
-import android.widget.ImageView;
-
-import java.util.ArrayList;
-
-/**
- * Displays {@link Photo}s in a grid and calls back the host when one is clicked.
- */
-public class CompactPhotoSelectionFragment extends Fragment {
-
- private static final String STATE_PHOTOS = "photos";
- private static final String STATE_PHOTO_MODE = "photoMode";
- private final int VIEW_TYPE_TAKE_PHOTO = 0;
- private final int VIEW_TYPE_ALL_PHOTOS = 1;
- private final int VIEW_TYPE_IMAGE = 2;
-
- /**
- * Callbacks hosts this Fragment.
- */
- public interface Listener {
-
- /**
- * Invoked when the user wants to change their photo.
- */
- void onPhotoSelected(Photo photo);
- }
-
- /**
- * Holds a photo {@link ValuesDelta} and {@link AccountType} information to draw
- * an account type icon over it.
- */
- public static final class Photo implements Parcelable {
-
- public static final Creator<Photo> CREATOR = new Creator<Photo>() {
-
- public Photo createFromParcel(Parcel in) {
- return new Photo(in);
- }
-
- public Photo[] newArray(int size) {
- return new Photo[size];
- }
- };
-
- public Photo() {
- }
-
- private Photo(Parcel source) {
- readFromParcel(source);
- }
-
- // From AccountType, everything we need to display the account type icon
- public int titleRes;
- public int iconRes;
- public String syncAdapterPackageName;
-
- public String contentDescription;
- public String contentDescriptionChecked; // Talkback announcement when the photo is checked
- public String accountType;
- public String accountName;
-
- public ValuesDelta valuesDelta;
-
- /**
- * Whether the photo is being displayed for the aggregate contact.
- * This may be because it is marked super primary or it is the one quick contacts picked
- * randomly to display because none is marked super primary.
- */
- public boolean primary;
-
- /**
- * Pointer back to the KindSectionDataList this photo came from.
- * See {@link CompactRawContactsEditorView#getPhotos}
- * See {@link CompactRawContactsEditorView#setPrimaryPhoto}
- */
- public int kindSectionDataListIndex = -1;
- public int valuesDeltaListIndex = -1;
-
- /** Newly taken or selected photo that has not yet been saved to CP2. */
- public Uri updatedPhotoUri;
-
- public long photoId;
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(titleRes);
- dest.writeInt(iconRes);
- dest.writeString(syncAdapterPackageName);
- dest.writeParcelable(valuesDelta, flags);
- dest.writeInt(primary ? 1 : 0);
- dest.writeInt(kindSectionDataListIndex);
- dest.writeInt(valuesDeltaListIndex);
- dest.writeParcelable(updatedPhotoUri, flags);
- dest.writeLong(photoId);
- }
-
- private void readFromParcel(Parcel source) {
- final ClassLoader classLoader = getClass().getClassLoader();
- titleRes = source.readInt();
- iconRes = source.readInt();
- syncAdapterPackageName = source.readString();
- valuesDelta = source.readParcelable(classLoader);
- primary = source.readInt() == 1;
- kindSectionDataListIndex = source.readInt();
- valuesDeltaListIndex = source.readInt();
- updatedPhotoUri = source.readParcelable(classLoader);
- photoId = source.readLong();
- }
- }
-
- private final class PhotoAdapter extends BaseAdapter {
-
- private final Context mContext;
- private final LayoutInflater mLayoutInflater;
-
- public PhotoAdapter() {
- mContext = getContext();
- mLayoutInflater = LayoutInflater.from(mContext);
- }
-
- @Override
- public int getCount() {
- return mPhotos == null ? 2 : mPhotos.size() + 2;
- }
-
- @Override
- public Object getItem(int index) {
- return mPhotos == null ? null : mPhotos.get(index);
- }
-
- @Override
- public long getItemId(int index) {
- return index;
- }
-
- @Override
- public int getItemViewType(int index) {
- if (index == 0) {
- return VIEW_TYPE_TAKE_PHOTO;
- } else if (index == 1) {
- return VIEW_TYPE_ALL_PHOTOS;
- } else {
- return VIEW_TYPE_IMAGE;
- }
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (mPhotos == null) return null;
-
- // when position is 0 or 1, we should make sure account_type *is not* in convertView
- // before reusing it.
- if (getItemViewType(position) == 0){
- if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
- return mLayoutInflater.inflate(R.layout.take_a_photo_button, /* root =*/ null);
- }
- return convertView;
- }
-
- if (getItemViewType(position) == 1) {
- if (convertView == null || convertView.findViewById(R.id.account_type) != null) {
- return mLayoutInflater.inflate(R.layout.all_photos_button, /* root =*/ null);
- }
- return convertView;
- }
-
- // when position greater than 1, we should make sure account_type *is* in convertView
- // before reusing it.
- position -= 2;
-
- final View photoItemView;
- if (convertView == null || convertView.findViewById(R.id.account_type) == null) {
- photoItemView = mLayoutInflater.inflate(
- R.layout.compact_photo_selection_item, /* root =*/ null);
- } else {
- photoItemView = convertView;
- }
-
- final Photo photo = mPhotos.get(position);
-
- // Bind the photo
- final ImageView imageView = (ImageView) photoItemView.findViewById(R.id.image);
- if (photo.updatedPhotoUri != null) {
- EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
- imageView, photo.updatedPhotoUri);
- } else {
- final Long photoFileId = EditorUiUtils.getPhotoFileId(photo.valuesDelta);
- if (photoFileId != null) {
- final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
- .appendPath(photoFileId.toString()).build();
- EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(mContext),
- imageView, photoUri);
- } else {
- imageView.setImageBitmap(EditorUiUtils.getPhotoBitmap(photo.valuesDelta));
- }
- }
-
- // Add the account type icon
- final ImageView accountTypeImageView = (ImageView)
- photoItemView.findViewById(R.id.account_type);
- accountTypeImageView.setImageDrawable(AccountType.getDisplayIcon(
- mContext, photo.titleRes, photo.iconRes, photo.syncAdapterPackageName));
-
- // Display a check icon over the primary photo
- final ImageView checkImageView = (ImageView) photoItemView.findViewById(R.id.check);
- checkImageView.setVisibility(photo.primary ? View.VISIBLE : View.GONE);
-
- photoItemView.setContentDescription(photo.contentDescription);
-
- return photoItemView;
- }
- }
-
- private ArrayList<Photo> mPhotos;
- private int mPhotoMode;
- private Listener mListener;
- private GridView mGridView;
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- public void setPhotos(ArrayList<Photo> photos, int photoMode) {
- mPhotos = photos;
- mPhotoMode = photoMode;
- mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {});
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (savedInstanceState != null) {
- mPhotos = savedInstanceState.getParcelableArrayList(STATE_PHOTOS);
- mPhotoMode = savedInstanceState.getInt(STATE_PHOTO_MODE, 0);
- }
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- setHasOptionsMenu(true);
-
- final PhotoAdapter photoAdapter = new PhotoAdapter();
-
- final View view = inflater.inflate(R.layout.compact_photo_selection_fragment,
- container, false);
- mGridView = (GridView) view.findViewById(R.id.grid_view);
- mGridView.setAdapter(photoAdapter);
- mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final PhotoSourceDialogFragment.Listener listener =
- (PhotoSourceDialogFragment.Listener) getActivity();
- if (position == 0) {
- listener.onTakePhotoChosen();
- } else if (position == 1) {
- listener.onPickFromGalleryChosen();
- } else {
- // Call the host back so it can set the new photo as primary
- final Photo photo = (Photo) photoAdapter.getItem(position - 2);
- if (mListener != null) {
- mListener.onPhotoSelected(photo);
- }
- handleAccessibility(photo, position);
- }
- }
- });
-
- final Display display = getActivity().getWindowManager().getDefaultDisplay();
- final DisplayMetrics outMetrics = new DisplayMetrics ();
- display.getRealMetrics(outMetrics); // real metrics include the navigation Bar
-
- final float numColumns = outMetrics.widthPixels /
- getResources().getDimension(R.dimen.photo_picker_item_ideal_width);
- mGridView.setNumColumns(Math.round(numColumns));
-
- return view;
- }
-
- private void handleAccessibility(Photo photo, int position) {
- // Use custom AccessibilityDelegate when closing this fragment to suppress event.
- mGridView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
- @Override
- public boolean onRequestSendAccessibilityEvent(
- ViewGroup host, View child,AccessibilityEvent event) {
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
- return false;
- }
- return super.onRequestSendAccessibilityEvent(host, child, event);
- }
- });
- final ViewGroup clickedView = (ViewGroup) mGridView.getChildAt(position);
- clickedView.announceForAccessibility(photo.contentDescriptionChecked);
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putParcelableArrayList(STATE_PHOTOS, mPhotos);
- outState.putInt(STATE_PHOTO_MODE, mPhotoMode);
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- getActivity().onBackPressed();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- @Override
- public Context getContext() {
- return getActivity();
- }
-} \ No newline at end of file
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
deleted file mode 100644
index ece3829c1..000000000
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ /dev/null
@@ -1,1108 +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.editor;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.util.UiClosables;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Pair;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListPopupWindow;
-import android.widget.TextView;
-
-import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
-/**
- * View to display information from multiple {@link RawContactDelta}s grouped together.
- */
-public class CompactRawContactsEditorView extends LinearLayout implements View.OnClickListener {
-
- static final String TAG = "CompactEditorView";
-
- private static final KindSectionDataMapEntryComparator
- KIND_SECTION_DATA_MAP_ENTRY_COMPARATOR = new KindSectionDataMapEntryComparator();
-
- /**
- * Callbacks for hosts of {@link CompactRawContactsEditorView}s.
- */
- public interface Listener {
-
- /**
- * Invoked when the structured name editor field has changed.
- *
- * @param rawContactId The raw contact ID from the underlying {@link RawContactDelta}.
- * @param valuesDelta The values from the underlying {@link RawContactDelta}.
- */
- public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta);
-
- /**
- * Invoked when the compact editor should rebind editors for a new account.
- *
- * @param oldState Old data being edited.
- * @param oldAccount Old account associated with oldState.
- * @param newAccount New account to be used.
- */
- public void onRebindEditorsForNewContact(RawContactDelta oldState,
- AccountWithDataSet oldAccount, AccountWithDataSet newAccount);
-
- /**
- * Invoked when no editors could be bound for the contact.
- */
- public void onBindEditorsFailed();
-
- /**
- * Invoked after editors have been bound for the contact.
- */
- public void onEditorsBound();
-
- /**
- * Invoked when a rawcontact from linked contacts is selected in editor.
- */
- public void onRawContactSelected(Uri uri, long rawContactId, boolean isReadOnly);
-
- /**
- * Returns the map of raw contact IDs to newly taken or selected photos that have not
- * yet been saved to CP2.
- */
- public Bundle getUpdatedPhotos();
- }
-
- /**
- * Used to list the account info for the given raw contacts list.
- */
- private static final class RawContactAccountListAdapter extends BaseAdapter {
- private final LayoutInflater mInflater;
- private final Context mContext;
- private final RawContactDeltaList mRawContactDeltas;
-
- public RawContactAccountListAdapter(Context context, RawContactDeltaList rawContactDeltas) {
- mContext = context;
- mRawContactDeltas = new RawContactDeltaList();
- for (RawContactDelta rawContactDelta : rawContactDeltas) {
- if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
- mRawContactDeltas.add(rawContactDelta);
- }
- }
- mInflater = LayoutInflater.from(context);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final View resultView = convertView != null ? convertView
- : mInflater.inflate(R.layout.account_selector_list_item, parent, false);
-
- final RawContactDelta rawContactDelta = mRawContactDeltas.get(position);
-
- final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
- final AccountType accountType = rawContactDelta.getRawContactAccountType(mContext);
- text1.setText(accountType.getDisplayLabel(mContext));
-
- final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
- final String accountName = rawContactDelta.getAccountName();
- if (TextUtils.isEmpty(accountName)) {
- text2.setVisibility(View.GONE);
- } else {
- // Truncate email addresses in the middle so we don't lose the domain
- text2.setText(accountName);
- text2.setEllipsize(TextUtils.TruncateAt.MIDDLE);
- }
-
- final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
- icon.setImageDrawable(accountType.getDisplayIcon(mContext));
-
- return resultView;
- }
-
- @Override
- public int getCount() {
- return mRawContactDeltas.size();
- }
-
- @Override
- public RawContactDelta getItem(int position) {
- return mRawContactDeltas.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return getItem(position).getRawContactId();
- }
- }
-
- /** Used to sort entire kind sections. */
- private static final class KindSectionDataMapEntryComparator implements
- Comparator<Map.Entry<String,KindSectionDataList>> {
-
- final MimeTypeComparator mMimeTypeComparator = new MimeTypeComparator();
-
- @Override
- public int compare(Map.Entry<String, KindSectionDataList> entry1,
- Map.Entry<String, KindSectionDataList> entry2) {
- if (entry1 == entry2) return 0;
- if (entry1 == null) return -1;
- if (entry2 == null) return 1;
-
- final String mimeType1 = entry1.getKey();
- final String mimeType2 = entry2.getKey();
-
- return mMimeTypeComparator.compare(mimeType1, mimeType2);
- }
- }
-
- /**
- * Sorts kinds roughly the same as quick contacts; we diverge in the following ways:
- * <ol>
- * <li>All names are together at the top.</li>
- * <li>IM is moved up after addresses</li>
- * <li>SIP addresses are moved to below phone numbers</li>
- * <li>Group membership is placed at the end</li>
- * </ol>
- */
- private static final class MimeTypeComparator implements Comparator<String> {
-
- private static final List<String> MIME_TYPE_ORDER = Arrays.asList(new String[] {
- StructuredName.CONTENT_ITEM_TYPE,
- Nickname.CONTENT_ITEM_TYPE,
- Organization.CONTENT_ITEM_TYPE,
- Phone.CONTENT_ITEM_TYPE,
- SipAddress.CONTENT_ITEM_TYPE,
- Email.CONTENT_ITEM_TYPE,
- StructuredPostal.CONTENT_ITEM_TYPE,
- Im.CONTENT_ITEM_TYPE,
- Website.CONTENT_ITEM_TYPE,
- Event.CONTENT_ITEM_TYPE,
- Relation.CONTENT_ITEM_TYPE,
- Note.CONTENT_ITEM_TYPE,
- GroupMembership.CONTENT_ITEM_TYPE
- });
-
- @Override
- public int compare(String mimeType1, String mimeType2) {
- if (mimeType1 == mimeType2) return 0;
- if (mimeType1 == null) return -1;
- if (mimeType2 == null) return 1;
-
- int index1 = MIME_TYPE_ORDER.indexOf(mimeType1);
- int index2 = MIME_TYPE_ORDER.indexOf(mimeType2);
-
- // Fallback to alphabetical ordering of the mime type if both are not found
- if (index1 < 0 && index2 < 0) return mimeType1.compareTo(mimeType2);
- if (index1 < 0) return 1;
- if (index2 < 0) return -1;
-
- return index1 < index2 ? -1 : 1;
- }
- }
-
- /**
- * Sorts primary accounts and google account types before others.
- */
- private static final class EditorComparator implements Comparator<KindSectionData> {
-
- private RawContactDeltaComparator mRawContactDeltaComparator;
-
- private EditorComparator(Context context) {
- mRawContactDeltaComparator = new RawContactDeltaComparator(context);
- }
-
- @Override
- public int compare(KindSectionData kindSectionData1, KindSectionData kindSectionData2) {
- if (kindSectionData1 == kindSectionData2) return 0;
- if (kindSectionData1 == null) return -1;
- if (kindSectionData2 == null) return 1;
-
- final RawContactDelta rawContactDelta1 = kindSectionData1.getRawContactDelta();
- final RawContactDelta rawContactDelta2 = kindSectionData2.getRawContactDelta();
-
- if (rawContactDelta1 == rawContactDelta2) return 0;
- if (rawContactDelta1 == null) return -1;
- if (rawContactDelta2 == null) return 1;
-
- return mRawContactDeltaComparator.compare(rawContactDelta1, rawContactDelta2);
- }
- }
-
- public static class SavedState extends BaseSavedState {
-
- public static final Parcelable.Creator<SavedState> CREATOR =
- new Parcelable.Creator<SavedState>() {
- public SavedState createFromParcel(Parcel in) {
- return new SavedState(in);
- }
- public SavedState[] newArray(int size) {
- return new SavedState[size];
- }
- };
-
- private boolean mIsExpanded;
-
- public SavedState(Parcelable superState) {
- super(superState);
- }
-
- private SavedState(Parcel in) {
- super(in);
- mIsExpanded = in.readInt() != 0;
- }
-
- @Override
- public void writeToParcel(Parcel out, int flags) {
- super.writeToParcel(out, flags);
- out.writeInt(mIsExpanded ? 1 : 0);
- }
- }
-
- private CompactRawContactsEditorView.Listener mListener;
-
- private AccountTypeManager mAccountTypeManager;
- private LayoutInflater mLayoutInflater;
-
- private ViewIdGenerator mViewIdGenerator;
- private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
- private long mPhotoId = -1;
- private boolean mHasNewContact;
- private boolean mIsUserProfile;
- private AccountWithDataSet mPrimaryAccount;
- private Map<String,KindSectionDataList> mKindSectionDataMap = new HashMap<>();
-
- // Account header
- private View mAccountHeaderContainer;
- private TextView mAccountHeaderType;
- private TextView mAccountHeaderName;
- private ImageView mAccountHeaderIcon;
-
- // Account selector
- private View mAccountSelectorContainer;
- private View mAccountSelector;
- private TextView mAccountSelectorType;
- private TextView mAccountSelectorName;
-
- // Raw contacts selector
- private View mRawContactContainer;
- private TextView mRawContactSummary;
-
- private CompactPhotoEditorView mPhotoView;
- private ViewGroup mKindSectionViews;
- private Map<String,List<CompactKindSectionView>> mKindSectionViewsMap = new HashMap<>();
- private View mMoreFields;
-
- private boolean mIsExpanded;
-
- private long mPhotoRawContactId;
- private ValuesDelta mPhotoValuesDelta;
-
- private Pair<KindSectionData, ValuesDelta> mPrimaryNameKindSectionData;
-
- public CompactRawContactsEditorView(Context context) {
- super(context);
- }
-
- public CompactRawContactsEditorView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- /**
- * Sets the receiver for {@link CompactRawContactsEditorView} callbacks.
- */
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- mAccountTypeManager = AccountTypeManager.getInstance(getContext());
- mLayoutInflater = (LayoutInflater)
- getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- // Account header
- mAccountHeaderContainer = findViewById(R.id.account_container);
- mAccountHeaderType = (TextView) findViewById(R.id.account_type);
- mAccountHeaderName = (TextView) findViewById(R.id.account_name);
- mAccountHeaderIcon = (ImageView) findViewById(R.id.account_type_icon);
-
- // Account selector
- mAccountSelectorContainer = findViewById(R.id.account_selector_container);
- mAccountSelector = findViewById(R.id.account);
- mAccountSelectorType = (TextView) findViewById(R.id.account_type_selector);
- mAccountSelectorName = (TextView) findViewById(R.id.account_name_selector);
-
- // Raw contacts selector
- mRawContactContainer = findViewById(R.id.all_rawcontacts_accounts_container);
- mRawContactSummary = (TextView) findViewById(R.id.rawcontacts_accounts_summary);
-
- mPhotoView = (CompactPhotoEditorView) findViewById(R.id.photo_editor);
- mKindSectionViews = (LinearLayout) findViewById(R.id.kind_section_views);
- mMoreFields = findViewById(R.id.more_fields);
- mMoreFields.setOnClickListener(this);
- }
-
- @Override
- public void onClick(View view) {
- if (view.getId() == R.id.more_fields) {
- showAllFields();
- }
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- final int childCount = mKindSectionViews.getChildCount();
- for (int i = 0; i < childCount; i++) {
- mKindSectionViews.getChildAt(i).setEnabled(enabled);
- }
- }
-
- @Override
- public Parcelable onSaveInstanceState() {
- final Parcelable superState = super.onSaveInstanceState();
- final SavedState savedState = new SavedState(superState);
- savedState.mIsExpanded = mIsExpanded;
- return savedState;
- }
-
- @Override
- public void onRestoreInstanceState(Parcelable state) {
- if(!(state instanceof SavedState)) {
- super.onRestoreInstanceState(state);
- return;
- }
- final SavedState savedState = (SavedState) state;
- super.onRestoreInstanceState(savedState.getSuperState());
- mIsExpanded = savedState.mIsExpanded;
- if (mIsExpanded) {
- showAllFields();
- }
- }
-
- /**
- * Pass through to {@link CompactPhotoEditorView#setListener}.
- */
- public void setPhotoListener(CompactPhotoEditorView.Listener listener) {
- mPhotoView.setListener(listener);
- }
-
- public void removePhoto() {
- mPhotoValuesDelta.setFromTemplate(true);
- mPhotoValuesDelta.put(Photo.PHOTO, (byte[]) null);
-
- mPhotoView.removePhoto();
- }
-
- /**
- * Pass through to {@link CompactPhotoEditorView#setFullSizedPhoto(Uri)}.
- */
- public void setFullSizePhoto(Uri photoUri) {
- mPhotoView.setFullSizedPhoto(photoUri);
- }
-
- public void updatePhoto(Uri photoUri) {
- mPhotoValuesDelta.setFromTemplate(false);
- // Unset primary for all photos
- unsetSuperPrimaryFromAllPhotos();
- // Mark the currently displayed photo as primary
- mPhotoValuesDelta.setSuperPrimary(true);
-
- // Even though high-res photos cannot be saved by passing them via
- // an EntityDeltaList (since they cause the Bundle size limit to be
- // exceeded), we still pass a low-res thumbnail. This simplifies
- // code all over the place, because we don't have to test whether
- // there is a change in EITHER the delta-list OR a changed photo...
- // this way, there is always a change in the delta-list.
- try {
- final byte[] bytes = EditorUiUtils.getCompressedThumbnailBitmapBytes(
- getContext(), photoUri);
- if (bytes != null) {
- mPhotoValuesDelta.setPhoto(bytes);
- }
- } catch (FileNotFoundException e) {
- elog("Failed to get bitmap from photo Uri");
- }
-
- mPhotoView.setFullSizedPhoto(photoUri);
- }
-
- private void unsetSuperPrimaryFromAllPhotos() {
- final List<KindSectionData> kindSectionDataList =
- mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
- for (KindSectionData kindSectionData : kindSectionDataList) {
- for (ValuesDelta valuesDelta : kindSectionData.getNonEmptyValuesDeltas()) {
- valuesDelta.setSuperPrimary(false);
- }
- }
- }
-
- /**
- * Pass through to {@link CompactPhotoEditorView#isWritablePhotoSet}.
- */
- public boolean isWritablePhotoSet() {
- return mPhotoView.isWritablePhotoSet();
- }
-
- /**
- * Get the raw contact ID for the CompactHeaderView photo.
- */
- public long getPhotoRawContactId() {
- return mPhotoRawContactId;
- }
-
- public StructuredNameEditorView getPrimaryNameEditorView() {
- final CompactKindSectionView primaryNameKindSectionView = getPrimaryNameKindSectionView();
- return primaryNameKindSectionView == null
- ? null : primaryNameKindSectionView.getPrimaryNameEditorView();
- }
-
- /**
- * Returns a data holder for every non-default/non-empty photo from each raw contact, whether
- * the raw contact is writable or not.
- */
- public ArrayList<CompactPhotoSelectionFragment.Photo> getPhotos() {
- final ArrayList<CompactPhotoSelectionFragment.Photo> photos = new ArrayList<>();
-
- final Bundle updatedPhotos = mListener == null ? null : mListener.getUpdatedPhotos();
-
- final List<KindSectionData> kindSectionDataList =
- mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
- for (int i = 0; i < kindSectionDataList.size(); i++) {
- final KindSectionData kindSectionData = kindSectionDataList.get(i);
- final AccountType accountType = kindSectionData.getAccountType();
- final List<ValuesDelta> valuesDeltas = kindSectionData.getNonEmptyValuesDeltas();
- if (valuesDeltas.isEmpty()) continue;
- for (int j = 0; j < valuesDeltas.size(); j++) {
- final ValuesDelta valuesDelta = valuesDeltas.get(j);
- final Bitmap bitmap = EditorUiUtils.getPhotoBitmap(valuesDelta);
- if (bitmap == null) continue;
-
- final CompactPhotoSelectionFragment.Photo photo =
- new CompactPhotoSelectionFragment.Photo();
- photo.titleRes = accountType.titleRes;
- photo.iconRes = accountType.iconRes;
- photo.syncAdapterPackageName = accountType.syncAdapterPackageName;
- photo.valuesDelta = valuesDelta;
- photo.primary = valuesDelta.isSuperPrimary();
- photo.kindSectionDataListIndex = i;
- photo.valuesDeltaListIndex = j;
- photo.photoId = valuesDelta.getId();
-
- if (updatedPhotos != null) {
- photo.updatedPhotoUri = (Uri) updatedPhotos.get(String.valueOf(
- kindSectionData.getRawContactDelta().getRawContactId()));
- }
-
- final CharSequence accountTypeLabel = accountType.getDisplayLabel(getContext());
- photo.accountType = accountTypeLabel == null ? "" : accountTypeLabel.toString();
- final String accountName = kindSectionData.getRawContactDelta().getAccountName();
- photo.accountName = accountName == null ? "" : accountName;
-
- photos.add(photo);
- }
- }
-
- return photos;
- }
-
- /**
- * Marks the raw contact photo given as primary for the aggregate contact and updates the
- * UI.
- */
- public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
- // Find the values delta to mark as primary
- final KindSectionDataList kindSectionDataList =
- mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
- if (photo.kindSectionDataListIndex < 0
- || photo.kindSectionDataListIndex >= kindSectionDataList.size()) {
- wlog("Invalid kind section data list index");
- return;
- }
- final KindSectionData kindSectionData =
- kindSectionDataList.get(photo.kindSectionDataListIndex);
- final List<ValuesDelta> valuesDeltaList = kindSectionData.getNonEmptyValuesDeltas();
- if (photo.valuesDeltaListIndex >= valuesDeltaList.size()) {
- wlog("Invalid values delta list index");
- return;
- }
-
- // Update values delta
- final ValuesDelta valuesDelta = valuesDeltaList.get(photo.valuesDeltaListIndex);
- valuesDelta.setFromTemplate(false);
- unsetSuperPrimaryFromAllPhotos();
- valuesDelta.setSuperPrimary(true);
-
- // Update the UI
- mPhotoView.setPhoto(valuesDelta, mMaterialPalette);
- }
-
- public View getAggregationAnchorView() {
- final List<CompactKindSectionView> kindSectionViews = getKindSectionViews(
- StructuredName.CONTENT_ITEM_TYPE);
- if (!kindSectionViews.isEmpty()) {
- return mKindSectionViews.getChildAt(0).findViewById(R.id.anchor_view);
- }
- return null;
- }
-
- public void setGroupMetaData(Cursor groupMetaData) {
- final List<CompactKindSectionView> kindSectionViews = getKindSectionViews(
- GroupMembership.CONTENT_ITEM_TYPE);
- for (CompactKindSectionView kindSectionView : kindSectionViews) {
- kindSectionView.setGroupMetaData(groupMetaData);
- if (mIsExpanded) {
- kindSectionView.setHideWhenEmpty(false);
- kindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
- }
- }
- }
-
- public void setState(RawContactDeltaList rawContactDeltas,
- MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
- long photoId, boolean hasNewContact, boolean isUserProfile,
- AccountWithDataSet primaryAccount) {
- mKindSectionDataMap.clear();
- mKindSectionViews.removeAllViews();
- mMoreFields.setVisibility(View.VISIBLE);
-
- mMaterialPalette = materialPalette;
- mViewIdGenerator = viewIdGenerator;
- mPhotoId = photoId;
-
- mHasNewContact = hasNewContact;
- mIsUserProfile = isUserProfile;
- mPrimaryAccount = primaryAccount;
- if (mPrimaryAccount == null) {
- mPrimaryAccount = ContactEditorUtils.getInstance(getContext()).getDefaultAccount();
- }
- vlog("state: primary " + mPrimaryAccount);
-
- // Parse the given raw contact deltas
- if (rawContactDeltas == null || rawContactDeltas.isEmpty()) {
- elog("No raw contact deltas");
- if (mListener != null) mListener.onBindEditorsFailed();
- return;
- }
- parseRawContactDeltas(rawContactDeltas);
- if (mKindSectionDataMap.isEmpty()) {
- elog("No kind section data parsed from RawContactDelta(s)");
- if (mListener != null) mListener.onBindEditorsFailed();
- return;
- }
-
- // Get the primary name kind section data
- mPrimaryNameKindSectionData = mKindSectionDataMap.get(StructuredName.CONTENT_ITEM_TYPE)
- .getEntryToWrite(/* id =*/ -1, mPrimaryAccount, mIsUserProfile);
- if (mPrimaryNameKindSectionData != null) {
- // Ensure that a structured name and photo exists
- final RawContactDelta rawContactDelta =
- mPrimaryNameKindSectionData.first.getRawContactDelta();
- RawContactModifier.ensureKindExists(
- rawContactDelta,
- rawContactDelta.getAccountType(mAccountTypeManager),
- StructuredName.CONTENT_ITEM_TYPE);
- RawContactModifier.ensureKindExists(
- rawContactDelta,
- rawContactDelta.getAccountType(mAccountTypeManager),
- Photo.CONTENT_ITEM_TYPE);
- }
-
- // Setup the view
- addAccountInfo(rawContactDeltas);
- addPhotoView();
- addKindSectionViews();
-
- if (mIsExpanded) showAllFields();
-
- if (mListener != null) mListener.onEditorsBound();
- }
-
- private void parseRawContactDeltas(RawContactDeltaList rawContactDeltas) {
- // Build the kind section data list map
- vlog("parse: " + rawContactDeltas.size() + " rawContactDelta(s)");
- for (int j = 0; j < rawContactDeltas.size(); j++) {
- final RawContactDelta rawContactDelta = rawContactDeltas.get(j);
- vlog("parse: " + j + " rawContactDelta" + rawContactDelta);
- if (rawContactDelta == null || !rawContactDelta.isVisible()) continue;
- final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
- if (accountType == null) continue;
- final List<DataKind> dataKinds = accountType.getSortedDataKinds();
- final int dataKindSize = dataKinds == null ? 0 : dataKinds.size();
- vlog("parse: " + dataKindSize + " dataKinds(s)");
- for (int i = 0; i < dataKindSize; i++) {
- final DataKind dataKind = dataKinds.get(i);
- if (dataKind == null || !dataKind.editable) {
- vlog("parse: " + i + " " + dataKind.mimeType + " dropped read-only");
- continue;
- }
- final String mimeType = dataKind.mimeType;
-
- // Skip psuedo mime types
- if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
- || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
- vlog("parse: " + i + " " + dataKind.mimeType + " dropped pseudo type");
- continue;
- }
-
- final KindSectionDataList kindSectionDataList =
- getOrCreateKindSectionDataList(mimeType);
- final KindSectionData kindSectionData =
- new KindSectionData(accountType, dataKind, rawContactDelta);
- kindSectionDataList.add(kindSectionData);
-
- vlog("parse: " + i + " " + dataKind.mimeType + " " +
- kindSectionData.getValuesDeltas().size() + " value(s) " +
- kindSectionData.getNonEmptyValuesDeltas().size() + " non-empty value(s) " +
- kindSectionData.getVisibleValuesDeltas().size() +
- " visible value(s)");
- }
- }
- }
-
- private KindSectionDataList getOrCreateKindSectionDataList(String mimeType) {
- KindSectionDataList kindSectionDataList = mKindSectionDataMap.get(mimeType);
- if (kindSectionDataList == null) {
- kindSectionDataList = new KindSectionDataList();
- mKindSectionDataMap.put(mimeType, kindSectionDataList);
- }
- return kindSectionDataList;
- }
-
- private void addAccountInfo(RawContactDeltaList rawContactDeltas) {
- mAccountHeaderContainer.setVisibility(View.GONE);
- mAccountSelectorContainer.setVisibility(View.GONE);
- mRawContactContainer.setVisibility(View.GONE);
-
- if (mPrimaryNameKindSectionData == null) return;
- final RawContactDelta rawContactDelta =
- mPrimaryNameKindSectionData.first.getRawContactDelta();
-
- // Get the account information for the primary raw contact delta
- final Pair<String,String> accountInfo = mIsUserProfile
- ? EditorUiUtils.getLocalAccountInfo(getContext(),
- rawContactDelta.getAccountName(),
- rawContactDelta.getAccountType(mAccountTypeManager))
- : EditorUiUtils.getAccountInfo(getContext(),
- rawContactDelta.getAccountName(),
- rawContactDelta.getAccountType(mAccountTypeManager));
-
- // Either the account header or selector should be shown, not both.
- final List<AccountWithDataSet> accounts =
- AccountTypeManager.getInstance(getContext()).getAccounts(true);
- if (mHasNewContact && !mIsUserProfile) {
- if (accounts.size() > 1) {
- addAccountSelector(accountInfo, rawContactDelta);
- } else {
- addAccountHeader(accountInfo);
- }
- } else if (mIsUserProfile || !shouldHideAccountContainer(rawContactDeltas)) {
- addAccountHeader(accountInfo);
- }
-
- // The raw contact selector should only display linked raw contacts that can be edited in
- // the full editor (i.e. they are not newly created raw contacts)
- final RawContactAccountListAdapter adapter = new RawContactAccountListAdapter(getContext(),
- getRawContactDeltaListForSelector(rawContactDeltas));
- if (adapter.getCount() > 0) {
- final String accountsSummary = getResources().getQuantityString(
- R.plurals.compact_editor_linked_contacts_selector_title,
- adapter.getCount(), adapter.getCount());
- addRawContactAccountSelector(accountsSummary, adapter);
- }
- }
-
- private RawContactDeltaList getRawContactDeltaListForSelector(
- RawContactDeltaList rawContactDeltas) {
- // Sort raw contacts so google accounts come first
- Collections.sort(rawContactDeltas, new RawContactDeltaComparator(getContext()));
-
- final RawContactDeltaList result = new RawContactDeltaList();
- for (RawContactDelta rawContactDelta : rawContactDeltas) {
- if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
- // Only add raw contacts that can be opened in the editor
- result.add(rawContactDelta);
- }
- }
- // Don't return a list of size 1 that would just open the raw contact being edited
- // in the compact editor in the full editor
- if (result.size() == 1 && result.get(0).getRawContactAccountType(
- getContext()).areContactsWritable()) {
- result.clear();
- return result;
- }
- return result;
- }
-
- // Returns true if there are multiple writable rawcontacts and no read-only ones,
- // or there are both writable and read-only rawcontacts.
- private boolean shouldHideAccountContainer(RawContactDeltaList rawContactDeltas) {
- int writable = 0;
- int readonly = 0;
- for (RawContactDelta rawContactDelta : rawContactDeltas) {
- if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
- if (rawContactDelta.getRawContactAccountType(getContext()).areContactsWritable()) {
- writable++;
- } else {
- readonly++;
- }
- }
- }
- return (writable > 1 || (writable > 0 && readonly > 0));
- }
-
- private void addAccountHeader(Pair<String,String> accountInfo) {
- mAccountHeaderContainer.setVisibility(View.VISIBLE);
-
- // Set the account name
- final String accountName = TextUtils.isEmpty(accountInfo.first)
- ? accountInfo.second : accountInfo.first;
- mAccountHeaderName.setVisibility(View.VISIBLE);
- mAccountHeaderName.setText(accountName);
-
- // Set the account type
- final String selectorTitle = getResources().getString(
- R.string.compact_editor_account_selector_title);
- mAccountHeaderType.setText(selectorTitle);
-
- // Set the icon
- if (mPrimaryNameKindSectionData != null) {
- final RawContactDelta rawContactDelta =
- mPrimaryNameKindSectionData.first.getRawContactDelta();
- if (rawContactDelta != null) {
- final AccountType accountType =
- rawContactDelta.getRawContactAccountType(getContext());
- mAccountHeaderIcon.setImageDrawable(accountType.getDisplayIcon(getContext()));
- }
- }
-
- // Set the content description
- mAccountHeaderContainer.setContentDescription(
- EditorUiUtils.getAccountInfoContentDescription(accountName, selectorTitle));
- }
-
- private void addAccountSelector(Pair<String,String> accountInfo,
- final RawContactDelta rawContactDelta) {
- mAccountSelectorContainer.setVisibility(View.VISIBLE);
-
- if (TextUtils.isEmpty(accountInfo.first)) {
- // Hide this view so the other text view will be centered vertically
- mAccountSelectorName.setVisibility(View.GONE);
- } else {
- mAccountSelectorName.setVisibility(View.VISIBLE);
- mAccountSelectorName.setText(accountInfo.first);
- }
-
- final String selectorTitle = getResources().getString(
- R.string.compact_editor_account_selector_title);
- mAccountSelectorType.setText(selectorTitle);
-
- mAccountSelectorContainer.setContentDescription(getResources().getString(
- R.string.compact_editor_account_selector_description, accountInfo.first));
-
- mAccountSelectorContainer.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
- final AccountsListAdapter adapter =
- new AccountsListAdapter(getContext(),
- AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
- mPrimaryAccount);
- popup.setWidth(mAccountSelectorContainer.getWidth());
- popup.setAnchorView(mAccountSelectorContainer);
- popup.setAdapter(adapter);
- popup.setModal(true);
- popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- UiClosables.closeQuietly(popup);
- final AccountWithDataSet newAccount = adapter.getItem(position);
- if (mListener != null && !mPrimaryAccount.equals(newAccount)) {
- mListener.onRebindEditorsForNewContact(
- rawContactDelta,
- mPrimaryAccount,
- newAccount);
- }
- }
- });
- popup.show();
- }
- });
- }
-
- private void addRawContactAccountSelector(String accountsSummary,
- final RawContactAccountListAdapter adapter) {
- mRawContactContainer.setVisibility(View.VISIBLE);
-
- mRawContactSummary.setText(accountsSummary);
-
- mRawContactContainer.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
- popup.setWidth(mRawContactContainer.getWidth());
- popup.setAnchorView(mRawContactContainer);
- popup.setAdapter(adapter);
- popup.setModal(true);
- popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- UiClosables.closeQuietly(popup);
-
- if (mListener != null) {
- final long rawContactId = adapter.getItemId(position);
- final Uri rawContactUri = ContentUris.withAppendedId(
- ContactsContract.RawContacts.CONTENT_URI, rawContactId);
- final RawContactDelta rawContactDelta = adapter.getItem(position);
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
- getContext());
- final AccountType accountType = rawContactDelta.getAccountType(
- accountTypes);
- final boolean isReadOnly = !accountType.areContactsWritable();
-
- mListener.onRawContactSelected(rawContactUri, rawContactId, isReadOnly);
- }
- }
- });
- popup.show();
- }
- });
- }
-
- private void addPhotoView() {
- // Get the kind section data and values delta that we will display in the photo view
- final KindSectionDataList kindSectionDataList =
- mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
- final Pair<KindSectionData,ValuesDelta> photoToDisplay =
- kindSectionDataList.getEntryToDisplay(mPhotoId);
- if (photoToDisplay == null) {
- wlog("photo: no kind section data parsed");
- mPhotoView.setVisibility(View.GONE);
- return;
- }
-
- // Set the photo view
- mPhotoView.setPhoto(photoToDisplay.second, mMaterialPalette);
-
- // Find the raw contact ID and values delta that will be written when the photo is edited
- final Pair<KindSectionData, ValuesDelta> photoToWrite = kindSectionDataList.getEntryToWrite(
- mPhotoId, mPrimaryAccount, mIsUserProfile);
- if (photoToWrite == null) {
- mPhotoView.setReadOnly(true);
- return;
- }
- mPhotoView.setReadOnly(false);
- mPhotoRawContactId = photoToWrite.first.getRawContactDelta().getRawContactId();
- mPhotoValuesDelta = photoToWrite.second;
- }
-
- private void addKindSectionViews() {
- // Sort the kinds
- final TreeSet<Map.Entry<String,KindSectionDataList>> entries =
- new TreeSet<>(KIND_SECTION_DATA_MAP_ENTRY_COMPARATOR);
- entries.addAll(mKindSectionDataMap.entrySet());
-
- vlog("kind: " + entries.size() + " kindSection(s)");
- int i = -1;
- for (Map.Entry<String, KindSectionDataList> entry : entries) {
- i++;
-
- final String mimeType = entry.getKey();
-
- if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
- if (mPrimaryNameKindSectionData == null) {
- vlog("kind: " + i + " " + mimeType + " dropped");
- continue;
- }
- vlog("kind: " + i + " " + mimeType + " using first entry only");
- final KindSectionDataList kindSectionDataList = new KindSectionDataList();
- kindSectionDataList.add(mPrimaryNameKindSectionData.first);
- final CompactKindSectionView kindSectionView = inflateKindSectionView(
- mKindSectionViews, kindSectionDataList, mimeType,
- mPrimaryNameKindSectionData.second);
- mKindSectionViews.addView(kindSectionView);
-
- // Keep a pointer to all the KindSectionsViews for each mimeType
- getKindSectionViews(mimeType).add(kindSectionView);
- } else {
- final KindSectionDataList kindSectionDataList = entry.getValue();
-
- // Ignore mime types that we've already handled
- if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
- vlog("kind: " + i + " " + mimeType + " dropped");
- continue;
- }
-
- // Don't show more than one group editor on the compact editor.
- // Groups will still be editable for each raw contact individually on the full editor.
- if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)
- && kindSectionDataList.size() > 1) {
- vlog("kind: " + i + " " + mimeType + " dropped");
- continue;
- }
-
- if (kindSectionDataList != null && !kindSectionDataList.isEmpty()) {
- vlog("kind: " + i + " " + mimeType + " " + kindSectionDataList.size() +
- " kindSectionData(s)");
-
- final CompactKindSectionView kindSectionView = inflateKindSectionView(
- mKindSectionViews, kindSectionDataList, mimeType,
- /* primaryValueDelta =*/ null);
- mKindSectionViews.addView(kindSectionView);
-
- // Keep a pointer to all the KindSectionsViews for each mimeType
- getKindSectionViews(mimeType).add(kindSectionView);
- }
- }
- }
- }
-
- private List<CompactKindSectionView> getKindSectionViews(String mimeType) {
- List<CompactKindSectionView> kindSectionViews = mKindSectionViewsMap.get(mimeType);
- if (kindSectionViews == null) {
- kindSectionViews = new ArrayList<>();
- mKindSectionViewsMap.put(mimeType, kindSectionViews);
- }
- return kindSectionViews;
- }
-
- private CompactKindSectionView inflateKindSectionView(ViewGroup viewGroup,
- KindSectionDataList kindSectionDataList, String mimeType,
- ValuesDelta primaryValuesDelta) {
- final CompactKindSectionView kindSectionView = (CompactKindSectionView)
- mLayoutInflater.inflate(R.layout.compact_item_kind_section, viewGroup,
- /* attachToRoot =*/ false);
- kindSectionView.setIsUserProfile(mIsUserProfile);
-
- if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)
- || Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
- // Phone numbers and email addresses are always displayed,
- // even if they are empty
- kindSectionView.setHideWhenEmpty(false);
- }
-
- // Since phone numbers and email addresses displayed even if they are empty,
- // they will be the only types you add new values to initially for new contacts
- kindSectionView.setShowOneEmptyEditor(true);
-
- // Sort non-name editors so they wind up in the order we want
- if (!StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
- Collections.sort(kindSectionDataList, new EditorComparator(getContext()));
- }
-
- kindSectionView.setState(kindSectionDataList, mViewIdGenerator, mListener,
- primaryValuesDelta);
-
- return kindSectionView;
- }
-
- void maybeSetReadOnlyDisplayNameAsPrimary(String readOnlyDisplayName) {
- if (TextUtils.isEmpty(readOnlyDisplayName)) return;
- final CompactKindSectionView primaryNameKindSectionView = getPrimaryNameKindSectionView();
- if (primaryNameKindSectionView != null && primaryNameKindSectionView.isEmptyName()) {
- vlog("name: using read only display name as primary name");
- primaryNameKindSectionView.setName(readOnlyDisplayName);
- }
- }
-
- private CompactKindSectionView getPrimaryNameKindSectionView() {
- final List<CompactKindSectionView> kindSectionViews
- = mKindSectionViewsMap.get(StructuredName.CONTENT_ITEM_TYPE);
- return kindSectionViews == null || kindSectionViews.isEmpty()
- ? null : kindSectionViews.get(0);
- }
-
- private void showAllFields() {
- // Stop hiding empty editors and allow the user to enter values for all kinds now
- for (int i = 0; i < mKindSectionViews.getChildCount(); i++) {
- final CompactKindSectionView kindSectionView =
- (CompactKindSectionView) mKindSectionViews.getChildAt(i);
- kindSectionView.setHideWhenEmpty(false);
- kindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
- }
- mIsExpanded = true;
-
- // Hide the more fields button
- mMoreFields.setVisibility(View.GONE);
- }
-
- private static void vlog(String message) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, message);
- }
- }
-
- private static void wlog(String message) {
- if (Log.isLoggable(TAG, Log.WARN)) {
- Log.w(TAG, message);
- }
- }
-
- private static void elog(String message) {
- Log.e(TAG, message);
- }
-}
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
deleted file mode 100644
index 4182e1ff8..000000000
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ /dev/null
@@ -1,1725 +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.editor;
-
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
-import com.android.contacts.list.UiIntentActions;
-import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contacts.util.HelpUtils;
-import com.android.contacts.util.PhoneCapabilityTester;
-import com.android.contacts.util.UiClosables;
-
-import android.accounts.Account;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.content.ActivityNotFoundException;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.SystemClock;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.LinearLayout;
-import android.widget.ListPopupWindow;
-import android.widget.Toast;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Base Fragment for contact editors.
- */
-abstract public class ContactEditorBaseFragment extends Fragment implements
- ContactEditor, SplitContactConfirmationDialogFragment.Listener,
- JoinContactConfirmationDialogFragment.Listener,
- AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
- CancelEditDialogFragment.Listener {
-
- static final String TAG = "ContactEditor";
-
- protected static final int LOADER_CONTACT = 1;
- protected static final int LOADER_GROUPS = 2;
-
- private static final List<String> VALID_INTENT_ACTIONS = new ArrayList<String>() {{
- add(Intent.ACTION_EDIT);
- add(Intent.ACTION_INSERT);
- add(ContactEditorBaseActivity.ACTION_EDIT);
- add(ContactEditorBaseActivity.ACTION_INSERT);
- add(ContactEditorBaseActivity.ACTION_SAVE_COMPLETED);
- }};
-
- private static final String KEY_ACTION = "action";
- private static final String KEY_URI = "uri";
- private static final String KEY_AUTO_ADD_TO_DEFAULT_GROUP = "autoAddToDefaultGroup";
- private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
- private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
- private static final String KEY_MATERIAL_PALETTE = "materialPalette";
- private static final String KEY_PHOTO_ID = "photoId";
-
- private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
-
- private static final String KEY_RAW_CONTACTS = "rawContacts";
-
- private static final String KEY_EDIT_STATE = "state";
- private static final String KEY_STATUS = "status";
-
- private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
- private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
-
- private static final String KEY_IS_EDIT = "isEdit";
- private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
-
- private static final String KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY = "isReadOnly";
-
- // Phone option menus
- private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
- private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
- private static final String KEY_CUSTOM_RINGTONE = "customRingtone";
-
- private static final String KEY_IS_USER_PROFILE = "isUserProfile";
-
- private static final String KEY_ENABLED = "enabled";
-
- // Aggregation PopupWindow
- private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
- "aggregationSuggestionsRawContactId";
-
- // Join Activity
- private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
-
- private static final String KEY_READ_ONLY_DISPLAY_NAME = "readOnlyDisplayName";
-
- protected static final int REQUEST_CODE_JOIN = 0;
- protected static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1;
- protected static final int REQUEST_CODE_PICK_RINGTONE = 2;
-
- private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT;
-
- /**
- * An intent extra that forces the editor to add the edited contact
- * to the default group (e.g. "My Contacts").
- */
- public static final String INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY = "addToDefaultDirectory";
-
- public static final String INTENT_EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
-
- public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION =
- "disableDeleteMenuOption";
-
- /**
- * Intent key to pass the photo palette primary color calculated by
- * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
- * the compact and fully expanded editors.
- */
- public static final String INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR =
- "material_palette_primary_color";
-
- /**
- * Intent key to pass the photo palette secondary color calculated by
- * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor and between
- * the compact and fully expanded editors.
- */
- public static final String INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR =
- "material_palette_secondary_color";
-
- /**
- * Intent key to pass the ID of the photo to display on the editor.
- */
- public static final String INTENT_EXTRA_PHOTO_ID = "photo_id";
-
- /**
- * Intent key to pass the ID of the raw contact id that should be displayed in the full editor
- * by itself.
- */
- public static final String INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE =
- "raw_contact_id_to_display_alone";
-
- /**
- * Intent key to pass the boolean value of if the raw contact id that should be displayed
- * in the full editor by itself is read-only.
- */
- public static final String INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY =
- "raw_contact_display_alone_is_read_only";
-
- /**
- * Intent extra to specify a {@link ContactEditor.SaveMode}.
- */
- public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
-
- /**
- * Intent extra key for the contact ID to join the current contact to after saving.
- */
- public static final String JOIN_CONTACT_ID_EXTRA_KEY = "joinContactId";
-
- /**
- * Callbacks for Activities that host contact editors Fragments.
- */
- public interface Listener {
-
- /**
- * Contact was not found, so somehow close this fragment. This is raised after a contact
- * is removed via Menu/Delete
- */
- void onContactNotFound();
-
- /**
- * Contact was split, so we can close now.
- *
- * @param newLookupUri The lookup uri of the new contact that should be shown to the user.
- * The editor tries best to chose the most natural contact here.
- */
- void onContactSplit(Uri newLookupUri);
-
- /**
- * User has tapped Revert, close the fragment now.
- */
- void onReverted();
-
- /**
- * Contact was saved and the Fragment can now be closed safely.
- */
- void onSaveFinished(Intent resultIntent);
-
- /**
- * User switched to editing a different contact (a suggestion from the
- * aggregation engine).
- */
- void onEditOtherContactRequested(Uri contactLookupUri,
- ArrayList<ContentValues> contentValues);
-
- /**
- * Contact is being created for an external account that provides its own
- * new contact activity.
- */
- void onCustomCreateContactActivityRequested(AccountWithDataSet account,
- Bundle intentExtras);
-
- /**
- * The edited raw contact belongs to an external account that provides
- * its own edit activity.
- *
- * @param redirect indicates that the current editor should be closed
- * before the custom editor is shown.
- */
- void onCustomEditContactActivityRequested(AccountWithDataSet account, Uri rawContactUri,
- Bundle intentExtras, boolean redirect);
-
- /**
- * User has requested that contact be deleted.
- */
- void onDeleteRequested(Uri contactUri);
- }
-
- /**
- * Adapter for aggregation suggestions displayed in a PopupWindow when
- * editor fields change.
- */
- protected static final class AggregationSuggestionAdapter extends BaseAdapter {
- private final LayoutInflater mLayoutInflater;
- private final boolean mSetNewContact;
- private final AggregationSuggestionView.Listener mListener;
- private final List<AggregationSuggestionEngine.Suggestion> mSuggestions;
-
- public AggregationSuggestionAdapter(Activity activity, boolean setNewContact,
- AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
- mLayoutInflater = activity.getLayoutInflater();
- mSetNewContact = setNewContact;
- mListener = listener;
- mSuggestions = suggestions;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final Suggestion suggestion = (Suggestion) getItem(position);
- final AggregationSuggestionView suggestionView =
- (AggregationSuggestionView) mLayoutInflater.inflate(
- R.layout.aggregation_suggestions_item, null);
- suggestionView.setNewContact(mSetNewContact);
- suggestionView.setListener(mListener);
- suggestionView.bindSuggestion(suggestion);
- return suggestionView;
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public Object getItem(int position) {
- return mSuggestions.get(position);
- }
-
- @Override
- public int getCount() {
- return mSuggestions.size();
- }
- }
-
- protected Context mContext;
- protected Listener mListener;
-
- //
- // Views
- //
- protected LinearLayout mContent;
- protected View mAggregationSuggestionView;
- protected ListPopupWindow mAggregationSuggestionPopup;
-
- //
- // Parameters passed in on {@link #load}
- //
- protected String mAction;
- protected Uri mLookupUri;
- protected Bundle mIntentExtras;
- protected boolean mAutoAddToDefaultGroup;
- protected boolean mDisableDeleteMenuOption;
- protected boolean mNewLocalProfile;
- protected MaterialColorMapUtils.MaterialPalette mMaterialPalette;
- protected long mPhotoId = -1;
-
- //
- // Helpers
- //
- protected ContactEditorUtils mEditorUtils;
- protected RawContactDeltaComparator mComparator;
- protected ViewIdGenerator mViewIdGenerator;
- private AggregationSuggestionEngine mAggregationSuggestionEngine;
-
- //
- // Loaded data
- //
- // Used to store existing contact data so it can be re-applied during a rebind call,
- // i.e. account switch. Only used in {@link ContactEditorFragment}.
- protected ImmutableList<RawContact> mRawContacts;
- protected Cursor mGroupMetaData;
-
- //
- // Editor state
- //
- protected RawContactDeltaList mState;
- protected int mStatus;
- protected long mRawContactIdToDisplayAlone = -1;
- protected boolean mRawContactDisplayAloneIsReadOnly = false;
-
- // Whether to show the new contact blank form and if it's corresponding delta is ready.
- protected boolean mHasNewContact;
- protected AccountWithDataSet mAccountWithDataSet;
- protected boolean mNewContactDataReady;
- protected boolean mNewContactAccountChanged;
-
- // Whether it's an edit of existing contact and if it's corresponding delta is ready.
- protected boolean mIsEdit;
- protected boolean mExistingContactDataReady;
-
- // Whether we are editing the "me" profile
- protected boolean mIsUserProfile;
-
- // Phone specific option menu items
- private boolean mSendToVoicemailState;
- private boolean mArePhoneOptionsChangable;
- private String mCustomRingtone;
-
- // Whether editor views and options menu items should be enabled
- private boolean mEnabled = true;
-
- // Aggregation PopupWindow
- private long mAggregationSuggestionsRawContactId;
-
- // Join Activity
- protected long mContactIdForJoin;
-
- // Used to pre-populate the editor with a display name when a user edits a read-only contact.
- protected String mReadOnlyDisplayName;
-
- //
- // Not saved/restored on rotates
- //
-
- // The name editor view for the new raw contact that was created so that the user can
- // edit a read-only contact (to which the new raw contact was joined)
- protected StructuredNameEditorView mReadOnlyNameEditorView;
-
- /**
- * The contact data loader listener.
- */
- protected final LoaderManager.LoaderCallbacks<Contact> mContactLoaderListener =
- new LoaderManager.LoaderCallbacks<Contact>() {
-
- protected long mLoaderStartTime;
-
- @Override
- public Loader<Contact> onCreateLoader(int id, Bundle args) {
- mLoaderStartTime = SystemClock.elapsedRealtime();
- return new ContactLoader(mContext, mLookupUri, true);
- }
-
- @Override
- public void onLoadFinished(Loader<Contact> loader, Contact contact) {
- final long loaderCurrentTime = SystemClock.elapsedRealtime();
- Log.v(TAG, "Time needed for loading: " + (loaderCurrentTime-mLoaderStartTime));
- if (!contact.isLoaded()) {
- // Item has been deleted. Close activity without saving again.
- Log.i(TAG, "No contact found. Closing activity");
- mStatus = Status.CLOSING;
- if (mListener != null) mListener.onContactNotFound();
- return;
- }
-
- mStatus = Status.EDITING;
- mLookupUri = contact.getLookupUri();
- final long setDataStartTime = SystemClock.elapsedRealtime();
- setState(contact);
- setStateForPhoneMenuItems(contact);
- final long setDataEndTime = SystemClock.elapsedRealtime();
-
- Log.v(TAG, "Time needed for setting UI: " + (setDataEndTime - setDataStartTime));
- }
-
- @Override
- public void onLoaderReset(Loader<Contact> loader) {
- }
- };
-
- /**
- * The groups meta data loader listener.
- */
- protected final LoaderManager.LoaderCallbacks<Cursor> mGroupsLoaderListener =
- new LoaderManager.LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return new GroupMetaDataLoader(mContext, ContactsContract.Groups.CONTENT_URI);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- mGroupMetaData = data;
- setGroupMetaData();
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- }
- };
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mContext = activity;
- mEditorUtils = ContactEditorUtils.getInstance(mContext);
- mComparator = new RawContactDeltaComparator(mContext);
- }
-
- @Override
- public void onCreate(Bundle savedState) {
- if (savedState != null) {
- // Restore mUri before calling super.onCreate so that onInitializeLoaders
- // would already have a uri and an action to work with
- mAction = savedState.getString(KEY_ACTION);
- mLookupUri = savedState.getParcelable(KEY_URI);
- }
-
- super.onCreate(savedState);
-
- if (savedState == null) {
- mViewIdGenerator = new ViewIdGenerator();
- } else {
- mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR);
-
- mAutoAddToDefaultGroup = savedState.getBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP);
- mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
- mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
- mMaterialPalette = savedState.getParcelable(KEY_MATERIAL_PALETTE);
- mPhotoId = savedState.getLong(KEY_PHOTO_ID);
-
- mRawContacts = ImmutableList.copyOf(savedState.<RawContact>getParcelableArrayList(
- KEY_RAW_CONTACTS));
- // NOTE: mGroupMetaData is not saved/restored
-
- // Read state from savedState. No loading involved here
- mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
- mStatus = savedState.getInt(KEY_STATUS);
- mRawContactDisplayAloneIsReadOnly = savedState.getBoolean(
- KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
-
- mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
- mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
-
- mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
- mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
-
- mIsUserProfile = savedState.getBoolean(KEY_IS_USER_PROFILE);
-
- // Phone specific options menus
- mSendToVoicemailState = savedState.getBoolean(KEY_SEND_TO_VOICE_MAIL_STATE);
- mArePhoneOptionsChangable = savedState.getBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE);
- mCustomRingtone = savedState.getString(KEY_CUSTOM_RINGTONE);
-
- mEnabled = savedState.getBoolean(KEY_ENABLED);
-
- // Aggregation PopupWindow
- mAggregationSuggestionsRawContactId = savedState.getLong(
- KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID);
-
- // Join Activity
- mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
-
- mReadOnlyDisplayName = savedState.getString(KEY_READ_ONLY_DISPLAY_NAME);
- }
-
- // mState can still be null because it may not have have finished loading before
- // onSaveInstanceState was called.
- if (mState == null) {
- mState = new RawContactDeltaList();
- }
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- validateAction(mAction);
-
- if (mState.isEmpty()) {
- // The delta list may not have finished loading before orientation change happens.
- // In this case, there will be a saved state but deltas will be missing. Reload from
- // database.
- if (Intent.ACTION_EDIT.equals(mAction) ||
- ContactEditorBaseActivity.ACTION_EDIT.equals(mAction)) {
- // Either
- // 1) orientation change but load never finished.
- // 2) not an orientation change so data needs to be loaded for first time.
- getLoaderManager().initLoader(LOADER_CONTACT, null, mContactLoaderListener);
- getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
- }
- } else {
- // Orientation change, we already have mState, it was loaded by onCreate
- bindEditors();
- }
-
- // Handle initial actions only when existing state missing
- if (savedInstanceState == null) {
- final Account account = mIntentExtras == null ? null :
- (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
- final String dataSet = mIntentExtras == null ? null :
- mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
- if (account != null) {
- mAccountWithDataSet = new AccountWithDataSet(account.name, account.type, dataSet);
- }
-
- if (Intent.ACTION_EDIT.equals(mAction) ||
- ContactEditorBaseActivity.ACTION_EDIT.equals(mAction)) {
- mIsEdit = true;
- } else if (Intent.ACTION_INSERT.equals(mAction) ||
- ContactEditorBaseActivity.ACTION_INSERT.equals(mAction)) {
- mHasNewContact = true;
- if (mAccountWithDataSet != null) {
- createContact(mAccountWithDataSet);
- } else {
- // No Account specified. Let the user choose
- // Load Accounts async so that we can present them
- selectAccountAndCreateContact();
- }
- }
- }
- }
-
- /**
- * Checks if the requested action is valid.
- *
- * @param action The action to test.
- * @throws IllegalArgumentException when the action is invalid.
- */
- private static void validateAction(String action) {
- if (VALID_INTENT_ACTIONS.contains(action)) {
- return;
- }
- throw new IllegalArgumentException(
- "Unknown action " + action + "; Supported actions: " + VALID_INTENT_ACTIONS);
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putString(KEY_ACTION, mAction);
- outState.putParcelable(KEY_URI, mLookupUri);
- outState.putBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP, mAutoAddToDefaultGroup);
- outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
- outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
- if (mMaterialPalette != null) {
- outState.putParcelable(KEY_MATERIAL_PALETTE, mMaterialPalette);
- }
- outState.putLong(KEY_PHOTO_ID, mPhotoId);
-
- outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
-
- outState.putParcelableArrayList(KEY_RAW_CONTACTS, mRawContacts == null ?
- Lists.<RawContact>newArrayList() : Lists.newArrayList(mRawContacts));
- // NOTE: mGroupMetaData is not saved
-
- if (hasValidState()) {
- // Store entities with modifications
- outState.putParcelable(KEY_EDIT_STATE, mState);
- }
- outState.putInt(KEY_STATUS, mStatus);
- outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
- outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
- outState.putBoolean(KEY_IS_EDIT, mIsEdit);
- outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
- outState.putBoolean(KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
- mRawContactDisplayAloneIsReadOnly);
-
- outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
-
- // Phone specific options
- outState.putBoolean(KEY_SEND_TO_VOICE_MAIL_STATE, mSendToVoicemailState);
- outState.putBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE, mArePhoneOptionsChangable);
- outState.putString(KEY_CUSTOM_RINGTONE, mCustomRingtone);
-
- outState.putBoolean(KEY_ENABLED, mEnabled);
-
- // Aggregation PopupWindow
- outState.putLong(KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID,
- mAggregationSuggestionsRawContactId);
-
- // Join Activity
- outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
-
- outState.putString(KEY_READ_ONLY_DISPLAY_NAME, mReadOnlyDisplayName);
-
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- UiClosables.closeQuietly(mAggregationSuggestionPopup);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (mAggregationSuggestionEngine != null) {
- mAggregationSuggestionEngine.quit();
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case REQUEST_CODE_JOIN: {
- // Ignore failed requests
- if (resultCode != Activity.RESULT_OK) return;
- if (data != null) {
- final long contactId = ContentUris.parseId(data.getData());
- if (hasPendingChanges()) {
- // Ask the user if they want to save changes before doing the join
- JoinContactConfirmationDialogFragment.show(this, contactId);
- } else {
- // Do the join immediately
- joinAggregate(contactId);
- }
- }
- break;
- }
- case REQUEST_CODE_ACCOUNTS_CHANGED: {
- // Bail if the account selector was not successful.
- if (resultCode != Activity.RESULT_OK) {
- if (mListener != null) {
- mListener.onReverted();
- }
- return;
- }
- // If there's an account specified, use it.
- if (data != null) {
- AccountWithDataSet account = data.getParcelableExtra(
- Intents.Insert.EXTRA_ACCOUNT);
- if (account != null) {
- createContact(account);
- return;
- }
- }
- // If there isn't an account specified, then this is likely a phone-local
- // contact, so we should continue setting up the editor by automatically selecting
- // the most appropriate account.
- createContact();
- break;
- }
- case REQUEST_CODE_PICK_RINGTONE: {
- if (data != null) {
- final Uri pickedUri = data.getParcelableExtra(
- RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- onRingtonePicked(pickedUri);
- }
- break;
- }
- }
- }
-
- private void onRingtonePicked(Uri pickedUri) {
- mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION);
- Intent intent = ContactSaveService.createSetRingtone(
- mContext, mLookupUri, mCustomRingtone);
- mContext.startService(intent);
- }
-
- //
- // Options menu
- //
-
- private void setStateForPhoneMenuItems(Contact contact) {
- if (contact != null) {
- mSendToVoicemailState = contact.isSendToVoicemail();
- mCustomRingtone = contact.getCustomRingtone();
- mArePhoneOptionsChangable = !contact.isDirectoryEntry()
- && PhoneCapabilityTester.isPhone(mContext);
- }
- }
-
- /**
- * Invalidates the options menu if we are still associated with an Activity.
- */
- protected void invalidateOptionsMenu() {
- final Activity activity = getActivity();
- if (activity != null) {
- activity.invalidateOptionsMenu();
- }
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
- inflater.inflate(R.menu.edit_contact, menu);
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- // This supports the keyboard shortcut to save changes to a contact but shouldn't be visible
- // because the custom action bar contains the "save" button now (not the overflow menu).
- // TODO: Find a better way to handle shortcuts, i.e. onKeyDown()?
- final MenuItem saveMenu = menu.findItem(R.id.menu_save);
- final MenuItem splitMenu = menu.findItem(R.id.menu_split);
- final MenuItem joinMenu = menu.findItem(R.id.menu_join);
- final MenuItem helpMenu = menu.findItem(R.id.menu_help);
- final MenuItem sendToVoiceMailMenu = menu.findItem(R.id.menu_send_to_voicemail);
- final MenuItem ringToneMenu = menu.findItem(R.id.menu_set_ringtone);
- final MenuItem deleteMenu = menu.findItem(R.id.menu_delete);
-
- // Set visibility of menus
-
- // help menu depending on whether this is inserting or editing
- if (isInsert(mAction) || mRawContactIdToDisplayAlone != -1) {
- HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_add);
- splitMenu.setVisible(false);
- joinMenu.setVisible(false);
- deleteMenu.setVisible(false);
- } else if (isEdit(mAction)) {
- HelpUtils.prepareHelpMenuItem(mContext, helpMenu, R.string.help_url_people_edit);
- splitMenu.setVisible(canUnlinkRawContacts());
- // Cannot join a user profile
- joinMenu.setVisible(!isEditingUserProfile());
- deleteMenu.setVisible(!mDisableDeleteMenuOption && !isEditingUserProfile());
- } else {
- // something else, so don't show the help menu
- helpMenu.setVisible(false);
- }
-
- // Save menu is invisible when there's only one read only contact in the editor.
- saveMenu.setVisible(!mRawContactDisplayAloneIsReadOnly);
-
- if (mRawContactIdToDisplayAlone != -1 || mIsUserProfile) {
- sendToVoiceMailMenu.setVisible(false);
- ringToneMenu.setVisible(false);
- } else {
- // Hide telephony-related settings (ringtone, send to voicemail)
- // if we don't have a telephone or are editing a new contact.
- sendToVoiceMailMenu.setChecked(mSendToVoicemailState);
- sendToVoiceMailMenu.setVisible(mArePhoneOptionsChangable);
- ringToneMenu.setVisible(mArePhoneOptionsChangable);
- }
-
- int size = menu.size();
- for (int i = 0; i < size; i++) {
- menu.getItem(i).setEnabled(mEnabled);
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- final Activity activity = getActivity();
- if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
- // If we no longer are attached to a running activity want to
- // drain this event.
- return true;
- }
-
- switch (item.getItemId()) {
- case R.id.menu_save:
- return save(SaveMode.CLOSE);
- case R.id.menu_delete:
- if (mListener != null) mListener.onDeleteRequested(mLookupUri);
- return true;
- case R.id.menu_split:
- return doSplitContactAction();
- case R.id.menu_join:
- return doJoinContactAction();
- case R.id.menu_set_ringtone:
- doPickRingtone();
- return true;
- case R.id.menu_send_to_voicemail:
- // Update state and save
- mSendToVoicemailState = !mSendToVoicemailState;
- item.setChecked(mSendToVoicemailState);
- final Intent intent = ContactSaveService.createSetSendToVoicemail(
- mContext, mLookupUri, mSendToVoicemailState);
- mContext.startService(intent);
- return true;
- }
-
- return false;
- }
-
- @Override
- public boolean revert() {
- if (mState.isEmpty() || !hasPendingChanges()) {
- onCancelEditConfirmed();
- } else {
- CancelEditDialogFragment.show(this);
- }
- return true;
- }
-
- @Override
- public void onCancelEditConfirmed() {
- // When this Fragment is closed we don't want it to auto-save
- mStatus = Status.CLOSING;
- if (mListener != null) {
- mListener.onReverted();
- }
- }
-
- @Override
- public void onSplitContactConfirmed(boolean hasPendingChanges) {
- if (mState.isEmpty()) {
- // This may happen when this Fragment is recreated by the system during users
- // confirming the split action (and thus this method is called just before onCreate()),
- // for example.
- Log.e(TAG, "mState became null during the user's confirming split action. " +
- "Cannot perform the save action.");
- return;
- }
-
- if (!hasPendingChanges && mHasNewContact) {
- // If the user didn't add anything new, we don't want to split out the newly created
- // raw contact into a name-only contact so remove them.
- final Iterator<RawContactDelta> iterator = mState.iterator();
- while (iterator.hasNext()) {
- final RawContactDelta rawContactDelta = iterator.next();
- if (rawContactDelta.getRawContactId() < 0) {
- iterator.remove();
- }
- }
- }
- mState.markRawContactsForSplitting();
- save(SaveMode.SPLIT);
- }
-
- private boolean doSplitContactAction() {
- if (!hasValidState()) return false;
-
- SplitContactConfirmationDialogFragment.show(this, hasPendingChanges());
- return true;
- }
-
- private boolean doJoinContactAction() {
- if (!hasValidState() || mLookupUri == null) {
- return false;
- }
-
- // If we just started creating a new contact and haven't added any data, it's too
- // early to do a join
- if (mState.size() == 1 && mState.get(0).isContactInsert()
- && !hasPendingChanges()) {
- Toast.makeText(mContext, R.string.toast_join_with_empty_contact,
- Toast.LENGTH_LONG).show();
- return true;
- }
-
- showJoinAggregateActivity(mLookupUri);
- return true;
- }
-
- @Override
- public void onJoinContactConfirmed(long joinContactId) {
- doSaveAction(SaveMode.JOIN, joinContactId);
- }
-
- private void doPickRingtone() {
- final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
- // Allow user to pick 'Default'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
- // Show only ringtones
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
- // Allow the user to pick a silent ringtone
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
-
- final Uri ringtoneUri = EditorUiUtils.getRingtoneUriFromString(mCustomRingtone,
- CURRENT_API_VERSION);
-
- // Put checkmark next to the current ringtone for this contact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
-
- // Launch!
- try {
- startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
- } catch (ActivityNotFoundException ex) {
- Toast.makeText(mContext, R.string.missing_app, Toast.LENGTH_SHORT).show();
- }
- }
-
- @Override
- public boolean save(int saveMode) {
- if (!hasValidState() || mStatus != Status.EDITING) {
- return false;
- }
-
- // If we are about to close the editor - there is no need to refresh the data
- if (saveMode == SaveMode.CLOSE || saveMode == SaveMode.COMPACT
- || saveMode == SaveMode.SPLIT) {
- getLoaderManager().destroyLoader(LOADER_CONTACT);
- }
-
- mStatus = Status.SAVING;
-
- if (!hasPendingChanges()) {
- if (mLookupUri == null && saveMode == SaveMode.RELOAD) {
- // We don't have anything to save and there isn't even an existing contact yet.
- // Nothing to do, simply go back to editing mode
- mStatus = Status.EDITING;
- return true;
- }
- onSaveCompleted(/* hadChanges =*/ false, saveMode,
- /* saveSucceeded =*/ mLookupUri != null, mLookupUri, /* joinContactId =*/ null);
- return true;
- }
-
- setEnabled(false);
-
- return doSaveAction(saveMode, /* joinContactId */ null);
- }
-
- /**
- * Persist the accumulated editor deltas.
- *
- * @param joinContactId the raw contact ID to join the contact being saved to after the save,
- * may be null.
- */
- abstract protected boolean doSaveAction(int saveMode, Long joinContactId);
-
- protected boolean startSaveService(Context context, Intent intent, int saveMode) {
- final boolean result = ContactSaveService.startService(
- context, intent, saveMode);
- if (!result) {
- onCancelEditConfirmed();
- }
- return result;
- }
-
- //
- // State accessor methods
- //
-
- /**
- * Check if our internal {@link #mState} is valid, usually checked before
- * performing user actions.
- */
- protected boolean hasValidState() {
- return mState.size() > 0;
- }
-
- protected boolean isEditingUserProfile() {
- return mNewLocalProfile || mIsUserProfile;
- }
-
- /**
- * Whether the contact being edited spans multiple raw contacts.
- * The may also span multiple accounts.
- */
- public boolean isEditingMultipleRawContacts() {
- return mState.size() > 1;
- }
-
- /**
- * Whether the contact being edited is composed of a single read-only raw contact
- * aggregated with a newly created writable raw contact.
- */
- protected boolean isEditingReadOnlyRawContactWithNewContact() {
- return mHasNewContact && mState.size() == 2;
- }
-
- /**
- * Return true if there are any edits to the current contact which need to
- * be saved.
- */
- protected boolean hasPendingRawContactChanges(Set<String> excludedMimeTypes) {
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- return RawContactModifier.hasChanges(mState, accountTypes, excludedMimeTypes);
- }
-
- /**
- * We allow unlinking only if there is more than one raw contact, it is not a user-profile,
- * and unlinking won't result in an empty contact. For the empty contact case, we only guard
- * against this when there is a single read-only contact in the aggregate. If the user
- * has joined >1 read-only contacts together, we allow them to unlink it, even if they have
- * never added their own information and unlinking will create a name only contact.
- */
- protected boolean canUnlinkRawContacts() {
- return isEditingMultipleRawContacts()
- && !isEditingUserProfile()
- && !isEditingReadOnlyRawContactWithNewContact();
- }
-
- /**
- * Determines if changes were made in the editor that need to be saved, while taking into
- * account that name changes are not real for read-only contacts.
- * See go/editing-read-only-contacts
- */
- protected boolean hasPendingChanges() {
- if (mReadOnlyNameEditorView != null && mReadOnlyDisplayName != null) {
- // We created a new raw contact delta with a default display name.
- // We must test for pending changes while ignoring the default display name.
- final String displayName = mReadOnlyNameEditorView.getDisplayName();
- if (mReadOnlyDisplayName.equals(displayName)) {
- final Set<String> excludedMimeTypes = new HashSet<>();
- excludedMimeTypes.add(StructuredName.CONTENT_ITEM_TYPE);
- return hasPendingRawContactChanges(excludedMimeTypes);
- }
- return true;
- }
- return hasPendingRawContactChanges(/* excludedMimeTypes =*/ null);
- }
-
- /**
- * Whether editor inputs and the options menu should be enabled.
- */
- protected boolean isEnabled() {
- return mEnabled;
- }
-
- /**
- * Returns the palette extra that was passed in.
- */
- protected MaterialColorMapUtils.MaterialPalette getMaterialPalette() {
- return mMaterialPalette;
- }
-
- //
- // Account creation
- //
-
- private void selectAccountAndCreateContact() {
- // If this is a local profile, then skip the logic about showing the accounts changed
- // activity and create a phone-local contact.
- if (mNewLocalProfile) {
- createContact(null);
- return;
- }
-
- // If there is no default account or the accounts have changed such that we need to
- // prompt the user again, then launch the account prompt.
- if (mEditorUtils.shouldShowAccountChangedNotification()) {
- Intent intent = new Intent(mContext, ContactEditorAccountsChangedActivity.class);
- // Prevent a second instance from being started on rotates
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mStatus = Status.SUB_ACTIVITY;
- startActivityForResult(intent, REQUEST_CODE_ACCOUNTS_CHANGED);
- } else {
- // Otherwise, there should be a default account. Then either create a local contact
- // (if default account is null) or create a contact with the specified account.
- AccountWithDataSet defaultAccount = mEditorUtils.getDefaultAccount();
- createContact(defaultAccount);
- }
- }
-
- /**
- * Create a contact by automatically selecting the first account. If there's no available
- * account, a device-local contact should be created.
- */
- protected void createContact() {
- final List<AccountWithDataSet> accounts =
- AccountTypeManager.getInstance(mContext).getAccounts(true);
- // No Accounts available. Create a phone-local contact.
- if (accounts.isEmpty()) {
- createContact(null);
- return;
- }
-
- // We have an account switcher in "create-account" screen, so don't need to ask a user to
- // select an account here.
- createContact(accounts.get(0));
- }
-
- /**
- * Shows account creation screen associated with a given account.
- *
- * @param account may be null to signal a device-local contact should be created.
- */
- protected void createContact(AccountWithDataSet account) {
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- final AccountType accountType = accountTypes.getAccountTypeForAccount(account);
-
- if (accountType.getCreateContactActivityClassName() != null) {
- if (mListener != null) {
- mListener.onCustomCreateContactActivityRequested(account, mIntentExtras);
- }
- } else {
- setStateForNewContact(account, accountType, isEditingUserProfile());
- }
- }
-
- //
- // Data binding
- //
-
- private void setState(Contact contact) {
- // If we have already loaded data, we do not want to change it here to not confuse the user
- if (!mState.isEmpty()) {
- Log.v(TAG, "Ignoring background change. This will have to be rebased later");
- return;
- }
-
- // See if this edit operation needs to be redirected to a custom editor
- mRawContacts = contact.getRawContacts();
- if (mRawContacts.size() == 1) {
- RawContact rawContact = mRawContacts.get(0);
- String type = rawContact.getAccountTypeString();
- String dataSet = rawContact.getDataSet();
- AccountType accountType = rawContact.getAccountType(mContext);
- if (accountType.getEditContactActivityClassName() != null &&
- !accountType.areContactsWritable()) {
- if (mListener != null) {
- String name = rawContact.getAccountName();
- long rawContactId = rawContact.getId();
- mListener.onCustomEditContactActivityRequested(
- new AccountWithDataSet(name, type, dataSet),
- ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
- mIntentExtras, true);
- }
- return;
- }
- }
-
- String readOnlyDisplayName = null;
- // Check for writable raw contacts. If there are none, then we need to create one so user
- // can edit. For the user profile case, there is already an editable contact.
- if (!contact.isUserProfile() && !contact.isWritableContact(mContext)) {
- mHasNewContact = true;
-
- // This is potentially an asynchronous call and will add deltas to list.
- selectAccountAndCreateContact();
-
- readOnlyDisplayName = contact.getDisplayName();
- } else {
- mHasNewContact = false;
- }
-
- // This also adds deltas to list. If readOnlyDisplayName is null at this point it is
- // simply ignored later on by the editor.
- setStateForExistingContact(readOnlyDisplayName, contact.isUserProfile(), mRawContacts);
- }
-
- /**
- * Prepare {@link #mState} for a newly created phone-local contact.
- */
- private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
- boolean isUserProfile) {
- setStateForNewContact(account, accountType, /* oldState =*/ null,
- /* oldAccountType =*/ null, isUserProfile);
- }
-
- /**
- * Prepare {@link #mState} for a newly created phone-local contact, migrating the state
- * specified by oldState and oldAccountType.
- */
- protected void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
- RawContactDelta oldState, AccountType oldAccountType, boolean isUserProfile) {
- mStatus = Status.EDITING;
- mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
- mIsUserProfile = isUserProfile;
- mNewContactDataReady = true;
- bindEditors();
- }
-
- /**
- * Returns a {@link RawContactDelta} for a new contact suitable for addition into
- * {@link #mState}.
- *
- * If oldState and oldAccountType are specified, the state specified by those parameters
- * is migrated to the result {@link RawContactDelta}.
- */
- private RawContactDelta createNewRawContactDelta(AccountWithDataSet account,
- AccountType accountType, RawContactDelta oldState, AccountType oldAccountType) {
- final RawContact rawContact = new RawContact();
- if (account != null) {
- rawContact.setAccount(account);
- } else {
- rawContact.setAccountToLocal();
- }
-
- final RawContactDelta result = new RawContactDelta(
- ValuesDelta.fromAfter(rawContact.getValues()));
- if (oldState == null) {
- // Parse any values from incoming intent
- RawContactModifier.parseExtras(mContext, accountType, result, mIntentExtras);
- } else {
- RawContactModifier.migrateStateForNewContact(
- mContext, oldState, result, oldAccountType, accountType);
- }
-
- // Ensure we have some default fields (if the account type does not support a field,
- // ensureKind will not add it, so it is safe to add e.g. Event)
- RawContactModifier.ensureKindExists(result, accountType, Phone.CONTENT_ITEM_TYPE);
- RawContactModifier.ensureKindExists(result, accountType, Email.CONTENT_ITEM_TYPE);
- RawContactModifier.ensureKindExists(result, accountType, Organization.CONTENT_ITEM_TYPE);
- RawContactModifier.ensureKindExists(result, accountType, Event.CONTENT_ITEM_TYPE);
- RawContactModifier.ensureKindExists(result, accountType,
- StructuredPostal.CONTENT_ITEM_TYPE);
-
- // Set the correct URI for saving the contact as a profile
- if (mNewLocalProfile) {
- result.setProfileQueryUri();
- }
-
- return result;
- }
-
- /**
- * Prepare {@link #mState} for an existing contact.
- */
- protected void setStateForExistingContact(String readOnlyDisplayName, boolean isUserProfile,
- ImmutableList<RawContact> rawContacts) {
- setEnabled(true);
- mReadOnlyDisplayName = readOnlyDisplayName;
-
- mState.addAll(rawContacts.iterator());
- setIntentExtras(mIntentExtras);
- mIntentExtras = null;
-
- // For user profile, change the contacts query URI
- mIsUserProfile = isUserProfile;
- boolean localProfileExists = false;
-
- if (mIsUserProfile) {
- for (RawContactDelta rawContactDelta : mState) {
- // For profile contacts, we need a different query URI
- rawContactDelta.setProfileQueryUri();
- // Try to find a local profile contact
- if (rawContactDelta.getValues().getAsString(RawContacts.ACCOUNT_TYPE) == null) {
- localProfileExists = true;
- }
- }
- // Editor should always present a local profile for editing
- if (!localProfileExists) {
- mState.add(createLocalRawContactDelta());
- }
- }
- mExistingContactDataReady = true;
- bindEditors();
- }
-
- /**
- * Returns a {@link RawContactDelta} for a local contact suitable for addition into
- * {@link #mState}.
- */
- private static RawContactDelta createLocalRawContactDelta() {
- final RawContact rawContact = new RawContact();
- rawContact.setAccountToLocal();
-
- final RawContactDelta result = new RawContactDelta(
- ValuesDelta.fromAfter(rawContact.getValues()));
- result.setProfileQueryUri();
-
- return result;
- }
-
- /**
- * Sets group metadata on all bound editors.
- */
- abstract protected void setGroupMetaData();
-
- /**
- * Bind editors using {@link #mState} and other members initialized from the loaded (or new)
- * Contact.
- */
- abstract protected void bindEditors();
-
- /**
- * Set the enabled state of editors.
- */
- private void setEnabled(boolean enabled) {
- if (mEnabled != enabled) {
- mEnabled = enabled;
-
- // Enable/disable editors
- if (mContent != null) {
- int count = mContent.getChildCount();
- for (int i = 0; i < count; i++) {
- mContent.getChildAt(i).setEnabled(enabled);
- }
- }
-
- // Enable/disable aggregation suggestion vies
- if (mAggregationSuggestionView != null) {
- LinearLayout itemList = (LinearLayout) mAggregationSuggestionView.findViewById(
- R.id.aggregation_suggestions);
- int count = itemList.getChildCount();
- for (int i = 0; i < count; i++) {
- itemList.getChildAt(i).setEnabled(enabled);
- }
- }
-
- // Maybe invalidate the options menu
- final Activity activity = getActivity();
- if (activity != null) activity.invalidateOptionsMenu();
- }
- }
-
- /**
- * Removes a current editor ({@link #mState}) and rebinds new editor for a new account.
- * Some of old data are reused with new restriction enforced by the new account.
- *
- * @param oldState Old data being edited.
- * @param oldAccount Old account associated with oldState.
- * @param newAccount New account to be used.
- */
- protected void rebindEditorsForNewContact(
- RawContactDelta oldState, AccountWithDataSet oldAccount,
- AccountWithDataSet newAccount) {
- AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- AccountType oldAccountType = accountTypes.getAccountTypeForAccount(oldAccount);
- AccountType newAccountType = accountTypes.getAccountTypeForAccount(newAccount);
-
- if (newAccountType.getCreateContactActivityClassName() != null) {
- Log.w(TAG, "external activity called in rebind situation");
- if (mListener != null) {
- mListener.onCustomCreateContactActivityRequested(newAccount, mIntentExtras);
- }
- } else {
- mExistingContactDataReady = false;
- mNewContactDataReady = false;
- mState = new RawContactDeltaList();
- setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType,
- isEditingUserProfile());
- if (mIsEdit) {
- setStateForExistingContact(mReadOnlyDisplayName, isEditingUserProfile(),
- mRawContacts);
- }
- }
- }
-
- //
- // ContactEditor
- //
-
- @Override
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- @Override
- public void load(String action, Uri lookupUri, Bundle intentExtras) {
- mAction = action;
- mLookupUri = lookupUri;
- mIntentExtras = intentExtras;
-
- if (mIntentExtras != null) {
- mAutoAddToDefaultGroup =
- mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
- mNewLocalProfile =
- mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
- mDisableDeleteMenuOption =
- mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
- if (mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR)
- && mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR)) {
- mMaterialPalette = new MaterialColorMapUtils.MaterialPalette(
- mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR),
- mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR));
- }
- // If the user selected a different photo, don't restore the one from the Intent
- if (mPhotoId < 0) {
- mPhotoId = mIntentExtras.getLong(INTENT_EXTRA_PHOTO_ID);
- }
- mRawContactIdToDisplayAlone = mIntentExtras.getLong(
- INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
- mRawContactDisplayAloneIsReadOnly = mIntentExtras.getBoolean(
- INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
- }
- }
-
- @Override
- public void setIntentExtras(Bundle extras) {
- if (extras == null || extras.size() == 0) {
- return;
- }
-
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- for (RawContactDelta state : mState) {
- final AccountType type = state.getAccountType(accountTypes);
- if (type.areContactsWritable()) {
- // Apply extras to the first writable raw contact only
- RawContactModifier.parseExtras(mContext, type, state, extras);
- break;
- }
- }
- }
-
- @Override
- public void onJoinCompleted(Uri uri) {
- onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* joinContactId */ null);
- }
-
- @Override
- public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
- Uri contactLookupUri, Long joinContactId) {
- if (hadChanges) {
- if (saveSucceeded) {
- switch (saveMode) {
- case SaveMode.JOIN:
- break;
- case SaveMode.SPLIT:
- Toast.makeText(mContext, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT)
- .show();
- break;
- default:
- Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT)
- .show();
- }
-
- } else {
- Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
- }
- }
- switch (saveMode) {
- case SaveMode.CLOSE: {
- final Intent resultIntent;
- if (saveSucceeded && contactLookupUri != null) {
- final Uri lookupUri = maybeConvertToLegacyLookupUri(
- mContext, contactLookupUri, mLookupUri);
- resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(lookupUri,
- QuickContactActivity.MODE_FULLY_EXPANDED);
- resultIntent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE,
- ScreenType.EDITOR);
- } else {
- resultIntent = null;
- }
- // It is already saved, so prevent it from being saved again
- mStatus = Status.CLOSING;
- if (mListener != null) mListener.onSaveFinished(resultIntent);
- break;
- }
- case SaveMode.COMPACT: {
- // It is already saved, so prevent it from being saved again
- mStatus = Status.CLOSING;
- if (mListener != null) mListener.onSaveFinished(/* resultIntent= */ null);
- break;
- }
- case SaveMode.JOIN:
- if (saveSucceeded && contactLookupUri != null && joinContactId != null) {
- joinAggregate(joinContactId);
- }
- break;
- case SaveMode.RELOAD:
- if (saveSucceeded && contactLookupUri != null) {
- // If this was in INSERT, we are changing into an EDIT now.
- // If it already was an EDIT, we are changing to the new Uri now
- mState = new RawContactDeltaList();
- load(Intent.ACTION_EDIT, contactLookupUri, null);
- mStatus = Status.LOADING;
- getLoaderManager().restartLoader(LOADER_CONTACT, null, mContactLoaderListener);
- }
- break;
-
- case SaveMode.SPLIT:
- mStatus = Status.CLOSING;
- if (mListener != null) {
- mListener.onContactSplit(contactLookupUri);
- } else {
- Log.d(TAG, "No listener registered, can not call onSplitFinished");
- }
- break;
- }
- }
-
- /**
- * Shows a list of aggregates that can be joined into the currently viewed aggregate.
- *
- * @param contactLookupUri the fresh URI for the currently edited contact (after saving it)
- */
- private void showJoinAggregateActivity(Uri contactLookupUri) {
- if (contactLookupUri == null || !isAdded()) {
- return;
- }
-
- mContactIdForJoin = ContentUris.parseId(contactLookupUri);
- final Intent intent = new Intent(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
- intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, mContactIdForJoin);
- startActivityForResult(intent, REQUEST_CODE_JOIN);
- }
-
- //
- // Aggregation PopupWindow
- //
-
- /**
- * Triggers an asynchronous search for aggregation suggestions.
- */
- protected void acquireAggregationSuggestions(Context context,
- long rawContactId, ValuesDelta valuesDelta) {
- if (mAggregationSuggestionsRawContactId != rawContactId
- && mAggregationSuggestionView != null) {
- mAggregationSuggestionView.setVisibility(View.GONE);
- mAggregationSuggestionView = null;
- mAggregationSuggestionEngine.reset();
- }
-
- mAggregationSuggestionsRawContactId = rawContactId;
-
- if (mAggregationSuggestionEngine == null) {
- mAggregationSuggestionEngine = new AggregationSuggestionEngine(context);
- mAggregationSuggestionEngine.setListener(this);
- mAggregationSuggestionEngine.start();
- }
-
- mAggregationSuggestionEngine.setContactId(getContactId());
-
- mAggregationSuggestionEngine.onNameChange(valuesDelta);
- }
-
- /**
- * Returns the contact ID for the currently edited contact or 0 if the contact is new.
- */
- private long getContactId() {
- for (RawContactDelta rawContact : mState) {
- Long contactId = rawContact.getValues().getAsLong(RawContacts.CONTACT_ID);
- if (contactId != null) {
- return contactId;
- }
- }
- return 0;
- }
-
- @Override
- public void onAggregationSuggestionChange() {
- final Activity activity = getActivity();
- if ((activity != null && activity.isFinishing())
- || !isVisible() || mState.isEmpty() || mStatus != Status.EDITING) {
- return;
- }
-
- UiClosables.closeQuietly(mAggregationSuggestionPopup);
-
- if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
- return;
- }
-
- final View anchorView = getAggregationAnchorView(mAggregationSuggestionsRawContactId);
- if (anchorView == null) {
- return; // Raw contact deleted?
- }
- mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
- mAggregationSuggestionPopup.setAnchorView(anchorView);
- mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
- mAggregationSuggestionPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- mAggregationSuggestionPopup.setAdapter(
- new AggregationSuggestionAdapter(
- getActivity(),
- mState.size() == 1 && mState.get(0).isContactInsert(),
- /* listener =*/ this,
- mAggregationSuggestionEngine.getSuggestions()));
- mAggregationSuggestionPopup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final AggregationSuggestionView suggestionView = (AggregationSuggestionView) view;
- suggestionView.handleItemClickEvent();
- UiClosables.closeQuietly(mAggregationSuggestionPopup);
- mAggregationSuggestionPopup = null;
- }
- });
- mAggregationSuggestionPopup.show();
- }
-
- /**
- * Returns the raw contact editor view for the given rawContactId that should be used as the
- * anchor for aggregation suggestions.
- */
- abstract protected View getAggregationAnchorView(long rawContactId);
-
- /**
- * Whether the given raw contact ID matches the one used to last load aggregation
- * suggestions.
- */
- protected boolean isAggregationSuggestionRawContactId(long rawContactId) {
- return mAggregationSuggestionsRawContactId == rawContactId;
- }
-
- @Override
- public void onJoinAction(long contactId, List<Long> rawContactIdList) {
- final long rawContactIds[] = new long[rawContactIdList.size()];
- for (int i = 0; i < rawContactIds.length; i++) {
- rawContactIds[i] = rawContactIdList.get(i);
- }
- try {
- JoinSuggestedContactDialogFragment.show(this, rawContactIds);
- } catch (Exception ignored) {
- // No problem - the activity is no longer available to display the dialog
- }
- }
-
- /**
- * Joins the suggested contact (specified by the id's of constituent raw
- * contacts), save all changes, and stay in the editor.
- */
- protected void doJoinSuggestedContact(long[] rawContactIds) {
- if (!hasValidState() || mStatus != Status.EDITING) {
- return;
- }
-
- mState.setJoinWithRawContacts(rawContactIds);
- save(SaveMode.RELOAD);
- }
-
- @Override
- public void onEditAction(Uri contactLookupUri) {
- SuggestionEditConfirmationDialogFragment.show(this, contactLookupUri);
- }
-
- /**
- * Abandons the currently edited contact and switches to editing the suggested
- * one, transferring all the data there
- */
- protected void doEditSuggestedContact(Uri contactUri) {
- if (mListener != null) {
- // make sure we don't save this contact when closing down
- mStatus = Status.CLOSING;
- mListener.onEditOtherContactRequested(
- contactUri, mState.get(0).getContentValues());
- }
- }
-
- //
- // Join Activity
- //
-
- /**
- * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
- */
- abstract protected void joinAggregate(long contactId);
-
- //
- // Utility methods
- //
-
- /**
- * Returns a legacy version of the given contactLookupUri if a legacy Uri was originally
- * passed to the contact editor.
- *
- * @param contactLookupUri The Uri to possibly convert to legacy format.
- * @param requestLookupUri The lookup Uri originally passed to the contact editor
- * (via Intent data), may be null.
- */
- protected static Uri maybeConvertToLegacyLookupUri(Context context, Uri contactLookupUri,
- Uri requestLookupUri) {
- final String legacyAuthority = "contacts";
- final String requestAuthority = requestLookupUri == null
- ? null : requestLookupUri.getAuthority();
- if (legacyAuthority.equals(requestAuthority)) {
- // Build a legacy Uri if that is what was requested by caller
- final long contactId = ContentUris.parseId(Contacts.lookupContact(
- context.getContentResolver(), contactLookupUri));
- final Uri legacyContentUri = Uri.parse("content://contacts/people");
- return ContentUris.withAppendedId(legacyContentUri, contactId);
- }
- // Otherwise pass back a lookup-style Uri
- return contactLookupUri;
- }
-
- /**
- * Whether the argument Intent requested a contact insert action or not.
- */
- protected static boolean isInsert(Intent intent) {
- return intent == null ? false : isInsert(intent.getAction());
- }
-
- protected static boolean isInsert(String action) {
- return Intent.ACTION_INSERT.equals(action)
- || ContactEditorBaseActivity.ACTION_INSERT.equals(action);
- }
-
- protected static boolean isEdit(String action) {
- return Intent.ACTION_EDIT.equals(action)
- || ContactEditorBaseActivity.ACTION_EDIT.equals(action);
- }
-}
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 146bc4c50..da68ec6a5 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 The Android Open Source Project
+ * 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.
@@ -16,144 +16,740 @@
package com.android.contacts.editor;
+import android.accounts.Account;
import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Context;
+import android.content.CursorLoader;
import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.os.SystemClock;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Intents;
+import android.provider.ContactsContract.RawContacts;
+import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
+import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListPopupWindow;
+import android.widget.Toast;
import com.android.contacts.ContactSaveService;
+import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity.ContactEditor;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.detail.PhotoSelectionHandler;
-import com.android.contacts.editor.Editor.EditorListener;
+import com.android.contacts.activities.ContactEditorActivity.ContactEditor;
+import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.quickcontact.InvisibleContactUtil;
+import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.ContactDisplayUtils;
import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
import com.android.contacts.util.UiClosables;
+import com.android.contactsbind.HelpUtils;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
import java.io.FileNotFoundException;
+import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/**
- * Contact editor with all fields displayed.
+ * Contact editor with only the most important fields displayed initially.
*/
-public class ContactEditorFragment extends ContactEditorBaseFragment implements
- RawContactReadOnlyEditorView.Listener {
+public class ContactEditorFragment extends Fragment implements
+ ContactEditor, SplitContactConfirmationDialogFragment.Listener,
+ JoinContactConfirmationDialogFragment.Listener,
+ AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
+ CancelEditDialogFragment.Listener,
+ RawContactEditorView.Listener, PhotoEditorView.Listener,
+ AccountsLoader.AccountsListener {
+
+ static final String TAG = "ContactEditor";
+
+ private static final int LOADER_CONTACT = 1;
+ private static final int LOADER_GROUPS = 2;
+ private static final int LOADER_ACCOUNTS = 3;
+
+ private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
+ private static final String KEY_UPDATED_PHOTOS = "updated_photos";
+
+ private static final List<String> VALID_INTENT_ACTIONS = new ArrayList<String>() {{
+ add(Intent.ACTION_EDIT);
+ add(Intent.ACTION_INSERT);
+ add(ContactEditorActivity.ACTION_SAVE_COMPLETED);
+ }};
+
+ private static final String KEY_ACTION = "action";
+ private static final String KEY_URI = "uri";
+ private static final String KEY_AUTO_ADD_TO_DEFAULT_GROUP = "autoAddToDefaultGroup";
+ private static final String KEY_DISABLE_DELETE_MENU_OPTION = "disableDeleteMenuOption";
+ private static final String KEY_NEW_LOCAL_PROFILE = "newLocalProfile";
+ private static final String KEY_MATERIAL_PALETTE = "materialPalette";
+ private static final String KEY_ACCOUNT = "saveToAccount";
+ private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
+
+ private static final String KEY_RAW_CONTACTS = "rawContacts";
+
+ private static final String KEY_EDIT_STATE = "state";
+ private static final String KEY_STATUS = "status";
- private static final String KEY_EXPANDED_EDITORS = "expandedEditors";
+ private static final String KEY_HAS_NEW_CONTACT = "hasNewContact";
+ private static final String KEY_NEW_CONTACT_READY = "newContactDataReady";
- private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
- private static final String KEY_CURRENT_PHOTO_URI = "currentphotouri";
- private static final String KEY_UPDATED_PHOTOS = "updatedPhotos";
+ private static final String KEY_IS_EDIT = "isEdit";
+ private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
- // Used to store which raw contact editors have been expanded. Keyed on raw contact ids.
- private HashMap<Long, Boolean> mExpandedEditors = new HashMap<Long, Boolean>();
+ private static final String KEY_IS_USER_PROFILE = "isUserProfile";
+
+ private static final String KEY_ENABLED = "enabled";
+
+ // Aggregation PopupWindow
+ private static final String KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID =
+ "aggregationSuggestionsRawContactId";
+
+ // Join Activity
+ private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
+
+ private static final String KEY_READ_ONLY_DISPLAY_NAME_ID = "readOnlyDisplayNameId";
+ private static final String KEY_COPY_READ_ONLY_DISPLAY_NAME = "copyReadOnlyDisplayName";
+
+ protected static final int REQUEST_CODE_JOIN = 0;
+ protected static final int REQUEST_CODE_ACCOUNTS_CHANGED = 1;
/**
- * The raw contact for which we started "take photo" or "choose photo from gallery" most
- * recently. Used to restore {@link #mCurrentPhotoHandler} after orientation change.
+ * An intent extra that forces the editor to add the edited contact
+ * to the default group (e.g. "My Contacts").
*/
- private long mRawContactIdRequestingPhoto;
+ public static final String INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY = "addToDefaultDirectory";
+
+ public static final String INTENT_EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
+
+ public static final String INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION =
+ "disableDeleteMenuOption";
/**
- * The {@link PhotoHandler} for the photo editor for the {@link #mRawContactIdRequestingPhoto}
- * raw contact.
- *
- * A {@link PhotoHandler} is created for each photo editor in {@link #bindPhotoHandler}, but
- * the only "active" one should get the activity result. This member represents the active
- * one.
+ * Intent key to pass the photo palette primary color calculated by
+ * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor.
+ */
+ public static final String INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR =
+ "material_palette_primary_color";
+
+ /**
+ * Intent key to pass the photo palette secondary color calculated by
+ * {@link com.android.contacts.quickcontact.QuickContactActivity} to the editor.
+ */
+ public static final String INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR =
+ "material_palette_secondary_color";
+
+ /**
+ * Intent key to pass the ID of the photo to display on the editor.
+ */
+ // TODO: This can be cleaned up if we decide to not pass the photo id through
+ // QuickContactActivity.
+ public static final String INTENT_EXTRA_PHOTO_ID = "photo_id";
+
+ /**
+ * Intent key to pass the ID of the raw contact id that should be displayed in the full editor
+ * by itself.
+ */
+ public static final String INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE =
+ "raw_contact_id_to_display_alone";
+
+ /**
+ * Intent extra to specify a {@link ContactEditor.SaveMode}.
+ */
+ public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
+
+ /**
+ * Intent extra key for the contact ID to join the current contact to after saving.
+ */
+ public static final String JOIN_CONTACT_ID_EXTRA_KEY = "joinContactId";
+
+ /**
+ * Callbacks for Activities that host contact editors Fragments.
+ */
+ public interface Listener {
+
+ /**
+ * Contact was not found, so somehow close this fragment. This is raised after a contact
+ * is removed via Menu/Delete
+ */
+ void onContactNotFound();
+
+ /**
+ * Contact was split, so we can close now.
+ *
+ * @param newLookupUri The lookup uri of the new contact that should be shown to the user.
+ * The editor tries best to chose the most natural contact here.
+ */
+ void onContactSplit(Uri newLookupUri);
+
+ /**
+ * User has tapped Revert, close the fragment now.
+ */
+ void onReverted();
+
+ /**
+ * Contact was saved and the Fragment can now be closed safely.
+ */
+ void onSaveFinished(Intent resultIntent);
+
+ /**
+ * User switched to editing a different raw contact (a suggestion from the
+ * aggregation engine).
+ */
+ void onEditOtherRawContactRequested(Uri contactLookupUri, long rawContactId,
+ ArrayList<ContentValues> contentValues);
+
+ /**
+ * User has requested that contact be deleted.
+ */
+ void onDeleteRequested(Uri contactUri);
+ }
+
+ /**
+ * Adapter for aggregation suggestions displayed in a PopupWindow when
+ * editor fields change.
+ */
+ private static final class AggregationSuggestionAdapter extends BaseAdapter {
+ private final LayoutInflater mLayoutInflater;
+ private final AggregationSuggestionView.Listener mListener;
+ private final List<AggregationSuggestionEngine.Suggestion> mSuggestions;
+
+ public AggregationSuggestionAdapter(Activity activity,
+ AggregationSuggestionView.Listener listener, List<Suggestion> suggestions) {
+ mLayoutInflater = activity.getLayoutInflater();
+ mListener = listener;
+ mSuggestions = suggestions;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final Suggestion suggestion = (Suggestion) getItem(position);
+ final AggregationSuggestionView suggestionView =
+ (AggregationSuggestionView) mLayoutInflater.inflate(
+ R.layout.aggregation_suggestions_item, null);
+ suggestionView.setListener(mListener);
+ suggestionView.bindSuggestion(suggestion);
+ return suggestionView;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mSuggestions.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mSuggestions.size();
+ }
+ }
+
+ protected Context mContext;
+ protected Listener mListener;
+
+ //
+ // Views
+ //
+ protected LinearLayout mContent;
+ protected ListPopupWindow mAggregationSuggestionPopup;
+
+ //
+ // Parameters passed in on {@link #load}
+ //
+ protected String mAction;
+ protected Uri mLookupUri;
+ protected Bundle mIntentExtras;
+ protected boolean mAutoAddToDefaultGroup;
+ protected boolean mDisableDeleteMenuOption;
+ protected boolean mNewLocalProfile;
+ protected MaterialColorMapUtils.MaterialPalette mMaterialPalette;
+
+ //
+ // Helpers
+ //
+ protected ContactEditorUtils mEditorUtils;
+ protected RawContactDeltaComparator mComparator;
+ protected ViewIdGenerator mViewIdGenerator;
+ private AggregationSuggestionEngine mAggregationSuggestionEngine;
+
+ //
+ // Loaded data
+ //
+ // Used to store existing contact data so it can be re-applied during a rebind call,
+ // i.e. account switch.
+ protected Contact mContact;
+ protected ImmutableList<RawContact> mRawContacts;
+ protected Cursor mGroupMetaData;
+
+ //
+ // Editor state
+ //
+ protected RawContactDeltaList mState;
+ protected int mStatus;
+ protected long mRawContactIdToDisplayAlone = -1;
+
+ // Whether to show the new contact blank form and if it's corresponding delta is ready.
+ protected boolean mHasNewContact;
+ protected AccountWithDataSet mAccountWithDataSet;
+ protected List<AccountInfo> mWritableAccounts = Collections.emptyList();
+ protected boolean mNewContactDataReady;
+ protected boolean mNewContactAccountChanged;
+
+ // Whether it's an edit of existing contact and if it's corresponding delta is ready.
+ protected boolean mIsEdit;
+ protected boolean mExistingContactDataReady;
+
+ // Whether we are editing the "me" profile
+ protected boolean mIsUserProfile;
+
+ // Whether editor views and options menu items should be enabled
+ private boolean mEnabled = true;
+
+ // Aggregation PopupWindow
+ private long mAggregationSuggestionsRawContactId;
+
+ // Join Activity
+ protected long mContactIdForJoin;
+
+ // Used to pre-populate the editor with a display name when a user edits a read-only contact.
+ protected long mReadOnlyDisplayNameId;
+ protected boolean mCopyReadOnlyName;
+
+ /**
+ * The contact data loader listener.
+ */
+ protected final LoaderManager.LoaderCallbacks<Contact> mContactLoaderListener =
+ new LoaderManager.LoaderCallbacks<Contact>() {
+
+ protected long mLoaderStartTime;
+
+ @Override
+ public Loader<Contact> onCreateLoader(int id, Bundle args) {
+ mLoaderStartTime = SystemClock.elapsedRealtime();
+ return new ContactLoader(mContext, mLookupUri,
+ /* postViewNotification */ true,
+ /* loadGroupMetaData */ true);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Contact> loader, Contact contact) {
+ final long loaderCurrentTime = SystemClock.elapsedRealtime();
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG,
+ "Time needed for loading: " + (loaderCurrentTime-mLoaderStartTime));
+ }
+ if (!contact.isLoaded()) {
+ // Item has been deleted. Close activity without saving again.
+ Log.i(TAG, "No contact found. Closing activity");
+ mStatus = Status.CLOSING;
+ if (mListener != null) mListener.onContactNotFound();
+ return;
+ }
+
+ mStatus = Status.EDITING;
+ mLookupUri = contact.getLookupUri();
+ final long setDataStartTime = SystemClock.elapsedRealtime();
+ setState(contact);
+ final long setDataEndTime = SystemClock.elapsedRealtime();
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Time needed for setting UI: "
+ + (setDataEndTime - setDataStartTime));
+ }
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Contact> loader) {
+ }
+ };
+
+ /**
+ * The groups meta data loader listener.
*/
- private PhotoHandler mCurrentPhotoHandler;
- private Uri mCurrentPhotoUri;
+ protected final LoaderManager.LoaderCallbacks<Cursor> mGroupsLoaderListener =
+ new LoaderManager.LoaderCallbacks<Cursor>() {
+
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ return new GroupMetaDataLoader(mContext, ContactsContract.Groups.CONTENT_URI,
+ GroupUtil.ALL_GROUPS_SELECTION);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ mGroupMetaData = data;
+ setGroupMetaData();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+ };
+
+ private long mPhotoRawContactId;
private Bundle mUpdatedPhotos = new Bundle();
- public ContactEditorFragment() {
+ @Override
+ public Context getContext() {
+ return getActivity();
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- final View view = inflater.inflate(R.layout.contact_editor_fragment, container, false);
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mContext = activity;
+ mEditorUtils = ContactEditorUtils.create(mContext);
+ mComparator = new RawContactDeltaComparator(mContext);
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ if (savedState != null) {
+ // Restore mUri before calling super.onCreate so that onInitializeLoaders
+ // would already have a uri and an action to work with
+ mAction = savedState.getString(KEY_ACTION);
+ mLookupUri = savedState.getParcelable(KEY_URI);
+ }
+
+ super.onCreate(savedState);
+
+ if (savedState == null) {
+ mViewIdGenerator = new ViewIdGenerator();
+
+ // mState can still be null because it may not have have finished loading before
+ // onSaveInstanceState was called.
+ mState = new RawContactDeltaList();
+ } else {
+ mViewIdGenerator = savedState.getParcelable(KEY_VIEW_ID_GENERATOR);
+
+ mAutoAddToDefaultGroup = savedState.getBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP);
+ mDisableDeleteMenuOption = savedState.getBoolean(KEY_DISABLE_DELETE_MENU_OPTION);
+ mNewLocalProfile = savedState.getBoolean(KEY_NEW_LOCAL_PROFILE);
+ mMaterialPalette = savedState.getParcelable(KEY_MATERIAL_PALETTE);
+ mAccountWithDataSet = savedState.getParcelable(KEY_ACCOUNT);
+ mRawContacts = ImmutableList.copyOf(savedState.<RawContact>getParcelableArrayList(
+ KEY_RAW_CONTACTS));
+ // NOTE: mGroupMetaData is not saved/restored
+
+ // Read state from savedState. No loading involved here
+ mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
+ mStatus = savedState.getInt(KEY_STATUS);
+
+ mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
+ mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
- mContent = (LinearLayout) view.findViewById(R.id.editors);
+ mIsEdit = savedState.getBoolean(KEY_IS_EDIT);
+ mExistingContactDataReady = savedState.getBoolean(KEY_EXISTING_CONTACT_READY);
+ mIsUserProfile = savedState.getBoolean(KEY_IS_USER_PROFILE);
+
+ mEnabled = savedState.getBoolean(KEY_ENABLED);
+
+ // Aggregation PopupWindow
+ mAggregationSuggestionsRawContactId = savedState.getLong(
+ KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID);
+
+ // Join Activity
+ mContactIdForJoin = savedState.getLong(KEY_CONTACT_ID_FOR_JOIN);
+
+ mReadOnlyDisplayNameId = savedState.getLong(KEY_READ_ONLY_DISPLAY_NAME_ID);
+ mCopyReadOnlyName = savedState.getBoolean(KEY_COPY_READ_ONLY_DISPLAY_NAME, false);
+
+ mPhotoRawContactId = savedState.getLong(KEY_PHOTO_RAW_CONTACT_ID);
+ mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
setHasOptionsMenu(true);
+ final View view = inflater.inflate(
+ R.layout.contact_editor_fragment, container, false);
+ mContent = (LinearLayout) view.findViewById(R.id.raw_contacts_editor_view);
return view;
}
@Override
- public void onCreate(Bundle savedState) {
- super.onCreate(savedState);
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
- if (savedState != null) {
- mExpandedEditors = (HashMap<Long, Boolean>)
- savedState.getSerializable(KEY_EXPANDED_EDITORS);
- mRawContactIdRequestingPhoto = savedState.getLong(
- KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
- mCurrentPhotoUri = savedState.getParcelable(KEY_CURRENT_PHOTO_URI);
- mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
- mRawContactIdToDisplayAlone = savedState.getLong(
- ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
+ validateAction(mAction);
+
+ if (mState.isEmpty()) {
+ // The delta list may not have finished loading before orientation change happens.
+ // In this case, there will be a saved state but deltas will be missing. Reload from
+ // database.
+ if (Intent.ACTION_EDIT.equals(mAction)) {
+ // Either
+ // 1) orientation change but load never finished.
+ // 2) not an orientation change so data needs to be loaded for first time.
+ getLoaderManager().initLoader(LOADER_CONTACT, null, mContactLoaderListener);
+ getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
+ }
+ } else {
+ // Orientation change, we already have mState, it was loaded by onCreate
+ bindEditors();
+ }
+
+ // Handle initial actions only when existing state missing
+ if (savedInstanceState == null) {
+ if (mIntentExtras != null) {
+ final Account account = mIntentExtras == null ? null :
+ (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
+ final String dataSet = mIntentExtras == null ? null :
+ mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
+ mAccountWithDataSet = account != null
+ ? new AccountWithDataSet(account.name, account.type, dataSet)
+ : mIntentExtras.<AccountWithDataSet>getParcelable(
+ ContactEditorActivity.EXTRA_ACCOUNT_WITH_DATA_SET);
+ }
+
+ if (Intent.ACTION_EDIT.equals(mAction)) {
+ mIsEdit = true;
+ } else if (Intent.ACTION_INSERT.equals(mAction)) {
+ mHasNewContact = true;
+ if (mAccountWithDataSet != null) {
+ createContact(mAccountWithDataSet);
+ } // else wait for accounts to be loaded
+ }
+ }
+
+ if (mHasNewContact) {
+ AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS, AccountTypeManager.writableFilter());
}
}
+ /**
+ * Checks if the requested action is valid.
+ *
+ * @param action The action to test.
+ * @throws IllegalArgumentException when the action is invalid.
+ */
+ private static void validateAction(String action) {
+ if (VALID_INTENT_ACTIONS.contains(action)) {
+ return;
+ }
+ throw new IllegalArgumentException(
+ "Unknown action " + action + "; Supported actions: " + VALID_INTENT_ACTIONS);
+ }
+
@Override
- public void load(String action, Uri lookupUri, Bundle intentExtras) {
- super.load(action, lookupUri, intentExtras);
- if (intentExtras != null) {
- mRawContactIdToDisplayAlone = intentExtras.getLong(
- ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putString(KEY_ACTION, mAction);
+ outState.putParcelable(KEY_URI, mLookupUri);
+ outState.putBoolean(KEY_AUTO_ADD_TO_DEFAULT_GROUP, mAutoAddToDefaultGroup);
+ outState.putBoolean(KEY_DISABLE_DELETE_MENU_OPTION, mDisableDeleteMenuOption);
+ outState.putBoolean(KEY_NEW_LOCAL_PROFILE, mNewLocalProfile);
+ if (mMaterialPalette != null) {
+ outState.putParcelable(KEY_MATERIAL_PALETTE, mMaterialPalette);
}
+ outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
+
+ outState.putParcelableArrayList(KEY_RAW_CONTACTS, mRawContacts == null ?
+ Lists.<RawContact>newArrayList() : Lists.newArrayList(mRawContacts));
+ // NOTE: mGroupMetaData is not saved
+
+ outState.putParcelable(KEY_EDIT_STATE, mState);
+ outState.putInt(KEY_STATUS, mStatus);
+ outState.putBoolean(KEY_HAS_NEW_CONTACT, mHasNewContact);
+ outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
+ outState.putBoolean(KEY_IS_EDIT, mIsEdit);
+ outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
+ outState.putParcelable(KEY_ACCOUNT, mAccountWithDataSet);
+ outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
+
+ outState.putBoolean(KEY_ENABLED, mEnabled);
+
+ // Aggregation PopupWindow
+ outState.putLong(KEY_AGGREGATION_SUGGESTIONS_RAW_CONTACT_ID,
+ mAggregationSuggestionsRawContactId);
+
+ // Join Activity
+ outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
+
+ outState.putLong(KEY_READ_ONLY_DISPLAY_NAME_ID, mReadOnlyDisplayNameId);
+ outState.putBoolean(KEY_COPY_READ_ONLY_DISPLAY_NAME, mCopyReadOnlyName);
+
+ outState.putLong(KEY_PHOTO_RAW_CONTACT_ID, mPhotoRawContactId);
+ outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
+ super.onSaveInstanceState(outState);
}
@Override
- public void onStart() {
- getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
- super.onStart();
+ public void onStop() {
+ super.onStop();
+ UiClosables.closeQuietly(mAggregationSuggestionPopup);
}
@Override
- public void onExternalEditorRequest(AccountWithDataSet account, Uri uri) {
- if (mListener != null) {
- mListener.onCustomEditContactActivityRequested(account, uri, null, false);
+ public void onDestroy() {
+ super.onDestroy();
+ if (mAggregationSuggestionEngine != null) {
+ mAggregationSuggestionEngine.quit();
}
}
@Override
- public void onEditorExpansionChanged() {
- updatedExpandedEditorsMap();
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
+ case REQUEST_CODE_JOIN: {
+ // Ignore failed requests
+ if (resultCode != Activity.RESULT_OK) return;
+ if (data != null) {
+ final long contactId = ContentUris.parseId(data.getData());
+ if (hasPendingChanges()) {
+ // Ask the user if they want to save changes before doing the join
+ JoinContactConfirmationDialogFragment.show(this, contactId);
+ } else {
+ // Do the join immediately
+ joinAggregate(contactId);
+ }
+ }
+ break;
+ }
+ case REQUEST_CODE_ACCOUNTS_CHANGED: {
+ // Bail if the account selector was not successful.
+ if (resultCode != Activity.RESULT_OK || data == null ||
+ !data.hasExtra(Intents.Insert.EXTRA_ACCOUNT)) {
+ if (mListener != null) {
+ mListener.onReverted();
+ }
+ return;
+ }
+ AccountWithDataSet account = data.getParcelableExtra(
+ Intents.Insert.EXTRA_ACCOUNT);
+ createContact(account);
+ break;
+ }
+ }
}
@Override
- protected void setGroupMetaData() {
- if (mGroupMetaData == null) {
+ public void onAccountsLoaded(List<AccountInfo> data) {
+ mWritableAccounts = data;
+ // The user may need to select a new account to save to
+ if (mAccountWithDataSet == null && mHasNewContact) {
+ selectAccountAndCreateContact();
+ }
+
+ final RawContactEditorView view = getContent();
+ if (view == null) {
+ return;
+ }
+ view.setAccounts(data);
+ if (mAccountWithDataSet == null && view.getCurrentRawContactDelta() == null) {
return;
}
- int editorCount = mContent.getChildCount();
- for (int i = 0; i < editorCount; i++) {
- BaseRawContactEditorView editor = (BaseRawContactEditorView) mContent.getChildAt(i);
- editor.setGroupMetaData(mGroupMetaData);
+
+ final AccountWithDataSet account = mAccountWithDataSet != null
+ ? mAccountWithDataSet
+ : view.getCurrentRawContactDelta().getAccountWithDataSet();
+
+ // The current account was removed
+ if (!AccountInfo.contains(data, account) && !data.isEmpty()) {
+ if (isReadyToBindEditors()) {
+ onRebindEditorsForNewContact(getContent().getCurrentRawContactDelta(),
+ account, data.get(0).getAccount());
+ } else {
+ mAccountWithDataSet = data.get(0).getAccount();
+ }
+ }
+ }
+
+ //
+ // Options menu
+ //
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
+ inflater.inflate(R.menu.edit_contact, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ // This supports the keyboard shortcut to save changes to a contact but shouldn't be visible
+ // because the custom action bar contains the "save" button now (not the overflow menu).
+ // TODO: Find a better way to handle shortcuts, i.e. onKeyDown()?
+ final MenuItem saveMenu = menu.findItem(R.id.menu_save);
+ final MenuItem splitMenu = menu.findItem(R.id.menu_split);
+ final MenuItem joinMenu = menu.findItem(R.id.menu_join);
+ final MenuItem deleteMenu = menu.findItem(R.id.menu_delete);
+
+ // TODO: b/30771904, b/31827701, temporarily disable these items until we get them to work
+ // on a raw contact level.
+ joinMenu.setVisible(false);
+ splitMenu.setVisible(false);
+ deleteMenu.setVisible(false);
+ // Save menu is invisible when there's only one read only contact in the editor.
+ saveMenu.setVisible(!isEditingReadOnlyRawContact());
+ if (saveMenu.isVisible()) {
+ // Since we're using a custom action layout we have to manually hook up the handler.
+ saveMenu.getActionView().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onOptionsItemSelected(saveMenu);
+ }
+ });
+ }
+
+ int size = menu.size();
+ for (int i = 0; i < size; i++) {
+ menu.getItem(i).setEnabled(mEnabled);
}
}
@@ -162,494 +758,993 @@ public class ContactEditorFragment extends ContactEditorBaseFragment implements
if (item.getItemId() == android.R.id.home) {
return revert();
}
- return super.onOptionsItemSelected(item);
+
+ final Activity activity = getActivity();
+ if (activity == null || activity.isFinishing() || activity.isDestroyed()) {
+ // If we no longer are attached to a running activity want to
+ // drain this event.
+ return true;
+ }
+
+ final int id = item.getItemId();
+ if (id == R.id.menu_save) {
+ return save(SaveMode.CLOSE);
+ } else if (id == R.id.menu_delete) {
+ if (mListener != null) mListener.onDeleteRequested(mLookupUri);
+ return true;
+ } else if (id == R.id.menu_split) {
+ return doSplitContactAction();
+ } else if (id == R.id.menu_join) {
+ return doJoinContactAction();
+ } else if (id == R.id.menu_help) {
+ HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
+ return true;
+ }
+
+ return false;
}
@Override
- protected void bindEditors() {
- // bindEditors() can only bind views if there is data in mState, so immediately return
- // if mState is null
+ public boolean revert() {
+ if (mState.isEmpty() || !hasPendingChanges()) {
+ onCancelEditConfirmed();
+ } else {
+ CancelEditDialogFragment.show(this);
+ }
+ return true;
+ }
+
+ @Override
+ public void onCancelEditConfirmed() {
+ // When this Fragment is closed we don't want it to auto-save
+ mStatus = Status.CLOSING;
+ if (mListener != null) {
+ mListener.onReverted();
+ }
+ }
+
+ @Override
+ public void onSplitContactConfirmed(boolean hasPendingChanges) {
if (mState.isEmpty()) {
+ // This may happen when this Fragment is recreated by the system during users
+ // confirming the split action (and thus this method is called just before onCreate()),
+ // for example.
+ Log.e(TAG, "mState became null during the user's confirming split action. " +
+ "Cannot perform the save action.");
return;
}
- // Check if delta list is ready. Delta list is populated from existing data and when
- // editing an read-only contact, it's also populated with newly created data for the
- // blank form. When the data is not ready, skip. This method will be called multiple times.
- if ((mIsEdit && !mExistingContactDataReady) || (mHasNewContact && !mNewContactDataReady)) {
- return;
+ if (!hasPendingChanges && mHasNewContact) {
+ // If the user didn't add anything new, we don't want to split out the newly created
+ // raw contact into a name-only contact so remove them.
+ final Iterator<RawContactDelta> iterator = mState.iterator();
+ while (iterator.hasNext()) {
+ final RawContactDelta rawContactDelta = iterator.next();
+ if (rawContactDelta.getRawContactId() < 0) {
+ iterator.remove();
+ }
+ }
}
+ mState.markRawContactsForSplitting();
+ save(SaveMode.SPLIT);
+ }
- // Sort the editors
- Collections.sort(mState, mComparator);
+ @Override
+ public void onSplitContactCanceled() {}
- // Remove any existing editors and rebuild any visible
- mContent.removeAllViews();
+ private boolean doSplitContactAction() {
+ if (!hasValidState()) return false;
- final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
- int numRawContacts = mState.size();
+ SplitContactConfirmationDialogFragment.show(this, hasPendingChanges());
+ return true;
+ }
- for (int i = 0; i < numRawContacts; i++) {
- // TODO ensure proper ordering of entities in the list
- final RawContactDelta rawContactDelta = mState.get(i);
- if (!rawContactDelta.isVisible()) continue;
+ private boolean doJoinContactAction() {
+ if (!hasValidState() || mLookupUri == null) {
+ return false;
+ }
- final AccountType type = rawContactDelta.getAccountType(accountTypes);
- final long rawContactId = rawContactDelta.getRawContactId();
+ // If we just started creating a new contact and haven't added any data, it's too
+ // early to do a join
+ if (mState.size() == 1 && mState.get(0).isContactInsert()
+ && !hasPendingChanges()) {
+ Toast.makeText(mContext, R.string.toast_join_with_empty_contact,
+ Toast.LENGTH_LONG).show();
+ return true;
+ }
- if (mRawContactIdToDisplayAlone != -1 && mRawContactIdToDisplayAlone != rawContactId) {
- continue;
- }
+ showJoinAggregateActivity(mLookupUri);
+ return true;
+ }
- final BaseRawContactEditorView editor;
- if (!type.areContactsWritable()) {
- editor = (BaseRawContactEditorView) inflater.inflate(
- R.layout.raw_contact_readonly_editor_view, mContent, false);
- } else {
- editor = (RawContactEditorView) inflater.inflate(R.layout.raw_contact_editor_view,
- mContent, false);
- }
- editor.setListener(this);
- final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(mContext)
- .getAccounts(true);
- if (mHasNewContact && !mNewLocalProfile && accounts.size() > 1) {
- addAccountSwitcher(mState.get(0), editor);
- }
+ @Override
+ public void onJoinContactConfirmed(long joinContactId) {
+ doSaveAction(SaveMode.JOIN, joinContactId);
+ }
- editor.setEnabled(isEnabled());
+ @Override
+ public boolean save(int saveMode) {
+ if (!hasValidState() || mStatus != Status.EDITING) {
+ return false;
+ }
- if (mRawContactIdToDisplayAlone != -1) {
- editor.setCollapsed(false);
- } else if (mExpandedEditors.containsKey(rawContactId)) {
- editor.setCollapsed(mExpandedEditors.get(rawContactId));
- } else {
- // By default, only the first editor will be expanded.
- editor.setCollapsed(i != 0);
- }
+ // If we are about to close the editor - there is no need to refresh the data
+ if (saveMode == SaveMode.CLOSE || saveMode == SaveMode.EDITOR
+ || saveMode == SaveMode.SPLIT) {
+ getLoaderManager().destroyLoader(LOADER_CONTACT);
+ }
- mContent.addView(editor);
+ mStatus = Status.SAVING;
- editor.setState(rawContactDelta, type, mViewIdGenerator, isEditingUserProfile());
- if (mRawContactIdToDisplayAlone != -1) {
- editor.setCollapsible(false);
- } else {
- editor.setCollapsible(numRawContacts > 1);
+ if (!hasPendingChanges()) {
+ if (mLookupUri == null && saveMode == SaveMode.RELOAD) {
+ // We don't have anything to save and there isn't even an existing contact yet.
+ // Nothing to do, simply go back to editing mode
+ mStatus = Status.EDITING;
+ return true;
}
+ onSaveCompleted(/* hadChanges =*/ false, saveMode,
+ /* saveSucceeded =*/ mLookupUri != null, mLookupUri, /* joinContactId =*/ null);
+ return true;
+ }
- // Set up the photo handler.
- bindPhotoHandler(editor, type, mState);
-
- // If a new photo was chosen but not yet saved, we need to update the UI to
- // reflect this.
- final Uri photoUri = updatedPhotoUriForRawContact(rawContactId);
- if (photoUri != null) editor.setFullSizedPhoto(photoUri);
-
- if (editor instanceof RawContactEditorView) {
- final Activity activity = getActivity();
- final RawContactEditorView rawContactEditor = (RawContactEditorView) editor;
- final ValuesDelta nameValuesDelta = rawContactEditor.getNameEditor().getValues();
- final EditorListener structuredNameListener = new EditorListener() {
-
- @Override
- public void onRequest(int request) {
- // Make sure the activity is running
- if (activity.isFinishing()) {
- return;
- }
- if (!isEditingUserProfile()) {
- if (request == EditorListener.FIELD_CHANGED) {
- if (!nameValuesDelta.isSuperPrimary()) {
- unsetSuperPrimaryForAllNameEditors();
- nameValuesDelta.setSuperPrimary(true);
- }
- acquireAggregationSuggestions(activity,
- rawContactEditor.getNameEditor().getRawContactId(),
- rawContactEditor.getNameEditor().getValues());
- } else if (request == EditorListener.FIELD_TURNED_EMPTY) {
- if (nameValuesDelta.isSuperPrimary()) {
- nameValuesDelta.setSuperPrimary(false);
- }
- }
- }
- }
-
- @Override
- public void onDeleteRequested(Editor removedEditor) {
- }
- };
+ setEnabled(false);
- final StructuredNameEditorView nameEditor = rawContactEditor.getNameEditor();
- nameEditor.setEditorListener(structuredNameListener);
+ return doSaveAction(saveMode, /* joinContactId */ null);
+ }
- rawContactEditor.setAutoAddToDefaultGroup(mAutoAddToDefaultGroup);
+ //
+ // State accessor methods
+ //
- if (!isEditingUserProfile() && isAggregationSuggestionRawContactId(rawContactId)) {
- acquireAggregationSuggestions(activity,
- rawContactEditor.getNameEditor().getRawContactId(),
- rawContactEditor.getNameEditor().getValues());
- }
- }
- }
+ /**
+ * Check if our internal {@link #mState} is valid, usually checked before
+ * performing user actions.
+ */
+ private boolean hasValidState() {
+ return mState.size() > 0;
+ }
- setGroupMetaData();
+ private boolean isEditingUserProfile() {
+ return mNewLocalProfile || mIsUserProfile;
+ }
- // Show editor now that we've loaded state
- mContent.setVisibility(View.VISIBLE);
+ /**
+ * Whether the contact being edited is composed of read-only raw contacts
+ * aggregated with a newly created writable raw contact.
+ */
+ private boolean isEditingReadOnlyRawContactWithNewContact() {
+ return mHasNewContact && mState.size() > 1;
+ }
- // Refresh Action Bar as the visibility of the join command
- // Activity can be null if we have been detached from the Activity
- invalidateOptionsMenu();
+ /**
+ * @return true if the single raw contact we're looking at is read-only.
+ */
+ private boolean isEditingReadOnlyRawContact() {
+ return hasValidState() && mRawContactIdToDisplayAlone > 0
+ && !mState.getByRawContactId(mRawContactIdToDisplayAlone)
+ .getAccountType(AccountTypeManager.getInstance(mContext))
+ .areContactsWritable();
+ }
- updatedExpandedEditorsMap();
+ /**
+ * Return true if there are any edits to the current contact which need to
+ * be saved.
+ */
+ private boolean hasPendingRawContactChanges(Set<String> excludedMimeTypes) {
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+ return RawContactModifier.hasChanges(mState, accountTypes, excludedMimeTypes);
}
- private void unsetSuperPrimaryForAllNameEditors() {
- for (int i = 0; i < mContent.getChildCount(); i++) {
- final View view = mContent.getChildAt(i);
- if (view instanceof RawContactEditorView) {
- final RawContactEditorView rawContactEditorView = (RawContactEditorView) view;
- final StructuredNameEditorView nameEditorView =
- rawContactEditorView.getNameEditor();
- if (nameEditorView != null) {
- final ValuesDelta valuesDelta = nameEditorView.getValues();
- if (valuesDelta != null) {
- valuesDelta.setSuperPrimary(false);
- }
- }
+ /**
+ * Determines if changes were made in the editor that need to be saved, while taking into
+ * account that name changes are not real for read-only contacts.
+ * See go/editing-read-only-contacts
+ */
+ private boolean hasPendingChanges() {
+ if (isEditingReadOnlyRawContactWithNewContact()) {
+ // We created a new raw contact delta with a default display name.
+ // We must test for pending changes while ignoring the default display name.
+ final ValuesDelta beforeDelta = mState.getByRawContactId(mReadOnlyDisplayNameId)
+ .getSuperPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+ final ValuesDelta pendingDelta = mState
+ .getSuperPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+ if (structuredNamesAreEqual(beforeDelta, pendingDelta)) {
+ final Set<String> excludedMimeTypes = new HashSet<>();
+ excludedMimeTypes.add(StructuredName.CONTENT_ITEM_TYPE);
+ return hasPendingRawContactChanges(excludedMimeTypes);
}
+ return true;
}
+ return hasPendingRawContactChanges(/* excludedMimeTypes =*/ null);
}
/**
- * Update the values in {@link #mExpandedEditors}.
+ * Compares the two {@link ValuesDelta} to see if the structured name is changed. We made a copy
+ * of a read only delta and now we want to check if the copied delta has changes.
+ *
+ * @param before original {@link ValuesDelta}
+ * @param after copied {@link ValuesDelta}
+ * @return true if the copied {@link ValuesDelta} has all the same values in the structured
+ * name fields as the original.
*/
- private void updatedExpandedEditorsMap() {
- for (int i = 0; i < mContent.getChildCount(); i++) {
- final View childView = mContent.getChildAt(i);
- if (childView instanceof BaseRawContactEditorView) {
- BaseRawContactEditorView childEditor = (BaseRawContactEditorView) childView;
- mExpandedEditors.put(childEditor.getRawContactId(), childEditor.isCollapsed());
- }
+ private boolean structuredNamesAreEqual(ValuesDelta before, ValuesDelta after) {
+ if (before == after) return true;
+ if (before == null || after == null) return false;
+ final ContentValues original = before.getBefore();
+ final ContentValues pending = after.getAfter();
+ if (original != null && pending != null) {
+ final String beforeDisplayName = original.getAsString(StructuredName.DISPLAY_NAME);
+ final String afterDisplayName = pending.getAsString(StructuredName.DISPLAY_NAME);
+ if (!TextUtils.equals(beforeDisplayName, afterDisplayName)) return false;
+
+ final String beforePrefix = original.getAsString(StructuredName.PREFIX);
+ final String afterPrefix = pending.getAsString(StructuredName.PREFIX);
+ if (!TextUtils.equals(beforePrefix, afterPrefix)) return false;
+
+ final String beforeFirstName = original.getAsString(StructuredName.GIVEN_NAME);
+ final String afterFirstName = pending.getAsString(StructuredName.GIVEN_NAME);
+ if (!TextUtils.equals(beforeFirstName, afterFirstName)) return false;
+
+ final String beforeMiddleName = original.getAsString(StructuredName.MIDDLE_NAME);
+ final String afterMiddleName = pending.getAsString(StructuredName.MIDDLE_NAME);
+ if (!TextUtils.equals(beforeMiddleName, afterMiddleName)) return false;
+
+ final String beforeLastName = original.getAsString(StructuredName.FAMILY_NAME);
+ final String afterLastName = pending.getAsString(StructuredName.FAMILY_NAME);
+ if (!TextUtils.equals(beforeLastName, afterLastName)) return false;
+
+ final String beforeSuffix = original.getAsString(StructuredName.SUFFIX);
+ final String afterSuffix = pending.getAsString(StructuredName.SUFFIX);
+ return TextUtils.equals(beforeSuffix, afterSuffix);
+ }
+ return false;
+ }
+
+ //
+ // Account creation
+ //
+
+ private void selectAccountAndCreateContact() {
+ Preconditions.checkNotNull(mWritableAccounts, "Accounts must be loaded first");
+ // If this is a local profile, then skip the logic about showing the accounts changed
+ // activity and create a phone-local contact.
+ if (mNewLocalProfile) {
+ createContact(null);
+ return;
+ }
+
+ final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(mWritableAccounts);
+ // If there is no default account or the accounts have changed such that we need to
+ // prompt the user again, then launch the account prompt.
+ if (mEditorUtils.shouldShowAccountChangedNotification(accounts)) {
+ Intent intent = new Intent(mContext, ContactEditorAccountsChangedActivity.class);
+ // Prevent a second instance from being started on rotates
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ mStatus = Status.SUB_ACTIVITY;
+ startActivityForResult(intent, REQUEST_CODE_ACCOUNTS_CHANGED);
+ } else {
+ // Make sure the default account is automatically set if there is only one non-device
+ // account.
+ mEditorUtils.maybeUpdateDefaultAccount(accounts);
+ // Otherwise, there should be a default account. Then either create a local contact
+ // (if default account is null) or create a contact with the specified account.
+ AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount(accounts);
+ createContact(defaultAccount);
}
}
/**
- * If we've stashed a temporary file containing a contact's new photo, return its URI.
- * @param rawContactId identifies the raw-contact whose Bitmap we'll try to return.
- * @return Uru of photo for specified raw-contact, or null
+ * Shows account creation screen associated with a given account.
+ *
+ * @param account may be null to signal a device-local contact should be created.
*/
- private Uri updatedPhotoUriForRawContact(long rawContactId) {
- return (Uri) mUpdatedPhotos.get(String.valueOf(rawContactId));
+ private void createContact(AccountWithDataSet account) {
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+ final AccountType accountType = accountTypes.getAccountTypeForAccount(account);
+
+ setStateForNewContact(account, accountType, isEditingUserProfile());
}
- private void bindPhotoHandler(BaseRawContactEditorView editor, AccountType type,
- RawContactDeltaList state) {
- final int mode;
- boolean showIsPrimaryOption;
- if (type.areContactsWritable()) {
- if (editor.hasSetPhoto()) {
- mode = PhotoActionPopup.Modes.WRITE_ABLE_PHOTO;
- showIsPrimaryOption = hasMoreThanOnePhoto();
- } else {
- mode = PhotoActionPopup.Modes.NO_PHOTO;
- showIsPrimaryOption = false;
+ //
+ // Data binding
+ //
+
+ private void setState(Contact contact) {
+ // If we have already loaded data, we do not want to change it here to not confuse the user
+ if (!mState.isEmpty()) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Ignoring background change. This will have to be rebased later");
}
- } else if (editor.hasSetPhoto() && hasMoreThanOnePhoto()) {
- mode = PhotoActionPopup.Modes.READ_ONLY_PHOTO;
- showIsPrimaryOption = true;
- } else {
- // Read-only and either no photo or the only photo ==> no options
- editor.getPhotoEditor().setEditorListener(null);
- editor.getPhotoEditor().setShowPrimary(false);
return;
}
- if (mRawContactIdToDisplayAlone != -1) {
- showIsPrimaryOption = false;
+ mContact = contact;
+ mRawContacts = contact.getRawContacts();
+
+ // Check for writable raw contacts. If there are none, then we need to create one so user
+ // can edit. For the user profile case, there is already an editable contact.
+ if (!contact.isUserProfile() && !contact.isWritableContact(mContext)) {
+ mHasNewContact = true;
+ mReadOnlyDisplayNameId = contact.getNameRawContactId();
+ mCopyReadOnlyName = true;
+ // This is potentially an asynchronous call and will add deltas to list.
+ selectAccountAndCreateContact();
+ } else {
+ mHasNewContact = false;
}
- final PhotoHandler photoHandler = new PhotoHandler(mContext, editor, mode, state);
- editor.getPhotoEditor().setEditorListener(
- (PhotoHandler.PhotoEditorListener) photoHandler.getListener());
- editor.getPhotoEditor().setShowPrimary(showIsPrimaryOption);
- // Note a newly created raw contact gets some random negative ID, so any value is valid
- // here. (i.e. don't check against -1 or anything.)
- if (mRawContactIdRequestingPhoto == editor.getRawContactId()) {
- mCurrentPhotoHandler = photoHandler;
+ setStateForExistingContact(contact.isUserProfile(), mRawContacts);
+ if (mAutoAddToDefaultGroup
+ && InvisibleContactUtil.isInvisibleAndAddable(contact, getContext())) {
+ InvisibleContactUtil.markAddToDefaultGroup(contact, mState, getContext());
}
}
- private void addAccountSwitcher(
- final RawContactDelta currentState, BaseRawContactEditorView editor) {
- final AccountWithDataSet currentAccount = new AccountWithDataSet(
- currentState.getAccountName(),
- currentState.getAccountType(),
- currentState.getDataSet());
- final View accountView = editor.findViewById(R.id.account);
- final View anchorView = editor.findViewById(R.id.account_selector_container);
- if (accountView == null) {
- return;
+ /**
+ * Prepare {@link #mState} for a newly created phone-local contact.
+ */
+ private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
+ boolean isUserProfile) {
+ setStateForNewContact(account, accountType, /* oldState =*/ null,
+ /* oldAccountType =*/ null, isUserProfile);
+ }
+
+ /**
+ * Prepare {@link #mState} for a newly created phone-local contact, migrating the state
+ * specified by oldState and oldAccountType.
+ */
+ private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
+ RawContactDelta oldState, AccountType oldAccountType, boolean isUserProfile) {
+ mStatus = Status.EDITING;
+ mAccountWithDataSet = account;
+ mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
+ mIsUserProfile = isUserProfile;
+ mNewContactDataReady = true;
+ bindEditors();
+ }
+
+ /**
+ * Returns a {@link RawContactDelta} for a new contact suitable for addition into
+ * {@link #mState}.
+ *
+ * If oldState and oldAccountType are specified, the state specified by those parameters
+ * is migrated to the result {@link RawContactDelta}.
+ */
+ private RawContactDelta createNewRawContactDelta(AccountWithDataSet account,
+ AccountType accountType, RawContactDelta oldState, AccountType oldAccountType) {
+ final RawContact rawContact = new RawContact();
+ if (account != null) {
+ rawContact.setAccount(account);
+ } else {
+ rawContact.setAccountToLocal();
}
- anchorView.setVisibility(View.VISIBLE);
- accountView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(mContext, null);
- final AccountsListAdapter adapter =
- new AccountsListAdapter(mContext,
- AccountListFilter.ACCOUNTS_CONTACT_WRITABLE, currentAccount);
- popup.setWidth(anchorView.getWidth());
- popup.setAnchorView(anchorView);
- popup.setAdapter(adapter);
- popup.setModal(true);
- popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- UiClosables.closeQuietly(popup);
- AccountWithDataSet newAccount = adapter.getItem(position);
- if (!newAccount.equals(currentAccount)) {
- rebindEditorsForNewContact(currentState, currentAccount, newAccount);
- }
- }
- });
- popup.show();
+
+ final RawContactDelta result = new RawContactDelta(
+ ValuesDelta.fromAfter(rawContact.getValues()));
+ if (oldState == null) {
+ // Parse any values from incoming intent
+ RawContactModifier.parseExtras(mContext, accountType, result, mIntentExtras);
+ } else {
+ RawContactModifier.migrateStateForNewContact(
+ mContext, oldState, result, oldAccountType, accountType);
+ }
+
+ // Ensure we have some default fields (if the account type does not support a field,
+ // ensureKind will not add it, so it is safe to add e.g. Event)
+ RawContactModifier.ensureKindExists(result, accountType, StructuredName.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(result, accountType, Phone.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(result, accountType, Email.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(result, accountType, Organization.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(result, accountType, Event.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(result, accountType,
+ StructuredPostal.CONTENT_ITEM_TYPE);
+
+ // Set the correct URI for saving the contact as a profile
+ if (mNewLocalProfile) {
+ result.setProfileQueryUri();
+ }
+
+ return result;
+ }
+
+ /**
+ * Prepare {@link #mState} for an existing contact.
+ */
+ private void setStateForExistingContact(boolean isUserProfile,
+ ImmutableList<RawContact> rawContacts) {
+ setEnabled(true);
+
+ mState.addAll(rawContacts.iterator());
+ setIntentExtras(mIntentExtras);
+ mIntentExtras = null;
+
+ // For user profile, change the contacts query URI
+ mIsUserProfile = isUserProfile;
+ boolean localProfileExists = false;
+
+ if (mIsUserProfile) {
+ for (RawContactDelta rawContactDelta : mState) {
+ // For profile contacts, we need a different query URI
+ rawContactDelta.setProfileQueryUri();
+ // Try to find a local profile contact
+ if (rawContactDelta.getValues().getAsString(RawContacts.ACCOUNT_TYPE) == null) {
+ localProfileExists = true;
+ }
}
- });
+ // Editor should always present a local profile for editing
+ // TODO(wjang): Need to figure out when this case comes up. We can't do this if we're
+ // going to prune all but the one raw contact that we're trying to display by itself.
+ if (!localProfileExists && mRawContactIdToDisplayAlone <= 0) {
+ mState.add(createLocalRawContactDelta());
+ }
+ }
+ mExistingContactDataReady = true;
+ bindEditors();
}
- @Override
- protected boolean doSaveAction(int saveMode, Long joinContactId) {
- final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
- SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
- ((Activity) mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
- mUpdatedPhotos, JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
- return startSaveService(mContext, intent, saveMode);
+ /**
+ * Set the enabled state of editors.
+ */
+ private void setEnabled(boolean enabled) {
+ if (mEnabled != enabled) {
+ mEnabled = enabled;
+
+ // Enable/disable editors
+ if (mContent != null) {
+ int count = mContent.getChildCount();
+ for (int i = 0; i < count; i++) {
+ mContent.getChildAt(i).setEnabled(enabled);
+ }
+ }
+
+ // Maybe invalidate the options menu
+ final Activity activity = getActivity();
+ if (activity != null) activity.invalidateOptionsMenu();
+ }
}
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putSerializable(KEY_EXPANDED_EDITORS, mExpandedEditors);
- outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
- outState.putParcelable(KEY_CURRENT_PHOTO_URI, mCurrentPhotoUri);
- outState.putParcelable(KEY_UPDATED_PHOTOS, mUpdatedPhotos);
- outState.putLong(ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
- mRawContactIdToDisplayAlone);
- super.onSaveInstanceState(outState);
+ /**
+ * Returns a {@link RawContactDelta} for a local contact suitable for addition into
+ * {@link #mState}.
+ */
+ private static RawContactDelta createLocalRawContactDelta() {
+ final RawContact rawContact = new RawContact();
+ rawContact.setAccountToLocal();
+
+ final RawContactDelta result = new RawContactDelta(
+ ValuesDelta.fromAfter(rawContact.getValues()));
+ result.setProfileQueryUri();
+
+ return result;
}
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (mStatus == Status.SUB_ACTIVITY) {
- mStatus = Status.EDITING;
+ private void copyReadOnlyName() {
+ // We should only ever be doing this if we're creating a new writable contact to attach to
+ // a read only contact.
+ if (!isEditingReadOnlyRawContactWithNewContact()) {
+ return;
}
+ final int writableIndex = mState.indexOfFirstWritableRawContact(getContext());
+ final RawContactDelta writable = mState.get(writableIndex);
+ final RawContactDelta readOnly = mState.getByRawContactId(mContact.getNameRawContactId());
+ final ValuesDelta writeNameDelta = writable
+ .getSuperPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+ final ValuesDelta readNameDelta = readOnly
+ .getSuperPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+ mCopyReadOnlyName = false;
+ if (writeNameDelta == null || readNameDelta == null) {
+ return;
+ }
+ writeNameDelta.copyStructuredNameFieldsFrom(readNameDelta);
+ }
- // See if the photo selection handler handles this result.
- if (mCurrentPhotoHandler != null && mCurrentPhotoHandler.handlePhotoActivityResult(
- requestCode, resultCode, data)) {
+ /**
+ * Bind editors using {@link #mState} and other members initialized from the loaded (or new)
+ * Contact.
+ */
+ protected void bindEditors() {
+ if (!isReadyToBindEditors()) {
return;
}
- super.onActivityResult(requestCode, resultCode, data);
- }
+ // Add input fields for the loaded Contact
+ final RawContactEditorView editorView = getContent();
+ editorView.setListener(this);
+ if (mCopyReadOnlyName) {
+ copyReadOnlyName();
+ }
+ editorView.setState(mState, mMaterialPalette, mViewIdGenerator,
+ mHasNewContact, mIsUserProfile, mAccountWithDataSet,
+ mRawContactIdToDisplayAlone);
+ if (isEditingReadOnlyRawContact()) {
+ final Toolbar toolbar = getEditorActivity().getToolbar();
+ if (toolbar != null) {
+ toolbar.setTitle(R.string.contact_editor_title_read_only_contact);
+ // Set activity title for Talkback
+ getEditorActivity().setTitle(R.string.contact_editor_title_read_only_contact);
+ toolbar.setNavigationIcon(R.drawable.quantum_ic_arrow_back_vd_theme_24);
+ toolbar.setNavigationContentDescription(R.string.back_arrow_content_description);
+ toolbar.getNavigationIcon().setAutoMirrored(true);
+ }
+ }
- @Override
- protected void joinAggregate(final long contactId) {
- final Intent intent = ContactSaveService.createJoinContactsIntent(
- mContext, mContactIdForJoin, contactId, ContactEditorActivity.class,
- ContactEditorActivity.ACTION_JOIN_COMPLETED);
- mContext.startService(intent);
+ // Set up the photo widget
+ editorView.setPhotoListener(this);
+ mPhotoRawContactId = editorView.getPhotoRawContactId();
+ // If there is an updated full resolution photo apply it now, this will be the case if
+ // the user selects or takes a new photo, then rotates the device.
+ final Uri uri = (Uri) mUpdatedPhotos.get(String.valueOf(mPhotoRawContactId));
+ if (uri != null) {
+ editorView.setFullSizePhoto(uri);
+ }
+
+ // The editor is ready now so make it visible
+ editorView.setEnabled(mEnabled);
+ editorView.setVisibility(View.VISIBLE);
+
+ // Refresh the ActionBar as the visibility of the join command
+ // Activity can be null if we have been detached from the Activity.
+ invalidateOptionsMenu();
}
/**
- * Sets the photo stored in mPhoto and writes it to the RawContact with the given id
+ * Invalidates the options menu if we are still associated with an Activity.
*/
- private void setPhoto(long rawContact, Bitmap photo, Uri photoUri) {
- BaseRawContactEditorView requestingEditor = getRawContactEditorView(rawContact);
-
- if (photo == null || photo.getHeight() <= 0 || photo.getWidth() <= 0) {
- // This is unexpected.
- Log.w(TAG, "Invalid bitmap passed to setPhoto()");
+ private void invalidateOptionsMenu() {
+ final Activity activity = getActivity();
+ if (activity != null) {
+ activity.invalidateOptionsMenu();
}
+ }
- if (requestingEditor != null) {
- requestingEditor.setPhotoEntry(photo);
- // Immediately set all other photos as non-primary. Otherwise the UI can display
- // multiple photos as "Primary photo".
- for (int i = 0; i < mContent.getChildCount(); i++) {
- final View childView = mContent.getChildAt(i);
- if (childView instanceof BaseRawContactEditorView
- && childView != requestingEditor) {
- final BaseRawContactEditorView rawContactEditor
- = (BaseRawContactEditorView) childView;
- rawContactEditor.getPhotoEditor().setSuperPrimary(false);
- }
+ private boolean isReadyToBindEditors() {
+ if (mState.isEmpty()) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "No data to bind editors");
}
- } else {
- Log.w(TAG, "The contact that requested the photo is no longer present.");
+ return false;
}
-
- mUpdatedPhotos.putParcelable(String.valueOf(rawContact), photoUri);
+ if (mIsEdit && !mExistingContactDataReady) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Existing contact data is not ready to bind editors.");
+ }
+ return false;
+ }
+ if (mHasNewContact && !mNewContactDataReady) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "New contact data is not ready to bind editors.");
+ }
+ return false;
+ }
+ // Don't attempt to bind anything if we have no permissions.
+ return RequestPermissionsActivity.hasRequiredPermissions(mContext);
}
/**
- * Finds raw contact editor view for the given rawContactId.
+ * Removes a current editor ({@link #mState}) and rebinds new editor for a new account.
+ * Some of old data are reused with new restriction enforced by the new account.
+ *
+ * @param oldState Old data being edited.
+ * @param oldAccount Old account associated with oldState.
+ * @param newAccount New account to be used.
*/
+ private void rebindEditorsForNewContact(
+ RawContactDelta oldState, AccountWithDataSet oldAccount,
+ AccountWithDataSet newAccount) {
+ AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
+ AccountType oldAccountType = accountTypes.getAccountTypeForAccount(oldAccount);
+ AccountType newAccountType = accountTypes.getAccountTypeForAccount(newAccount);
+
+ mExistingContactDataReady = false;
+ mNewContactDataReady = false;
+ mState = new RawContactDeltaList();
+ setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType,
+ isEditingUserProfile());
+ if (mIsEdit) {
+ setStateForExistingContact(isEditingUserProfile(), mRawContacts);
+ }
+ }
+
+ //
+ // ContactEditor
+ //
+
+ @Override
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ public void load(String action, Uri lookupUri, Bundle intentExtras) {
+ mAction = action;
+ mLookupUri = lookupUri;
+ mIntentExtras = intentExtras;
+
+ if (mIntentExtras != null) {
+ mAutoAddToDefaultGroup =
+ mIntentExtras.containsKey(INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY);
+ mNewLocalProfile =
+ mIntentExtras.getBoolean(INTENT_EXTRA_NEW_LOCAL_PROFILE);
+ mDisableDeleteMenuOption =
+ mIntentExtras.getBoolean(INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION);
+ if (mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR)
+ && mIntentExtras.containsKey(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR)) {
+ mMaterialPalette = new MaterialColorMapUtils.MaterialPalette(
+ mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR),
+ mIntentExtras.getInt(INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR));
+ }
+ mRawContactIdToDisplayAlone = mIntentExtras
+ .getLong(INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE);
+ }
+ }
+
+ @Override
+ public void setIntentExtras(Bundle extras) {
+ getContent().setIntentExtras(extras);
+ }
+
@Override
- protected View getAggregationAnchorView(long rawContactId) {
- BaseRawContactEditorView editorView = getRawContactEditorView(rawContactId);
- return editorView == null ? null : editorView.findViewById(R.id.anchor_view);
- }
-
- public BaseRawContactEditorView getRawContactEditorView(long rawContactId) {
- for (int i = 0; i < mContent.getChildCount(); i++) {
- final View childView = mContent.getChildAt(i);
- if (childView instanceof BaseRawContactEditorView) {
- final BaseRawContactEditorView editor = (BaseRawContactEditorView) childView;
- if (editor.getRawContactId() == rawContactId) {
- return editor;
+ public void onJoinCompleted(Uri uri) {
+ onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* joinContactId */ null);
+ }
+
+
+ private String getNameToDisplay(Uri contactUri) {
+ // The contact has been deleted or the uri is otherwise no longer right.
+ if (contactUri == null) {
+ return null;
+ }
+ final ContentResolver resolver = mContext.getContentResolver();
+ final Cursor cursor = resolver.query(contactUri, new String[]{
+ ContactsContract.Contacts.DISPLAY_NAME,
+ ContactsContract.Contacts.DISPLAY_NAME_ALTERNATIVE}, null, null, null);
+
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ final String displayName = cursor.getString(0);
+ final String displayNameAlt = cursor.getString(1);
+ cursor.close();
+ return ContactDisplayUtils.getPreferredDisplayName(displayName, displayNameAlt,
+ new ContactsPreferences(mContext));
}
+ } finally {
+ cursor.close();
}
}
return null;
}
- /**
- * Returns true if there is currently more than one photo on screen.
- */
- private boolean hasMoreThanOnePhoto() {
- int countWithPicture = 0;
- final int numEntities = mState.size();
- for (int i = 0; i < numEntities; i++) {
- final RawContactDelta entity = mState.get(i);
- if (entity.isVisible()) {
- final ValuesDelta primary = entity.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
- if (primary != null && primary.getPhoto() != null) {
- countWithPicture++;
- } else {
- final long rawContactId = entity.getRawContactId();
- final Uri uri = mUpdatedPhotos.getParcelable(String.valueOf(rawContactId));
- if (uri != null) {
- try {
- mContext.getContentResolver().openInputStream(uri);
- countWithPicture++;
- } catch (FileNotFoundException e) {
+
+ @Override
+ public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
+ Uri contactLookupUri, Long joinContactId) {
+ if (hadChanges) {
+ if (saveSucceeded) {
+ switch (saveMode) {
+ case SaveMode.JOIN:
+ break;
+ case SaveMode.SPLIT:
+ Toast.makeText(mContext, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT)
+ .show();
+ break;
+ default:
+ final String displayName = getNameToDisplay(contactLookupUri);
+ final String toastMessage;
+ if (!TextUtils.isEmpty(displayName)) {
+ toastMessage = getResources().getString(
+ R.string.contactSavedNamedToast, displayName);
+ } else {
+ toastMessage = getResources().getString(R.string.contactSavedToast);
}
- }
+ Toast.makeText(mContext, toastMessage, Toast.LENGTH_SHORT).show();
}
- if (countWithPicture > 1) {
- return true;
+ } else {
+ Toast.makeText(mContext, R.string.contactSavedErrorToast, Toast.LENGTH_LONG).show();
+ }
+ }
+ switch (saveMode) {
+ case SaveMode.CLOSE: {
+ final Intent resultIntent;
+ if (saveSucceeded && contactLookupUri != null) {
+ final Uri lookupUri = ContactEditorUtils.maybeConvertToLegacyLookupUri(
+ mContext, contactLookupUri, mLookupUri);
+ resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(
+ mContext, lookupUri, ScreenType.EDITOR);
+ resultIntent.putExtra(QuickContactActivity.EXTRA_CONTACT_EDITED, true);
+ } else {
+ resultIntent = null;
}
+ // It is already saved, so prevent it from being saved again
+ mStatus = Status.CLOSING;
+ if (mListener != null) mListener.onSaveFinished(resultIntent);
+ break;
+ }
+ case SaveMode.EDITOR: {
+ // It is already saved, so prevent it from being saved again
+ mStatus = Status.CLOSING;
+ if (mListener != null) mListener.onSaveFinished(/* resultIntent= */ null);
+ break;
}
+ case SaveMode.JOIN:
+ if (saveSucceeded && contactLookupUri != null && joinContactId != null) {
+ joinAggregate(joinContactId);
+ }
+ break;
+ case SaveMode.RELOAD:
+ if (saveSucceeded && contactLookupUri != null) {
+ // If this was in INSERT, we are changing into an EDIT now.
+ // If it already was an EDIT, we are changing to the new Uri now
+ mState = new RawContactDeltaList();
+ load(Intent.ACTION_EDIT, contactLookupUri, null);
+ mStatus = Status.LOADING;
+ getLoaderManager().restartLoader(LOADER_CONTACT, null, mContactLoaderListener);
+ }
+ break;
+
+ case SaveMode.SPLIT:
+ mStatus = Status.CLOSING;
+ if (mListener != null) {
+ mListener.onContactSplit(contactLookupUri);
+ } else if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "No listener registered, can not call onSplitFinished");
+ }
+ break;
}
- return false;
}
/**
- * Custom photo handler for the editor. The inner listener that this creates also has a
- * reference to the editor and acts as an {@link EditorListener}, and uses that editor to hold
- * state information in several of the listener methods.
+ * Shows a list of aggregates that can be joined into the currently viewed aggregate.
+ *
+ * @param contactLookupUri the fresh URI for the currently edited contact (after saving it)
*/
- private final class PhotoHandler extends PhotoSelectionHandler {
+ private void showJoinAggregateActivity(Uri contactLookupUri) {
+ if (contactLookupUri == null || !isAdded()) {
+ return;
+ }
- final long mRawContactId;
- private final BaseRawContactEditorView mEditor;
- private final PhotoActionListener mPhotoEditorListener;
+ mContactIdForJoin = ContentUris.parseId(contactLookupUri);
+ final Intent intent = new Intent(mContext, ContactSelectionActivity.class);
+ intent.setAction(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, mContactIdForJoin);
+ startActivityForResult(intent, REQUEST_CODE_JOIN);
+ }
- public PhotoHandler(Context context, BaseRawContactEditorView editor, int photoMode,
- RawContactDeltaList state) {
- super(context, editor.getPhotoEditor().getChangeAnchorView(), photoMode, false, state);
- mEditor = editor;
- mRawContactId = editor.getRawContactId();
- mPhotoEditorListener = new PhotoEditorListener();
- }
+ //
+ // Aggregation PopupWindow
+ //
- @Override
- public PhotoActionListener getListener() {
- return mPhotoEditorListener;
+ /**
+ * Triggers an asynchronous search for aggregation suggestions.
+ */
+ protected void acquireAggregationSuggestions(Context context,
+ long rawContactId, ValuesDelta valuesDelta) {
+ mAggregationSuggestionsRawContactId = rawContactId;
+
+ if (mAggregationSuggestionEngine == null) {
+ mAggregationSuggestionEngine = new AggregationSuggestionEngine(context);
+ mAggregationSuggestionEngine.setListener(this);
+ mAggregationSuggestionEngine.start();
}
- @Override
- public void startPhotoActivity(Intent intent, int requestCode, Uri photoUri) {
- mRawContactIdRequestingPhoto = mEditor.getRawContactId();
- mCurrentPhotoHandler = this;
- mStatus = Status.SUB_ACTIVITY;
- mCurrentPhotoUri = photoUri;
- ContactEditorFragment.this.startActivityForResult(intent, requestCode);
+ mAggregationSuggestionEngine.setContactId(getContactId());
+ mAggregationSuggestionEngine.setAccountFilter(
+ getContent().getCurrentRawContactDelta().getAccountWithDataSet());
+
+ mAggregationSuggestionEngine.onNameChange(valuesDelta);
+ }
+
+ /**
+ * Returns the contact ID for the currently edited contact or 0 if the contact is new.
+ */
+ private long getContactId() {
+ for (RawContactDelta rawContact : mState) {
+ Long contactId = rawContact.getValues().getAsLong(RawContacts.CONTACT_ID);
+ if (contactId != null) {
+ return contactId;
+ }
}
+ return 0;
+ }
- private final class PhotoEditorListener extends PhotoSelectionHandler.PhotoActionListener
- implements EditorListener {
+ @Override
+ public void onAggregationSuggestionChange() {
+ final Activity activity = getActivity();
+ if ((activity != null && activity.isFinishing())
+ || !isVisible() || mState.isEmpty() || mStatus != Status.EDITING) {
+ return;
+ }
- @Override
- public void onRequest(int request) {
- if (!hasValidState()) return;
+ UiClosables.closeQuietly(mAggregationSuggestionPopup);
- if (request == EditorListener.REQUEST_PICK_PHOTO) {
- onClick(mEditor.getPhotoEditor());
- }
- if (request == EditorListener.REQUEST_PICK_PRIMARY_PHOTO) {
- useAsPrimaryChosen();
- }
- }
+ if (mAggregationSuggestionEngine.getSuggestedContactCount() == 0) {
+ return;
+ }
+ final View anchorView = getAggregationAnchorView();
+ if (anchorView == null) {
+ return; // Raw contact deleted?
+ }
+ mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
+ mAggregationSuggestionPopup.setAnchorView(anchorView);
+ mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
+ mAggregationSuggestionPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+ mAggregationSuggestionPopup.setAdapter(
+ new AggregationSuggestionAdapter(
+ getActivity(),
+ /* listener =*/ this,
+ mAggregationSuggestionEngine.getSuggestions()));
+ mAggregationSuggestionPopup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
- public void onDeleteRequested(Editor removedEditor) {
- // The picture cannot be deleted, it can only be removed, which is handled by
- // onRemovePictureChosen()
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ final AggregationSuggestionView suggestionView = (AggregationSuggestionView) view;
+ suggestionView.handleItemClickEvent();
+ UiClosables.closeQuietly(mAggregationSuggestionPopup);
+ mAggregationSuggestionPopup = null;
}
+ });
+ mAggregationSuggestionPopup.show();
+ }
- /**
- * User has chosen to set the selected photo as the (super) primary photo
- */
- public void useAsPrimaryChosen() {
- // Set the IsSuperPrimary for each editor
- int count = mContent.getChildCount();
- for (int i = 0; i < count; i++) {
- final View childView = mContent.getChildAt(i);
- if (childView instanceof BaseRawContactEditorView) {
- final BaseRawContactEditorView editor =
- (BaseRawContactEditorView) childView;
- final PhotoEditorView photoEditor = editor.getPhotoEditor();
- photoEditor.setSuperPrimary(editor == mEditor);
- }
- }
- bindEditors();
- }
+ /**
+ * Returns the editor view that should be used as the anchor for aggregation suggestions.
+ */
+ protected View getAggregationAnchorView() {
+ return getContent().getAggregationAnchorView();
+ }
- /**
- * User has chosen to remove a picture
- */
- @Override
- public void onRemovePictureChosen() {
- mEditor.setPhotoEntry(null);
+ /**
+ * Joins the suggested contact (specified by the id's of constituent raw
+ * contacts), save all changes, and stay in the editor.
+ */
+ public void doJoinSuggestedContact(long[] rawContactIds) {
+ if (!hasValidState() || mStatus != Status.EDITING) {
+ return;
+ }
- // Prevent bitmap from being restored if rotate the device.
- // (only if we first chose a new photo before removing it)
- mUpdatedPhotos.remove(String.valueOf(mRawContactId));
- bindEditors();
- }
+ mState.setJoinWithRawContacts(rawContactIds);
+ save(SaveMode.RELOAD);
+ }
- @Override
- public void onPhotoSelected(Uri uri) throws FileNotFoundException {
- final Bitmap bitmap = ContactPhotoUtils.getBitmapFromUri(mContext, uri);
- setPhoto(mRawContactId, bitmap, uri);
- mCurrentPhotoHandler = null;
- bindEditors();
- }
+ @Override
+ public void onEditAction(Uri contactLookupUri, long rawContactId) {
+ SuggestionEditConfirmationDialogFragment.show(this, contactLookupUri, rawContactId);
+ }
- @Override
- public Uri getCurrentPhotoUri() {
- return mCurrentPhotoUri;
- }
+ /**
+ * Abandons the currently edited contact and switches to editing the selected raw contact,
+ * transferring all the data there
+ */
+ public void doEditSuggestedContact(Uri contactUri, long rawContactId) {
+ if (mListener != null) {
+ // make sure we don't save this contact when closing down
+ mStatus = Status.CLOSING;
+ mListener.onEditOtherRawContactRequested(contactUri, rawContactId,
+ getContent().getCurrentRawContactDelta().getContentValues());
+ }
+ }
- @Override
- public void onPhotoSelectionDismissed() {
- // Nothing to do.
- }
+ /**
+ * Sets group metadata on all bound editors.
+ */
+ protected void setGroupMetaData() {
+ if (mGroupMetaData != null) {
+ getContent().setGroupMetaData(mGroupMetaData);
+ }
+ }
+
+ /**
+ * Persist the accumulated editor deltas.
+ *
+ * @param joinContactId the raw contact ID to join the contact being saved to after the save,
+ * may be null.
+ */
+ protected boolean doSaveAction(int saveMode, Long joinContactId) {
+ final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
+ SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
+ ((Activity) mContext).getClass(),
+ ContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos,
+ JOIN_CONTACT_ID_EXTRA_KEY, joinContactId);
+ return startSaveService(mContext, intent, saveMode);
+ }
+
+ private boolean startSaveService(Context context, Intent intent, int saveMode) {
+ final boolean result = ContactSaveService.startService(
+ context, intent, saveMode);
+ if (!result) {
+ onCancelEditConfirmed();
}
+ return result;
+ }
+
+ //
+ // Join Activity
+ //
+
+ /**
+ * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
+ */
+ protected void joinAggregate(final long contactId) {
+ final Intent intent = ContactSaveService.createJoinContactsIntent(
+ mContext, mContactIdForJoin, contactId, ContactEditorActivity.class,
+ ContactEditorActivity.ACTION_JOIN_COMPLETED);
+ mContext.startService(intent);
+ }
+
+ public void removePhoto() {
+ getContent().removePhoto();
+ mUpdatedPhotos.remove(String.valueOf(mPhotoRawContactId));
+ }
+
+ public void updatePhoto(Uri uri) throws FileNotFoundException {
+ final Bitmap bitmap = ContactPhotoUtils.getBitmapFromUri(getActivity(), uri);
+ if (bitmap == null || bitmap.getHeight() <= 0 || bitmap.getWidth() <= 0) {
+ Toast.makeText(mContext, R.string.contactPhotoSavedErrorToast,
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+ mUpdatedPhotos.putParcelable(String.valueOf(mPhotoRawContactId), uri);
+ getContent().updatePhoto(uri);
+ }
+
+ public void setPrimaryPhoto() {
+ getContent().setPrimaryPhoto();
+ }
+
+ @Override
+ public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta) {
+ final Activity activity = getActivity();
+ if (activity == null || activity.isFinishing()) {
+ return;
+ }
+ acquireAggregationSuggestions(activity, rawContactId, valuesDelta);
+ }
+
+ @Override
+ public void onRebindEditorsForNewContact(RawContactDelta oldState,
+ AccountWithDataSet oldAccount, AccountWithDataSet newAccount) {
+ mNewContactAccountChanged = true;
+ rebindEditorsForNewContact(oldState, oldAccount, newAccount);
+ }
+
+ @Override
+ public void onBindEditorsFailed() {
+ final Activity activity = getActivity();
+ if (activity != null && !activity.isFinishing()) {
+ Toast.makeText(activity, R.string.editor_failed_to_load,
+ Toast.LENGTH_SHORT).show();
+ activity.setResult(Activity.RESULT_CANCELED);
+ activity.finish();
+ }
+ }
+
+ @Override
+ public void onEditorsBound() {
+ final Activity activity = getActivity();
+ if (activity == null || activity.isFinishing()) {
+ return;
+ }
+ getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupsLoaderListener);
+ }
+
+ @Override
+ public void onPhotoEditorViewClicked() {
+ // For contacts composed of a single writable raw contact, or raw contacts have no more
+ // than 1 photo, clicking the photo view simply opens the source photo dialog
+ getEditorActivity().changePhoto(getPhotoMode());
+ }
+
+ private int getPhotoMode() {
+ return getContent().isWritablePhotoSet() ? PhotoActionPopup.Modes.WRITE_ABLE_PHOTO
+ : PhotoActionPopup.Modes.NO_PHOTO;
+ }
+
+ private ContactEditorActivity getEditorActivity() {
+ return (ContactEditorActivity) getActivity();
+ }
+
+ private RawContactEditorView getContent() {
+ return (RawContactEditorView) mContent;
}
}
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index 3aae92380..517c2c70b 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -19,269 +19,130 @@ package com.android.contacts.editor;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
+import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
import android.text.TextUtils;
-import android.util.Log;
-import com.android.contacts.common.R;
-import com.android.contacts.common.testing.NeededForTesting;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
-import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
/**
* Utility methods for the "account changed" notification in the new contact creation flow.
*/
-@NeededForTesting
public class ContactEditorUtils {
private static final String TAG = "ContactEditorUtils";
- private static final String KEY_KNOWN_ACCOUNTS = "ContactEditorUtils_known_accounts";
-
- private static final List<AccountWithDataSet> EMPTY_ACCOUNTS = ImmutableList.of();
-
- private static ContactEditorUtils sInstance;
-
- private final Context mContext;
- private final SharedPreferences mPrefs;
- private final AccountTypeManager mAccountTypes;
- private final String mDefaultAccountKey;
- // Key to tell the first time launch.
- private final String mAnythingSavedKey;
+ private final ContactsPreferences mContactsPrefs;
private ContactEditorUtils(Context context) {
- this(context, AccountTypeManager.getInstance(context));
+ mContactsPrefs = new ContactsPreferences(context);
}
- @VisibleForTesting
- ContactEditorUtils(Context context, AccountTypeManager accountTypes) {
- mContext = context.getApplicationContext();
- mPrefs = mContext.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
- mAccountTypes = accountTypes;
- mDefaultAccountKey = mContext.getResources().getString(
- R.string.contact_editor_default_account_key);
- mAnythingSavedKey = mContext.getResources().getString(
- R.string.contact_editor_anything_saved_key);
+ public static ContactEditorUtils create(Context context) {
+ return new ContactEditorUtils(context.getApplicationContext());
}
- public static synchronized ContactEditorUtils getInstance(Context context) {
- if (sInstance == null) {
- sInstance = new ContactEditorUtils(context.getApplicationContext());
+ /**
+ * Returns a legacy version of the given contactLookupUri if a legacy Uri was originally
+ * passed to the contact editor.
+ *
+ * @param contactLookupUri The Uri to possibly convert to legacy format.
+ * @param requestLookupUri The lookup Uri originally passed to the contact editor
+ * (via Intent data), may be null.
+ */
+ static Uri maybeConvertToLegacyLookupUri(Context context, Uri contactLookupUri,
+ Uri requestLookupUri) {
+ final String legacyAuthority = "contacts";
+ final String requestAuthority = requestLookupUri == null
+ ? null : requestLookupUri.getAuthority();
+ if (legacyAuthority.equals(requestAuthority)) {
+ // Build a legacy Uri if that is what was requested by caller
+ final long contactId = ContentUris.parseId(ContactsContract.Contacts.lookupContact(
+ context.getContentResolver(), contactLookupUri));
+ final Uri legacyContentUri = Uri.parse("content://contacts/people");
+ return ContentUris.withAppendedId(legacyContentUri, contactId);
}
- return sInstance;
+ // Otherwise pass back a lookup-style Uri
+ return contactLookupUri;
}
- @NeededForTesting
void cleanupForTest() {
- mPrefs.edit().remove(mDefaultAccountKey).remove(KEY_KNOWN_ACCOUNTS)
- .remove(mAnythingSavedKey).apply();
+ mContactsPrefs.clearDefaultAccount();
}
- @NeededForTesting
void removeDefaultAccountForTest() {
- mPrefs.edit().remove(mDefaultAccountKey).apply();
- }
-
- /**
- * Sets the {@link #KEY_KNOWN_ACCOUNTS} and {@link #mDefaultAccountKey} preference values to
- * empty strings to reset the state of the preferences file.
- */
- private void resetPreferenceValues() {
- mPrefs.edit().putString(KEY_KNOWN_ACCOUNTS, "").putString(mDefaultAccountKey, "").apply();
- }
-
- private List<AccountWithDataSet> getWritableAccounts() {
- return mAccountTypes.getAccounts(true);
- }
-
- /**
- * @return true if it's the first launch and {@link #saveDefaultAndAllAccounts} has never
- * been called.
- */
- private boolean isFirstLaunch() {
- return !mPrefs.getBoolean(mAnythingSavedKey, false);
+ mContactsPrefs.clearDefaultAccount();
}
/**
- * Saves all writable accounts and the default account, which can later be obtained
- * with {@link #getDefaultAccount}.
+ * Saves the default account, which can later be obtained with {@link #getOnlyOrDefaultAccount}.
*
* This should be called when saving a newly created contact.
*
- * @param defaultAccount the account used to save a newly created contact. Or pass {@code null}
- * If the user selected "local only".
+ * @param defaultAccount the account used to save a newly created contact.
*/
- @NeededForTesting
- public void saveDefaultAndAllAccounts(AccountWithDataSet defaultAccount) {
- final SharedPreferences.Editor editor = mPrefs.edit()
- .putBoolean(mAnythingSavedKey, true);
-
- if (defaultAccount == null || defaultAccount.isLocalAccount()) {
- // If the default is "local only", there should be no writable accounts.
- // This should always be the case with our spec, but because we load the account list
- // asynchronously using a worker thread, it is possible that there are accounts at this
- // point. So if the default is null always clear the account list.
- editor.remove(KEY_KNOWN_ACCOUNTS);
- editor.remove(mDefaultAccountKey);
+ public void saveDefaultAccount(AccountWithDataSet defaultAccount) {
+ if (defaultAccount == null) {
+ mContactsPrefs.clearDefaultAccount();
} else {
- editor.putString(KEY_KNOWN_ACCOUNTS,
- AccountWithDataSet.stringifyList(getWritableAccounts()));
- editor.putString(mDefaultAccountKey, defaultAccount.stringify());
+ mContactsPrefs.setDefaultAccount(defaultAccount);
}
- editor.apply();
}
/**
- * @return the default account saved with {@link #saveDefaultAndAllAccounts}.
+ * @return the first account if there is only a single account or the default account saved
+ * with {@link #saveDefaultAccount}.
*
- * Note the {@code null} return value can mean either {@link #saveDefaultAndAllAccounts} has
- * never been called, or {@code null} was passed to {@link #saveDefaultAndAllAccounts} --
- * i.e. the user selected "local only".
+ * A null return value indicates that there is multiple accounts and a default hasn't been set
*
* Also note that the returned account may have been removed already.
*/
- public AccountWithDataSet getDefaultAccount() {
- final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
+ public AccountWithDataSet getOnlyOrDefaultAccount(
+ List<AccountWithDataSet> currentWritableAccounts) {
if (currentWritableAccounts.size() == 1) {
return currentWritableAccounts.get(0);
}
- final String saved = mPrefs.getString(mDefaultAccountKey, null);
- if (TextUtils.isEmpty(saved)) {
- return null;
- }
- try {
- return AccountWithDataSet.unstringify(saved);
- } catch (IllegalArgumentException exception) {
- Log.e(TAG, "Error with retrieving default account " + exception.toString());
- // unstringify()can throw an exception if the string is not in an expected format.
- // Hence, if the preferences file is corrupt, just reset the preference values
- resetPreferenceValues();
- return null;
- }
- }
-
- /**
- * @return true if an account still exists. {@code null} is considered "local only" here,
- * so it's valid too.
- */
- @VisibleForTesting
- boolean isValidAccount(AccountWithDataSet account) {
- if (account == null || account.isLocalAccount()) {
- return true; // It's "local only" account, which is valid.
- }
- return getWritableAccounts().contains(account);
+ return mContactsPrefs.getDefaultAccount();
}
- /**
- * @return saved known accounts, or an empty list if none has been saved yet.
- */
- @VisibleForTesting
- List<AccountWithDataSet> getSavedAccounts() {
- final String saved = mPrefs.getString(KEY_KNOWN_ACCOUNTS, null);
- if (TextUtils.isEmpty(saved)) {
- return EMPTY_ACCOUNTS;
- }
- try {
- return AccountWithDataSet.unstringifyList(saved);
- } catch (IllegalArgumentException exception) {
- Log.e(TAG, "Error with retrieving saved accounts " + exception.toString());
- // unstringifyList()can throw an exception if the string is not in an expected format.
- // Hence, if the preferences file is corrupt, just reset the preference values
- resetPreferenceValues();
- return EMPTY_ACCOUNTS;
- }
+ public boolean shouldShowAccountChangedNotification(List<AccountWithDataSet> writableAccounts) {
+ return mContactsPrefs.shouldShowAccountChangedNotification(writableAccounts);
}
/**
- * @return true if the contact editor should show the "accounts changed" notification, that is:
- * - If it's the first launch.
- * - Or, if the default account has been removed.
- * (And some extra sanity check)
- *
- * Note if this method returns {@code false}, the caller can safely assume that
- * {@link #getDefaultAccount} will return a valid account. (Either an account which still
- * exists, or {@code null} which should be interpreted as "local only".)
+ * Sets the only non-device account to be default if it is not already.
*/
- @NeededForTesting
- public boolean shouldShowAccountChangedNotification() {
- if (isFirstLaunch()) {
- return true;
- }
-
- final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
-
- final AccountWithDataSet defaultAccount = getDefaultAccount();
-
- // Does default account still exist?
- if (!isValidAccount(defaultAccount)) {
- return true;
- }
-
- // If there is an inconsistent state in the preferences file - default account is null
- // ("local" account) while there are multiple accounts, then show the notification dialog.
- // This shouldn't ever happen, but this should allow the user can get back into a normal
- // state after they respond to the notification.
- if ((defaultAccount == null || defaultAccount.isLocalAccount())
- && currentWritableAccounts.size() > 0) {
- Log.e(TAG, "Preferences file in an inconsistent state, request that the default account"
- + " and current writable accounts be saved again");
- return true;
- }
-
- // All good.
- return false;
- }
-
- @VisibleForTesting
- String[] getWritableAccountTypeStrings() {
- final Set<String> types = Sets.newHashSet();
- for (AccountType type : mAccountTypes.getAccountTypes(true)) {
- types.add(type.accountType);
+ public void maybeUpdateDefaultAccount(List<AccountWithDataSet> currentWritableAccounts) {
+ if (currentWritableAccounts.size() == 1) {
+ final AccountWithDataSet onlyAccount = currentWritableAccounts.get(0);
+ if (!onlyAccount.isNullAccount()
+ && !onlyAccount.equals(mContactsPrefs.getDefaultAccount())) {
+ mContactsPrefs.setDefaultAccount(onlyAccount);
+ }
}
- return types.toArray(new String[types.size()]);
}
/**
- * Create an {@link Intent} to start "add new account" setup wizard. Selectable account
- * types will be limited to ones that supports editing contacts.
+ * Parses a result from {@link AccountManager#newChooseAccountIntent(Account, List, String[],
+ * String, String, String[], Bundle)} and returns the created {@link Account}, or null if
+ * the user has canceled the wizard.
*
- * Use {@link Activity#startActivityForResult} or
- * {@link android.app.Fragment#startActivityForResult} to start the wizard, and
- * {@link Activity#onActivityResult} or {@link android.app.Fragment#onActivityResult} to
- * get the result.
- */
- public Intent createAddWritableAccountIntent() {
- return AccountManager.newChooseAccountIntent(
- null, // selectedAccount
- new ArrayList<Account>(), // allowableAccounts
- getWritableAccountTypeStrings(), // allowableAccountTypes
- false, // alwaysPromptForAccount
- null, // descriptionOverrideText
- null, // addAccountAuthTokenType
- null, // addAccountRequiredFeatures
- null // addAccountOptions
- );
- }
-
- /**
- * Parses a result from {@link #createAddWritableAccountIntent} and returns the created
- * {@link Account}, or null if the user has canceled the wizard. Pass the {@code resultCode}
- * and {@code data} parameters passed to {@link Activity#onActivityResult} or
- * {@link android.app.Fragment#onActivityResult}.
+ * <p>Pass the {@code resultCode} and {@code data} parameters passed to
+ * {@link Activity#onActivityResult} or {@link android.app.Fragment#onActivityResult}.
+ * </p>
*
+ * <p>
* Note although the return type is {@link AccountWithDataSet}, return values from this method
* will never have {@link AccountWithDataSet#dataSet} set, as there's no way to create an
* extension package account from setup wizard.
+ * </p>
*/
public AccountWithDataSet getCreatedAccount(int resultCode, Intent resultData) {
// Javadoc doesn't say anything about resultCode but that the data intent will be non null
diff --git a/src/com/android/contacts/editor/Editor.java b/src/com/android/contacts/editor/Editor.java
index d5c85892b..711fbc057 100644
--- a/src/com/android/contacts/editor/Editor.java
+++ b/src/com/android/contacts/editor/Editor.java
@@ -18,9 +18,9 @@ package com.android.contacts.editor;
import android.provider.ContactsContract.Data;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataKind;
/**
* Generic definition of something that edits a {@link Data} row through an
diff --git a/src/com/android/contacts/editor/EditorAnimator.java b/src/com/android/contacts/editor/EditorAnimator.java
index 2e17e2323..598b6b0f5 100644
--- a/src/com/android/contacts/editor/EditorAnimator.java
+++ b/src/com/android/contacts/editor/EditorAnimator.java
@@ -28,6 +28,7 @@ import android.widget.LinearLayout;
import android.widget.ScrollView;
import com.android.contacts.util.SchedulingUtils;
+
import com.google.common.collect.Lists;
import java.util.List;
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
index d87a7265c..91648d008 100644
--- a/src/com/android/contacts/editor/EditorIntents.java
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -15,22 +15,19 @@
*/
package com.android.contacts.editor;
-import com.android.contacts.activities.CompactContactEditorActivity;
-import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-
-import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
-import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
+import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.activities.ContactEditorSpringBoardActivity;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
+
import java.util.ArrayList;
/**
@@ -42,120 +39,89 @@ public class EditorIntents {
}
/**
- * Returns an Intent to start the {@link CompactContactEditorActivity} for an
+ * Returns an Intent to start the {@link ContactEditorSpringBoardActivity} for an
* existing contact.
*/
- public static Intent createCompactEditContactIntent(Uri contactLookupUri,
+ public static Intent createEditContactIntent(Context context, Uri uri,
MaterialPalette materialPalette, long photoId) {
- final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
+ final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
+ ContactEditorSpringBoardActivity.class);
putMaterialPalette(intent, materialPalette);
putPhotoId(intent, photoId);
return intent;
}
- /**
- * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact.
- */
- public static Intent createCompactInsertContactIntent() {
- return createCompactInsertContactIntent(/* rawContactDeltaList =*/ null,
- /* displayName =*/ null, /* phoneticName =*/ null,
- /* isNewLocalProfile =*/ false);
- }
-
- /**
- * Returns an Intent to start the {@link CompactContactEditorActivity} for a new contact with
- * the field values specified by rawContactDeltaList pre-populate in the form.
- */
- public static Intent createCompactInsertContactIntent(RawContactDeltaList rawContactDeltaList,
- String displayName, String phoneticName, /* Bundle updatedPhotos, */
- boolean isNewLocalProfile) {
- final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
- if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
- putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
- }
- return intent;
- }
-
- /**
- * Returns an Intent to edit a different contact (in the fully expaned editor) with whatever
- * values were already entered on the currently displayed contact editor.
- */
- public static Intent createEditOtherContactIntent(Uri contactLookupUri,
- ArrayList<ContentValues> contentValues) {
- final Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
- intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
+ public static Intent createViewLinkedContactsIntent(Context context, Uri uri,
+ MaterialPalette materialPalette) {
+ final Intent intent = createEditContactIntent(context, uri, materialPalette,
+ /* photoId */ -1);
+ intent.putExtra(ContactEditorSpringBoardActivity.EXTRA_SHOW_READ_ONLY, true);
- // Pass on all the data that has been entered so far
- if (contentValues != null && contentValues.size() != 0) {
- intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
- }
return intent;
}
/**
- * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for an
- * existing contact.
+ * Returns an Intent to start the {@link ContactEditorActivity} for the given raw contact.
*/
- public static Intent createEditContactIntent(Uri contactLookupUri,
- MaterialPalette materialPalette, long photoId) {
- final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri);
- addContactIntentFlags(intent);
+ public static Intent createEditContactIntentForRawContact(Context context,
+ Uri uri, long rawContactId, MaterialPalette materialPalette) {
+ final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
+ ContactEditorActivity.class);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
+ rawContactId);
putMaterialPalette(intent, materialPalette);
- putPhotoId(intent, photoId);
return intent;
}
/**
- * Returns an Intent to start the fully expanded {@link ContactEditorActivity} for a
- * new contact.
+ * Returns an Intent to start the {@link ContactEditorActivity} for a new contact with
+ * the field values specified by rawContactDeltaList pre-populate in the form.
*/
- public static Intent createInsertContactIntent(RawContactDeltaList rawContactDeltaList,
- String displayName, String phoneticName, boolean isNewLocalProfile) {
- final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
- Contacts.CONTENT_URI);
- intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
- addContactIntentFlags(intent);
+ public static Intent createInsertContactIntent(Context context,
+ RawContactDeltaList rawContactDeltaList, String displayName, String phoneticName,
+ /* Bundle updatedPhotos, */ boolean isNewLocalProfile) {
+ final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI,
+ context, ContactEditorActivity.class);
+ intent.putExtra(
+ ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
return intent;
}
/**
- * Returns an Intent to start the full editor for the given raw contact. The full editor will
- * only display this one raw contact.
+ * Returns an Intent to edit a different raw contact in the editor with whatever
+ * values were already entered on the current editor.
*/
- public static Intent createEditContactIntentForRawContact(Context context,
- Uri rawContactUri, long rawContactId, boolean isReadOnly) {
- final Intent intent = new Intent(context, ContactEditorActivity.class);
- intent.setAction(ContactEditorBaseActivity.ACTION_EDIT);
- intent.setData(rawContactUri);
+ public static Intent createEditOtherRawContactIntent(Context context, Uri uri,
+ long rawContactId, ArrayList<ContentValues> contentValues) {
+ final Intent intent = new Intent(Intent.ACTION_EDIT, uri, context,
+ ContactEditorActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_ADD_TO_DEFAULT_DIRECTORY, "");
intent.putExtra(ContactEditorFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE,
rawContactId);
- intent.putExtra(
- ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
- isReadOnly);
+ // Pass on all the data that has been entered so far
+ if (contentValues != null && contentValues.size() != 0) {
+ intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
+ }
return intent;
}
- private static void addContactIntentFlags(Intent intent) {
- intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- }
-
private static void putMaterialPalette(Intent intent, MaterialPalette materialPalette) {
if (materialPalette != null) {
- intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
+ intent.putExtra(
+ ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_PRIMARY_COLOR,
materialPalette.mPrimaryColor);
- intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
+ intent.putExtra(
+ ContactEditorFragment.INTENT_EXTRA_MATERIAL_PALETTE_SECONDARY_COLOR,
materialPalette.mSecondaryColor);
}
}
private static void putPhotoId(Intent intent, long photoId) {
if (photoId >= 0) {
- intent.putExtra(ContactEditorBaseFragment.INTENT_EXTRA_PHOTO_ID, photoId);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_PHOTO_ID, photoId);
}
}
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index cedc443c4..9aa5c8e16 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -18,13 +18,17 @@ package com.android.contacts.editor;
import static android.provider.ContactsContract.CommonDataKinds.GroupMembership;
import static android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import static com.android.contacts.common.util.MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors;
+
+import static com.android.contacts.util.MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Build;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.Im;
@@ -36,25 +40,21 @@ import android.provider.ContactsContract.CommonDataKinds.Relation;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Build;
+import android.support.v4.content.res.ResourcesCompat;
import android.text.TextUtils;
-import android.util.Pair;
import android.widget.ImageView;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageProvider;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageProvider;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.testing.NeededForTesting;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.dataitem.DataKind;
import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
import com.android.contacts.widget.QuickContactImageView;
import com.google.common.collect.Maps;
@@ -65,7 +65,6 @@ import java.util.HashMap;
/**
* Utility methods for creating contact editor.
*/
-@NeededForTesting
public class EditorUiUtils {
// Maps DataKind.mimeType to editor view layouts.
@@ -89,9 +88,6 @@ public class EditorUiUtils {
// Relation.CONTENT_ITEM_TYPE
//
// Un-supported mime types need to mapped with -1.
-
- mimetypeLayoutMap.put(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
- R.layout.phonetic_name_editor_view);
mimetypeLayoutMap.put(StructuredName.CONTENT_ITEM_TYPE,
R.layout.structured_name_editor_view);
mimetypeLayoutMap.put(GroupMembership.CONTENT_ITEM_TYPE, -1);
@@ -113,57 +109,34 @@ public class EditorUiUtils {
return id;
}
- /**
- * Returns the account name and account type labels to display for local accounts.
- */
- @NeededForTesting
- public static Pair<String,String> getLocalAccountInfo(Context context,
- String accountName, AccountType accountType) {
- if (TextUtils.isEmpty(accountName)) {
- return new Pair<>(
- /* accountName =*/ null,
- context.getString(R.string.local_profile_title));
- }
- return new Pair<>(
- accountName,
- context.getString(R.string.external_profile_title,
- accountType.getDisplayLabel(context)));
- }
- /**
- * Returns the account name and account type labels to display for the given account type.
- */
- @NeededForTesting
- public static Pair<String,String> getAccountInfo(Context context, String accountName,
- AccountType accountType) {
- CharSequence accountTypeDisplayLabel = accountType.getDisplayLabel(context);
- if (TextUtils.isEmpty(accountTypeDisplayLabel)) {
- accountTypeDisplayLabel = context.getString(R.string.account_phone);
+ public static String getAccountHeaderLabelForMyProfile(Context context,
+ AccountInfo accountInfo) {
+ if (accountInfo.isDeviceAccount()) {
+ return context.getString(R.string.local_profile_title);
+ } else {
+ return context.getString(R.string.external_profile_title,
+ accountInfo.getTypeLabel());
}
+ }
- if (TextUtils.isEmpty(accountName)) {
- return new Pair<>(
- /* accountName =*/ null,
- context.getString(R.string.account_type_format, accountTypeDisplayLabel));
- }
-
- final String accountNameDisplayLabel =
- context.getString(R.string.from_account_format, accountName);
-
- if (GoogleAccountType.ACCOUNT_TYPE.equals(accountType.accountType)
- && accountType.dataSet == null) {
- return new Pair<>(
- accountNameDisplayLabel,
- context.getString(R.string.google_account_type_format, accountTypeDisplayLabel));
+ public static String getAccountTypeHeaderLabel(Context context, AccountDisplayInfo
+ displayableAccount) {
+ if (displayableAccount.isDeviceAccount()) {
+ // Do nothing. Type label should be "Device"
+ return displayableAccount.getTypeLabel().toString();
+ } else if (displayableAccount.isGoogleAccount()) {
+ return context.getString(R.string.google_account_type_format,
+ displayableAccount.getTypeLabel());
+ } else {
+ return context.getString(R.string.account_type_format,
+ displayableAccount.getTypeLabel());
}
- return new Pair<>(
- accountNameDisplayLabel,
- context.getString(R.string.account_type_format, accountTypeDisplayLabel));
}
/**
* Returns a content description String for the container of the account information
- * returned by {@link #getAccountInfo}.
+ * returned by {@link #getAccountTypeHeaderLabel(Context, AccountDisplayInfo)}.
*/
public static String getAccountInfoContentDescription(CharSequence accountName,
CharSequence accountType) {
@@ -183,32 +156,44 @@ public class EditorUiUtils {
public static Drawable getMimeTypeDrawable(Context context, String mimeType) {
switch (mimeType) {
case StructuredName.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_person_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_person_vd_theme_24, null);
case StructuredPostal.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_place_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_place_vd_theme_24, null);
case SipAddress.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_dialer_sip_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_dialer_sip_vd_theme_24, null);
case Phone.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_phone_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_phone_vd_theme_24, null);
case Im.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_message_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_message_vd_theme_24, null);
case Event.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_event_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_event_vd_theme_24, null);
case Email.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_email_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_email_vd_theme_24, null);
case Website.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_public_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_public_vd_theme_24, null);
case Photo.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_camera_alt_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_camera_alt_vd_theme_24, null);
case GroupMembership.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_people_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_label_vd_theme_24, null);
case Organization.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_business_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_business_vd_theme_24, null);
case Note.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(R.drawable.ic_insert_comment_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_insert_comment_vd_theme_24, null);
case Relation.CONTENT_ITEM_TYPE:
- return context.getResources().getDrawable(
- R.drawable.ic_circles_extended_black_24dp);
+ return ResourcesCompat.getDrawable(context.getResources(),
+ R.drawable.quantum_ic_circles_ext_vd_theme_24, null);
default:
return null;
}
@@ -217,7 +202,6 @@ public class EditorUiUtils {
/**
* Returns a ringtone string based on the ringtone URI and version #.
*/
- @NeededForTesting
public static String getRingtoneStringFromUri(Uri pickedUri, int currentVersion) {
if (isNewerThanM(currentVersion)) {
if (pickedUri == null) return ""; // silent ringtone
@@ -230,7 +214,6 @@ public class EditorUiUtils {
/**
* Returns a ringtone URI, based on the string and version #.
*/
- @NeededForTesting
public static Uri getRingtoneUriFromString(String str, int currentVersion) {
if (str != null) {
if (isNewerThanM(currentVersion) && TextUtils.isEmpty(str)) return null;
@@ -300,4 +283,5 @@ public class EditorUiUtils {
bitmap, size, size, /* filter =*/ false);
return ContactPhotoUtils.compressBitmap(bitmapScaled);
}
+
}
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 059208e45..5d47d9520 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -20,7 +20,6 @@ import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
-import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -31,13 +30,13 @@ import com.android.contacts.R;
import com.android.contacts.datepicker.DatePicker;
import com.android.contacts.datepicker.DatePickerDialog;
import com.android.contacts.datepicker.DatePickerDialog.OnDateSetListener;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.account.AccountType.EventEditType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contacts.common.util.DateUtils;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EventEditType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.DateUtils;
import java.text.ParsePosition;
import java.util.Calendar;
@@ -145,11 +144,10 @@ public class EventFieldEditorView extends LabeledEditorView {
public Dialog createDialog(Bundle bundle) {
if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
int dialogId = bundle.getInt(DIALOG_ID_KEY);
- switch (dialogId) {
- case R.id.dialog_event_date_picker:
- return createDatePickerDialog();
- default:
- return super.createDialog(bundle);
+ if (dialogId == R.id.dialog_event_date_picker) {
+ return createDatePickerDialog();
+ } else {
+ return super.createDialog(bundle);
}
}
@@ -173,7 +171,8 @@ public class EventFieldEditorView extends LabeledEditorView {
if (!isYearOptional && !TextUtils.isEmpty(oldValue)) {
final ParsePosition position = new ParsePosition(0);
- final Date date2 = kind.dateFormatWithoutYear.parse(oldValue, position);
+ final Date date2 = kind.dateFormatWithoutYear == null
+ ? null : kind.dateFormatWithoutYear.parse(oldValue, position);
// Don't understand the date, lets not change it
if (date2 == null) return;
@@ -183,7 +182,11 @@ public class EventFieldEditorView extends LabeledEditorView {
calendar.set(defaultYear, calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), CommonDateUtils.DEFAULT_HOUR, 0, 0);
- onFieldChanged(column, kind.dateFormatWithYear.format(calendar.getTime()));
+ final String formattedDate = kind.dateFormatWithYear == null
+ ? null : kind.dateFormatWithYear.format(calendar.getTime());
+ if (formattedDate == null) return;
+
+ onFieldChanged(column, formattedDate);
rebuildDateView();
}
}
@@ -241,10 +244,14 @@ public class EventFieldEditorView extends LabeledEditorView {
final String resultString;
if (year == 0) {
- resultString = kind.dateFormatWithoutYear.format(outCalendar.getTime());
+ resultString = kind.dateFormatWithoutYear == null
+ ? null : kind.dateFormatWithoutYear.format(outCalendar.getTime());
} else {
- resultString = kind.dateFormatWithYear.format(outCalendar.getTime());
+ resultString = kind.dateFormatWithYear == null
+ ? null : kind.dateFormatWithYear.format(outCalendar.getTime());
}
+ if (resultString == null) return;
+
onFieldChanged(column, resultString);
rebuildDateView();
}
diff --git a/src/com/android/contacts/editor/GroupMembershipView.java b/src/com/android/contacts/editor/GroupMembershipView.java
index cb66b732b..f545e7b6c 100644
--- a/src/com/android/contacts/editor/GroupMembershipView.java
+++ b/src/com/android/contacts/editor/GroupMembershipView.java
@@ -17,6 +17,7 @@
package com.android.contacts.editor;
import android.app.Activity;
+import android.app.FragmentManager;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
@@ -38,13 +39,14 @@ import android.widget.TextView;
import com.android.contacts.GroupMetaDataLoader;
import com.android.contacts.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.interactions.GroupCreationDialogFragment;
-import com.android.contacts.interactions.GroupCreationDialogFragment.OnGroupCreatedListener;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.group.GroupNameEditDialogFragment;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.DataKind;
import com.android.contacts.util.UiClosables;
+
import com.google.common.base.Objects;
import java.util.ArrayList;
@@ -56,6 +58,8 @@ import java.util.ArrayList;
public class GroupMembershipView extends LinearLayout
implements OnClickListener, OnItemClickListener {
+ public static final String TAG_CREATE_GROUP_FRAGMENT = "createGroupDialog";
+
private static final int CREATE_NEW_GROUP_GROUP_ID = 133;
public static final class GroupSelectionItem {
@@ -94,6 +98,9 @@ public class GroupMembershipView extends LinearLayout
*/
private class GroupMembershipAdapter<T> extends ArrayAdapter<T> {
+ // The position of the group with the largest group ID
+ private int mNewestGroupPosition;
+
public GroupMembershipAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@@ -130,6 +137,15 @@ public class GroupMembershipView extends LinearLayout
return checkedTextView;
}
+
+ public int getNewestGroupPosition() {
+ return mNewestGroupPosition;
+ }
+
+ public void setNewestGroupPosition(int newestGroupPosition) {
+ mNewestGroupPosition = newestGroupPosition;
+ }
+
}
private RawContactDelta mState;
@@ -147,6 +163,18 @@ public class GroupMembershipView extends LinearLayout
private boolean mDefaultGroupVisibilityKnown;
private boolean mDefaultGroupVisible;
private boolean mCreatedNewGroup;
+ private GroupNameEditDialogFragment mGroupNameEditDialogFragment;
+ private GroupNameEditDialogFragment.Listener mListener =
+ new GroupNameEditDialogFragment.Listener() {
+ @Override
+ public void onGroupNameEditCancelled() {
+ }
+
+ @Override
+ public void onGroupNameEditCompleted(String name) {
+ mCreatedNewGroup = true;
+ }
+ };
private String mNoGroupString;
private int mPrimaryTextColor;
@@ -167,6 +195,17 @@ public class GroupMembershipView extends LinearLayout
mPrimaryTextColor = resources.getColor(R.color.primary_text_color);
mHintTextColor = resources.getColor(R.color.editor_disabled_text_color);
mNoGroupString = getContext().getString(R.string.group_edit_field_hint_text);
+ setFocusable(true);
+ setFocusableInTouchMode(true);
+ }
+
+ private void setGroupNameEditDialogFragment() {
+ final FragmentManager fragmentManager = ((Activity) getContext()).getFragmentManager();
+ mGroupNameEditDialogFragment = (GroupNameEditDialogFragment)
+ fragmentManager.findFragmentByTag(TAG_CREATE_GROUP_FRAGMENT);
+ if (mGroupNameEditDialogFragment != null) {
+ mGroupNameEditDialogFragment.setListener(mListener);
+ }
}
@Override
@@ -192,7 +231,7 @@ public class GroupMembershipView extends LinearLayout
onClick(this); // This causes the popup to open.
if (mPopup != null) {
// Ensure that the newly created group is checked.
- int position = mAdapter.getCount() - 2;
+ final int position = mAdapter.getNewestGroupPosition();
ListView listView = mPopup.getListView();
if (listView != null && !listView.isItemChecked(position)) {
// Newly created group is not checked, so check it.
@@ -224,6 +263,7 @@ public class GroupMembershipView extends LinearLayout
mDefaultGroupVisibilityKnown = false;
mCreatedNewGroup = false;
updateView();
+ setGroupNameEditDialogFragment();
}
private void updateView() {
@@ -304,9 +344,12 @@ public class GroupMembershipView extends LinearLayout
return;
}
+ requestFocus();
mAdapter = new GroupMembershipAdapter<GroupSelectionItem>(
getContext(), R.layout.group_membership_list_item);
+ long newestGroupId = -1;
+
mGroupMetaData.moveToPosition(-1);
while (mGroupMetaData.moveToNext()) {
String accountName = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_NAME);
@@ -317,6 +360,10 @@ public class GroupMembershipView extends LinearLayout
long groupId = mGroupMetaData.getLong(GroupMetaDataLoader.GROUP_ID);
if (groupId != mFavoritesGroupId
&& (groupId != mDefaultGroupId || mDefaultGroupVisible)) {
+ if (groupId > newestGroupId) {
+ newestGroupId = groupId;
+ mAdapter.setNewestGroupPosition(mAdapter.getCount());
+ }
String title = mGroupMetaData.getString(GroupMetaDataLoader.TITLE);
boolean checked = hasMembership(groupId);
mAdapter.add(new GroupSelectionItem(groupId, title, checked));
@@ -430,18 +477,12 @@ public class GroupMembershipView extends LinearLayout
private void createNewGroup() {
UiClosables.closeQuietly(mPopup);
mPopup = null;
-
- GroupCreationDialogFragment.show(
+ mGroupNameEditDialogFragment =
+ GroupNameEditDialogFragment.newInstanceForCreation(
+ new AccountWithDataSet(mAccountName, mAccountType, mDataSet), null);
+ mGroupNameEditDialogFragment.setListener(mListener);
+ mGroupNameEditDialogFragment.show(
((Activity) getContext()).getFragmentManager(),
- mAccountType,
- mAccountName,
- mDataSet,
- new OnGroupCreatedListener() {
- @Override
- public void onGroupCreated() {
- mCreatedNewGroup = true;
- }
- });
+ TAG_CREATE_GROUP_FRAGMENT);
}
-
}
diff --git a/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
index 55a066e34..d238c384c 100644
--- a/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/JoinContactConfirmationDialogFragment.java
@@ -48,7 +48,7 @@ public class JoinContactConfirmationDialogFragment extends DialogFragment {
/**
* @param joinContactId The raw contact ID of the contact to join to after confirmation.
*/
- public static void show(ContactEditorBaseFragment fragment, long joinContactId) {
+ public static void show(ContactEditorFragment fragment, long joinContactId) {
final Bundle args = new Bundle();
args.putLong(ARG_JOIN_CONTACT_ID, joinContactId);
diff --git a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
deleted file mode 100644
index 4d35332ed..000000000
--- a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
+++ /dev/null
@@ -1,61 +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.editor;
-
-import com.android.contacts.R;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.os.Bundle;
-
-public class JoinSuggestedContactDialogFragment extends DialogFragment {
-
- private static final String ARG_RAW_CONTACT_IDS = "rawContactIds";
-
- public static void show(ContactEditorBaseFragment fragment, long[] rawContactIds) {
- final Bundle args = new Bundle();
- args.putLongArray(ARG_RAW_CONTACT_IDS, rawContactIds);
-
- final JoinSuggestedContactDialogFragment dialog = new JoinSuggestedContactDialogFragment();
- dialog.setArguments(args);
- dialog.setTargetFragment(fragment, 0);
- dialog.show(fragment.getFragmentManager(), "join");
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(R.string.aggregation_suggestion_join_dialog_message)
- .setPositiveButton(android.R.string.yes,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- ContactEditorBaseFragment targetFragment =
- (ContactEditorBaseFragment) getTargetFragment();
- long rawContactIds[] =
- getArguments().getLongArray(ARG_RAW_CONTACT_IDS);
- targetFragment.doJoinSuggestedContact(rawContactIds);
- }
- }
- )
- .setNegativeButton(android.R.string.no, null)
- .create();
- }
-} \ No newline at end of file
diff --git a/src/com/android/contacts/editor/KindSectionData.java b/src/com/android/contacts/editor/KindSectionData.java
index 7e2899f15..8ebae0a33 100644
--- a/src/com/android/contacts/editor/KindSectionData.java
+++ b/src/com/android/contacts/editor/KindSectionData.java
@@ -16,14 +16,14 @@
package com.android.contacts.editor;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.dataitem.DataKind;
-
import android.text.TextUtils;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.dataitem.DataKind;
+
import java.util.ArrayList;
import java.util.List;
@@ -118,4 +118,8 @@ public final class KindSectionData {
public RawContactDelta getRawContactDelta() {
return mRawContactDelta;
}
+
+ public String getMimeType() {
+ return mDataKind.mimeType;
+ }
}
diff --git a/src/com/android/contacts/editor/KindSectionDataList.java b/src/com/android/contacts/editor/KindSectionDataList.java
deleted file mode 100644
index cb8280691..000000000
--- a/src/com/android/contacts/editor/KindSectionDataList.java
+++ /dev/null
@@ -1,205 +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.editor;
-
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.RawContactModifier;
-
-import android.util.Log;
-import android.util.Pair;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Container for multiple {@link KindSectionData} objects. Provides convenience methods for
- * interrogating the collection for a certain KindSectionData item (e.g. the first writable, or
- * "primary", one. Also enforces that only items with the same DataKind/mime-type are added.
- */
-public class KindSectionDataList extends ArrayList<KindSectionData> {
-
- private static final String TAG = CompactRawContactsEditorView.TAG;
-
- /**
- * Returns the mime type for all DataKinds in this List.
- */
- public String getMimeType() {
- if (isEmpty()) return null;
- return get(0).getDataKind().mimeType;
- }
-
- /**
- * Returns the DataKind for all entries in this List.
- */
- public DataKind getDataKind() {
- return isEmpty() ? null : get(0).getDataKind();
- }
-
- /**
- * Returns the primary KindSectionData and ValuesDelta that should be written for this List.
- */
- public Pair<KindSectionData,ValuesDelta> getEntryToWrite(long id,
- AccountWithDataSet primaryAccount, boolean isUserProfile) {
- final String mimeType = getMimeType();
- if (mimeType == null) return null;
-
- if (!isUserProfile) {
- if (id > 0) {
- // Look for a match for the ID that was passed in
- for (KindSectionData kindSectionData : this) {
- if (kindSectionData.getAccountType().areContactsWritable()) {
- final ValuesDelta valuesDelta = kindSectionData.getValuesDeltaById(id);
- if (valuesDelta != null) {
- vlog(mimeType + ": matched kind section data to write by ID");
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
- }
- }
-
- // Look for a super primary entry
- for (KindSectionData kindSectionData : this) {
- if (kindSectionData.getAccountType().areContactsWritable()) {
- final ValuesDelta valuesDelta = kindSectionData.getSuperPrimaryValuesDelta();
- if (valuesDelta != null) {
- vlog(mimeType + ": matched kind section data to write by super primary");
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
- }
-
- // Use the first writable contact that matches the primary account
- if (primaryAccount != null) {
- for (KindSectionData kindSectionData : this) {
- if (kindSectionData.getAccountType().areContactsWritable()) {
- if (matchesAccount(primaryAccount, kindSectionData.getRawContactDelta())
- && !kindSectionData.getValuesDeltas().isEmpty()) {
- vlog(mimeType + ": matched kind section data to write by primary " +
- "account");
- return new Pair<>(kindSectionData,
- kindSectionData.getValuesDeltas().get(0));
- }
- }
- }
- }
- }
-
- // Just return the first writable entry.
- for (KindSectionData kindSectionData : this) {
- if (kindSectionData.getAccountType().areContactsWritable()) {
- // Create an entry if necessary
- RawContactModifier.ensureKindExists(kindSectionData.getRawContactDelta(),
- kindSectionData.getAccountType(), mimeType);
-
- if (!kindSectionData.getValuesDeltas().isEmpty()) {
- vlog(mimeType + ": falling back to first kind section data to write");
- return new Pair<>(kindSectionData, kindSectionData.getValuesDeltas().get(0));
- }
- }
- }
-
- wlog(mimeType+ ": no writable kind section data found");
- return null;
- }
-
- /** Whether the given RawContactDelta belong to the given account. */
- private static boolean matchesAccount(AccountWithDataSet accountWithDataSet,
- RawContactDelta rawContactDelta) {
- return Objects.equals(accountWithDataSet.name, rawContactDelta.getAccountName())
- && Objects.equals(accountWithDataSet.type, rawContactDelta.getAccountType())
- && Objects.equals(accountWithDataSet.dataSet, rawContactDelta.getDataSet());
- }
-
- /**
- * Returns the KindSectionData and ValuesDelta that should be displayed to the user.
- */
- public Pair<KindSectionData,ValuesDelta> getEntryToDisplay(long id) {
- final String mimeType = getMimeType();
- if (mimeType == null) return null;
-
- if (id > 0) {
- // Look for a match for the ID that was passed in
- for (KindSectionData kindSectionData : this) {
- final ValuesDelta valuesDelta = kindSectionData.getValuesDeltaById(id);
- if (valuesDelta != null) {
- vlog(mimeType + ": matched kind section data to display by ID");
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
- }
- // Look for a super primary entry
- for (KindSectionData kindSectionData : this) {
- final ValuesDelta valuesDelta = kindSectionData.getSuperPrimaryValuesDelta();
- if (valuesDelta != null) {
- vlog(mimeType + ": matched kind section data to display by super primary");
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
-
- // Fall back to the first non-empty value
- for (KindSectionData kindSectionData : this) {
- final ValuesDelta valuesDelta = kindSectionData.getFirstNonEmptyValuesDelta();
- if (valuesDelta != null) {
- vlog(mimeType + ": using first non empty value to display");
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
-
- for (KindSectionData kindSectionData : this) {
- final List<ValuesDelta> valuesDeltaList = kindSectionData.getValuesDeltas();
- if (!valuesDeltaList.isEmpty()) {
- vlog(mimeType + ": falling back to first empty entry to display");
- final ValuesDelta valuesDelta = valuesDeltaList.get(0);
- return new Pair<>(kindSectionData, valuesDelta);
- }
- }
-
- wlog(mimeType + ": no kind section data found to display");
- return null;
- }
-
- @Override
- public boolean add(KindSectionData kindSectionData) {
- if (kindSectionData == null) throw new NullPointerException();
-
- // Enforce that only entries of the same type are added to this list
- final String listMimeType = getMimeType();
- if (listMimeType != null) {
- final String newEntryMimeType = kindSectionData.getDataKind().mimeType;
- if (!listMimeType.equals(newEntryMimeType)) {
- throw new IllegalArgumentException(
- "Can't add " + newEntryMimeType + " to list with type " + listMimeType);
- }
- }
- return super.add(kindSectionData);
- }
-
- private static void wlog(String message) {
- if (Log.isLoggable(TAG, Log.WARN)) {
- Log.w(TAG, message);
- }
- }
-
- private static void vlog(String message) {
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, message);
- }
- }
-}
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
index e6123611b..94f8a3205 100644
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ b/src/com/android/contacts/editor/KindSectionView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * 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.
@@ -17,21 +17,26 @@
package com.android.contacts.editor;
import android.content.Context;
-import android.provider.ContactsContract.Data;
-import android.text.TextUtils;
+import android.database.Cursor;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.editor.Editor.EditorListener;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.preference.ContactsPreferences;
import java.util.ArrayList;
import java.util.List;
@@ -41,31 +46,124 @@ import java.util.List;
* {@link DataKind} around a {@link Data#MIMETYPE}. This view shows a
* section header and a trigger for adding new {@link Data} rows.
*/
-public class KindSectionView extends LinearLayout implements EditorListener {
+public class KindSectionView extends LinearLayout {
- public interface Listener {
+ /**
+ * Marks a name as super primary when it is changed.
+ *
+ * This is for the case when two or more raw contacts with names are joined where neither is
+ * marked as super primary.
+ */
+ private static final class StructuredNameEditorListener implements Editor.EditorListener {
+
+ private final ValuesDelta mValuesDelta;
+ private final long mRawContactId;
+ private final RawContactEditorView.Listener mListener;
+
+ public StructuredNameEditorListener(ValuesDelta valuesDelta, long rawContactId,
+ RawContactEditorView.Listener listener) {
+ mValuesDelta = valuesDelta;
+ mRawContactId = rawContactId;
+ mListener = listener;
+ }
- /**
- * Invoked when any editor that is displayed in this section view is deleted by the user.
- */
- public void onDeleteRequested(Editor editor);
+ @Override
+ public void onRequest(int request) {
+ if (request == Editor.EditorListener.FIELD_CHANGED) {
+ mValuesDelta.setSuperPrimary(true);
+ if (mListener != null) {
+ mListener.onNameFieldChanged(mRawContactId, mValuesDelta);
+ }
+ } else if (request == Editor.EditorListener.FIELD_TURNED_EMPTY) {
+ mValuesDelta.setSuperPrimary(false);
+ }
+ }
+
+ @Override
+ public void onDeleteRequested(Editor editor) {
+ editor.clearAllFields();
+ }
}
- private ViewGroup mEditors;
- private ImageView mIcon;
+ /**
+ * Clears fields when deletes are requested (on phonetic and nickename fields);
+ * does not change the number of editors.
+ */
+ private static final class OtherNameKindEditorListener implements Editor.EditorListener {
- private DataKind mKind;
- private RawContactDelta mState;
- private boolean mReadOnly;
+ @Override
+ public void onRequest(int request) {
+ }
+
+ @Override
+ public void onDeleteRequested(Editor editor) {
+ editor.clearAllFields();
+ }
+ }
+
+ /**
+ * Updates empty fields when fields are deleted or turns empty.
+ * Whether a new empty editor is added is controlled by {@link #setShowOneEmptyEditor} and
+ * {@link #setHideWhenEmpty}.
+ */
+ private class NonNameEditorListener implements Editor.EditorListener {
+
+ @Override
+ public void onRequest(int request) {
+ // If a field has become empty or non-empty, then check if another row
+ // can be added dynamically.
+ if (request == FIELD_TURNED_EMPTY || request == FIELD_TURNED_NON_EMPTY) {
+ updateEmptyEditors(/* shouldAnimate = */ true);
+ }
+ }
+
+ @Override
+ public void onDeleteRequested(Editor editor) {
+ if (mShowOneEmptyEditor && mEditors.getChildCount() == 1) {
+ // If there is only 1 editor in the section, then don't allow the user to
+ // delete it. Just clear the fields in the editor.
+ editor.clearAllFields();
+ } else {
+ editor.deleteEditor();
+ }
+ }
+ }
+
+ private class EventEditorListener extends NonNameEditorListener {
+
+ @Override
+ public void onRequest(int request) {
+ super.onRequest(request);
+ }
+
+ @Override
+ public void onDeleteRequested(Editor editor) {
+ if (editor instanceof EventFieldEditorView){
+ final EventFieldEditorView delView = (EventFieldEditorView) editor;
+ if (delView.isBirthdayType() && mEditors.getChildCount() > 1) {
+ final EventFieldEditorView bottomView = (EventFieldEditorView) mEditors
+ .getChildAt(mEditors.getChildCount() - 1);
+ bottomView.restoreBirthday();
+ }
+ }
+ super.onDeleteRequested(editor);
+ }
+ }
+ private KindSectionData mKindSectionData;
private ViewIdGenerator mViewIdGenerator;
+ private RawContactEditorView.Listener mListener;
- private LayoutInflater mInflater;
+ private boolean mIsUserProfile;
+ private boolean mShowOneEmptyEditor = false;
+ private boolean mHideIfEmpty = true;
- private Listener mListener;
+ private LayoutInflater mLayoutInflater;
+ private ViewGroup mEditors;
+ private ImageView mIcon;
public KindSectionView(Context context) {
- this(context, null);
+ this(context, /* attrs =*/ null);
}
public KindSectionView(Context context, AttributeSet attrs) {
@@ -81,209 +179,405 @@ public class KindSectionView extends LinearLayout implements EditorListener {
mEditors.getChildAt(i).setEnabled(enabled);
}
}
-
- updateEmptyEditors(/* shouldAnimate = */ true);
}
- public boolean isReadOnly() {
- return mReadOnly;
- }
-
- /** {@inheritDoc} */
@Override
protected void onFinishInflate() {
+ super.onFinishInflate();
setDrawingCacheEnabled(true);
setAlwaysDrawnWithCacheEnabled(true);
- mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mLayoutInflater = (LayoutInflater) getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
mEditors = (ViewGroup) findViewById(R.id.kind_editors);
mIcon = (ImageView) findViewById(R.id.kind_icon);
}
- @Override
- public void onDeleteRequested(Editor editor) {
- if (getEditorCount() == 1) {
- // If there is only 1 editor in the section, then don't allow the user to delete it.
- // Just clear the fields in the editor.
- editor.clearAllFields();
- } else {
- // If there is a listener, let it decide whether to delete the Editor or the entire
- // KindSectionView so that there is no jank from both animations happening in succession.
- if (mListener != null) {
- editor.markDeleted();
- mListener.onDeleteRequested(editor);
- } else {
- editor.deleteEditor();
+ public void setIsUserProfile(boolean isUserProfile) {
+ mIsUserProfile = isUserProfile;
+ }
+
+ /**
+ * @param showOneEmptyEditor If true, we will always show one empty editor, otherwise an empty
+ * editor will not be shown until the user enters a value. Note, this does not apply
+ * to name editors since those are always displayed.
+ */
+ public void setShowOneEmptyEditor(boolean showOneEmptyEditor) {
+ mShowOneEmptyEditor = showOneEmptyEditor;
+ }
+
+ /**
+ * @param hideWhenEmpty If true, the entire section will be hidden if all inputs are empty,
+ * otherwise one empty input will always be displayed. Note, this does not apply
+ * to name editors since those are always displayed.
+ */
+ public void setHideWhenEmpty(boolean hideWhenEmpty) {
+ mHideIfEmpty = hideWhenEmpty;
+ }
+
+ /** Binds the given group data to every {@link GroupMembershipView}. */
+ public void setGroupMetaData(Cursor cursor) {
+ for (int i = 0; i < mEditors.getChildCount(); i++) {
+ final View view = mEditors.getChildAt(i);
+ if (view instanceof GroupMembershipView) {
+ ((GroupMembershipView) view).setGroupMetaData(cursor);
}
}
}
- @Override
- public void onRequest(int request) {
- // If a field has become empty or non-empty, then check if another row
- // can be added dynamically.
- if (request == FIELD_TURNED_EMPTY || request == FIELD_TURNED_NON_EMPTY) {
- updateEmptyEditors(/* shouldAnimate = */ true);
+ /**
+ * Whether this is a name kind section view and all name fields (structured, phonetic,
+ * and nicknames) are empty.
+ */
+ public boolean isEmptyName() {
+ if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())) {
+ return false;
+ }
+ for (int i = 0; i < mEditors.getChildCount(); i++) {
+ final View view = mEditors.getChildAt(i);
+ if (view instanceof Editor) {
+ final Editor editor = (Editor) view;
+ if (!editor.isEmpty()) {
+ return false;
+ }
+ }
}
+ return true;
}
- public void setListener(Listener listener) {
- mListener = listener;
+ public StructuredNameEditorView getNameEditorView() {
+ if (!StructuredName.CONTENT_ITEM_TYPE.equals(mKindSectionData.getMimeType())
+ || mEditors.getChildCount() == 0) {
+ return null;
+ }
+ return (StructuredNameEditorView) mEditors.getChildAt(0);
}
- public void setState(DataKind kind, RawContactDelta state, boolean readOnly,
- ViewIdGenerator vig) {
- mKind = kind;
- mState = state;
- mReadOnly = readOnly;
- mViewIdGenerator = vig;
-
- setId(mViewIdGenerator.getId(state, kind, null, ViewIdGenerator.NO_VIEW_INDEX));
-
- // TODO: handle resources from remote packages
- final String titleString = (kind.titleRes == -1 || kind.titleRes == 0)
- ? ""
- : getResources().getString(kind.titleRes);
- mIcon.setContentDescription(titleString);
+ /**
+ * Binds views for the given {@link KindSectionData}.
+ *
+ * We create a structured name and phonetic name editor for each {@link DataKind} with a
+ * {@link StructuredName#CONTENT_ITEM_TYPE} mime type. The number and order of editors are
+ * rendered as they are given to {@link #setState}.
+ *
+ * Empty name editors are never added and at least one structured name editor is always
+ * displayed, even if it is empty.
+ */
+ public void setState(KindSectionData kindSectionData,
+ ViewIdGenerator viewIdGenerator, RawContactEditorView.Listener listener) {
+ mKindSectionData = kindSectionData;
+ mViewIdGenerator = viewIdGenerator;
+ mListener = listener;
- mIcon.setImageDrawable(EditorUiUtils.getMimeTypeDrawable(getContext(), kind.mimeType));
- if (mIcon.getDrawable() == null) {
- mIcon.setContentDescription(null);
+ // Set the icon using the DataKind
+ final DataKind dataKind = mKindSectionData.getDataKind();
+ if (dataKind != null) {
+ mIcon.setImageDrawable(EditorUiUtils.getMimeTypeDrawable(getContext(),
+ dataKind.mimeType));
+ if (mIcon.getDrawable() != null) {
+ mIcon.setContentDescription(dataKind.titleRes == -1 || dataKind.titleRes == 0
+ ? "" : getResources().getString(dataKind.titleRes));
+ }
}
rebuildFromState();
+
updateEmptyEditors(/* shouldAnimate = */ false);
}
- /**
- * Build editors for all current {@link #mState} rows.
- */
private void rebuildFromState() {
- // Remove any existing editors
mEditors.removeAllViews();
- // Check if we are displaying anything here
- boolean hasEntries = mState.hasMimeEntries(mKind.mimeType);
-
- if (hasEntries) {
- for (ValuesDelta entry : mState.getMimeEntries(mKind.mimeType)) {
- // Skip entries that aren't visible
- if (!entry.isVisible()) continue;
- if (isEmptyNoop(entry)) continue;
-
- createEditorView(entry);
+ final String mimeType = mKindSectionData.getMimeType();
+ if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ addNameEditorViews(mKindSectionData.getAccountType(),
+ mKindSectionData.getRawContactDelta());
+ } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ addGroupEditorView(mKindSectionData.getRawContactDelta(),
+ mKindSectionData.getDataKind());
+ } else {
+ final Editor.EditorListener editorListener;
+ if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ editorListener = new OtherNameKindEditorListener();
+ } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ editorListener = new EventEditorListener();
+ } else {
+ editorListener = new NonNameEditorListener();
+ }
+ final List<ValuesDelta> valuesDeltas = mKindSectionData.getVisibleValuesDeltas();
+ for (int i = 0; i < valuesDeltas.size(); i++ ) {
+ addNonNameEditorView(mKindSectionData.getRawContactDelta(),
+ mKindSectionData.getDataKind(), valuesDeltas.get(i), editorListener);
}
}
}
+ private void addNameEditorViews(AccountType accountType, RawContactDelta rawContactDelta) {
+ final boolean readOnly = !accountType.areContactsWritable();
+ final ValuesDelta nameValuesDelta = rawContactDelta
+ .getSuperPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+
+ if (readOnly) {
+ final View nameView = mLayoutInflater.inflate(
+ R.layout.structured_name_readonly_editor_view, mEditors,
+ /* attachToRoot =*/ false);
+
+ // Display name
+ ((TextView) nameView.findViewById(R.id.display_name))
+ .setText(nameValuesDelta.getDisplayName());
+
+ // Account type info
+ final LinearLayout accountTypeLayout = (LinearLayout)
+ nameView.findViewById(R.id.account_type);
+ accountTypeLayout.setVisibility(View.VISIBLE);
+ ((ImageView) accountTypeLayout.findViewById(R.id.account_type_icon))
+ .setImageDrawable(accountType.getDisplayIcon(getContext()));
+ ((TextView) accountTypeLayout.findViewById(R.id.account_type_name))
+ .setText(accountType.getDisplayLabel(getContext()));
+
+ mEditors.addView(nameView);
+ return;
+ }
- /**
- * Creates an EditorView for the given entry. This function must be used while constructing
- * the views corresponding to the the object-model. The resulting EditorView is also added
- * to the end of mEditors
- */
- private View createEditorView(ValuesDelta entry) {
- final View view;
- final int layoutResId = EditorUiUtils.getLayoutResourceId(mKind.mimeType);
- try {
- view = mInflater.inflate(layoutResId, mEditors, false);
- } catch (Exception e) {
- throw new RuntimeException(
- "Cannot allocate editor with layout resource ID " +
- layoutResId + " for MIME type " + mKind.mimeType +
- " with error " + e.toString());
+ // Structured name
+ final StructuredNameEditorView nameView = (StructuredNameEditorView) mLayoutInflater
+ .inflate(R.layout.structured_name_editor_view, mEditors, /* attachToRoot =*/ false);
+ if (!mIsUserProfile) {
+ // Don't set super primary for the me contact
+ nameView.setEditorListener(new StructuredNameEditorListener(
+ nameValuesDelta, rawContactDelta.getRawContactId(), mListener));
}
+ nameView.setDeletable(false);
+ nameView.setValues(accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_NAME),
+ nameValuesDelta, rawContactDelta, /* readOnly =*/ false, mViewIdGenerator);
+
+ // Correct start margin since there is a second icon in the structured name layout
+ nameView.findViewById(R.id.kind_icon).setVisibility(View.GONE);
+ mEditors.addView(nameView);
+
+ // Phonetic name
+ final DataKind phoneticNameKind = accountType
+ .getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME);
+ // The account type doesn't support phonetic name.
+ if (phoneticNameKind == null) return;
+
+ final TextFieldsEditorView phoneticNameView = (TextFieldsEditorView) mLayoutInflater
+ .inflate(R.layout.text_fields_editor_view, mEditors, /* attachToRoot =*/ false);
+ phoneticNameView.setEditorListener(new OtherNameKindEditorListener());
+ phoneticNameView.setDeletable(false);
+ phoneticNameView.setValues(
+ accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME),
+ nameValuesDelta, rawContactDelta, /* readOnly =*/ false, mViewIdGenerator);
+
+ // Fix the start margin for phonetic name views
+ final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+ layoutParams.setMargins(0, 0, 0, 0);
+ phoneticNameView.setLayoutParams(layoutParams);
+ mEditors.addView(phoneticNameView);
+ // Display of phonetic name fields is controlled from settings preferences.
+ mHideIfEmpty = new ContactsPreferences(getContext()).shouldHidePhoneticNamesIfEmpty();
+ }
+
+ private void addGroupEditorView(RawContactDelta rawContactDelta, DataKind dataKind) {
+ final GroupMembershipView view = (GroupMembershipView) mLayoutInflater.inflate(
+ R.layout.item_group_membership, mEditors, /* attachToRoot =*/ false);
+ view.setKind(dataKind);
+ view.setEnabled(isEnabled());
+ view.setState(rawContactDelta);
+
+ // Correct start margin since there is a second icon in the group layout
+ view.findViewById(R.id.kind_icon).setVisibility(View.GONE);
+
+ mEditors.addView(view);
+ }
+
+ private View addNonNameEditorView(RawContactDelta rawContactDelta, DataKind dataKind,
+ ValuesDelta valuesDelta, Editor.EditorListener editorListener) {
+ // Inflate the layout
+ final View view = mLayoutInflater.inflate(
+ EditorUiUtils.getLayoutResourceId(dataKind.mimeType), mEditors, false);
view.setEnabled(isEnabled());
if (view instanceof Editor) {
- Editor editor = (Editor) view;
+ final Editor editor = (Editor) view;
editor.setDeletable(true);
- editor.setValues(mKind, entry, mState, mReadOnly, mViewIdGenerator);
- editor.setEditorListener(this);
+ editor.setEditorListener(editorListener);
+ editor.setValues(dataKind, valuesDelta, rawContactDelta, !dataKind.editable,
+ mViewIdGenerator);
}
mEditors.addView(view);
- return view;
- }
- /**
- * Tests whether the given item has no changes (so it exists in the database) but is empty
- */
- private boolean isEmptyNoop(ValuesDelta item) {
- if (!item.isNoop()) return false;
- final int fieldCount = mKind.fieldList.size();
- for (int i = 0; i < fieldCount; i++) {
- final String column = mKind.fieldList.get(i).column;
- final String value = item.getAsString(column);
- if (!TextUtils.isEmpty(value)) return false;
- }
- return true;
+ return view;
}
/**
* Updates the editors being displayed to the user removing extra empty
* {@link Editor}s, so there is only max 1 empty {@link Editor} view at a time.
+ * If there is only 1 empty editor and {@link #setHideWhenEmpty} was set to true,
+ * then the entire section is hidden.
*/
public void updateEmptyEditors(boolean shouldAnimate) {
+ final boolean isNameKindSection = StructuredName.CONTENT_ITEM_TYPE.equals(
+ mKindSectionData.getMimeType());
+ final boolean isGroupKindSection = GroupMembership.CONTENT_ITEM_TYPE.equals(
+ mKindSectionData.getMimeType());
+
+ if (isNameKindSection) {
+ // The name kind section is always visible
+ setVisibility(VISIBLE);
+ updateEmptyNameEditors(shouldAnimate);
+ } else if (isGroupKindSection) {
+ // Check whether metadata has been bound for all group views
+ for (int i = 0; i < mEditors.getChildCount(); i++) {
+ final View view = mEditors.getChildAt(i);
+ if (view instanceof GroupMembershipView) {
+ final GroupMembershipView groupView = (GroupMembershipView) view;
+ if (!groupView.wasGroupMetaDataBound() || !groupView.accountHasGroups()) {
+ setVisibility(GONE);
+ return;
+ }
+ }
+ }
+ // Check that the user has selected to display all fields
+ if (mHideIfEmpty) {
+ setVisibility(GONE);
+ return;
+ }
+ setVisibility(VISIBLE);
- final List<View> emptyEditors = getEmptyEditors();
+ // We don't check the emptiness of the group views
+ } else {
+ // Determine if the entire kind section should be visible
+ final int editorCount = mEditors.getChildCount();
+ final List<View> emptyEditors = getEmptyEditors();
+ if (editorCount == emptyEditors.size() && mHideIfEmpty) {
+ setVisibility(GONE);
+ return;
+ }
+ setVisibility(VISIBLE);
- // If there is more than 1 empty editor, then remove it from the list of editors.
- if (emptyEditors.size() > 1) {
- for (final View emptyEditorView : emptyEditors) {
- // If no child {@link View}s are being focused on within this {@link View}, then
- // remove this empty editor. We can assume that at least one empty editor has focus.
- // The only way to get two empty editors is by deleting characters from a non-empty
- // editor, in which case this editor has focus.
- if (emptyEditorView.findFocus() == null) {
- final Editor editor = (Editor) emptyEditorView;
- if (shouldAnimate) {
- editor.deleteEditor();
+ updateEmptyNonNameEditors(shouldAnimate);
+ }
+ }
+
+ private void updateEmptyNameEditors(boolean shouldAnimate) {
+ boolean isEmptyNameEditorVisible = false;
+
+ for (int i = 0; i < mEditors.getChildCount(); i++) {
+ final View view = mEditors.getChildAt(i);
+ if (view instanceof Editor) {
+ final Editor editor = (Editor) view;
+ if (view instanceof StructuredNameEditorView) {
+ // We always show one empty structured name view
+ if (editor.isEmpty()) {
+ if (isEmptyNameEditorVisible) {
+ // If we're already showing an empty editor then hide any other empties
+ if (mHideIfEmpty) {
+ view.setVisibility(View.GONE);
+ }
+ } else {
+ isEmptyNameEditorVisible = true;
+ }
+ } else {
+ showView(view, shouldAnimate);
+ isEmptyNameEditorVisible = true;
+ }
+ } else {
+ // Since we can't add phonetic names and nicknames, just show or hide them
+ if (mHideIfEmpty && editor.isEmpty()) {
+ hideView(view);
} else {
- mEditors.removeView(emptyEditorView);
+ showView(view, /* shouldAnimate =*/ false); // Animation here causes jank
}
}
+ } else {
+ // For read only names, only show them if we're not hiding empty views
+ if (mHideIfEmpty) {
+ hideView(view);
+ } else {
+ showView(view, shouldAnimate);
+ }
+ }
+ }
+ }
+
+ private void updateEmptyNonNameEditors(boolean shouldAnimate) {
+ // Prune excess empty editors
+ final List<View> emptyEditors = getEmptyEditors();
+ if (emptyEditors.size() > 1) {
+ // If there is more than 1 empty editor, then remove it from the list of editors.
+ int deleted = 0;
+ for (int i = 0; i < emptyEditors.size(); i++) {
+ final View view = emptyEditors.get(i);
+ // If no child {@link View}s are being focused on within this {@link View}, then
+ // remove this empty editor. We can assume that at least one empty editor has
+ // focus. One way to get two empty editors is by deleting characters from a
+ // non-empty editor, in which case this editor has focus. Another way is if
+ // there is more values delta so we must also count number of editors deleted.
+ if (view.findFocus() == null) {
+ deleteView(view, shouldAnimate);
+ deleted++;
+ if (deleted == emptyEditors.size() - 1) break;
+ }
}
- } else if (mKind == null) {
- // There is nothing we can do.
- return;
- } else if (isReadOnly()) {
- // We don't show empty editors for read only data kinds.
- return;
- } else if (!RawContactModifier.canInsert(mState, mKind)) {
- // We have already reached the maximum number of editors. Lets not add any more.
return;
- } else if (emptyEditors.size() == 1) {
- // We have already reached the maximum number of empty editors. Lets not add any more.
+ }
+ // Determine if we should add a new empty editor
+ final DataKind dataKind = mKindSectionData.getDataKind();
+ final RawContactDelta rawContactDelta = mKindSectionData.getRawContactDelta();
+ if (dataKind == null // There is nothing we can do.
+ // We have already reached the maximum number of editors, don't add any more.
+ || !RawContactModifier.canInsert(rawContactDelta, dataKind)
+ // We have already reached the maximum number of empty editors, don't add any more.
+ || emptyEditors.size() == 1) {
return;
- } else {
- final ValuesDelta values = RawContactModifier.insertChild(mState, mKind);
- final View newField = createEditorView(values);
- if (shouldAnimate) {
- newField.setVisibility(View.GONE);
- EditorAnimator.getInstance().showFieldFooter(newField);
+ }
+ // Add a new empty editor
+ if (mShowOneEmptyEditor) {
+ final String mimeType = mKindSectionData.getMimeType();
+ if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType) && mEditors.getChildCount() > 0) {
+ return;
}
+ final ValuesDelta values = RawContactModifier.insertChild(rawContactDelta, dataKind);
+ final Editor.EditorListener editorListener = Event.CONTENT_ITEM_TYPE.equals(mimeType)
+ ? new EventEditorListener() : new NonNameEditorListener();
+ final View view = addNonNameEditorView(rawContactDelta, dataKind, values,
+ editorListener);
+ showView(view, shouldAnimate);
}
}
- /**
- * Returns a list of empty editor views in this section.
- */
- private List<View> getEmptyEditors() {
- List<View> emptyEditorViews = new ArrayList<View>();
- for (int i = 0; i < mEditors.getChildCount(); i++) {
- View view = mEditors.getChildAt(i);
- if (((Editor) view).isEmpty()) {
- emptyEditorViews.add(view);
- }
+ private void hideView(View view) {
+ view.setVisibility(View.GONE);
+ }
+
+ private void deleteView(View view, boolean shouldAnimate) {
+ if (shouldAnimate) {
+ final Editor editor = (Editor) view;
+ editor.deleteEditor();
+ } else {
+ mEditors.removeView(view);
}
- return emptyEditorViews;
}
- public int getEditorCount() {
- return mEditors.getChildCount();
+ private void showView(View view, boolean shouldAnimate) {
+ if (shouldAnimate) {
+ view.setVisibility(View.GONE);
+ EditorAnimator.getInstance().showFieldFooter(view);
+ } else {
+ view.setVisibility(View.VISIBLE);
+ }
}
- public DataKind getKind() {
- return mKind;
+ private List<View> getEmptyEditors() {
+ final List<View> emptyEditors = new ArrayList<>();
+ for (int i = 0; i < mEditors.getChildCount(); i++) {
+ final View view = mEditors.getChildAt(i);
+ if (view instanceof Editor && ((Editor) view).isEmpty()) {
+ emptyEditors.add(view);
+ }
+ }
+ return emptyEditors;
}
}
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 63d75d8de..5712f3971 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -37,19 +37,20 @@ import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.CheckedTextView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.dataitem.DataKind;
import com.android.contacts.util.DialogManager;
import com.android.contacts.util.DialogManager.DialogShowingView;
@@ -69,7 +70,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
private Spinner mLabel;
private EditTypeAdapter mEditTypeAdapter;
- private View mDeleteContainer;
+ protected View mDeleteContainer;
private ImageView mDelete;
private DataKind mKind;
@@ -86,6 +87,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
private DialogManager mDialogManager = null;
private EditorListener mListener;
protected int mMinLineItemHeight;
+ private int mSelectedLabelIndex;
/**
* A marker in the spinner adapter of the currently selected custom type.
@@ -228,7 +230,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
mDeleteContainer.setVisibility(View.VISIBLE);
mDelete.setEnabled(!mReadOnly && isEnabled());
} else {
- mDeleteContainer.setVisibility(View.GONE);
+ mDeleteContainer.setVisibility(View.INVISIBLE);
}
}
@@ -292,6 +294,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
*/
public void rebuildLabel() {
mEditTypeAdapter = new EditTypeAdapter(getContext());
+ mEditTypeAdapter.setSelectedIndex(mSelectedLabelIndex);
mLabel.setAdapter(mEditTypeAdapter);
if (mEditTypeAdapter.hasCustomSelection()) {
mLabel.setSelection(mEditTypeAdapter.getPosition(CUSTOM_SELECTION));
@@ -300,13 +303,13 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
mEntry.getAsString(mType.customColumn),
getContext().getString(mKind.titleRes)));
} else {
- mLabel.setSelection(mEditTypeAdapter.getPosition(mType));
- if (mType != null) {
+ if (mType != null && mType.labelRes > 0 && mKind.titleRes > 0) {
+ mLabel.setSelection(mEditTypeAdapter.getPosition(mType));
mDeleteContainer.setContentDescription(
getContext().getString(R.string.editor_delete_view_description,
getContext().getString(mType.labelRes),
getContext().getString(mKind.titleRes)));
- } else {
+ } else if (mKind.titleRes > 0) {
mDeleteContainer.setContentDescription(
getContext().getString(R.string.editor_delete_view_description_short,
getContext().getString(mKind.titleRes)));
@@ -406,12 +409,11 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
final boolean hasTypes = RawContactModifier.hasEditTypes(kind);
setupLabelButton(hasTypes);
mLabel.setEnabled(!readOnly && isEnabled());
- mLabel.setContentDescription(getContext().getResources().getString(mKind.titleRes));
-
- if (hasTypes) {
- mType = RawContactModifier.getCurrentType(entry, kind);
- rebuildLabel();
+ if (mKind.titleRes > 0) {
+ mLabel.setContentDescription(getContext().getResources().getString(mKind.titleRes));
}
+ mType = RawContactModifier.getCurrentType(entry, kind);
+ rebuildLabel();
}
public ValuesDelta getValues() {
@@ -520,6 +522,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
// User picked type, and we're sure it's ok to actually write the entry.
mType = selected;
mEntry.put(mKind.typeColumn, mType.rawValue);
+ mSelectedLabelIndex = position;
rebuildLabel();
requestFocusForFirstEditField();
onLabelRebuilt();
@@ -565,6 +568,7 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
private boolean mHasCustomSelection;
private int mTextColorHintUnfocused;
private int mTextColorDark;
+ private int mSelectedIndex;
public EditTypeAdapter(Context context) {
super(context, 0);
@@ -611,8 +615,11 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
- return createViewFromResource(
+ final CheckedTextView dropDownView = (CheckedTextView) createViewFromResource(
position, convertView, parent, android.R.layout.simple_spinner_dropdown_item);
+ dropDownView.setBackground(getContext().getDrawable(R.drawable.drawer_item_background));
+ dropDownView.setChecked(position == mSelectedIndex);
+ return dropDownView;
}
private TextView createViewFromResource(int position, View convertView, ViewGroup parent,
@@ -638,5 +645,9 @@ public abstract class LabeledEditorView extends LinearLayout implements Editor,
textView.setText(text);
return textView;
}
+
+ public void setSelectedIndex(int selectedIndex) {
+ mSelectedIndex = selectedIndex;
+ }
}
}
diff --git a/src/com/android/contacts/editor/PhoneticNameEditorView.java b/src/com/android/contacts/editor/PhoneticNameEditorView.java
deleted file mode 100644
index 420575cbd..000000000
--- a/src/com/android/contacts/editor/PhoneticNameEditorView.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2010 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.editor;
-
-import android.content.Context;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.common.util.NameConverter;
-
-/**
- * A dedicated editor for phonetic name. It is similar to {@link StructuredNameEditorView}.
- */
-public class PhoneticNameEditorView extends TextFieldsEditorView {
-
- private static class PhoneticValuesDelta extends ValuesDelta {
- private ValuesDelta mValues;
- private String mPhoneticName;
-
- public PhoneticValuesDelta(ValuesDelta values) {
- mValues = values;
- buildPhoneticName();
- }
-
- @Override
- public void put(String key, String value) {
- if (key.equals(DataKind.PSEUDO_COLUMN_PHONETIC_NAME)) {
- mPhoneticName = value;
- parsePhoneticName(value);
- } else {
- mValues.put(key, value);
- buildPhoneticName();
- }
- }
-
- @Override
- public String getAsString(String key) {
- if (key.equals(DataKind.PSEUDO_COLUMN_PHONETIC_NAME)) {
- return mPhoneticName;
- } else {
- return mValues.getAsString(key);
- }
- }
-
- private void parsePhoneticName(String value) {
- StructuredNameDataItem dataItem = NameConverter.parsePhoneticName(value, null);
- mValues.setPhoneticFamilyName(dataItem.getPhoneticFamilyName());
- mValues.setPhoneticMiddleName(dataItem.getPhoneticMiddleName());
- mValues.setPhoneticGivenName(dataItem.getPhoneticGivenName());
- }
-
- private void buildPhoneticName() {
- String family = mValues.getPhoneticFamilyName();
- String middle = mValues.getPhoneticMiddleName();
- String given = mValues.getPhoneticGivenName();
- mPhoneticName = NameConverter.buildPhoneticName(family, middle, given);
- }
-
- @Override
- public Long getId() {
- return mValues.getId();
- }
-
- @Override
- public boolean isVisible() {
- return mValues.isVisible();
- }
- }
-
- public static boolean isUnstructuredPhoneticNameColumn(String column) {
- return DataKind.PSEUDO_COLUMN_PHONETIC_NAME.equals(column);
- }
-
- public PhoneticNameEditorView(Context context) {
- super(context);
- }
-
- public PhoneticNameEditorView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public PhoneticNameEditorView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly,
- ViewIdGenerator vig) {
- if (!(entry instanceof PhoneticValuesDelta)) {
- entry = new PhoneticValuesDelta(entry);
- }
- super.setValues(kind, entry, state, readOnly, vig);
- updateEmptiness();
- }
-
- @Override
- public void onFieldChanged(String column, String value) {
- if (!isFieldChanged(column, value)) {
- return;
- }
-
- if (hasShortAndLongForms()) {
- PhoneticValuesDelta entry = (PhoneticValuesDelta) getEntry();
-
- // Determine whether the user is modifying the structured or unstructured phonetic
- // name field. See a similar approach in {@link StructuredNameEditor#onFieldChanged}.
- // This is because on device rotation, a hidden TextView's onRestoreInstanceState() will
- // be called and incorrectly restore a null value for the hidden field, which ultimately
- // modifies the underlying phonetic name. Hence, ignore onFieldChanged() update requests
- // from fields that aren't visible.
- boolean isEditingUnstructuredPhoneticName = !areOptionalFieldsVisible();
-
- if (isEditingUnstructuredPhoneticName == isUnstructuredPhoneticNameColumn(column)) {
- // Call into the superclass to update the field and rebuild the underlying
- // phonetic name.
- super.onFieldChanged(column, value);
- }
- } else {
- // All fields are always visible, so we don't have to worry about blocking updates
- // from onRestoreInstanceState() from hidden fields. Always call into the superclass
- // to update the field and rebuild the underlying phonetic name.
- super.onFieldChanged(column, value);
- }
- }
-
- public boolean hasData() {
- ValuesDelta entry = getEntry();
-
- String family = entry.getPhoneticFamilyName();
- String middle = entry.getPhoneticMiddleName();
- String given = entry.getPhoneticGivenName();
-
- return !TextUtils.isEmpty(family) || !TextUtils.isEmpty(middle)
- || !TextUtils.isEmpty(given);
- }
-}
diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java
index f69c93514..09ba79726 100644
--- a/src/com/android/contacts/editor/PhotoEditorView.java
+++ b/src/com/android/contacts/editor/PhotoEditorView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * 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.
@@ -18,258 +18,203 @@ package com.android.contacts.editor;
import android.content.Context;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.DisplayPhoto;
+import android.provider.ContactsContract;
import android.util.AttributeSet;
+import android.util.TypedValue;
import android.view.View;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RadioButton;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+import com.android.contacts.ContactPhotoManager;
import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageProvider;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.util.SchedulingUtils;
+import com.android.contacts.widget.QuickContactImageView;
/**
- * Simple editor for {@link Photo}.
+ * Displays a photo and calls the host back when the user clicks it.
*/
-public class PhotoEditorView extends LinearLayout implements Editor {
+public class PhotoEditorView extends RelativeLayout implements View.OnClickListener {
- private ImageView mPhotoImageView;
- private Button mChangeButton;
- private RadioButton mPrimaryCheckBox;
+ /**
+ * Callbacks for the host of this view.
+ */
+ public interface Listener {
+
+ /**
+ * Invoked when the user wants to change their photo.
+ */
+ void onPhotoEditorViewClicked();
+ }
+
+ private Listener mListener;
- private ValuesDelta mEntry;
- private EditorListener mListener;
- private ContactPhotoManager mContactPhotoManager;
+ private final float mLandscapePhotoRatio;
+ private final float mPortraitPhotoRatio;
+ private final boolean mIsTwoPanel;
- private boolean mHasSetPhoto = false;
+ private QuickContactImageView mPhotoImageView;
+ private View mPhotoIcon;
+ private View mPhotoIconOverlay;
+ private View mPhotoTouchInterceptOverlay;
+ private MaterialPalette mMaterialPalette;
+
+ private boolean mReadOnly;
+ private boolean mIsNonDefaultPhotoBound;
public PhotoEditorView(Context context) {
- super(context);
+ this(context, null);
}
public PhotoEditorView(Context context, AttributeSet attrs) {
super(context, attrs);
- }
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
+ mLandscapePhotoRatio = getTypedFloat(R.dimen.quickcontact_landscape_photo_ratio);
+ mPortraitPhotoRatio = getTypedFloat(R.dimen.editor_portrait_photo_ratio);
+ mIsTwoPanel = getResources().getBoolean(R.bool.contacteditor_two_panel);
}
- @Override
- public void editNewlyAddedField() {
- // Never called, since the user never adds a new photo-editor;
- // you can only change the picture in an existing editor.
+ private float getTypedFloat(int resourceId) {
+ final TypedValue typedValue = new TypedValue();
+ getResources().getValue(resourceId, typedValue, /* resolveRefs =*/ true);
+ return typedValue.getFloat();
}
- /** {@inheritDoc} */
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mContactPhotoManager = ContactPhotoManager.getInstance(getContext());
- mPhotoImageView = (ImageView) findViewById(R.id.photo);
- mPrimaryCheckBox = (RadioButton) findViewById(R.id.primary_checkbox);
- mChangeButton = (Button) findViewById(R.id.change_button);
- mPrimaryCheckBox = (RadioButton) findViewById(R.id.primary_checkbox);
- if (mChangeButton != null) {
- mChangeButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null) {
- mListener.onRequest(EditorListener.REQUEST_PICK_PHOTO);
- }
- }
- });
- }
- // Turn off own state management. We do this ourselves on rotation.
- mPrimaryCheckBox.setSaveEnabled(false);
- mPrimaryCheckBox.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mListener != null) {
- mListener.onRequest(EditorListener.REQUEST_PICK_PRIMARY_PHOTO);
- }
- }
- });
- }
+ mPhotoImageView = (QuickContactImageView) findViewById(R.id.photo);
+ mPhotoIcon = findViewById(R.id.photo_icon);
+ mPhotoIconOverlay = findViewById(R.id.photo_icon_overlay);
+ mPhotoTouchInterceptOverlay = findViewById(R.id.photo_touch_intercept_overlay);
- /** {@inheritDoc} */
- @Override
- public void onFieldChanged(String column, String value) {
- throw new UnsupportedOperationException("Photos don't support direct field changes");
}
- /** {@inheritDoc} */
- @Override
- public void setValues(DataKind kind, ValuesDelta values, RawContactDelta state, boolean readOnly,
- ViewIdGenerator vig) {
- mEntry = values;
-
- setId(vig.getId(state, kind, values, 0));
-
- mPrimaryCheckBox.setChecked(values != null && values.isSuperPrimary());
-
- if (values != null) {
- // Try decoding photo if actual entry
- final byte[] photoBytes = values.getAsByteArray(Photo.PHOTO);
- if (photoBytes != null) {
- final Bitmap photo = BitmapFactory.decodeByteArray(photoBytes, 0,
- photoBytes.length);
-
- mPhotoImageView.setImageBitmap(photo);
- mHasSetPhoto = true;
- mEntry.setFromTemplate(false);
-
- if (values.getAfter() == null || values.getAfter().get(Photo.PHOTO) == null) {
- // If the user hasn't updated the PHOTO value, then PHOTO_FILE_ID may contain
- // a reference to a larger version of PHOTO that we can bind to the UI.
- // Otherwise, we need to wait for a call to #setFullSizedPhoto() to update
- // our full sized image.
- final Integer photoFileId = values.getAsInteger(Photo.PHOTO_FILE_ID);
- if (photoFileId != null) {
- final Uri photoUri = DisplayPhoto.CONTENT_URI.buildUpon()
- .appendPath(photoFileId.toString()).build();
- setFullSizedPhoto(photoUri);
- }
- }
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
- } else {
- resetDefault();
- }
+ public void setReadOnly(boolean readOnly) {
+ mReadOnly = readOnly;
+ if (mReadOnly) {
+ mPhotoIcon.setVisibility(View.GONE);
+ mPhotoIconOverlay.setVisibility(View.GONE);
+ mPhotoTouchInterceptOverlay.setClickable(false);
+ mPhotoTouchInterceptOverlay.setContentDescription(getContext().getString(
+ R.string.editor_contact_photo_content_description));
} else {
- resetDefault();
+ mPhotoIcon.setVisibility(View.VISIBLE);
+ mPhotoIconOverlay.setVisibility(View.VISIBLE);
+ mPhotoTouchInterceptOverlay.setOnClickListener(this);
+ updatePhotoDescription();
}
}
- /**
- * Whether to display a "Primary photo" RadioButton. This is only needed if there are multiple
- * candidate photos.
- */
- public void setShowPrimary(boolean showPrimaryCheckBox) {
- mPrimaryCheckBox.setVisibility(showPrimaryCheckBox ? View.VISIBLE : View.GONE);
- }
-
- /**
- * Return true if a valid {@link Photo} has been set.
- */
- public boolean hasSetPhoto() {
- return mHasSetPhoto;
+ public void setPalette(MaterialPalette palette) {
+ mMaterialPalette = palette;
}
/**
- * Assign the given {@link Bitmap} as the new value for the sake of building
- * {@link ValuesDelta}. We may as well bind a thumbnail to the UI while we are at it.
+ * Tries to bind a full size photo or a bitmap loaded from the given ValuesDelta,
+ * and falls back to the default avatar, tinted using the given MaterialPalette (if it's not
+ * null);
*/
- public void setPhotoEntry(Bitmap photo) {
- if (photo == null) {
- // Clear any existing photo and return
- mEntry.put(Photo.PHOTO, (byte[])null);
- resetDefault();
+ public void setPhoto(ValuesDelta valuesDelta) {
+ // Check if we can update to the full size photo immediately
+ final Long photoFileId = EditorUiUtils.getPhotoFileId(valuesDelta);
+ if (photoFileId != null) {
+ final Uri photoUri = ContactsContract.DisplayPhoto.CONTENT_URI.buildUpon()
+ .appendPath(photoFileId.toString()).build();
+ setFullSizedPhoto(photoUri);
+ adjustDimensions();
return;
}
- final int size = ContactsUtils.getThumbnailSize(getContext());
- final Bitmap scaled = Bitmap.createScaledBitmap(photo, size, size, false);
-
- mPhotoImageView.setImageBitmap(scaled);
- mHasSetPhoto = true;
- mEntry.setFromTemplate(false);
-
- // When the user chooses a new photo mark it as super primary
- mEntry.setSuperPrimary(true);
-
- // Even though high-res photos cannot be saved by passing them via
- // an EntityDeltaList (since they cause the Bundle size limit to be
- // exceeded), we still pass a low-res thumbnail. This simplifies
- // code all over the place, because we don't have to test whether
- // there is a change in EITHER the delta-list OR a changed photo...
- // this way, there is always a change in the delta-list.
- final byte[] compressed = ContactPhotoUtils.compressBitmap(scaled);
- if (compressed != null) {
- mEntry.setPhoto(compressed);
+ // Use the bitmap image from the values delta
+ final Bitmap bitmap = EditorUiUtils.getPhotoBitmap(valuesDelta);
+ if (bitmap != null) {
+ setPhoto(bitmap);
+ adjustDimensions();
+ return;
}
+
+ setDefaultPhoto(mMaterialPalette);
+ adjustDimensions();
}
- /**
- * Bind the {@param photoUri}'s photo to editor's UI. This doesn't affect {@link ValuesDelta}.
- */
- public void setFullSizedPhoto(Uri photoUri) {
- if (photoUri != null) {
- final DefaultImageProvider fallbackToPreviousImage = new DefaultImageProvider() {
- @Override
- public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
- DefaultImageRequest defaultImageRequest) {
- // Before we finish setting the full sized image, don't change the current
- // image that is set in any way.
+ private void adjustDimensions() {
+ // Follow the same logic as MultiShrinkScroll.initialize
+ SchedulingUtils.doOnPreDraw(this, /* drawNextFrame =*/ false, new Runnable() {
+ @Override
+ public void run() {
+ final int photoHeight, photoWidth;
+ if (mIsTwoPanel) {
+ photoHeight = getHeight();
+ photoWidth = (int) (photoHeight * mLandscapePhotoRatio);
+ } else {
+ // Make the photo slightly shorter that it is wide
+ photoWidth = getWidth();
+ photoHeight = (int) (photoWidth / mPortraitPhotoRatio);
}
- };
- mContactPhotoManager.loadPhoto(mPhotoImageView, photoUri,
- mPhotoImageView.getWidth(), /* darkTheme = */ false, /* isCircular = */ false,
- /* defaultImageRequest = */ null, fallbackToPreviousImage);
- }
+ final ViewGroup.LayoutParams layoutParams = getLayoutParams();
+ layoutParams.height = photoHeight;
+ layoutParams.width = photoWidth;
+ setLayoutParams(layoutParams);
+ }
+ });
}
/**
- * Set the super primary bit on the photo.
+ * Whether a removable, non-default photo is bound to this view.
*/
- public void setSuperPrimary(boolean superPrimary) {
- mEntry.put(Photo.IS_SUPER_PRIMARY, superPrimary ? 1 : 0);
- }
-
- protected void resetDefault() {
- // Invalid photo, show default "add photo" place-holder
- mPhotoImageView.setImageDrawable(
- ContactPhotoManager.getDefaultAvatarDrawableForContact(getResources(), false, null));
- mHasSetPhoto = false;
- mEntry.setFromTemplate(true);
+ public boolean isWritablePhotoSet() {
+ return !mReadOnly && mIsNonDefaultPhotoBound;
}
- /** {@inheritDoc} */
- @Override
- public void setEditorListener(EditorListener listener) {
- mListener = listener;
+ /**
+ * Binds the given bitmap.
+ */
+ private void setPhoto(Bitmap bitmap) {
+ mPhotoImageView.setImageBitmap(bitmap);
+ mIsNonDefaultPhotoBound = true;
+ updatePhotoDescription();
}
- @Override
- public void setDeletable(boolean deletable) {
- // Photo is not deletable
+ private void setDefaultPhoto(MaterialPalette materialPalette) {
+ mIsNonDefaultPhotoBound = false;
+ updatePhotoDescription();
+ EditorUiUtils.setDefaultPhoto(mPhotoImageView, getResources(), materialPalette);
}
- @Override
- public boolean isEmpty() {
- return !mHasSetPhoto;
+ private void updatePhotoDescription() {
+ mPhotoTouchInterceptOverlay.setContentDescription(getContext().getString(
+ mIsNonDefaultPhotoBound
+ ? R.string.editor_change_photo_content_description
+ : R.string.editor_add_photo_content_description));
}
-
- @Override
- public void markDeleted() {
- // Photo is not deletable
+ /**
+ * Binds a full size photo loaded from the given Uri.
+ */
+ public void setFullSizedPhoto(Uri photoUri) {
+ EditorUiUtils.loadPhoto(ContactPhotoManager.getInstance(getContext()),
+ mPhotoImageView, photoUri);
+ mIsNonDefaultPhotoBound = true;
+ updatePhotoDescription();
}
- @Override
- public void deleteEditor() {
- // Photo is not deletable
+ /**
+ * Removes the current bound photo bitmap.
+ */
+ public void removePhoto() {
+ setDefaultPhoto(mMaterialPalette);
}
@Override
- public void clearAllFields() {
- resetDefault();
- }
-
- /**
- * The change drop down menu should be anchored to this view.
- */
- public View getChangeAnchorView() {
- return mChangeButton;
+ public void onClick(View view) {
+ if (mListener != null) {
+ mListener.onPhotoEditorViewClicked();
+ }
}
}
diff --git a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
index 4b502e57b..31d41b1ab 100644
--- a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
+++ b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
@@ -16,16 +16,18 @@
package com.android.contacts.editor;
-import com.android.contacts.R;
-import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
-
import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
import java.util.ArrayList;
@@ -91,8 +93,10 @@ public class PhotoSourceDialogFragment extends DialogFragment {
};
// Build the AlertDialog
+ final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+ title.setText(R.string.menu_change_photo);
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setTitle(R.string.menu_change_photo);
+ builder.setCustomTitle(title);
builder.setItems(items, clickListener);
builder.setNegativeButton(android.R.string.cancel, /* listener =*/ null);
return builder.create();
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
new file mode 100644
index 000000000..5a9c9fd07
--- /dev/null
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -0,0 +1,246 @@
+package com.android.contacts.editor;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.R;
+import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.editor.PickRawContactLoader.RawContact;
+import com.android.contacts.editor.PickRawContactLoader.RawContactsMetadata;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.EditorEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.preference.ContactsPreferences;
+
+/**
+ * Should only be started from an activity that implements {@link PickRawContactListener}.
+ * Dialog containing the raw contacts that make up a contact. On selection the editor is loaded
+ * for the chosen raw contact.
+ */
+public class PickRawContactDialogFragment extends DialogFragment {
+ private static final String ARGS_RAW_CONTACTS_METADATA = "rawContactsMetadata";
+ private static final int REQUEST_CODE_JOIN = 3;
+
+ public interface PickRawContactListener {
+ void onPickRawContact(long rawContactId);
+ }
+
+ /**
+ * Used to list the account info for the given raw contacts list.
+ */
+ private final class RawContactAccountListAdapter extends BaseAdapter {
+ private final LayoutInflater mInflater;
+ private final Context mContext;
+ private final RawContactsMetadata mRawContactsMetadata;
+ private final AccountTypeManager mAccountTypeManager;
+ private final ContactsPreferences mPreferences;
+
+ public RawContactAccountListAdapter(Context context,
+ RawContactsMetadata rawContactsMetadata) {
+ mContext = context;
+ mInflater = LayoutInflater.from(context);
+ mAccountTypeManager = AccountTypeManager.getInstance(context);
+ mPreferences = new ContactsPreferences(context);
+ mRawContactsMetadata = rawContactsMetadata;
+ }
+
+ @Override
+ public int getCount() {
+ return mRawContactsMetadata.rawContacts.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mRawContactsMetadata.rawContacts.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return mRawContactsMetadata.rawContacts.get(position).id;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final View view;
+ final RawContactViewHolder holder;
+ if (convertView == null) {
+ view = mInflater.inflate(R.layout.raw_contact_list_item, parent, false);
+ holder = new RawContactViewHolder();
+ holder.displayName = (TextView) view.findViewById(R.id.display_name);
+ holder.accountName = (TextView) view.findViewById(R.id.account_name);
+ holder.accountIcon = (ImageView) view.findViewById(R.id.account_icon);
+ holder.photo = (ImageView) view.findViewById(R.id.photo);
+ view.setTag(holder);
+ } else {
+ view = convertView;
+ holder = (RawContactViewHolder) view.getTag();
+ }
+ final RawContact rawContact = mRawContactsMetadata.rawContacts.get(position);
+ final AccountType account = mAccountTypeManager.getAccountType(rawContact.accountType,
+ rawContact.accountDataSet);
+
+ String displayName =
+ mPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY
+ ? rawContact.displayName : rawContact.displayNameAlt;
+
+ if (TextUtils.isEmpty(displayName)) {
+ displayName = mContext.getString(R.string.missing_name);
+ }
+ holder.displayName.setText(displayName);
+
+ final String accountDisplayLabel;
+
+ // Use the same string as editor if it's an editable user profile raw contact.
+ if (mRawContactsMetadata.isUserProfile && account.areContactsWritable()) {
+ final AccountInfo accountInfo =
+ AccountTypeManager.getInstance(getContext()).getAccountInfoForAccount(
+ new AccountWithDataSet(rawContact.accountName,
+ rawContact.accountType, rawContact.accountDataSet));
+ accountDisplayLabel = EditorUiUtils.getAccountHeaderLabelForMyProfile(mContext,
+ accountInfo);
+ } else if (GoogleAccountType.ACCOUNT_TYPE.equals(rawContact.accountType)
+ && account.dataSet == null) {
+ // Focus Google accounts have the account name shown
+ accountDisplayLabel = rawContact.accountName;
+ } else {
+ accountDisplayLabel = account.getDisplayLabel(mContext).toString();
+ }
+
+ holder.accountName.setText(accountDisplayLabel);
+ holder.accountIcon.setImageDrawable(account.getDisplayIcon(mContext));
+ final ContactPhotoManager.DefaultImageRequest
+ request = new ContactPhotoManager.DefaultImageRequest(
+ displayName, String.valueOf(rawContact.id), /* isCircular = */ true);
+
+ ContactPhotoManager.getInstance(mContext).loadThumbnail(holder.photo,
+ rawContact.photoId,
+ /* darkTheme = */ false,
+ /* isCircular = */ true,
+ request);
+ return view;
+ }
+
+ class RawContactViewHolder {
+ TextView displayName;
+ TextView accountName;
+ ImageView accountIcon;
+ ImageView photo;
+ }
+ }
+
+ private ListAdapter mAdapter;
+ private boolean mShouldFinishActivity = true;
+
+ public static PickRawContactDialogFragment getInstance(RawContactsMetadata metadata) {
+ final PickRawContactDialogFragment fragment = new PickRawContactDialogFragment();
+ final Bundle args = new Bundle();
+ args.putParcelable(ARGS_RAW_CONTACTS_METADATA, metadata);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ if (!(getActivity() instanceof PickRawContactListener)) {
+ throw new IllegalArgumentException(
+ "Host activity doesn't implement PickRawContactListener");
+ }
+ final Bundle args = getArguments();
+ if (args == null) {
+ throw new IllegalArgumentException("Dialog created with no arguments");
+ }
+
+ final RawContactsMetadata metadata = args.getParcelable(ARGS_RAW_CONTACTS_METADATA);
+ if (metadata == null) {
+ throw new IllegalArgumentException("Dialog created with null RawContactsMetadata");
+ }
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ mAdapter = new RawContactAccountListAdapter(getContext(), metadata);
+ if (metadata.showReadOnly) {
+ builder.setTitle(R.string.contact_editor_pick_linked_contact_dialog_title);
+ // Only provide link editing options for non-user profile contacts.
+ if (!metadata.isUserProfile) {
+ builder.setPositiveButton(R.string.contact_editor_add_linked_contact,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mShouldFinishActivity = false;
+ final Intent intent = new Intent(getActivity(),
+ ContactSelectionActivity.class);
+ intent.setAction(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY,
+ metadata.contactId);
+ getActivity().startActivityForResult(intent, REQUEST_CODE_JOIN);
+ }
+ });
+ builder.setNegativeButton(R.string.contact_editor_unlink_contacts,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mShouldFinishActivity = false;
+ final SplitContactConfirmationDialogFragment splitDialog = new
+ SplitContactConfirmationDialogFragment();
+ splitDialog.show(getActivity().getFragmentManager(),
+ SplitContactConfirmationDialogFragment.TAG);
+ }
+ });
+ }
+ } else {
+ builder.setTitle(R.string.contact_editor_pick_raw_contact_to_edit_dialog_title);
+ }
+ builder.setAdapter(mAdapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final long rawContactId = mAdapter.getItemId(which);
+ ((PickRawContactListener) getActivity()).onPickRawContact(rawContactId);
+ }
+ });
+ builder.setCancelable(true);
+ if (savedInstanceState == null) {
+ Logger.logEditorEvent(EditorEvent.EventType.SHOW_RAW_CONTACT_PICKER,
+ /* numberRawContacts */ mAdapter.getCount());
+ }
+ return builder.create();
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ if (mShouldFinishActivity) {
+ finishActivity();
+ }
+ }
+
+ @Override
+ public Context getContext() {
+ return getActivity();
+ }
+
+ private void finishActivity() {
+ if (getActivity() != null && !getActivity().isFinishing()) {
+ getActivity().finish();
+ }
+ }
+}
diff --git a/src/com/android/contacts/editor/PickRawContactLoader.java b/src/com/android/contacts/editor/PickRawContactLoader.java
new file mode 100644
index 000000000..e43d02b07
--- /dev/null
+++ b/src/com/android/contacts/editor/PickRawContactLoader.java
@@ -0,0 +1,310 @@
+package com.android.contacts.editor;
+
+import android.content.AsyncTaskLoader;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Profile;
+import android.provider.ContactsContract.RawContacts;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Loader for the pick a raw contact to edit activity. Loads all raw contact metadata for the
+ * given Contact {@link Uri}.
+ */
+public class PickRawContactLoader extends
+ AsyncTaskLoader<PickRawContactLoader.RawContactsMetadata> {
+ private Uri mContactUri;
+ private RawContactsMetadata mCachedResult;
+
+ private static final String[] RAW_CONTACT_PROJECTION = new String[] {
+ RawContacts.ACCOUNT_NAME,
+ RawContacts.ACCOUNT_TYPE,
+ RawContacts.DATA_SET,
+ RawContacts._ID,
+ RawContacts.DISPLAY_NAME_PRIMARY,
+ RawContacts.DISPLAY_NAME_ALTERNATIVE
+ };
+
+ private static final String RAW_CONTACT_SELECTION = RawContacts.CONTACT_ID + "=?";
+
+ private static final int ACCOUNT_NAME = 0;
+ private static final int ACCOUNT_TYPE = 1;
+ private static final int DATA_SET = 2;
+ private static final int RAW_CONTACT_ID = 3;
+ private static final int DISPLAY_NAME_PRIMARY = 4;
+ private static final int DISPLAY_NAME_ALTERNATIVE = 5;
+
+ private static final String PHOTO_SELECTION_PREFIX =
+ ContactsContract.Data.RAW_CONTACT_ID + " IN (";
+ private static final String PHOTO_SELECTION_SUFFIX = ") AND " + ContactsContract.Data.MIMETYPE
+ + "=\"" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "\"";
+
+ public PickRawContactLoader(Context context, Uri contactUri) {
+ super(context);
+ mContactUri = ensureIsContactUri(contactUri);
+ }
+
+ @Override
+ public RawContactsMetadata loadInBackground() {
+ final ContentResolver resolver = getContext().getContentResolver();
+ // Get the id of the contact we're looking at.
+ final Cursor contactCursor = resolver.query(
+ mContactUri, new String[] {Contacts._ID, Contacts.IS_USER_PROFILE}, null,
+ null, null);
+
+ if (contactCursor == null) {
+ return null;
+ }
+
+ if (contactCursor.getCount() < 1) {
+ contactCursor.close();
+ return null;
+ }
+
+ final RawContactsMetadata result = new RawContactsMetadata();
+ try {
+ contactCursor.moveToFirst();
+ result.contactId = contactCursor.getLong(/* Contacts._ID */ 0);
+ result.isUserProfile = contactCursor.getInt(/* Contacts.IS_USER_PROFILE */ 1) == 1;
+ } finally {
+ contactCursor.close();
+ }
+
+ // Load RawContact data
+ final Uri rawContactUri;
+ if (result.isUserProfile) {
+ rawContactUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI;
+ } else {
+ rawContactUri = RawContacts.CONTENT_URI;
+ }
+
+ final Cursor rawContactCursor = resolver.query(
+ rawContactUri, RAW_CONTACT_PROJECTION, RAW_CONTACT_SELECTION,
+ new String[] {Long.toString(result.contactId)}, null);
+
+ if (rawContactCursor == null) {
+ return null;
+ }
+
+ if (rawContactCursor.getCount() < 1) {
+ rawContactCursor.close();
+ return null;
+ }
+
+ rawContactCursor.moveToPosition(-1);
+ final StringBuilder photoSelection = new StringBuilder(PHOTO_SELECTION_PREFIX);
+ final Map<Long, RawContact> rawContactMap = new HashMap<>();
+ try {
+ while (rawContactCursor.moveToNext()) {
+ RawContact rawContact = new RawContact();
+ rawContact.id = rawContactCursor.getLong(RAW_CONTACT_ID);
+ photoSelection.append(rawContact.id).append(',');
+ rawContact.displayName = rawContactCursor.getString(DISPLAY_NAME_PRIMARY);
+ rawContact.displayNameAlt = rawContactCursor.getString(DISPLAY_NAME_ALTERNATIVE);
+ rawContact.accountName = rawContactCursor.getString(ACCOUNT_NAME);
+ rawContact.accountType = rawContactCursor.getString(ACCOUNT_TYPE);
+ rawContact.accountDataSet = rawContactCursor.getString(DATA_SET);
+ result.rawContacts.add(rawContact);
+ rawContactMap.put(rawContact.id, rawContact);
+ }
+ } finally {
+ rawContactCursor.close();
+ }
+
+ // Remove the last ','
+ if (photoSelection.length() > 0) {
+ photoSelection.deleteCharAt(photoSelection.length() - 1);
+ }
+ photoSelection.append(PHOTO_SELECTION_SUFFIX);
+
+ final Uri dataUri = result.isUserProfile
+ ? Uri.withAppendedPath(Profile.CONTENT_URI, Data.CONTENT_URI.getPath())
+ : Data.CONTENT_URI;
+ final Cursor photoCursor = resolver.query(
+ dataUri,
+ new String[] {Data.RAW_CONTACT_ID, Contacts.Photo._ID},
+ photoSelection.toString(), null, null);
+
+ if (photoCursor != null) {
+ try {
+ photoCursor.moveToPosition(-1);
+ while (photoCursor.moveToNext()) {
+ final long rawContactId = photoCursor.getLong(/* Data.RAW_CONTACT_ID */ 0);
+ rawContactMap.get(rawContactId).photoId =
+ photoCursor.getLong(/* PHOTO._ID */ 1);
+ }
+ } finally {
+ photoCursor.close();
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public void deliverResult(RawContactsMetadata data) {
+ mCachedResult = data;
+ if (isStarted()) {
+ super.deliverResult(data);
+ }
+ }
+
+ @Override
+ protected void onStartLoading() {
+ super.onStartLoading();
+ if (mCachedResult == null) {
+ forceLoad();
+ } else {
+ deliverResult(mCachedResult);
+ }
+ }
+
+ /**
+ * Ensures that this is a valid contact URI. If invalid, then an exception is
+ * thrown. Otherwise, the original URI is returned.
+ */
+ private static Uri ensureIsContactUri(final Uri uri) {
+ if (uri == null) {
+ throw new IllegalArgumentException("Uri must not be null");
+ }
+ if (!uri.toString().startsWith(Contacts.CONTENT_URI.toString())) {
+ throw new IllegalArgumentException("Invalid contact Uri: " + uri);
+ }
+ return uri;
+ }
+
+ public static class RawContactsMetadata implements Parcelable {
+ public static final Parcelable.Creator<RawContactsMetadata> CREATOR =
+ new Parcelable.Creator<RawContactsMetadata>() {
+ @Override
+ public RawContactsMetadata createFromParcel(Parcel source) {
+ return new RawContactsMetadata(source);
+ }
+
+ @Override
+ public RawContactsMetadata[] newArray(int size) {
+ return new RawContactsMetadata[size];
+ }
+ };
+
+ public long contactId;
+ public boolean isUserProfile;
+ public boolean showReadOnly = false;
+ public ArrayList<RawContact> rawContacts = new ArrayList<>();
+
+ public RawContactsMetadata() {}
+
+ private RawContactsMetadata(Parcel in) {
+ contactId = in.readLong();
+ isUserProfile = in.readInt() == 1;
+ showReadOnly = in.readInt() == 1;
+ in.readTypedList(rawContacts, RawContact.CREATOR);
+ }
+
+ /**
+ * Removes all read-only raw contacts.
+ */
+ public void trimReadOnly(AccountTypeManager accountManager) {
+ for (int i = rawContacts.size() - 1; i >= 0 ; i--) {
+ final RawContact rawContact = rawContacts.get(i);
+ final AccountType account = accountManager.getAccountType(
+ rawContact.accountType, rawContact.accountDataSet);
+ if (!account.areContactsWritable()) {
+ rawContacts.remove(i);
+ }
+ }
+ }
+
+ /**
+ * Returns the index of the first writable account in this contact or -1 if none exist.
+ */
+ public int getIndexOfFirstWritableAccount(AccountTypeManager accountManager) {
+ for (int i = 0; i < rawContacts.size(); i++) {
+ final RawContact rawContact = rawContacts.get(i);
+ final AccountType account = accountManager.getAccountType(
+ rawContact.accountType, rawContact.accountDataSet);
+ if (account.areContactsWritable()) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(contactId);
+ dest.writeInt(isUserProfile ? 1 : 0);
+ dest.writeInt(showReadOnly ? 1 : 0);
+ dest.writeTypedList(rawContacts);
+ }
+ }
+
+ public static class RawContact implements Parcelable {
+ public static final Parcelable.Creator<RawContact> CREATOR =
+ new Parcelable.Creator<RawContact>() {
+ @Override
+ public RawContact createFromParcel(Parcel source) {
+ return new RawContact(source);
+ }
+
+ @Override
+ public RawContact[] newArray(int size) {
+ return new RawContact[size];
+ }
+ };
+
+ public long id;
+ public long photoId;
+ public String displayName;
+ public String displayNameAlt;
+ public String accountName;
+ public String accountType;
+ public String accountDataSet;
+
+ public RawContact() {}
+
+ private RawContact(Parcel in) {
+ id = in.readLong();
+ photoId = in.readLong();
+ displayName = in.readString();
+ displayNameAlt = in.readString();
+ accountName = in.readString();
+ accountType = in.readString();
+ accountDataSet = in.readString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(id);
+ dest.writeLong(photoId);
+ dest.writeString(displayName);
+ dest.writeString(displayNameAlt);
+ dest.writeString(accountName);
+ dest.writeString(accountType);
+ dest.writeString(accountDataSet);
+ }
+ }
+}
diff --git a/src/com/android/contacts/editor/RawContactDeltaComparator.java b/src/com/android/contacts/editor/RawContactDeltaComparator.java
index 1a00c9df9..8b410aaf9 100644
--- a/src/com/android/contacts/editor/RawContactDeltaComparator.java
+++ b/src/com/android/contacts/editor/RawContactDeltaComparator.java
@@ -16,14 +16,14 @@
package com.android.contacts.editor;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-
import android.content.Context;
import android.provider.ContactsContract.RawContacts;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+
import java.util.Comparator;
/**
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 5a4c9dbbf..7c61f648f 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * 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.
@@ -17,75 +17,215 @@
package com.android.contacts.editor;
import android.content.Context;
+import android.content.res.Resources;
import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.os.Bundle;
+import android.os.Parcel;
import android.os.Parcelable;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.text.TextUtils;
import android.util.AttributeSet;
-import android.util.Pair;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import android.widget.ListPopupWindow;
import android.widget.TextView;
-import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.GeoUtil;
import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
-
-import com.google.common.base.Objects;
-
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.MaterialColorMapUtils;
+import com.android.contacts.util.UiClosables;
+
+import java.io.FileNotFoundException;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
/**
- * Custom view that provides all the editor interaction for a specific
- * {@link Contacts} represented through an {@link RawContactDelta}. Callers can
- * reuse this view and quickly rebuild its contents through
- * {@link #setState(RawContactDelta, AccountType, ViewIdGenerator)}.
- * <p>
- * Internal updates are performed against {@link ValuesDelta} so that the
- * source {@link RawContact} can be swapped out. Any state-based changes, such as
- * adding {@link Data} rows or changing {@link EditType}, are performed through
- * {@link RawContactModifier} to ensure that {@link AccountType} are enforced.
+ * View to display information from multiple {@link RawContactDelta}s grouped together.
*/
-public class RawContactEditorView extends BaseRawContactEditorView {
- private static final String KEY_SUPER_INSTANCE_STATE = "superInstanceState";
+public class RawContactEditorView extends LinearLayout implements View.OnClickListener {
- private LayoutInflater mInflater;
+ static final String TAG = "RawContactEditorView";
- private StructuredNameEditorView mName;
- private PhoneticNameEditorView mPhoneticName;
- private TextFieldsEditorView mNickName;
+ /**
+ * Callbacks for hosts of {@link RawContactEditorView}s.
+ */
+ public interface Listener {
+
+ /**
+ * Invoked when the structured name editor field has changed.
+ *
+ * @param rawContactId The raw contact ID from the underlying {@link RawContactDelta}.
+ * @param valuesDelta The values from the underlying {@link RawContactDelta}.
+ */
+ public void onNameFieldChanged(long rawContactId, ValuesDelta valuesDelta);
+
+ /**
+ * Invoked when the editor should rebind editors for a new account.
+ *
+ * @param oldState Old data being edited.
+ * @param oldAccount Old account associated with oldState.
+ * @param newAccount New account to be used.
+ */
+ public void onRebindEditorsForNewContact(RawContactDelta oldState,
+ AccountWithDataSet oldAccount, AccountWithDataSet newAccount);
+
+ /**
+ * Invoked when no editors could be bound for the contact.
+ */
+ public void onBindEditorsFailed();
+
+ /**
+ * Invoked after editors have been bound for the contact.
+ */
+ public void onEditorsBound();
+ }
+ /**
+ * Sorts kinds roughly the same as quick contacts; we diverge in the following ways:
+ * <ol>
+ * <li>All names are together at the top.</li>
+ * <li>IM is moved up after addresses</li>
+ * <li>SIP addresses are moved to below phone numbers</li>
+ * <li>Group membership is placed at the end</li>
+ * </ol>
+ */
+ private static final class MimeTypeComparator implements Comparator<String> {
+
+ private static final List<String> MIME_TYPE_ORDER = Arrays.asList(new String[] {
+ StructuredName.CONTENT_ITEM_TYPE,
+ Nickname.CONTENT_ITEM_TYPE,
+ Organization.CONTENT_ITEM_TYPE,
+ Phone.CONTENT_ITEM_TYPE,
+ SipAddress.CONTENT_ITEM_TYPE,
+ Email.CONTENT_ITEM_TYPE,
+ StructuredPostal.CONTENT_ITEM_TYPE,
+ Im.CONTENT_ITEM_TYPE,
+ Website.CONTENT_ITEM_TYPE,
+ Event.CONTENT_ITEM_TYPE,
+ Relation.CONTENT_ITEM_TYPE,
+ Note.CONTENT_ITEM_TYPE,
+ GroupMembership.CONTENT_ITEM_TYPE
+ });
+
+ @Override
+ public int compare(String mimeType1, String mimeType2) {
+ if (mimeType1 == mimeType2) return 0;
+ if (mimeType1 == null) return -1;
+ if (mimeType2 == null) return 1;
+
+ int index1 = MIME_TYPE_ORDER.indexOf(mimeType1);
+ int index2 = MIME_TYPE_ORDER.indexOf(mimeType2);
+
+ // Fallback to alphabetical ordering of the mime type if both are not found
+ if (index1 < 0 && index2 < 0) return mimeType1.compareTo(mimeType2);
+ if (index1 < 0) return 1;
+ if (index2 < 0) return -1;
+
+ return index1 < index2 ? -1 : 1;
+ }
+ }
- private GroupMembershipView mGroupMembershipView;
+ public static class SavedState extends BaseSavedState {
- private ViewGroup mFields;
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
- private View mAccountSelector;
- private TextView mAccountSelectorTypeTextView;
- private TextView mAccountSelectorNameTextView;
+ private boolean mIsExpanded;
- private View mAccountHeader;
- private TextView mAccountHeaderTypeTextView;
- private TextView mAccountHeaderNameTextView;
- private ImageView mAccountIconImageView;
+ public SavedState(Parcelable superState) {
+ super(superState);
+ }
- private long mRawContactId = -1;
- private boolean mAutoAddToDefaultGroup = true;
- private Cursor mGroupMetaData;
- private DataKind mGroupMembershipKind;
- private RawContactDelta mState;
+ private SavedState(Parcel in) {
+ super(in);
+ mIsExpanded = in.readInt() != 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(mIsExpanded ? 1 : 0);
+ }
+ }
+
+ private RawContactEditorView.Listener mListener;
+
+ private AccountTypeManager mAccountTypeManager;
+ private LayoutInflater mLayoutInflater;
+
+ private ViewIdGenerator mViewIdGenerator;
+ private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
+ private boolean mHasNewContact;
+ private boolean mIsUserProfile;
+ private AccountWithDataSet mPrimaryAccount;
+ private List<AccountInfo> mAccounts = new ArrayList<>();
+ private RawContactDeltaList mRawContactDeltas;
+ private RawContactDelta mCurrentRawContactDelta;
+ private long mRawContactIdToDisplayAlone = -1;
+ private Map<String, KindSectionData> mKindSectionDataMap = new HashMap<>();
+ private Set<String> mSortedMimetypes = new TreeSet<>(new MimeTypeComparator());
+
+ // Account header
+ private View mAccountHeaderContainer;
+ private TextView mAccountHeaderPrimaryText;
+ private TextView mAccountHeaderSecondaryText;
+ private ImageView mAccountHeaderIcon;
+ private ImageView mAccountHeaderExpanderIcon;
+
+ private PhotoEditorView mPhotoView;
+ private ViewGroup mKindSectionViews;
+ private Map<String, KindSectionView> mKindSectionViewMap = new HashMap<>();
+ private View mMoreFields;
+
+ private boolean mIsExpanded;
+
+ private Bundle mIntentExtras;
+
+ private ValuesDelta mPhotoValuesDelta;
public RawContactEditorView(Context context) {
super(context);
@@ -95,307 +235,709 @@ public class RawContactEditorView extends BaseRawContactEditorView {
super(context, attrs);
}
+ /**
+ * Sets the receiver for {@link RawContactEditorView} callbacks.
+ */
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ mAccountTypeManager = AccountTypeManager.getInstance(getContext());
+ mLayoutInflater = (LayoutInflater)
+ getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ // Account header
+ mAccountHeaderContainer = findViewById(R.id.account_header_container);
+ mAccountHeaderPrimaryText = (TextView) findViewById(R.id.account_type);
+ mAccountHeaderSecondaryText = (TextView) findViewById(R.id.account_name);
+ mAccountHeaderIcon = (ImageView) findViewById(R.id.account_type_icon);
+ mAccountHeaderExpanderIcon = (ImageView) findViewById(R.id.account_expander_icon);
+
+ mPhotoView = (PhotoEditorView) findViewById(R.id.photo_editor);
+ mKindSectionViews = (LinearLayout) findViewById(R.id.kind_section_views);
+ mMoreFields = findViewById(R.id.more_fields);
+ mMoreFields.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (view.getId() == R.id.more_fields) {
+ showAllFields();
+ }
+ }
+
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
-
- View view = getPhotoEditor();
- if (view != null) {
- view.setEnabled(enabled);
+ final int childCount = mKindSectionViews.getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ mKindSectionViews.getChildAt(i).setEnabled(enabled);
}
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ final Parcelable superState = super.onSaveInstanceState();
+ final SavedState savedState = new SavedState(superState);
+ savedState.mIsExpanded = mIsExpanded;
+ return savedState;
+ }
- if (mName != null) {
- mName.setEnabled(enabled);
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if(!(state instanceof SavedState)) {
+ super.onRestoreInstanceState(state);
+ return;
+ }
+ final SavedState savedState = (SavedState) state;
+ super.onRestoreInstanceState(savedState.getSuperState());
+ mIsExpanded = savedState.mIsExpanded;
+ if (mIsExpanded) {
+ showAllFields();
}
+ }
- if (mPhoneticName != null) {
- mPhoneticName.setEnabled(enabled);
+ /**
+ * Pass through to {@link PhotoEditorView#setListener}.
+ */
+ public void setPhotoListener(PhotoEditorView.Listener listener) {
+ mPhotoView.setListener(listener);
+ }
+
+ public void removePhoto() {
+ mPhotoValuesDelta.setFromTemplate(true);
+ mPhotoValuesDelta.put(Photo.PHOTO, (byte[]) null);
+ mPhotoValuesDelta.put(Photo.PHOTO_FILE_ID, (String) null);
+
+ mPhotoView.removePhoto();
+ }
+
+ /**
+ * Pass through to {@link PhotoEditorView#setFullSizedPhoto(Uri)}.
+ */
+ public void setFullSizePhoto(Uri photoUri) {
+ mPhotoView.setFullSizedPhoto(photoUri);
+ }
+
+ public void updatePhoto(Uri photoUri) {
+ mPhotoValuesDelta.setFromTemplate(false);
+ // Unset primary for all photos
+ unsetSuperPrimaryFromAllPhotos();
+ // Mark the currently displayed photo as primary
+ mPhotoValuesDelta.setSuperPrimary(true);
+
+ // Even though high-res photos cannot be saved by passing them via
+ // an EntityDeltaList (since they cause the Bundle size limit to be
+ // exceeded), we still pass a low-res thumbnail. This simplifies
+ // code all over the place, because we don't have to test whether
+ // there is a change in EITHER the delta-list OR a changed photo...
+ // this way, there is always a change in the delta-list.
+ try {
+ final byte[] bytes = EditorUiUtils.getCompressedThumbnailBitmapBytes(
+ getContext(), photoUri);
+ if (bytes != null) {
+ mPhotoValuesDelta.setPhoto(bytes);
+ }
+ } catch (FileNotFoundException e) {
+ elog("Failed to get bitmap from photo Uri");
}
- if (mFields != null) {
- int count = mFields.getChildCount();
- for (int i = 0; i < count; i++) {
- mFields.getChildAt(i).setEnabled(enabled);
+ mPhotoView.setFullSizedPhoto(photoUri);
+ }
+
+ private void unsetSuperPrimaryFromAllPhotos() {
+ for (int i = 0; i < mRawContactDeltas.size(); i++) {
+ final RawContactDelta rawContactDelta = mRawContactDeltas.get(i);
+ if (!rawContactDelta.hasMimeEntries(Photo.CONTENT_ITEM_TYPE)) {
+ continue;
+ }
+ final List<ValuesDelta> photosDeltas =
+ mRawContactDeltas.get(i).getMimeEntries(Photo.CONTENT_ITEM_TYPE);
+ if (photosDeltas == null) {
+ continue;
+ }
+ for (int j = 0; j < photosDeltas.size(); j++) {
+ photosDeltas.get(j).setSuperPrimary(false);
}
}
+ }
+
+ /**
+ * Pass through to {@link PhotoEditorView#isWritablePhotoSet}.
+ */
+ public boolean isWritablePhotoSet() {
+ return mPhotoView.isWritablePhotoSet();
+ }
+
+ /**
+ * Get the raw contact ID for the current photo.
+ */
+ public long getPhotoRawContactId() {
+ return mCurrentRawContactDelta == null ? - 1 : mCurrentRawContactDelta.getRawContactId();
+ }
- if (mGroupMembershipView != null) {
- mGroupMembershipView.setEnabled(enabled);
+ public StructuredNameEditorView getNameEditorView() {
+ final KindSectionView nameKindSectionView = mKindSectionViewMap
+ .get(StructuredName.CONTENT_ITEM_TYPE);
+ return nameKindSectionView == null
+ ? null : nameKindSectionView.getNameEditorView();
+ }
+
+ public RawContactDelta getCurrentRawContactDelta() {
+ return mCurrentRawContactDelta;
+ }
+
+ /**
+ * Marks the raw contact photo given as primary for the aggregate contact.
+ */
+ public void setPrimaryPhoto() {
+
+ // Update values delta
+ final ValuesDelta valuesDelta = mCurrentRawContactDelta
+ .getSuperPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
+ if (valuesDelta == null) {
+ Log.wtf(TAG, "setPrimaryPhoto: had no ValuesDelta for the current RawContactDelta");
+ return;
}
+ valuesDelta.setFromTemplate(false);
+ unsetSuperPrimaryFromAllPhotos();
+ valuesDelta.setSuperPrimary(true);
}
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
+ public View getAggregationAnchorView() {
+ final StructuredNameEditorView nameEditorView = getNameEditorView();
+ return nameEditorView != null ? nameEditorView.findViewById(R.id.anchor_view) : null;
+ }
- mInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ public void setGroupMetaData(Cursor groupMetaData) {
+ final KindSectionView groupKindSectionView =
+ mKindSectionViewMap.get(GroupMembership.CONTENT_ITEM_TYPE);
+ if (groupKindSectionView == null) {
+ return;
+ }
+ groupKindSectionView.setGroupMetaData(groupMetaData);
+ if (mIsExpanded) {
+ groupKindSectionView.setHideWhenEmpty(false);
+ groupKindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
+ }
+ }
- mName = (StructuredNameEditorView)findViewById(R.id.edit_name);
- mName.setDeletable(false);
+ public void setIntentExtras(Bundle extras) {
+ mIntentExtras = extras;
+ }
- mPhoneticName = (PhoneticNameEditorView)findViewById(R.id.edit_phonetic_name);
- mPhoneticName.setDeletable(false);
+ public void setState(RawContactDeltaList rawContactDeltas,
+ MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
+ boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
+ long rawContactIdToDisplayAlone) {
- mNickName = (TextFieldsEditorView)findViewById(R.id.edit_nick_name);
+ mRawContactDeltas = rawContactDeltas;
+ mRawContactIdToDisplayAlone = rawContactIdToDisplayAlone;
- mFields = (ViewGroup)findViewById(R.id.sect_fields);
+ mKindSectionViewMap.clear();
+ mKindSectionViews.removeAllViews();
+ mMoreFields.setVisibility(View.VISIBLE);
- mAccountHeader = findViewById(R.id.account_header_container);
- mAccountHeaderTypeTextView = (TextView) findViewById(R.id.account_type);
- mAccountHeaderNameTextView = (TextView) findViewById(R.id.account_name);
- mAccountIconImageView = (ImageView) findViewById(android.R.id.icon);
+ mMaterialPalette = materialPalette;
+ mViewIdGenerator = viewIdGenerator;
- // The same header is used by both full editor and read-only editor view. The header is
- // left-aligned with read-only editor view but is not aligned well with full editor. So we
- // need to shift the text in the header a little bit for full editor.
- LinearLayout accountInfoView = (LinearLayout) findViewById(R.id.account_info);
- final int topBottomPaddingDp = (int) getResources().getDimension(R.dimen
- .editor_account_header_expandable_top_bottom_padding);
- final int leftPaddingDp = (int) getResources().getDimension(R.dimen
- .editor_account_header_expandable_left_padding);
- accountInfoView.setPadding(leftPaddingDp, topBottomPaddingDp, 0, topBottomPaddingDp);
+ mHasNewContact = hasNewContact;
+ mIsUserProfile = isUserProfile;
+ mPrimaryAccount = primaryAccount;
+ if (mPrimaryAccount == null && mAccounts != null) {
+ mPrimaryAccount = ContactEditorUtils.create(getContext())
+ .getOnlyOrDefaultAccount(AccountInfo.extractAccounts(mAccounts));
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "state: primary " + mPrimaryAccount);
+ }
- mAccountSelector = findViewById(R.id.account_selector_container);
- mAccountSelectorTypeTextView = (TextView) findViewById(R.id.account_type_selector);
- mAccountSelectorNameTextView = (TextView) findViewById(R.id.account_name_selector);
+ // Parse the given raw contact deltas
+ if (rawContactDeltas == null || rawContactDeltas.isEmpty()) {
+ elog("No raw contact deltas");
+ if (mListener != null) mListener.onBindEditorsFailed();
+ return;
+ }
+ pickRawContactDelta();
+ if (mCurrentRawContactDelta == null) {
+ elog("Couldn't pick a raw contact delta.");
+ if (mListener != null) mListener.onBindEditorsFailed();
+ return;
+ }
+ // Apply any intent extras now that we have selected a raw contact delta.
+ applyIntentExtras();
+ parseRawContactDelta();
+ if (mKindSectionDataMap.isEmpty()) {
+ elog("No kind section data parsed from RawContactDelta(s)");
+ if (mListener != null) mListener.onBindEditorsFailed();
+ return;
+ }
+
+ final KindSectionData nameSectionData =
+ mKindSectionDataMap.get(StructuredName.CONTENT_ITEM_TYPE);
+ // Ensure that a structured name and photo exists
+ if (nameSectionData != null) {
+ final RawContactDelta rawContactDelta =
+ nameSectionData.getRawContactDelta();
+ RawContactModifier.ensureKindExists(
+ rawContactDelta,
+ rawContactDelta.getAccountType(mAccountTypeManager),
+ StructuredName.CONTENT_ITEM_TYPE);
+ RawContactModifier.ensureKindExists(
+ rawContactDelta,
+ rawContactDelta.getAccountType(mAccountTypeManager),
+ Photo.CONTENT_ITEM_TYPE);
+ }
+
+ // Setup the view
+ addPhotoView();
+ setAccountInfo();
+ if (isReadOnlyRawContact()) {
+ // We're want to display the inputs fields for a single read only raw contact
+ addReadOnlyRawContactEditorViews();
+ } else {
+ setupEditorNormally();
+ // If we're inserting a new contact, request focus to bring up the keyboard for the
+ // name field.
+ if (mHasNewContact) {
+ final StructuredNameEditorView name = getNameEditorView();
+ if (name != null) {
+ name.requestFocusForFirstEditField();
+ }
+ }
+ }
+ if (mListener != null) mListener.onEditorsBound();
}
- @Override
- protected Parcelable onSaveInstanceState() {
- Bundle bundle = new Bundle();
- // super implementation of onSaveInstanceState returns null
- bundle.putParcelable(KEY_SUPER_INSTANCE_STATE, super.onSaveInstanceState());
- return bundle;
+ public void setAccounts(List<AccountInfo> accounts) {
+ mAccounts.clear();
+ mAccounts.addAll(accounts);
+ // Update the account header
+ setAccountInfo();
}
- @Override
- protected void onRestoreInstanceState(Parcelable state) {
- if (state instanceof Bundle) {
- Bundle bundle = (Bundle) state;
- super.onRestoreInstanceState(bundle.getParcelable(KEY_SUPER_INSTANCE_STATE));
+ private void setupEditorNormally() {
+ addKindSectionViews();
+
+ mMoreFields.setVisibility(hasMoreFields() ? View.VISIBLE : View.GONE);
+
+ if (mIsExpanded) showAllFields();
+ }
+
+ private boolean isReadOnlyRawContact() {
+ return !mCurrentRawContactDelta.getAccountType(mAccountTypeManager).areContactsWritable();
+ }
+
+ private void pickRawContactDelta() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + mRawContactDeltas.size() + " rawContactDelta(s)");
+ }
+ for (int j = 0; j < mRawContactDeltas.size(); j++) {
+ final RawContactDelta rawContactDelta = mRawContactDeltas.get(j);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + j + " rawContactDelta" + rawContactDelta);
+ }
+ if (rawContactDelta == null || !rawContactDelta.isVisible()) continue;
+ final AccountType accountType = rawContactDelta.getAccountType(mAccountTypeManager);
+ if (accountType == null) continue;
+
+ if (mRawContactIdToDisplayAlone > 0) {
+ // Look for the raw contact if specified.
+ if (rawContactDelta.getRawContactId().equals(mRawContactIdToDisplayAlone)) {
+ mCurrentRawContactDelta = rawContactDelta;
+ return;
+ }
+ } else if (mPrimaryAccount != null
+ && mPrimaryAccount.equals(rawContactDelta.getAccountWithDataSet())) {
+ // Otherwise try to find the one that matches the default.
+ mCurrentRawContactDelta = rawContactDelta;
+ return;
+ } else if (accountType.areContactsWritable()){
+ // TODO: Find better raw contact delta
+ // Just select an arbitrary writable contact.
+ mCurrentRawContactDelta = rawContactDelta;
+ }
+ }
+
+ }
+
+ private void applyIntentExtras() {
+ if (mIntentExtras == null || mIntentExtras.size() == 0) {
return;
}
- super.onRestoreInstanceState(state);
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
+ final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+ RawContactModifier.parseExtras(getContext(), type, mCurrentRawContactDelta, mIntentExtras);
+ mIntentExtras = null;
}
- /**
- * Set the internal state for this view, given a current
- * {@link RawContactDelta} state and the {@link AccountType} that
- * apply to that state.
- */
- @Override
- public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig,
- boolean isProfile) {
+ private void parseRawContactDelta() {
+ mKindSectionDataMap.clear();
+ mSortedMimetypes.clear();
- mState = state;
+ final AccountType accountType = mCurrentRawContactDelta.getAccountType(mAccountTypeManager);
+ final List<DataKind> dataKinds = accountType.getSortedDataKinds();
+ final int dataKindSize = dataKinds == null ? 0 : dataKinds.size();
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + dataKindSize + " dataKinds(s)");
+ }
- // Remove any existing sections
- mFields.removeAllViews();
+ for (int i = 0; i < dataKindSize; i++) {
+ final DataKind dataKind = dataKinds.get(i);
+ // Skip null and un-editable fields.
+ if (dataKind == null || !dataKind.editable) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + i +
+ (dataKind == null ? " dropped null data kind"
+ : " dropped uneditable mimetype: " + dataKind.mimeType));
+ }
+ continue;
+ }
+ final String mimeType = dataKind.mimeType;
- // Bail if invalid state or account type
- if (state == null || type == null) return;
+ // Skip psuedo mime types
+ if (DataKind.PSEUDO_MIME_TYPE_NAME.equals(mimeType) ||
+ DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + i + " " + dataKind.mimeType + " dropped pseudo type");
+ }
+ continue;
+ }
- setId(vig.getId(state, null, null, ViewIdGenerator.NO_VIEW_INDEX));
+ // Skip custom fields
+ // TODO: Handle them when we implement editing custom fields.
+ if (CustomDataItem.MIMETYPE_CUSTOM_FIELD.equals(mimeType)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + i + " " + dataKind.mimeType + " dropped custom field");
+ }
+ continue;
+ }
- // Make sure we have a StructuredName
- RawContactModifier.ensureKindExists(state, type, StructuredName.CONTENT_ITEM_TYPE);
+ final KindSectionData kindSectionData =
+ new KindSectionData(accountType, dataKind, mCurrentRawContactDelta);
+ mKindSectionDataMap.put(mimeType, kindSectionData);
+ mSortedMimetypes.add(mimeType);
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "parse: " + i + " " + dataKind.mimeType + " " +
+ kindSectionData.getValuesDeltas().size() + " value(s) " +
+ kindSectionData.getNonEmptyValuesDeltas().size() + " non-empty value(s) " +
+ kindSectionData.getVisibleValuesDeltas().size() +
+ " visible value(s)");
+ }
+ }
+ }
- mRawContactId = state.getRawContactId();
+ private void addReadOnlyRawContactEditorViews() {
+ mKindSectionViews.removeAllViews();
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
+ getContext());
+ final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+ // Bail if invalid state or source
+ if (type == null) return;
+
+ // Make sure we have StructuredName
+ RawContactModifier.ensureKindExists(
+ mCurrentRawContactDelta, type, StructuredName.CONTENT_ITEM_TYPE);
+
+ ValuesDelta primary;
+
+ // Name
+ final Context context = getContext();
+ final Resources res = context.getResources();
+ primary = mCurrentRawContactDelta.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+ final String name = primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
+ getContext().getString(R.string.missing_name);
+ final Drawable nameDrawable = context.getDrawable(R.drawable.quantum_ic_person_vd_theme_24);
+ final String nameContentDescription = res.getString(R.string.header_name_entry);
+ bindData(nameDrawable, nameContentDescription, name, /* type */ null,
+ /* isFirstEntry */ true);
+
+ // Phones
+ final ArrayList<ValuesDelta> phones = mCurrentRawContactDelta
+ .getMimeEntries(Phone.CONTENT_ITEM_TYPE);
+ final Drawable phoneDrawable = context.getDrawable(R.drawable.quantum_ic_phone_vd_theme_24);
+ final String phoneContentDescription = res.getString(R.string.header_phone_entry);
+ if (phones != null) {
+ boolean isFirstPhoneBound = true;
+ for (ValuesDelta phone : phones) {
+ final String phoneNumber = phone.getPhoneNumber();
+ if (TextUtils.isEmpty(phoneNumber)) {
+ continue;
+ }
+ final String formattedNumber = PhoneNumberUtilsCompat.formatNumber(
+ phoneNumber, phone.getPhoneNormalizedNumber(),
+ GeoUtil.getCurrentCountryIso(getContext()));
+ CharSequence phoneType = null;
+ if (phone.hasPhoneType()) {
+ phoneType = Phone.getTypeLabel(
+ res, phone.getPhoneType(), phone.getPhoneLabel());
+ }
+ bindData(phoneDrawable, phoneContentDescription, formattedNumber, phoneType,
+ isFirstPhoneBound, true);
+ isFirstPhoneBound = false;
+ }
+ }
- // Fill in the account info
- final Pair<String,String> accountInfo = isProfile
- ? EditorUiUtils.getLocalAccountInfo(getContext(), state.getAccountName(), type)
- : EditorUiUtils.getAccountInfo(getContext(), state.getAccountName(), type);
- if (accountInfo.first == null) {
- // Hide this view so the other text view will be centered vertically
- mAccountHeaderNameTextView.setVisibility(View.GONE);
- } else {
- mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
- mAccountHeaderNameTextView.setText(accountInfo.first);
- }
- mAccountHeaderTypeTextView.setText(accountInfo.second);
- updateAccountHeaderContentDescription();
-
- // The account selector and header are both used to display the same information.
- mAccountSelectorTypeTextView.setText(mAccountHeaderTypeTextView.getText());
- mAccountSelectorTypeTextView.setVisibility(mAccountHeaderTypeTextView.getVisibility());
- mAccountSelectorNameTextView.setText(mAccountHeaderNameTextView.getText());
- mAccountSelectorNameTextView.setVisibility(mAccountHeaderNameTextView.getVisibility());
- // Showing the account header at the same time as the account selector drop down is
- // confusing. They should be mutually exclusive.
- mAccountHeader.setVisibility(mAccountSelector.getVisibility() == View.GONE
- ? View.VISIBLE : View.GONE);
-
- mAccountIconImageView.setImageDrawable(state.getRawContactAccountType(getContext())
- .getDisplayIcon(getContext()));
-
- // Show photo editor when supported
- RawContactModifier.ensureKindExists(state, type, Photo.CONTENT_ITEM_TYPE);
- setHasPhotoEditor((type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null));
- getPhotoEditor().setEnabled(isEnabled());
- mName.setEnabled(isEnabled());
-
- mPhoneticName.setEnabled(isEnabled());
-
- // Show and hide the appropriate views
- mFields.setVisibility(View.VISIBLE);
- mName.setVisibility(View.VISIBLE);
- mPhoneticName.setVisibility(View.VISIBLE);
-
- mGroupMembershipKind = type.getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
- if (mGroupMembershipKind != null) {
- mGroupMembershipView = (GroupMembershipView)mInflater.inflate(
- R.layout.item_group_membership, mFields, false);
- mGroupMembershipView.setKind(mGroupMembershipKind);
- mGroupMembershipView.setEnabled(isEnabled());
- }
-
- // Create editor sections for each possible data kind
- for (DataKind kind : type.getSortedDataKinds()) {
- // Skip kind of not editable
- if (!kind.editable) continue;
-
- final String mimeType = kind.mimeType;
- if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
- // Handle special case editor for structured name
- final ValuesDelta primary = state.getPrimaryEntry(mimeType);
- mName.setValues(
- type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME),
- primary, state, false, vig);
- mPhoneticName.setValues(
- type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME),
- primary, state, false, vig);
- // It is useful to use Nickname outside of a KindSectionView so that we can treat it
- // as a part of StructuredName's fake KindSectionView, even though it uses a
- // different CP2 mime-type. We do a bit of extra work below to make this possible.
- final DataKind nickNameKind = type.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
- if (nickNameKind != null) {
- ValuesDelta primaryNickNameEntry = state.getPrimaryEntry(nickNameKind.mimeType);
- if (primaryNickNameEntry == null) {
- primaryNickNameEntry = RawContactModifier.insertChild(state, nickNameKind);
- }
- mNickName.setValues(nickNameKind, primaryNickNameEntry, state, false, vig);
- mNickName.setDeletable(false);
- } else {
- mPhoneticName.setPadding(0, 0, 0, (int) getResources().getDimension(
- R.dimen.editor_padding_between_editor_views));
- mNickName.setVisibility(View.GONE);
+ // Emails
+ final ArrayList<ValuesDelta> emails = mCurrentRawContactDelta
+ .getMimeEntries(Email.CONTENT_ITEM_TYPE);
+ final Drawable emailDrawable = context.getDrawable(R.drawable.quantum_ic_email_vd_theme_24);
+ final String emailContentDescription = res.getString(R.string.header_email_entry);
+ if (emails != null) {
+ boolean isFirstEmailBound = true;
+ for (ValuesDelta email : emails) {
+ final String emailAddress = email.getEmailData();
+ if (TextUtils.isEmpty(emailAddress)) {
+ continue;
}
- } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
- // Handle special case editor for photos
- final ValuesDelta primary = state.getPrimaryEntry(mimeType);
- getPhotoEditor().setValues(kind, primary, state, false, vig);
- } else if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
- if (mGroupMembershipView != null) {
- mGroupMembershipView.setState(state);
- mFields.addView(mGroupMembershipView);
+ CharSequence emailType = null;
+ if (email.hasEmailType()) {
+ emailType = Email.getTypeLabel(
+ res, email.getEmailType(), email.getEmailLabel());
}
- } else if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
- || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)
- || Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
- // Don't create fields for each of these mime-types. They are handled specially.
- continue;
- } else {
- // Otherwise use generic section-based editors
- if (kind.fieldList == null) continue;
- final KindSectionView section = (KindSectionView)mInflater.inflate(
- R.layout.item_kind_section, mFields, false);
- section.setEnabled(isEnabled());
- section.setState(kind, state, /* readOnly =*/ false, vig);
- mFields.addView(section);
+ bindData(emailDrawable, emailContentDescription, emailAddress, emailType,
+ isFirstEmailBound);
+ isFirstEmailBound = false;
}
}
- addToDefaultGroupIfNeeded();
+ mKindSectionViews.setVisibility(mKindSectionViews.getChildCount() > 0 ? VISIBLE : GONE);
+ // Hide the "More fields" link
+ mMoreFields.setVisibility(GONE);
}
- @Override
- public void setGroupMetaData(Cursor groupMetaData) {
- mGroupMetaData = groupMetaData;
- addToDefaultGroupIfNeeded();
- if (mGroupMembershipView != null) {
- mGroupMembershipView.setGroupMetaData(groupMetaData);
- }
+ private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
+ CharSequence type, boolean isFirstEntry) {
+ bindData(icon, iconContentDescription, data, type, isFirstEntry, false);
}
- public void setAutoAddToDefaultGroup(boolean flag) {
- this.mAutoAddToDefaultGroup = flag;
+ private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
+ CharSequence type, boolean isFirstEntry, boolean forceLTR) {
+ final View field = mLayoutInflater.inflate(R.layout.item_read_only_field, mKindSectionViews,
+ /* attachToRoot */ false);
+ if (isFirstEntry) {
+ final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
+ imageView.setImageDrawable(icon);
+ imageView.setContentDescription(iconContentDescription);
+ } else {
+ final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
+ imageView.setVisibility(View.INVISIBLE);
+ imageView.setContentDescription(null);
+ }
+ final TextView dataView = (TextView) field.findViewById(R.id.data);
+ dataView.setText(data);
+ if (forceLTR) {
+ dataView.setTextDirection(View.TEXT_DIRECTION_LTR);
+ }
+ final TextView typeView = (TextView) field.findViewById(R.id.type);
+ if (!TextUtils.isEmpty(type)) {
+ typeView.setText(type);
+ } else {
+ typeView.setVisibility(View.GONE);
+ }
+ mKindSectionViews.addView(field);
}
- /**
- * If automatic addition to the default group was requested (see
- * {@link #setAutoAddToDefaultGroup}, checks if the raw contact is in any
- * group and if it is not adds it to the default group (in case of Google
- * contacts that's "My Contacts").
- */
- private void addToDefaultGroupIfNeeded() {
- if (!mAutoAddToDefaultGroup || mGroupMetaData == null || mGroupMetaData.isClosed()
- || mState == null) {
+ private void setAccountInfo() {
+ if (mCurrentRawContactDelta == null && mPrimaryAccount == null) {
return;
}
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
+ final AccountInfo account = mCurrentRawContactDelta != null
+ ? accountTypeManager.getAccountInfoForAccount(
+ mCurrentRawContactDelta.getAccountWithDataSet())
+ : accountTypeManager.getAccountInfoForAccount(mPrimaryAccount);
+
+ // Accounts haven't loaded yet or we are editing.
+ if (mAccounts.isEmpty()) {
+ mAccounts.add(account);
+ }
- boolean hasGroupMembership = false;
- ArrayList<ValuesDelta> entries = mState.getMimeEntries(GroupMembership.CONTENT_ITEM_TYPE);
- if (entries != null) {
- for (ValuesDelta values : entries) {
- Long id = values.getGroupRowId();
- if (id != null && id.longValue() != 0) {
- hasGroupMembership = true;
- break;
- }
- }
+ // Get the account information for the primary raw contact delta
+ if (isReadOnlyRawContact()) {
+ final String accountType = account.getTypeLabel().toString();
+ setAccountHeader(accountType,
+ getResources().getString(
+ R.string.editor_account_selector_read_only_title, accountType));
+ } else {
+ final String accountLabel = mIsUserProfile
+ ? EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(), account)
+ : account.getNameLabel().toString();
+ setAccountHeader(getResources().getString(R.string.editor_account_selector_title),
+ accountLabel);
}
- if (!hasGroupMembership) {
- long defaultGroupId = getDefaultGroupId();
- if (defaultGroupId != -1) {
- ValuesDelta entry = RawContactModifier.insertChild(mState, mGroupMembershipKind);
- if (entry != null) {
- entry.setGroupRowId(defaultGroupId);
- }
+ // If we're saving a new contact and there are multiple accounts, add the account selector.
+ if (mHasNewContact && !mIsUserProfile && mAccounts.size() > 1) {
+ addAccountSelector(mCurrentRawContactDelta);
+ }
+ }
+
+ private void setAccountHeader(String primaryText, String secondaryText) {
+ mAccountHeaderPrimaryText.setText(primaryText);
+ mAccountHeaderSecondaryText.setText(secondaryText);
+
+ // Set the icon
+ final AccountType accountType =
+ mCurrentRawContactDelta.getRawContactAccountType(getContext());
+ mAccountHeaderIcon.setImageDrawable(accountType.getDisplayIcon(getContext()));
+
+ // Set the content description
+ mAccountHeaderContainer.setContentDescription(
+ EditorUiUtils.getAccountInfoContentDescription(secondaryText, primaryText));
+ }
+
+ private void addAccountSelector(final RawContactDelta rawContactDelta) {
+ // Add handlers for choosing another account to save to.
+ mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
+ final OnClickListener clickListener = new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final AccountWithDataSet current = rawContactDelta.getAccountWithDataSet();
+ AccountInfo.sortAccounts(current, mAccounts);
+ final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
+ final AccountsListAdapter adapter =
+ new AccountsListAdapter(getContext(), mAccounts, current);
+ popup.setWidth(mAccountHeaderContainer.getWidth());
+ popup.setAnchorView(mAccountHeaderContainer);
+ popup.setAdapter(adapter);
+ popup.setModal(true);
+ popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position,
+ long id) {
+ UiClosables.closeQuietly(popup);
+ final AccountWithDataSet newAccount = adapter.getItem(position);
+ if (mListener != null && !mPrimaryAccount.equals(newAccount)) {
+ mIsExpanded = false;
+ mListener.onRebindEditorsForNewContact(
+ rawContactDelta,
+ mPrimaryAccount,
+ newAccount);
+ }
+ }
+ });
+ popup.show();
}
+ };
+ mAccountHeaderContainer.setOnClickListener(clickListener);
+ // Make the expander icon clickable so that it will be announced as a button by
+ // talkback
+ mAccountHeaderExpanderIcon.setOnClickListener(clickListener);
+ }
+
+ private void addPhotoView() {
+ if (!mCurrentRawContactDelta.hasMimeEntries(Photo.CONTENT_ITEM_TYPE)) {
+ wlog("No photo mimetype for this raw contact.");
+ mPhotoView.setVisibility(GONE);
+ return;
+ } else {
+ mPhotoView.setVisibility(VISIBLE);
+ }
+
+ final ValuesDelta superPrimaryDelta = mCurrentRawContactDelta
+ .getSuperPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
+ if (superPrimaryDelta == null) {
+ Log.wtf(TAG, "addPhotoView: no ValueDelta found for current RawContactDelta"
+ + "that supports a photo.");
+ mPhotoView.setVisibility(GONE);
+ return;
+ }
+ // Set the photo view
+ mPhotoView.setPalette(mMaterialPalette);
+ mPhotoView.setPhoto(superPrimaryDelta);
+
+ if (isReadOnlyRawContact()) {
+ mPhotoView.setReadOnly(true);
+ return;
}
+ mPhotoView.setReadOnly(false);
+ mPhotoValuesDelta = superPrimaryDelta;
}
- /**
- * Returns the default group (e.g. "My Contacts") for the current raw contact's
- * account. Returns -1 if there is no such group.
- */
- private long getDefaultGroupId() {
- String accountType = mState.getAccountType();
- String accountName = mState.getAccountName();
- String accountDataSet = mState.getDataSet();
- mGroupMetaData.moveToPosition(-1);
- while (mGroupMetaData.moveToNext()) {
- String name = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_NAME);
- String type = mGroupMetaData.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
- String dataSet = mGroupMetaData.getString(GroupMetaDataLoader.DATA_SET);
- if (name.equals(accountName) && type.equals(accountType)
- && Objects.equal(dataSet, accountDataSet)) {
- long groupId = mGroupMetaData.getLong(GroupMetaDataLoader.GROUP_ID);
- if (!mGroupMetaData.isNull(GroupMetaDataLoader.AUTO_ADD)
- && mGroupMetaData.getInt(GroupMetaDataLoader.AUTO_ADD) != 0) {
- return groupId;
+ private void addKindSectionViews() {
+ int i = -1;
+
+ for (String mimeType : mSortedMimetypes) {
+ i++;
+ // Ignore mime types that we've already handled
+ if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "kind: " + i + " " + mimeType + " dropped");
}
+ continue;
}
+ final KindSectionView kindSectionView;
+ final KindSectionData kindSectionData = mKindSectionDataMap.get(mimeType);
+ kindSectionView = inflateKindSectionView(mKindSectionViews, kindSectionData, mimeType);
+ mKindSectionViews.addView(kindSectionView);
+
+ // Keep a pointer to the KindSectionView for each mimeType
+ mKindSectionViewMap.put(mimeType, kindSectionView);
}
- return -1;
}
- public StructuredNameEditorView getNameEditor() {
- return mName;
+ private KindSectionView inflateKindSectionView(ViewGroup viewGroup,
+ KindSectionData kindSectionData, String mimeType) {
+ final KindSectionView kindSectionView = (KindSectionView)
+ mLayoutInflater.inflate(R.layout.item_kind_section, viewGroup,
+ /* attachToRoot =*/ false);
+ kindSectionView.setIsUserProfile(mIsUserProfile);
+
+ if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)
+ || Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ // Phone numbers and email addresses are always displayed,
+ // even if they are empty
+ kindSectionView.setHideWhenEmpty(false);
+ }
+
+ // Since phone numbers and email addresses displayed even if they are empty,
+ // they will be the only types you add new values to initially for new contacts
+ kindSectionView.setShowOneEmptyEditor(true);
+
+ kindSectionView.setState(kindSectionData, mViewIdGenerator, mListener);
+
+ return kindSectionView;
+ }
+
+ private void showAllFields() {
+ // Stop hiding empty editors and allow the user to enter values for all kinds now
+ for (int i = 0; i < mKindSectionViews.getChildCount(); i++) {
+ final KindSectionView kindSectionView =
+ (KindSectionView) mKindSectionViews.getChildAt(i);
+ kindSectionView.setHideWhenEmpty(false);
+ kindSectionView.updateEmptyEditors(/* shouldAnimate =*/ true);
+ }
+ mIsExpanded = true;
+
+ // Hide the more fields button
+ mMoreFields.setVisibility(View.GONE);
}
- public TextFieldsEditorView getPhoneticNameEditor() {
- return mPhoneticName;
+ private boolean hasMoreFields() {
+ for (KindSectionView section : mKindSectionViewMap.values()) {
+ if (section.getVisibility() != View.VISIBLE) {
+ return true;
+ }
+ }
+ return false;
}
- public TextFieldsEditorView getNickNameEditor() {
- return mNickName;
+ private static void wlog(String message) {
+ if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, message);
+ }
}
- @Override
- public long getRawContactId() {
- return mRawContactId;
+ private static void elog(String message) {
+ Log.e(TAG, message);
}
}
diff --git a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java b/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
deleted file mode 100644
index 6e4c05522..000000000
--- a/src/com/android/contacts/editor/RawContactReadOnlyEditorView.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.editor;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Pair;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.R;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-import java.util.ArrayList;
-
-/**
- * Custom view that displays external contacts in the edit screen.
- */
-public class RawContactReadOnlyEditorView extends BaseRawContactEditorView
- implements OnClickListener {
- private LayoutInflater mInflater;
-
- private TextView mName;
- private Button mEditExternallyButton;
- private ViewGroup mGeneral;
-
- private TextView mAccountHeaderTypeTextView;
- private TextView mAccountHeaderNameTextView;
- private ImageView mAccountIconImageView;
-
- private String mAccountName;
- private String mAccountType;
- private String mDataSet;
- private long mRawContactId = -1;
-
- public RawContactReadOnlyEditorView(Context context) {
- super(context);
- }
-
- public RawContactReadOnlyEditorView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
-
- /** {@inheritDoc} */
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- mInflater = (LayoutInflater)getContext().getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
-
- mName = (TextView) findViewById(R.id.read_only_name);
- mEditExternallyButton = (Button) findViewById(R.id.button_edit_externally);
- mEditExternallyButton.setOnClickListener(this);
- mGeneral = (ViewGroup)findViewById(R.id.sect_general);
-
- mAccountHeaderTypeTextView = (TextView) findViewById(R.id.account_type);
- mAccountHeaderNameTextView = (TextView) findViewById(R.id.account_name);
- mAccountIconImageView = (ImageView) findViewById(android.R.id.icon);
- }
-
- /**
- * Set the internal state for this view, given a current
- * {@link RawContactDelta} state and the {@link AccountType} that
- * apply to that state.
- */
- @Override
- public void setState(RawContactDelta state, AccountType type, ViewIdGenerator vig,
- boolean isProfile) {
- // Remove any existing sections
- mGeneral.removeAllViews();
-
- // Bail if invalid state or source
- if (state == null || type == null) return;
-
- // Make sure we have StructuredName
- RawContactModifier.ensureKindExists(state, type, StructuredName.CONTENT_ITEM_TYPE);
-
- // Fill in the header info
- mAccountName = state.getAccountName();
- mAccountType = state.getAccountType();
- mDataSet = state.getDataSet();
-
- final Pair<String,String> accountInfo = isProfile
- ? EditorUiUtils.getLocalAccountInfo(getContext(), state.getAccountName(), type)
- : EditorUiUtils.getAccountInfo(getContext(), state.getAccountName(), type);
- if (accountInfo.first == null) {
- // Hide this view so the other text view will be centered vertically
- mAccountHeaderNameTextView.setVisibility(View.GONE);
- } else {
- mAccountHeaderNameTextView.setVisibility(View.VISIBLE);
- mAccountHeaderNameTextView.setText(accountInfo.first);
- }
- mAccountHeaderTypeTextView.setText(accountInfo.second);
- updateAccountHeaderContentDescription();
-
- mAccountIconImageView.setImageDrawable(state.getRawContactAccountType(getContext())
- .getDisplayIcon(getContext()));
-
- // TODO: Expose data set in the UI somehow?
-
- mRawContactId = state.getRawContactId();
-
- ValuesDelta primary;
-
- // Photo
- DataKind kind = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE);
- if (kind != null) {
- RawContactModifier.ensureKindExists(state, type, Photo.CONTENT_ITEM_TYPE);
- boolean hasPhotoEditor = type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE) != null;
- setHasPhotoEditor(hasPhotoEditor);
- primary = state.getPrimaryEntry(Photo.CONTENT_ITEM_TYPE);
- getPhotoEditor().setValues(kind, primary, state, !type.areContactsWritable(), vig);
- }
-
- // Name
- primary = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
- mName.setText(primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
- getContext().getString(R.string.missing_name));
-
- if (type.getEditContactActivityClassName() != null) {
- mEditExternallyButton.setVisibility(View.VISIBLE);
- } else {
- mEditExternallyButton.setVisibility(View.GONE);
- }
-
- final Resources res = getContext().getResources();
- // Phones
- final ArrayList<ValuesDelta> phones = state.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
- final Drawable phoneDrawable = getResources().getDrawable(R.drawable.ic_phone_24dp);
- final String phoneContentDescription = res.getString(R.string.header_phone_entry);
- if (phones != null) {
- boolean isFirstPhoneBound = true;
- for (ValuesDelta phone : phones) {
- final String phoneNumber = phone.getPhoneNumber();
- if (TextUtils.isEmpty(phoneNumber)) {
- continue;
- }
- final String formattedNumber = PhoneNumberUtilsCompat.formatNumber(
- phoneNumber, phone.getPhoneNormalizedNumber(),
- GeoUtil.getCurrentCountryIso(getContext()));
- CharSequence phoneType = null;
- if (phone.hasPhoneType()) {
- phoneType = Phone.getTypeLabel(
- res, phone.getPhoneType(), phone.getPhoneLabel());
- }
- bindData(phoneDrawable, phoneContentDescription, formattedNumber, phoneType,
- isFirstPhoneBound, true);
- isFirstPhoneBound = false;
- }
- }
-
- // Emails
- final ArrayList<ValuesDelta> emails = state.getMimeEntries(Email.CONTENT_ITEM_TYPE);
- final Drawable emailDrawable = getResources().getDrawable(R.drawable.ic_email_24dp);
- final String emailContentDescription = res.getString(R.string.header_email_entry);
- if (emails != null) {
- boolean isFirstEmailBound = true;
- for (ValuesDelta email : emails) {
- final String emailAddress = email.getEmailData();
- if (TextUtils.isEmpty(emailAddress)) {
- continue;
- }
- CharSequence emailType = null;
- if (email.hasEmailType()) {
- emailType = Email.getTypeLabel(
- res, email.getEmailType(), email.getEmailLabel());
- }
- bindData(emailDrawable, emailContentDescription, emailAddress, emailType,
- isFirstEmailBound);
- isFirstEmailBound = false;
- }
- }
-
- // Hide mGeneral if it's empty
- if (mGeneral.getChildCount() > 0) {
- mGeneral.setVisibility(View.VISIBLE);
- } else {
- mGeneral.setVisibility(View.GONE);
- }
- }
-
- private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
- CharSequence type, boolean isFirstEntry) {
- bindData(icon, iconContentDescription, data, type, isFirstEntry, false);
- }
-
- private void bindData(Drawable icon, String iconContentDescription, CharSequence data,
- CharSequence type, boolean isFirstEntry, boolean forceLTR) {
- final View field = mInflater.inflate(R.layout.item_read_only_field, mGeneral, false);
- if (isFirstEntry) {
- final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
- imageView.setImageDrawable(icon);
- imageView.setContentDescription(iconContentDescription);
- } else {
- final ImageView imageView = (ImageView) field.findViewById(R.id.kind_icon);
- imageView.setVisibility(View.INVISIBLE);
- imageView.setContentDescription(null);
- }
- final TextView dataView = (TextView) field.findViewById(R.id.data);
- dataView.setText(data);
- if (forceLTR) {
- dataView.setTextDirection(View.TEXT_DIRECTION_LTR);
- }
- final TextView typeView = (TextView) field.findViewById(R.id.type);
- if (!TextUtils.isEmpty(type)) {
- typeView.setText(type);
- } else {
- typeView.setVisibility(View.GONE);
- }
-
- mGeneral.addView(field);
- }
-
- @Override
- public long getRawContactId() {
- return mRawContactId;
- }
-
- @Override
- public void onClick(View v) {
- if (v.getId() == R.id.button_edit_externally) {
- if (mListener != null) {
- mListener.onExternalEditorRequest(
- new AccountWithDataSet(mAccountName, mAccountType, mDataSet),
- ContentUris.withAppendedId(RawContacts.CONTENT_URI, mRawContactId));
- }
- }
- }
-}
diff --git a/src/com/android/contacts/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
new file mode 100644
index 000000000..3b41c86ad
--- /dev/null
+++ b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2010 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.editor;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.util.AccountsListAdapter;
+import com.google.common.base.Preconditions;
+
+import java.util.List;
+
+/**
+ * Shows a dialog asking the user which account to chose.
+ *
+ * The result is passed to {@code targetFragment} passed to {@link #show}.
+ */
+public final class SelectAccountDialogFragment extends DialogFragment
+ implements AccountsLoader.AccountsListener {
+ public static final String TAG = "SelectAccountDialog";
+
+ private static final String KEY_TITLE_RES_ID = "title_res_id";
+ private static final String KEY_LIST_FILTER = "list_filter";
+ private static final String KEY_EXTRA_ARGS = "extra_args";
+
+ private AccountsListAdapter mAccountsAdapter;
+ private AccountTypeManager.AccountFilter mFilter;
+
+ /**
+ * Show the dialog.
+ *
+ * @param fragmentManager {@link FragmentManager}.
+ * @param titleResourceId resource ID to use as the title.
+ * @param extraArgs Extra arguments, which will later be passed to
+ * {@link Listener#onAccountChosen}. {@code null} will be converted to
+ * {@link Bundle#EMPTY}.
+ */
+ public static void show(FragmentManager fragmentManager, int titleResourceId,
+ AccountTypeManager.AccountFilter filter, Bundle extraArgs) {
+ show(fragmentManager, titleResourceId, filter, extraArgs, /* tag */ null);
+ }
+
+ public static void show(FragmentManager fragmentManager, int titleResourceId,
+ AccountTypeManager.AccountFilter filter, Bundle extraArgs, String tag) {
+ final Bundle args = new Bundle();
+ args.putInt(KEY_TITLE_RES_ID, titleResourceId);
+ args.putBundle(KEY_EXTRA_ARGS, (extraArgs == null) ? Bundle.EMPTY : extraArgs);
+ args.putSerializable(KEY_LIST_FILTER, filter);
+
+ final SelectAccountDialogFragment instance = new SelectAccountDialogFragment();
+ instance.setArguments(args);
+ instance.show(fragmentManager, tag);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final Bundle args = getArguments();
+ mFilter = (AccountTypeManager.AccountFilter) args.getSerializable(KEY_LIST_FILTER);
+ if (mFilter == null) {
+ mFilter = AccountTypeManager.AccountFilter.ALL;
+ }
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ final Bundle args = getArguments();
+
+ mAccountsAdapter = new AccountsListAdapter(builder.getContext());
+ mAccountsAdapter.setCustomLayout(R.layout.account_selector_list_item_condensed);
+
+ final DialogInterface.OnClickListener clickListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+
+ onAccountSelected(mAccountsAdapter.getItem(which));
+ }
+ };
+
+ final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+ title.setText(args.getInt(KEY_TITLE_RES_ID));
+ builder.setCustomTitle(title);
+ builder.setSingleChoiceItems(mAccountsAdapter, 0, clickListener);
+ final AlertDialog result = builder.create();
+ return result;
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ AccountsLoader.loadAccounts(this, 0, mFilter);
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+ final Listener listener = getListener();
+ if (listener != null) {
+ listener.onAccountSelectorCancelled();
+ }
+ }
+
+ /**
+ * Calls {@link Listener#onAccountChosen}.
+ */
+ private void onAccountSelected(AccountWithDataSet account) {
+ final Listener listener = getListener();
+ if (listener != null) {
+ listener.onAccountChosen(account, getArguments().getBundle(KEY_EXTRA_ARGS));
+ }
+ }
+
+ private Listener getListener() {
+ Listener listener = null;
+ final Activity activity = getActivity();
+ if (activity != null && activity instanceof Listener) {
+ listener = (Listener) activity;
+ }
+ return listener;
+ }
+
+ @Override
+ public void onAccountsLoaded(List<AccountInfo> accounts) {
+ Preconditions.checkNotNull(mAccountsAdapter,
+ "Accounts adapter should have been initialized");
+ mAccountsAdapter.setAccounts(accounts, null);
+ }
+
+ public interface Listener {
+ void onAccountChosen(AccountWithDataSet account, Bundle extraArgs);
+ void onAccountSelectorCancelled();
+ }
+}
diff --git a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
index f3d0ef47a..9b4e2348c 100644
--- a/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SplitContactConfirmationDialogFragment.java
@@ -34,6 +34,7 @@ import com.android.contacts.R;
public class SplitContactConfirmationDialogFragment extends DialogFragment {
private static final String ARG_HAS_PENDING_CHANGES = "hasPendingChanges";
+ public static final String TAG = "SplitConfirmation";
/**
* Callbacks for the dialog host.
@@ -47,9 +48,14 @@ public class SplitContactConfirmationDialogFragment extends DialogFragment {
* that should be saved before the split.
*/
void onSplitContactConfirmed(boolean hasPendingChanges);
+
+ /**
+ * Invoked if the user has canceled or dismissed the dialog without making a choice.
+ */
+ void onSplitContactCanceled();
}
- public static void show(ContactEditorBaseFragment fragment, boolean hasPendingChanges) {
+ public static void show(ContactEditorFragment fragment, boolean hasPendingChanges) {
final Bundle args = new Bundle();
args.putBoolean(ARG_HAS_PENDING_CHANGES, hasPendingChanges);
@@ -65,7 +71,8 @@ public class SplitContactConfirmationDialogFragment extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mHasPendingChanges = getArguments().getBoolean(ARG_HAS_PENDING_CHANGES);
+ mHasPendingChanges = getArguments() != null
+ && getArguments().getBoolean(ARG_HAS_PENDING_CHANGES);
}
@Override
@@ -80,12 +87,28 @@ public class SplitContactConfirmationDialogFragment extends DialogFragment {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- final Listener targetListener = (Listener) getTargetFragment();
- targetListener.onSplitContactConfirmed(mHasPendingChanges);
+ getListener().onSplitContactConfirmed(mHasPendingChanges);
}
});
- builder.setNegativeButton(android.R.string.cancel, null);
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ onCancel(dialog);
+ }
+ });
builder.setCancelable(false);
return builder.create();
}
+
+ private Listener getListener() {
+ return getTargetFragment() == null
+ ? (Listener) getActivity()
+ : (Listener) getTargetFragment();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+ getListener().onSplitContactCanceled();
+ }
}
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index 1a9c693cf..1387bd1ad 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -16,39 +16,24 @@
package com.android.contacts.editor;
-import com.android.contacts.R;
import android.content.ContentValues;
import android.content.Context;
+import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.NameConverter;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import java.util.HashMap;
-import java.util.Map;
+import com.android.contacts.R;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.util.NameConverter;
/**
- * A dedicated editor for structured name. When the user collapses/expands
- * the structured name, it will reparse or recompose the name, but only
- * if the user has made changes. This distinction will be particularly
- * obvious if the name has a non-standard structure. Consider this structure:
- * first name="John Doe", family name="". As long as the user does not change
- * the full name, expand and collapse will preserve this. However, if the user
- * changes "John Doe" to "Jane Doe" and then expands the view, we will reparse
- * and show first name="Jane", family name="Doe".
+ * A dedicated editor for structured name.
*/
public class StructuredNameEditorView extends TextFieldsEditorView {
@@ -68,6 +53,16 @@ public class StructuredNameEditorView extends TextFieldsEditorView {
}
@Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ final Resources res = getResources();
+ mCollapseButtonDescription = res
+ .getString(R.string.collapse_name_fields_description);
+ mExpandButtonDescription = res
+ .getString(R.string.expand_name_fields_description);
+ }
+
+ @Override
public void setValues(DataKind kind, ValuesDelta entry, RawContactDelta state, boolean readOnly,
ViewIdGenerator vig) {
super.setValues(kind, entry, state, readOnly, vig);
@@ -79,18 +74,9 @@ public class StructuredNameEditorView extends TextFieldsEditorView {
mChanged = false;
}
updateEmptiness();
- }
-
- /**
- * Displays the icon and name for the given account under the name name input fields.
- */
- public void setAccountType(AccountType accountType) {
- final LinearLayout layout = (LinearLayout) findViewById(R.id.account_type);
- layout.setVisibility(View.VISIBLE);
- final ImageView imageView = (ImageView) layout.findViewById(R.id.account_type_icon);
- imageView.setImageDrawable(accountType.getDisplayIcon(getContext()));
- final TextView textView = (TextView) layout.findViewById(R.id.account_type_name);
- textView.setText(accountType.getDisplayLabel(getContext()));
+ // Right alien with rest of the editors. As this view has an extra expand/collapse view on
+ // the right, we need to free the space from deleteContainer
+ mDeleteContainer.setVisibility(View.GONE);
}
@Override
@@ -103,148 +89,16 @@ public class StructuredNameEditorView extends TextFieldsEditorView {
saveValue(column, value);
mChanged = true;
- // Next make sure the display name and the structured name are synced
- if (hasShortAndLongForms()) {
- if (areOptionalFieldsVisible()) {
- rebuildFullName(getValues());
- } else {
- rebuildStructuredName(getValues());
- }
- }
-
- // Then notify the listener, which will rely on the display and structured names to be
- // synced (in order to provide aggregate suggestions).
+ // Then notify the listener.
notifyEditorListener();
}
- @Override
- protected void onOptionalFieldVisibilityChange() {
- if (hasShortAndLongForms()) {
- if (areOptionalFieldsVisible()) {
- switchFromFullNameToStructuredName();
- } else {
- switchFromStructuredNameToFullName();
- }
- }
-
- super.onOptionalFieldVisibilityChange();
- }
-
- private void switchFromFullNameToStructuredName() {
- ValuesDelta values = getValues();
-
- if (!mChanged) {
- for (String field : NameConverter.STRUCTURED_NAME_FIELDS) {
- values.put(field, mSnapshot.getContentValues().getAsString(field));
- }
- return;
- }
-
- String displayName = values.getDisplayName();
- Map<String, String> structuredNameMap = NameConverter.displayNameToStructuredName(
- getContext(), displayName);
- if (!structuredNameMap.isEmpty()) {
- eraseFullName(values);
- for (String field : structuredNameMap.keySet()) {
- values.put(field, structuredNameMap.get(field));
- }
- }
-
- mSnapshot.getContentValues().clear();
- mSnapshot.getContentValues().putAll(values.getCompleteValues());
- mSnapshot.setDisplayName(displayName);
- }
-
- private void switchFromStructuredNameToFullName() {
- ValuesDelta values = getValues();
-
- if (!mChanged) {
- values.setDisplayName(mSnapshot.getDisplayName());
- return;
- }
-
- Map<String, String> structuredNameMap = valuesToStructuredNameMap(values);
- String displayName = NameConverter.structuredNameToDisplayName(getContext(),
- structuredNameMap);
- if (!TextUtils.isEmpty(displayName)) {
- eraseStructuredName(values);
- values.put(StructuredName.DISPLAY_NAME, displayName);
- }
-
- mSnapshot.getContentValues().clear();
- mSnapshot.setDisplayName(values.getDisplayName());
- mSnapshot.setMimeType(StructuredName.CONTENT_ITEM_TYPE);
- for (String field : structuredNameMap.keySet()) {
- mSnapshot.getContentValues().put(field, structuredNameMap.get(field));
- }
- }
-
- private Map<String, String> valuesToStructuredNameMap(ValuesDelta values) {
- Map<String, String> structuredNameMap = new HashMap<String, String>();
- for (String key : NameConverter.STRUCTURED_NAME_FIELDS) {
- structuredNameMap.put(key, values.getAsString(key));
- }
- return structuredNameMap;
- }
-
- private void eraseFullName(ValuesDelta values) {
- values.setDisplayName(null);
- }
-
- private void rebuildFullName(ValuesDelta values) {
- Map<String, String> structuredNameMap = valuesToStructuredNameMap(values);
- String displayName = NameConverter.structuredNameToDisplayName(getContext(),
- structuredNameMap);
- values.setDisplayName(displayName);
- }
-
- private void eraseStructuredName(ValuesDelta values) {
- for (String field : NameConverter.STRUCTURED_NAME_FIELDS) {
- values.putNull(field);
- }
- }
-
- private void rebuildStructuredName(ValuesDelta values) {
- String displayName = values.getDisplayName();
- Map<String, String> structuredNameMap = NameConverter.displayNameToStructuredName(
- getContext(), displayName);
- for (String field : structuredNameMap.keySet()) {
- values.put(field, structuredNameMap.get(field));
- }
- }
-
- /**
- * Set the display name onto the text field directly. This does not affect the underlying
- * data structure so it is similar to the user typing the value in on the field directly.
- *
- * @param name The name to set on the text field.
- */
- public void setDisplayName(String name) {
- // For now, assume the first text field is the name.
- // TODO: Find a better way to get a hold of the name field,
- // including given_name and family_name.
- super.setValue(0, name);
- getValues().setDisplayName(name);
- rebuildStructuredName(getValues());
- super.setValue(1, getValues().getAsString(StructuredName.GIVEN_NAME));
- super.setValue(3, getValues().getAsString(StructuredName.FAMILY_NAME));
- }
-
/**
* Returns the display name currently displayed in the editor.
*/
public String getDisplayName() {
- final ValuesDelta valuesDelta = getValues();
- rebuildFullName(valuesDelta);
- if (hasShortAndLongForms() && areOptionalFieldsVisible()) {
- final Map<String, String> structuredNameMap = valuesToStructuredNameMap(valuesDelta);
- final String displayName = NameConverter.structuredNameToDisplayName(
- getContext(), structuredNameMap);
- if (!TextUtils.isEmpty(displayName)) {
- return displayName;
- }
- }
- return valuesDelta.getDisplayName();
+ return NameConverter.structuredNameToDisplayName(getContext(),
+ getValues().getCompleteValues());
}
@Override
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
index c13d5ea41..487a5eee9 100644
--- a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -16,22 +16,24 @@
package com.android.contacts.editor;
-import com.android.contacts.R;
-
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
+
+import com.android.contacts.R;
public class SuggestionEditConfirmationDialogFragment extends DialogFragment {
private static final String ARG_CONTACT_URI = "contactUri";
+ private static final String ARG_RAW_CONTACT_ID = "rawContactId";
- public static void show(ContactEditorBaseFragment fragment, Uri contactUri) {
+ public static void show(ContactEditorFragment fragment, Uri contactUri, long rawContactId) {
final Bundle args = new Bundle();
args.putParcelable(ARG_CONTACT_URI, contactUri);
+ args.putLong(ARG_RAW_CONTACT_ID, rawContactId);
final SuggestionEditConfirmationDialogFragment dialog = new
SuggestionEditConfirmationDialogFragment();
@@ -49,11 +51,13 @@ public class SuggestionEditConfirmationDialogFragment extends DialogFragment {
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
- final ContactEditorBaseFragment targetFragment =
- (ContactEditorBaseFragment) getTargetFragment();
+ final ContactEditorFragment targetFragment =
+ (ContactEditorFragment) getTargetFragment();
final Uri contactUri =
getArguments().getParcelable(ARG_CONTACT_URI);
- targetFragment.doEditSuggestedContact(contactUri);
+ final long rawContactId =
+ getArguments().getLong(ARG_RAW_CONTACT_ID);
+ targetFragment.doEditSuggestedContact(contactUri, rawContactId);
}
}
)
diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java
index df201e166..c3a240a52 100644
--- a/src/com/android/contacts/editor/TextFieldsEditorView.java
+++ b/src/com/android/contacts/editor/TextFieldsEditorView.java
@@ -18,6 +18,7 @@ package com.android.contacts.editor;
import android.content.Context;
import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.ContactsContract;
@@ -38,14 +39,14 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
+import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.PhoneNumberFormatter;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.PhoneNumberFormatter;
/**
* Simple editor that handles labels and any {@link EditField} defined for the
@@ -57,8 +58,12 @@ public class TextFieldsEditorView extends LabeledEditorView {
private EditText[] mFieldEditTexts = null;
private ViewGroup mFields = null;
- private View mExpansionViewContainer;
- private ImageView mExpansionView;
+ protected View mExpansionViewContainer;
+ protected ImageView mExpansionView;
+ protected String mCollapseButtonDescription;
+ protected String mExpandButtonDescription;
+ protected String mCollapsedAnnouncement;
+ protected String mExpandedAnnouncement;
private boolean mHideOptional = true;
private boolean mHasShortAndLongForms;
private int mMinFieldHeight;
@@ -90,6 +95,15 @@ public class TextFieldsEditorView extends LabeledEditorView {
mFields = (ViewGroup) findViewById(R.id.editors);
mHintTextColorUnfocused = getResources().getColor(R.color.editor_disabled_text_color);
mExpansionView = (ImageView) findViewById(R.id.expansion_view);
+ mCollapseButtonDescription = getResources()
+ .getString(R.string.collapse_fields_description);
+ mCollapsedAnnouncement = getResources()
+ .getString(R.string.announce_collapsed_fields);
+ mExpandButtonDescription = getResources()
+ .getString(R.string.expand_fields_description);
+ mExpandedAnnouncement = getResources()
+ .getString(R.string.announce_expanded_fields);
+
mExpansionViewContainer = findViewById(R.id.expansion_view_container);
if (mExpansionViewContainer != null) {
mExpansionViewContainer.setOnClickListener(new OnClickListener() {
@@ -98,7 +112,7 @@ public class TextFieldsEditorView extends LabeledEditorView {
mPreviousViewHeight = mFields.getHeight();
// Save focus
- final View focusedChild = getFocusedChild();
+ final View focusedChild = findFocus();
final int focusedViewId = focusedChild == null ? -1 : focusedChild.getId();
// Reconfigure GUI
@@ -115,6 +129,8 @@ public class TextFieldsEditorView extends LabeledEditorView {
newFocusView.requestFocus();
EditorAnimator.getInstance().slideAndFadeIn(mFields, mPreviousViewHeight);
+ announceForAccessibility(mHideOptional ?
+ mCollapsedAnnouncement : mExpandedAnnouncement);
}
});
}
@@ -165,9 +181,12 @@ public class TextFieldsEditorView extends LabeledEditorView {
* Creates or removes the type/label button. Doesn't do anything if already correctly configured
*/
private void setupExpansionView(boolean shouldExist, boolean collapsed) {
- mExpansionView.setImageResource(collapsed
- ? R.drawable.ic_menu_expander_minimized_holo_light
- : R.drawable.ic_menu_expander_maximized_holo_light);
+ final Drawable expandIcon = getContext().getDrawable(collapsed
+ ? R.drawable.quantum_ic_expand_more_vd_theme_24
+ : R.drawable.quantum_ic_expand_less_vd_theme_24);
+ mExpansionView.setImageDrawable(expandIcon);
+ mExpansionView.setContentDescription(collapsed ? mExpandButtonDescription
+ : mCollapseButtonDescription);
mExpansionViewContainer.setVisibility(shouldExist ? View.VISIBLE : View.INVISIBLE);
}
@@ -226,7 +245,8 @@ public class TextFieldsEditorView extends LabeledEditorView {
fieldView.setInputType(inputType);
if (inputType == InputType.TYPE_CLASS_PHONE) {
PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(
- getContext(), fieldView, /* formatAfterWatcherSet =*/ false);
+ getContext(), fieldView,
+ /* formatAfterWatcherSet =*/ state.isContactInsert());
fieldView.setTextDirection(View.TEXT_DIRECTION_LTR);
}
fieldView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
@@ -387,6 +407,7 @@ public class TextFieldsEditorView extends LabeledEditorView {
for (int i = 0; i < numChildren; i++) {
mFieldEditTexts[i].setVisibility(ss.mVisibilities[i]);
}
+ rebuildValues();
}
private static class SavedState extends BaseSavedState {
diff --git a/src/com/android/contacts/editor/ViewIdGenerator.java b/src/com/android/contacts/editor/ViewIdGenerator.java
index e7e7948e3..c4ba31c8c 100644
--- a/src/com/android/contacts/editor/ViewIdGenerator.java
+++ b/src/com/android/contacts/editor/ViewIdGenerator.java
@@ -20,12 +20,12 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataKind;
/**
- * A class that provides unique view ids for {@link ContentEditorView}, {@link KindSectionView},
+ * A class that provides unique view ids for {@link ContentEditorView},
* {@link LabeledEditorView} and {@link EditView} on {@link EditContactActivity}.
* It is used to assign a unique but consistent id to each view across {@link EditContactActivity}'s
* lifecycle, so that we can re-construct view state (e.g. focused view) when the screen rotates.
diff --git a/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java b/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java
new file mode 100644
index 000000000..2ee0eaeaf
--- /dev/null
+++ b/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java
@@ -0,0 +1,26 @@
+// Copyright 2013 Google Inc. All Rights Reserved.
+
+package com.android.contacts.extensions;
+
+import android.content.Context;
+
+import com.android.contacts.list.DirectoryPartition;
+
+import java.util.List;
+
+/**
+ * An interface for adding extended phone directories to
+ * {@link com.android.contacts.list.PhoneNumberListAdapter}.
+ * An app that wishes to add custom phone directories should implement this class and advertise it
+ * in assets/contacts_extensions.properties. {@link ExtensionsFactory} will load the implementation
+ * and the extended directories will be added by
+ * {@link com.android.contacts.list.PhoneNumberListAdapter}.
+ */
+public interface ExtendedPhoneDirectoriesManager {
+
+ /**
+ * Return a list of extended directories to add. May return null if no directories are to be
+ * added.
+ */
+ List<DirectoryPartition> getExtendedDirectories(Context context);
+}
diff --git a/src/com/android/contacts/extensions/ExtensionsFactory.java b/src/com/android/contacts/extensions/ExtensionsFactory.java
new file mode 100644
index 000000000..3b0ddb171
--- /dev/null
+++ b/src/com/android/contacts/extensions/ExtensionsFactory.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.extensions;
+
+import android.content.Context;
+import android.util.Log;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+
+/*
+ * A framework for adding extensions to Dialer. This class reads a property file from
+ * assets/contacts_extensions.properties and loads extension classes that an app has defined. If
+ * an extension class was not defined, null is returned.
+ */
+public class ExtensionsFactory {
+
+ private static String TAG = "ExtensionsFactory";
+
+ // Config filename for mappings of various class names to their custom
+ // implementations.
+ private static final String EXTENSIONS_PROPERTIES = "contacts_extensions.properties";
+
+ private static final String EXTENDED_PHONE_DIRECTORIES_KEY = "extendedPhoneDirectories";
+
+ private static Properties sProperties = null;
+ private static ExtendedPhoneDirectoriesManager mExtendedPhoneDirectoriesManager = null;
+
+ public static void init(Context context) {
+ if (sProperties != null) {
+ return;
+ }
+ try {
+ final InputStream fileStream = context.getAssets().open(EXTENSIONS_PROPERTIES);
+ sProperties = new Properties();
+ sProperties.load(fileStream);
+ fileStream.close();
+
+ final String className = sProperties.getProperty(EXTENDED_PHONE_DIRECTORIES_KEY);
+ if (className != null) {
+ mExtendedPhoneDirectoriesManager = createInstance(className);
+ } else {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, EXTENDED_PHONE_DIRECTORIES_KEY + " not found in properties file.");
+ }
+ }
+
+ } catch (FileNotFoundException e) {
+ // No custom extensions. Ignore.
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "No custom extensions.");
+ }
+ } catch (IOException e) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, e.toString());
+ }
+ }
+ }
+
+ private static <T> T createInstance(String className) {
+ try {
+ Class<?> c = Class.forName(className);
+ //noinspection unchecked
+ return (T) c.newInstance();
+ } catch (ClassNotFoundException e) {
+ Log.e(TAG, className + ": unable to create instance.", e);
+ } catch (IllegalAccessException e) {
+ Log.e(TAG, className + ": unable to create instance.", e);
+ } catch (InstantiationException e) {
+ Log.e(TAG, className + ": unable to create instance.", e);
+ }
+ return null;
+ }
+
+ public static ExtendedPhoneDirectoriesManager getExtendedPhoneDirectoriesManager() {
+ return mExtendedPhoneDirectoriesManager;
+ }
+}
diff --git a/src/com/android/contacts/format/FormatUtils.java b/src/com/android/contacts/format/FormatUtils.java
new file mode 100644
index 000000000..c82e0d7b7
--- /dev/null
+++ b/src/com/android/contacts/format/FormatUtils.java
@@ -0,0 +1,184 @@
+/*
+ * 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.format;
+
+import android.database.CharArrayBuffer;
+import android.graphics.Typeface;
+import android.text.SpannableString;
+import android.text.style.StyleSpan;
+
+import com.google.common.annotations.VisibleForTesting;
+
+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.
+ * <p>
+ * 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/src/com/android/contacts/format/TextHighlighter.java b/src/com/android/contacts/format/TextHighlighter.java
new file mode 100644
index 000000000..38c5c2d8b
--- /dev/null
+++ b/src/com/android/contacts/format/TextHighlighter.java
@@ -0,0 +1,94 @@
+/*
+ * 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.format;
+
+import android.text.SpannableString;
+import android.text.style.CharacterStyle;
+import android.text.style.StyleSpan;
+import android.widget.TextView;
+
+/**
+ * Highlights the text in a text field.
+ */
+public class TextHighlighter {
+ private final String TAG = TextHighlighter.class.getSimpleName();
+ private final static boolean DEBUG = false;
+
+ private int mTextStyle;
+
+ private CharacterStyle mTextStyleSpan;
+
+ public TextHighlighter(int textStyle) {
+ mTextStyle = textStyle;
+ mTextStyleSpan = getStyleSpan();
+ }
+
+ /**
+ * Sets the text on the given text view, highlighting the word that matches the given prefix.
+ *
+ * @param view the view on which to set the text
+ * @param text the string to use as the text
+ * @param prefix the prefix to look for
+ */
+ public void setPrefixText(TextView view, String text, String prefix) {
+ view.setText(applyPrefixHighlight(text, prefix));
+ }
+
+ private CharacterStyle getStyleSpan() {
+ return new StyleSpan(mTextStyle);
+ }
+
+ /**
+ * Applies highlight span to the text.
+ * @param text Text sequence to be highlighted.
+ * @param start Start position of the highlight sequence.
+ * @param end End position of the highlight sequence.
+ */
+ public void applyMaskingHighlight(SpannableString text, int start, int end) {
+ /** Sets text color of the masked locations to be highlighted. */
+ text.setSpan(getStyleSpan(), start, end, 0);
+ }
+
+ /**
+ * Returns a CharSequence which highlights the given prefix if found in the given text.
+ *
+ * @param text the text to which to apply the highlight
+ * @param prefix the prefix to look for
+ */
+ public CharSequence applyPrefixHighlight(CharSequence text, String prefix) {
+ if (prefix == null) {
+ return text;
+ }
+
+ // Skip non-word characters at the beginning of prefix.
+ int prefixStart = 0;
+ while (prefixStart < prefix.length() &&
+ !Character.isLetterOrDigit(prefix.charAt(prefixStart))) {
+ prefixStart++;
+ }
+ final String trimmedPrefix = prefix.substring(prefixStart);
+
+ int index = FormatUtils.indexOfWordPrefix(text, trimmedPrefix);
+ if (index != -1) {
+ final SpannableString result = new SpannableString(text);
+ result.setSpan(mTextStyleSpan, index, index + trimmedPrefix.length(), 0 /* flags */);
+ return result;
+ } else {
+ return text;
+ }
+ }
+}
diff --git a/src/com/android/contacts/group/GroupBrowseListAdapter.java b/src/com/android/contacts/group/GroupBrowseListAdapter.java
deleted file mode 100644
index 48751e72d..000000000
--- a/src/com/android/contacts/group/GroupBrowseListAdapter.java
+++ /dev/null
@@ -1,240 +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.group;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract.Groups;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.TextView;
-
-import com.android.contacts.GroupListLoader;
-import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.google.common.base.Objects;
-
-/**
- * Adapter to populate the list of groups.
- */
-public class GroupBrowseListAdapter extends BaseAdapter {
-
- private final Context mContext;
- private final LayoutInflater mLayoutInflater;
- private final AccountTypeManager mAccountTypeManager;
-
- private Cursor mCursor;
-
- private boolean mSelectionVisible;
- private Uri mSelectedGroupUri;
-
- public GroupBrowseListAdapter(Context context) {
- mContext = context;
- mLayoutInflater = LayoutInflater.from(context);
- mAccountTypeManager = AccountTypeManager.getInstance(mContext);
- }
-
- public void setCursor(Cursor cursor) {
- mCursor = cursor;
-
- // If there's no selected group already and the cursor is valid, then by default, select the
- // first group
- if (mSelectedGroupUri == null && cursor != null && cursor.getCount() > 0) {
- GroupListItem firstItem = getItem(0);
- long groupId = (firstItem == null) ? 0 : firstItem.getGroupId();
- mSelectedGroupUri = getGroupUriFromId(groupId);
- }
-
- notifyDataSetChanged();
- }
-
- public int getSelectedGroupPosition() {
- if (mSelectedGroupUri == null || mCursor == null || mCursor.getCount() == 0) {
- return -1;
- }
-
- int index = 0;
- mCursor.moveToPosition(-1);
- while (mCursor.moveToNext()) {
- long groupId = mCursor.getLong(GroupListLoader.GROUP_ID);
- Uri uri = getGroupUriFromId(groupId);
- if (mSelectedGroupUri.equals(uri)) {
- return index;
- }
- index++;
- }
- return -1;
- }
-
- public void setSelectionVisible(boolean flag) {
- mSelectionVisible = flag;
- }
-
- public void setSelectedGroup(Uri groupUri) {
- mSelectedGroupUri = groupUri;
- }
-
- private boolean isSelectedGroup(Uri groupUri) {
- return mSelectedGroupUri != null && mSelectedGroupUri.equals(groupUri);
- }
-
- public Uri getSelectedGroup() {
- return mSelectedGroupUri;
- }
-
- @Override
- public int getCount() {
- return (mCursor == null || mCursor.isClosed()) ? 0 : mCursor.getCount();
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public GroupListItem getItem(int position) {
- if (mCursor == null || mCursor.isClosed() || !mCursor.moveToPosition(position)) {
- return null;
- }
- String accountName = mCursor.getString(GroupListLoader.ACCOUNT_NAME);
- String accountType = mCursor.getString(GroupListLoader.ACCOUNT_TYPE);
- String dataSet = mCursor.getString(GroupListLoader.DATA_SET);
- long groupId = mCursor.getLong(GroupListLoader.GROUP_ID);
- String title = mCursor.getString(GroupListLoader.TITLE);
- int memberCount = mCursor.getInt(GroupListLoader.MEMBER_COUNT);
-
- // Figure out if this is the first group for this account name / account type pair by
- // checking the previous entry. This is to determine whether or not we need to display an
- // account header in this item.
- int previousIndex = position - 1;
- boolean isFirstGroupInAccount = true;
- if (previousIndex >= 0 && mCursor.moveToPosition(previousIndex)) {
- String previousGroupAccountName = mCursor.getString(GroupListLoader.ACCOUNT_NAME);
- String previousGroupAccountType = mCursor.getString(GroupListLoader.ACCOUNT_TYPE);
- String previousGroupDataSet = mCursor.getString(GroupListLoader.DATA_SET);
-
- if (accountName.equals(previousGroupAccountName) &&
- accountType.equals(previousGroupAccountType) &&
- Objects.equal(dataSet, previousGroupDataSet)) {
- isFirstGroupInAccount = false;
- }
- }
-
- return new GroupListItem(accountName, accountType, dataSet, groupId, title,
- isFirstGroupInAccount, memberCount);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- GroupListItem entry = getItem(position);
- View result;
- GroupListItemViewCache viewCache;
- if (convertView != null) {
- result = convertView;
- viewCache = (GroupListItemViewCache) result.getTag();
- } else {
- result = mLayoutInflater.inflate(R.layout.group_browse_list_item, parent, false);
- viewCache = new GroupListItemViewCache(result);
- result.setTag(viewCache);
- }
-
- // Add a header if this is the first group in an account and hide the divider
- if (entry.isFirstGroupInAccount()) {
- bindHeaderView(entry, viewCache);
- viewCache.accountHeader.setVisibility(View.VISIBLE);
- viewCache.divider.setVisibility(View.GONE);
- if (position == 0) {
- // Have the list's top padding in the first header.
- //
- // This allows the ListView to show correct fading effect on top.
- // If we have topPadding in the ListView itself, an inappropriate padding is
- // inserted between fading items and the top edge.
- viewCache.accountHeaderExtraTopPadding.setVisibility(View.VISIBLE);
- } else {
- viewCache.accountHeaderExtraTopPadding.setVisibility(View.GONE);
- }
- } else {
- viewCache.accountHeader.setVisibility(View.GONE);
- viewCache.divider.setVisibility(View.VISIBLE);
- viewCache.accountHeaderExtraTopPadding.setVisibility(View.GONE);
- }
-
- // Bind the group data
- Uri groupUri = getGroupUriFromId(entry.getGroupId());
- String memberCountString = mContext.getResources().getQuantityString(
- R.plurals.group_list_num_contacts_in_group, entry.getMemberCount(),
- entry.getMemberCount());
- viewCache.setUri(groupUri);
- viewCache.groupTitle.setText(entry.getTitle());
- viewCache.groupMemberCount.setText(memberCountString);
-
- if (mSelectionVisible) {
- result.setActivated(isSelectedGroup(groupUri));
- }
- return result;
- }
-
- private void bindHeaderView(GroupListItem entry, GroupListItemViewCache viewCache) {
- AccountType accountType = mAccountTypeManager.getAccountType(
- entry.getAccountType(), entry.getDataSet());
- viewCache.accountType.setText(accountType.getDisplayLabel(mContext));
- viewCache.accountName.setText(entry.getAccountName());
- }
-
- private static Uri getGroupUriFromId(long groupId) {
- return ContentUris.withAppendedId(Groups.CONTENT_URI, groupId);
- }
-
- /**
- * Cache of the children views of a contact detail entry represented by a
- * {@link GroupListItem}
- */
- public static class GroupListItemViewCache {
- public final TextView accountType;
- public final TextView accountName;
- public final TextView groupTitle;
- public final TextView groupMemberCount;
- public final View accountHeader;
- public final View accountHeaderExtraTopPadding;
- public final View divider;
- private Uri mUri;
-
- public GroupListItemViewCache(View view) {
- accountType = (TextView) view.findViewById(R.id.account_type);
- accountName = (TextView) view.findViewById(R.id.account_name);
- groupTitle = (TextView) view.findViewById(R.id.label);
- groupMemberCount = (TextView) view.findViewById(R.id.count);
- accountHeader = view.findViewById(R.id.group_list_header);
- accountHeaderExtraTopPadding = view.findViewById(R.id.header_extra_top_padding);
- divider = view.findViewById(R.id.divider);
- }
-
- public void setUri(Uri uri) {
- mUri = uri;
- }
-
- public Uri getUri() {
- return mUri;
- }
- }
-}
diff --git a/src/com/android/contacts/group/GroupBrowseListFragment.java b/src/com/android/contacts/group/GroupBrowseListFragment.java
deleted file mode 100644
index d39501a16..000000000
--- a/src/com/android/contacts/group/GroupBrowseListFragment.java
+++ /dev/null
@@ -1,315 +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.group;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.Settings;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnFocusChangeListener;
-import android.view.View.OnTouchListener;
-import android.view.ViewGroup;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.contacts.GroupListLoader;
-import com.android.contacts.R;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.group.GroupBrowseListAdapter.GroupListItemViewCache;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.list.AutoScrollListView;
-
-/**
- * Fragment to display the list of groups.
- */
-public class GroupBrowseListFragment extends Fragment
- implements OnFocusChangeListener, OnTouchListener {
-
- /**
- * Action callbacks that can be sent by a group list.
- */
- public interface OnGroupBrowserActionListener {
-
- /**
- * Opens the specified group for viewing.
- *
- * @param groupUri for the group that the user wishes to view.
- */
- void onViewGroupAction(Uri groupUri);
-
- }
-
- private static final String TAG = "GroupBrowseListFragment";
-
- private static final int LOADER_GROUPS = 1;
-
- private Context mContext;
- private Cursor mGroupListCursor;
-
- private boolean mSelectionToScreenRequested;
-
- private static final String EXTRA_KEY_GROUP_URI = "groups.groupUri";
-
- private View mRootView;
- private AutoScrollListView mListView;
- private TextView mEmptyView;
- private View mAddAccountsView;
- private View mAddAccountButton;
-
- private GroupBrowseListAdapter mAdapter;
- private boolean mSelectionVisible;
- private Uri mSelectedGroupUri;
-
- private int mVerticalScrollbarPosition = View.SCROLLBAR_POSITION_RIGHT;
-
- private OnGroupBrowserActionListener mListener;
-
- public GroupBrowseListFragment() {
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- if (savedInstanceState != null) {
- mSelectedGroupUri = savedInstanceState.getParcelable(EXTRA_KEY_GROUP_URI);
- if (mSelectedGroupUri != null) {
- // The selection may be out of screen, if rotated from portrait to landscape,
- // so ensure it's visible.
- mSelectionToScreenRequested = true;
- }
- }
-
- mRootView = inflater.inflate(R.layout.group_browse_list_fragment, null);
- mEmptyView = (TextView)mRootView.findViewById(R.id.empty);
-
- mAdapter = new GroupBrowseListAdapter(mContext);
- mAdapter.setSelectionVisible(mSelectionVisible);
- mAdapter.setSelectedGroup(mSelectedGroupUri);
-
- mListView = (AutoScrollListView) mRootView.findViewById(R.id.list);
- mListView.setOnFocusChangeListener(this);
- mListView.setOnTouchListener(this);
- mListView.setAdapter(mAdapter);
- mListView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- GroupListItemViewCache groupListItem = (GroupListItemViewCache) view.getTag();
- if (groupListItem != null) {
- viewGroup(groupListItem.getUri());
- }
- }
- });
-
- mListView.setEmptyView(mEmptyView);
- configureVerticalScrollbar();
-
- mAddAccountsView = mRootView.findViewById(R.id.add_accounts);
- mAddAccountButton = mRootView.findViewById(R.id.add_account_button);
- mAddAccountButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- intent.putExtra(Settings.EXTRA_AUTHORITIES,
- new String[] { ContactsContract.AUTHORITY });
- ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
- }
- });
- setAddAccountsVisibility(!ContactsUtils.areGroupWritableAccountsAvailable(mContext));
-
- return mRootView;
- }
-
- public void setVerticalScrollbarPosition(int position) {
- mVerticalScrollbarPosition = position;
- if (mListView != null) {
- configureVerticalScrollbar();
- }
- }
-
- private void configureVerticalScrollbar() {
- mListView.setVerticalScrollbarPosition(mVerticalScrollbarPosition);
- mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
- int leftPadding = 0;
- int rightPadding = 0;
- if (mVerticalScrollbarPosition == View.SCROLLBAR_POSITION_LEFT) {
- leftPadding = mContext.getResources().getDimensionPixelOffset(
- R.dimen.list_visible_scrollbar_padding);
- } else {
- rightPadding = mContext.getResources().getDimensionPixelOffset(
- R.dimen.list_visible_scrollbar_padding);
- }
- mListView.setPadding(leftPadding, mListView.getPaddingTop(),
- rightPadding, mListView.getPaddingBottom());
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mContext = activity;
- }
-
- @Override
- public void onDetach() {
- super.onDetach();
- mContext = null;
- }
-
- @Override
- public void onStart() {
- getLoaderManager().initLoader(LOADER_GROUPS, null, mGroupLoaderListener);
- super.onStart();
- }
-
- /**
- * The listener for the group meta data loader for all groups.
- */
- private final LoaderManager.LoaderCallbacks<Cursor> mGroupLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- mEmptyView.setText(null);
- return new GroupListLoader(mContext);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- mGroupListCursor = data;
- bindGroupList();
- }
-
- public void onLoaderReset(Loader<Cursor> loader) {
- }
- };
-
- private void bindGroupList() {
- mEmptyView.setText(R.string.noGroups);
- setAddAccountsVisibility(!ContactsUtils.areGroupWritableAccountsAvailable(mContext));
- if (mGroupListCursor == null) {
- return;
- }
- mAdapter.setCursor(mGroupListCursor);
-
- if (mSelectionToScreenRequested) {
- mSelectionToScreenRequested = false;
- requestSelectionToScreen();
- }
-
- mSelectedGroupUri = mAdapter.getSelectedGroup();
- if (mSelectionVisible && mSelectedGroupUri != null) {
- viewGroup(mSelectedGroupUri);
- }
- }
-
- public void setListener(OnGroupBrowserActionListener listener) {
- mListener = listener;
- }
-
- public void setSelectionVisible(boolean flag) {
- mSelectionVisible = flag;
- if (mAdapter != null) {
- mAdapter.setSelectionVisible(mSelectionVisible);
- }
- }
-
- private void setSelectedGroup(Uri groupUri) {
- mSelectedGroupUri = groupUri;
- mAdapter.setSelectedGroup(groupUri);
- mListView.invalidateViews();
- }
-
- private void viewGroup(Uri groupUri) {
- setSelectedGroup(groupUri);
- if (mListener != null) mListener.onViewGroupAction(groupUri);
- }
-
- public void setSelectedUri(Uri groupUri) {
- viewGroup(groupUri);
- mSelectionToScreenRequested = true;
- }
-
- protected void requestSelectionToScreen() {
- if (!mSelectionVisible) {
- return; // If selection isn't visible we don't care.
- }
- int selectedPosition = mAdapter.getSelectedGroupPosition();
- if (selectedPosition != -1) {
- mListView.requestPositionToScreen(selectedPosition,
- true /* smooth scroll requested */);
- }
- }
-
- private void hideSoftKeyboard() {
- if (mContext == null) {
- return;
- }
- // Hide soft keyboard, if visible
- InputMethodManager inputMethodManager = (InputMethodManager)
- mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
- inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
- }
-
- /**
- * Dismisses the soft keyboard when the list takes focus.
- */
- @Override
- public void onFocusChange(View view, boolean hasFocus) {
- if (view == mListView && hasFocus) {
- hideSoftKeyboard();
- }
- }
-
- /**
- * Dismisses the soft keyboard when the list is touched.
- */
- @Override
- public boolean onTouch(View view, MotionEvent event) {
- if (view == mListView) {
- hideSoftKeyboard();
- }
- return false;
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putParcelable(EXTRA_KEY_GROUP_URI, mSelectedGroupUri);
- }
-
- public void setAddAccountsVisibility(boolean visible) {
- if (mAddAccountsView != null) {
- mAddAccountsView.setVisibility(visible ? View.VISIBLE : View.GONE);
- }
- }
-}
diff --git a/src/com/android/contacts/group/GroupDetailDisplayUtils.java b/src/com/android/contacts/group/GroupDetailDisplayUtils.java
deleted file mode 100644
index fb0b0c87d..000000000
--- a/src/com/android/contacts/group/GroupDetailDisplayUtils.java
+++ /dev/null
@@ -1,60 +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.group;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
-public class GroupDetailDisplayUtils {
-
- private GroupDetailDisplayUtils() {
- // Disallow explicit creation of this class.
- }
-
- public static View getNewGroupSourceView(Context context) {
- LayoutInflater inflater = (LayoutInflater)context.getSystemService(
- Context.LAYOUT_INFLATER_SERVICE);
- return inflater.inflate(R.layout.group_source_button, null);
- }
-
- public static void bindGroupSourceView(Context context, View view, String accountTypeString,
- String dataSet) {
- AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
- AccountType accountType = accountTypeManager.getAccountType(accountTypeString, dataSet);
-
- TextView label = (TextView) view.findViewById(android.R.id.title);
- if (label == null) {
- throw new IllegalStateException("Group source view must contain a TextView with id"
- + "android.R.id.label");
- }
- label.setText(accountType.getViewGroupLabel(context));
-
- ImageView accountIcon = (ImageView) view.findViewById(android.R.id.icon);
- if (accountIcon == null) {
- throw new IllegalStateException("Group source view must contain an ImageView with id"
- + "android.R.id.icon");
- }
- accountIcon.setImageDrawable(accountType.getDisplayIcon(context));
- }
-}
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
deleted file mode 100644
index c9cf6bd58..000000000
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ /dev/null
@@ -1,482 +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.group;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ActivityNotFoundException;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Groups;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.contacts.GroupMemberLoader;
-import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.interactions.GroupDeletionDialogFragment;
-import com.android.contacts.common.list.ContactTileAdapter;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.contacts.list.GroupMemberTileAdapter;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
-/**
- * Displays the details of a group and shows a list of actions possible for the group.
- */
-public class GroupDetailFragment extends Fragment implements OnScrollListener {
-
- public static interface Listener {
- /**
- * The group title has been loaded
- */
- public void onGroupTitleUpdated(String title);
-
- /**
- * The number of group members has been determined
- */
- public void onGroupSizeUpdated(String size);
-
- /**
- * The account type and dataset have been determined.
- */
- public void onAccountTypeUpdated(String accountTypeString, String dataSet);
-
- /**
- * User decided to go to Edit-Mode
- */
- public void onEditRequested(Uri groupUri);
-
- /**
- * Contact is selected and should launch details page
- */
- public void onContactSelected(Uri contactUri);
- }
-
- private static final String TAG = "GroupDetailFragment";
-
- private static final int LOADER_METADATA = 0;
- private static final int LOADER_MEMBERS = 1;
-
- private Context mContext;
-
- private View mRootView;
- private ViewGroup mGroupSourceViewContainer;
- private View mGroupSourceView;
- private TextView mGroupTitle;
- private TextView mGroupSize;
- private ListView mMemberListView;
- private View mEmptyView;
-
- private Listener mListener;
-
- private ContactTileAdapter mAdapter;
- private ContactPhotoManager mPhotoManager;
- private AccountTypeManager mAccountTypeManager;
-
- private Uri mGroupUri;
- private long mGroupId;
- private String mGroupName;
- private String mAccountTypeString;
- private String mDataSet;
- private boolean mIsReadOnly;
- private boolean mIsMembershipEditable;
-
- private boolean mShowGroupActionInActionBar;
- private boolean mOptionsMenuGroupDeletable;
- private boolean mOptionsMenuGroupEditable;
- private boolean mCloseActivityAfterDelete;
-
- public GroupDetailFragment() {
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mContext = activity;
- mAccountTypeManager = AccountTypeManager.getInstance(mContext);
-
- Resources res = getResources();
- int columnCount = res.getInteger(R.integer.contact_tile_column_count);
-
- mAdapter = new GroupMemberTileAdapter(activity, mContactTileListener, columnCount);
-
- configurePhotoLoader();
- }
-
- @Override
- public void onDetach() {
- super.onDetach();
- mContext = null;
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- setHasOptionsMenu(true);
- mRootView = inflater.inflate(R.layout.group_detail_fragment, container, false);
- mGroupTitle = (TextView) mRootView.findViewById(R.id.group_title);
- mGroupSize = (TextView) mRootView.findViewById(R.id.group_size);
- mGroupSourceViewContainer = (ViewGroup) mRootView.findViewById(
- R.id.group_source_view_container);
- mEmptyView = mRootView.findViewById(android.R.id.empty);
- mMemberListView = (ListView) mRootView.findViewById(android.R.id.list);
- mMemberListView.setItemsCanFocus(true);
- mMemberListView.setAdapter(mAdapter);
-
- return mRootView;
- }
-
- public void loadGroup(Uri groupUri) {
- mGroupUri= groupUri;
- startGroupMetadataLoader();
- }
-
- public void setQuickContact(boolean enableQuickContact) {
- mAdapter.enableQuickContact(enableQuickContact);
- }
-
- private void configurePhotoLoader() {
- if (mContext != null) {
- if (mPhotoManager == null) {
- mPhotoManager = ContactPhotoManager.getInstance(mContext);
- }
- if (mMemberListView != null) {
- mMemberListView.setOnScrollListener(this);
- }
- if (mAdapter != null) {
- mAdapter.setPhotoLoader(mPhotoManager);
- }
- }
- }
-
- public void setListener(Listener value) {
- mListener = value;
- }
-
- public void setShowGroupSourceInActionBar(boolean show) {
- mShowGroupActionInActionBar = show;
- }
-
- public Uri getGroupUri() {
- return mGroupUri;
- }
-
- /**
- * Start the loader to retrieve the metadata for this group.
- */
- private void startGroupMetadataLoader() {
- getLoaderManager().restartLoader(LOADER_METADATA, null, mGroupMetadataLoaderListener);
- }
-
- /**
- * Start the loader to retrieve the list of group members.
- */
- private void startGroupMembersLoader() {
- getLoaderManager().restartLoader(LOADER_MEMBERS, null, mGroupMemberListLoaderListener);
- }
-
- private final ContactTileView.Listener mContactTileListener =
- new ContactTileView.Listener() {
-
- @Override
- public void onContactSelected(Uri contactUri, Rect targetRect) {
- mListener.onContactSelected(contactUri);
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- // No need to call phone number directly from People app.
- Log.w(TAG, "unexpected invocation of onCallNumberDirectly()");
- }
-
- @Override
- public int getApproximateTileWidth() {
- return getView().getWidth() / mAdapter.getColumnCount();
- }
- };
-
- /**
- * The listener for the group metadata loader.
- */
- private final LoaderManager.LoaderCallbacks<Cursor> mGroupMetadataLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return new GroupMetaDataLoader(mContext, mGroupUri);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (data == null || data.isClosed()) {
- Log.e(TAG, "Failed to load group metadata");
- return;
- }
- data.moveToPosition(-1);
- if (data.moveToNext()) {
- boolean deleted = data.getInt(GroupMetaDataLoader.DELETED) == 1;
- if (!deleted) {
- bindGroupMetaData(data);
-
- // Retrieve the list of members
- startGroupMembersLoader();
- return;
- }
- }
- updateSize(-1);
- updateTitle(null);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- /**
- * The listener for the group members list loader
- */
- private final LoaderManager.LoaderCallbacks<Cursor> mGroupMemberListLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return GroupMemberLoader.constructLoaderForGroupDetailQuery(mContext, mGroupId);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (data == null || data.isClosed()) {
- Log.e(TAG, "Failed to load group members");
- return;
- }
- updateSize(data.getCount());
- mAdapter.setContactCursor(data);
- mMemberListView.setEmptyView(mEmptyView);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- private void bindGroupMetaData(Cursor cursor) {
- cursor.moveToPosition(-1);
- if (cursor.moveToNext()) {
- mAccountTypeString = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
- mDataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
- mGroupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID);
- mGroupName = cursor.getString(GroupMetaDataLoader.TITLE);
- mIsReadOnly = cursor.getInt(GroupMetaDataLoader.IS_READ_ONLY) == 1;
- updateTitle(mGroupName);
- // Must call invalidate so that the option menu will get updated
- getActivity().invalidateOptionsMenu ();
-
- final String accountTypeString = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
- final String dataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
- updateAccountType(accountTypeString, dataSet);
- }
- }
-
- private void updateTitle(String title) {
- if (mGroupTitle != null) {
- mGroupTitle.setText(title);
- } else {
- mListener.onGroupTitleUpdated(title);
- }
- }
-
- /**
- * Display the count of the number of group members.
- * @param size of the group (can be -1 if no size could be determined)
- */
- private void updateSize(int size) {
- String groupSizeString;
- if (size == -1) {
- groupSizeString = null;
- } else {
- AccountType accountType = mAccountTypeManager.getAccountType(mAccountTypeString,
- mDataSet);
- final CharSequence dispLabel = accountType.getDisplayLabel(mContext);
- if (!TextUtils.isEmpty(dispLabel)) {
- String groupSizeTemplateString = getResources().getQuantityString(
- R.plurals.num_contacts_in_group, size);
- groupSizeString = String.format(groupSizeTemplateString, size, dispLabel);
- } else {
- String groupSizeTemplateString = getResources().getQuantityString(
- R.plurals.group_list_num_contacts_in_group, size);
- groupSizeString = String.format(groupSizeTemplateString, size);
- }
- }
-
- if (mGroupSize != null) {
- mGroupSize.setText(groupSizeString);
- } else {
- mListener.onGroupSizeUpdated(groupSizeString);
- }
- }
-
- /**
- * Once the account type, group source action, and group source URI have been determined
- * (based on the result from the {@link Loader}), then we can display this to the user in 1 of
- * 2 ways depending on screen size and orientation: either as a button in the action bar or as
- * a button in a static header on the page.
- * We also use isGroupMembershipEditable() of accountType to determine whether or not we should
- * display the Edit option in the Actionbar.
- */
- private void updateAccountType(final String accountTypeString, final String dataSet) {
- final AccountTypeManager manager = AccountTypeManager.getInstance(getActivity());
- final AccountType accountType =
- manager.getAccountType(accountTypeString, dataSet);
-
- mIsMembershipEditable = accountType.isGroupMembershipEditable();
-
- // If the group action should be shown in the action bar, then pass the data to the
- // listener who will take care of setting up the view and click listener. There is nothing
- // else to be done by this {@link Fragment}.
- if (mShowGroupActionInActionBar) {
- mListener.onAccountTypeUpdated(accountTypeString, dataSet);
- return;
- }
-
- // Otherwise, if the {@link Fragment} needs to create and setup the button, then first
- // verify that there is a valid action.
- if (!TextUtils.isEmpty(accountType.getViewGroupActivity())) {
- if (mGroupSourceView == null) {
- mGroupSourceView = GroupDetailDisplayUtils.getNewGroupSourceView(mContext);
- // Figure out how to add the view to the fragment.
- // If there is a static header with a container for the group source view, insert
- // the view there.
- if (mGroupSourceViewContainer != null) {
- mGroupSourceViewContainer.addView(mGroupSourceView);
- }
- }
-
- // Rebind the data since this action can change if the loader returns updated data
- mGroupSourceView.setVisibility(View.VISIBLE);
- GroupDetailDisplayUtils.bindGroupSourceView(mContext, mGroupSourceView,
- accountTypeString, dataSet);
- mGroupSourceView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, mGroupId);
- final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- intent.setClassName(accountType.syncAdapterPackageName,
- accountType.getViewGroupActivity());
- try {
- ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "startActivity() failed: " + e);
- Toast.makeText(getActivity(), R.string.missing_app,
- Toast.LENGTH_SHORT).show();
- }
- }
- });
- } else if (mGroupSourceView != null) {
- mGroupSourceView.setVisibility(View.GONE);
- }
- }
-
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
- int totalItemCount) {
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
- mPhotoManager.pause();
- } else {
- mPhotoManager.resume();
- }
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
- inflater.inflate(R.menu.view_group, menu);
- }
-
- public boolean isOptionsMenuChanged() {
- return mOptionsMenuGroupDeletable != isGroupDeletable() &&
- mOptionsMenuGroupEditable != isGroupEditableAndPresent();
- }
-
- public boolean isGroupDeletable() {
- return mGroupUri != null && !mIsReadOnly;
- }
-
- public boolean isGroupEditableAndPresent() {
- return mGroupUri != null && mIsMembershipEditable;
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- mOptionsMenuGroupDeletable = isGroupDeletable() && isVisible();
- mOptionsMenuGroupEditable = isGroupEditableAndPresent() && isVisible();
-
- final MenuItem editMenu = menu.findItem(R.id.menu_edit_group);
- editMenu.setVisible(mOptionsMenuGroupEditable);
-
- final MenuItem deleteMenu = menu.findItem(R.id.menu_delete_group);
- deleteMenu.setVisible(mOptionsMenuGroupDeletable);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_edit_group: {
- if (mListener != null) mListener.onEditRequested(mGroupUri);
- break;
- }
- case R.id.menu_delete_group: {
- GroupDeletionDialogFragment.show(getFragmentManager(), mGroupId, mGroupName,
- mCloseActivityAfterDelete);
- return true;
- }
- }
- return false;
- }
-
- public void closeActivityAfterDelete(boolean closeActivity) {
- mCloseActivityAfterDelete = closeActivity;
- }
-
- public long getGroupId() {
- return mGroupId;
- }
-}
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
deleted file mode 100644
index 1104c02bd..000000000
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ /dev/null
@@ -1,985 +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.group;
-
-import android.accounts.Account;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AutoCompleteTextView;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.QuickContactBadge;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.GroupMemberLoader;
-import com.android.contacts.GroupMemberLoader.GroupEditorQuery;
-import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.R;
-import com.android.contacts.activities.GroupEditorActivity;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
-import com.android.contacts.group.SuggestedMemberListAdapter.SuggestedMember;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ViewUtil;
-
-import com.google.common.base.Objects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class GroupEditorFragment extends Fragment implements SelectAccountDialogFragment.Listener {
- private static final String TAG = "GroupEditorFragment";
-
- private static final String LEGACY_CONTACTS_AUTHORITY = "contacts";
-
- private static final String KEY_ACTION = "action";
- private static final String KEY_GROUP_URI = "groupUri";
- private static final String KEY_GROUP_ID = "groupId";
- private static final String KEY_STATUS = "status";
- private static final String KEY_ACCOUNT_NAME = "accountName";
- private static final String KEY_ACCOUNT_TYPE = "accountType";
- private static final String KEY_DATA_SET = "dataSet";
- private static final String KEY_GROUP_NAME_IS_READ_ONLY = "groupNameIsReadOnly";
- private static final String KEY_ORIGINAL_GROUP_NAME = "originalGroupName";
- private static final String KEY_MEMBERS_TO_ADD = "membersToAdd";
- private static final String KEY_MEMBERS_TO_REMOVE = "membersToRemove";
- private static final String KEY_MEMBERS_TO_DISPLAY = "membersToDisplay";
-
- private static final String CURRENT_EDITOR_TAG = "currentEditorForAccount";
-
- public static interface Listener {
- /**
- * Group metadata was not found, close the fragment now.
- */
- public void onGroupNotFound();
-
- /**
- * User has tapped Revert, close the fragment now.
- */
- void onReverted();
-
- /**
- * Contact was saved and the Fragment can now be closed safely.
- */
- void onSaveFinished(int resultCode, Intent resultIntent);
-
- /**
- * Fragment is created but there's no accounts set up.
- */
- void onAccountsNotFound();
- }
-
- private static final int LOADER_GROUP_METADATA = 1;
- private static final int LOADER_EXISTING_MEMBERS = 2;
- private static final int LOADER_NEW_GROUP_MEMBER = 3;
-
- private static final String MEMBER_RAW_CONTACT_ID_KEY = "rawContactId";
- private static final String MEMBER_LOOKUP_URI_KEY = "memberLookupUri";
-
- protected static final String[] PROJECTION_CONTACT = new String[] {
- Contacts._ID, // 0
- Contacts.DISPLAY_NAME_PRIMARY, // 1
- Contacts.DISPLAY_NAME_ALTERNATIVE, // 2
- Contacts.SORT_KEY_PRIMARY, // 3
- Contacts.STARRED, // 4
- Contacts.CONTACT_PRESENCE, // 5
- Contacts.CONTACT_CHAT_CAPABILITY, // 6
- Contacts.PHOTO_ID, // 7
- Contacts.PHOTO_THUMBNAIL_URI, // 8
- Contacts.LOOKUP_KEY, // 9
- Contacts.PHONETIC_NAME, // 10
- Contacts.HAS_PHONE_NUMBER, // 11
- Contacts.IS_USER_PROFILE, // 12
- };
-
- protected static final int CONTACT_ID_COLUMN_INDEX = 0;
- protected static final int CONTACT_DISPLAY_NAME_PRIMARY_COLUMN_INDEX = 1;
- protected static final int CONTACT_DISPLAY_NAME_ALTERNATIVE_COLUMN_INDEX = 2;
- protected static final int CONTACT_SORT_KEY_PRIMARY_COLUMN_INDEX = 3;
- protected static final int CONTACT_STARRED_COLUMN_INDEX = 4;
- protected static final int CONTACT_PRESENCE_STATUS_COLUMN_INDEX = 5;
- protected static final int CONTACT_CHAT_CAPABILITY_COLUMN_INDEX = 6;
- protected static final int CONTACT_PHOTO_ID_COLUMN_INDEX = 7;
- protected static final int CONTACT_PHOTO_URI_COLUMN_INDEX = 8;
- protected static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 9;
- protected static final int CONTACT_PHONETIC_NAME_COLUMN_INDEX = 10;
- protected static final int CONTACT_HAS_PHONE_COLUMN_INDEX = 11;
- protected static final int CONTACT_IS_USER_PROFILE = 12;
-
- /**
- * Modes that specify the status of the editor
- */
- public enum Status {
- SELECTING_ACCOUNT, // Account select dialog is showing
- LOADING, // Loader is fetching the group metadata
- EDITING, // Not currently busy. We are waiting forthe user to enter data.
- SAVING, // Data is currently being saved
- CLOSING // Prevents any more saves
- }
-
- private Context mContext;
- private String mAction;
- private Bundle mIntentExtras;
- private Uri mGroupUri;
- private long mGroupId;
- private Listener mListener;
-
- private Status mStatus;
-
- private ViewGroup mRootView;
- private ListView mListView;
- private LayoutInflater mLayoutInflater;
-
- private TextView mGroupNameView;
- private AutoCompleteTextView mAutoCompleteTextView;
-
- private String mAccountName;
- private String mAccountType;
- private String mDataSet;
-
- private boolean mGroupNameIsReadOnly;
- private String mOriginalGroupName = "";
- private int mLastGroupEditorId;
-
- private MemberListAdapter mMemberListAdapter;
- private ContactPhotoManager mPhotoManager;
-
- private ContentResolver mContentResolver;
- private SuggestedMemberListAdapter mAutoCompleteAdapter;
-
- private ArrayList<Member> mListMembersToAdd = new ArrayList<Member>();
- private ArrayList<Member> mListMembersToRemove = new ArrayList<Member>();
- private ArrayList<Member> mListToDisplay = new ArrayList<Member>();
-
- public GroupEditorFragment() {
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
- setHasOptionsMenu(true);
- mLayoutInflater = inflater;
- mRootView = (ViewGroup) inflater.inflate(R.layout.group_editor_fragment, container, false);
- return mRootView;
- }
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mContext = activity;
- mPhotoManager = ContactPhotoManager.getInstance(mContext);
- mMemberListAdapter = new MemberListAdapter();
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- if (savedInstanceState != null) {
- // Just restore from the saved state. No loading.
- onRestoreInstanceState(savedInstanceState);
- if (mStatus == Status.SELECTING_ACCOUNT) {
- // Account select dialog is showing. Don't setup the editor yet.
- } else if (mStatus == Status.LOADING) {
- startGroupMetaDataLoader();
- } else {
- setupEditorForAccount();
- }
- } else if (Intent.ACTION_EDIT.equals(mAction)) {
- startGroupMetaDataLoader();
- } else if (Intent.ACTION_INSERT.equals(mAction)) {
- final Account account = mIntentExtras == null ? null :
- (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
- final String dataSet = mIntentExtras == null ? null :
- mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
-
- if (account != null) {
- // Account specified in Intent - no data set can be specified in this manner.
- mAccountName = account.name;
- mAccountType = account.type;
- mDataSet = dataSet;
- setupEditorForAccount();
- } else {
- // No Account specified. Let the user choose from a disambiguation dialog.
- selectAccountAndCreateGroup();
- }
- } else {
- throw new IllegalArgumentException("Unknown Action String " + mAction +
- ". Only support " + Intent.ACTION_EDIT + " or " + Intent.ACTION_INSERT);
- }
- }
-
- private void startGroupMetaDataLoader() {
- mStatus = Status.LOADING;
- getLoaderManager().initLoader(LOADER_GROUP_METADATA, null,
- mGroupMetaDataLoaderListener);
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putString(KEY_ACTION, mAction);
- outState.putParcelable(KEY_GROUP_URI, mGroupUri);
- outState.putLong(KEY_GROUP_ID, mGroupId);
-
- outState.putSerializable(KEY_STATUS, mStatus);
- outState.putString(KEY_ACCOUNT_NAME, mAccountName);
- outState.putString(KEY_ACCOUNT_TYPE, mAccountType);
- outState.putString(KEY_DATA_SET, mDataSet);
-
- outState.putBoolean(KEY_GROUP_NAME_IS_READ_ONLY, mGroupNameIsReadOnly);
- outState.putString(KEY_ORIGINAL_GROUP_NAME, mOriginalGroupName);
-
- outState.putParcelableArrayList(KEY_MEMBERS_TO_ADD, mListMembersToAdd);
- outState.putParcelableArrayList(KEY_MEMBERS_TO_REMOVE, mListMembersToRemove);
- outState.putParcelableArrayList(KEY_MEMBERS_TO_DISPLAY, mListToDisplay);
- }
-
- private void onRestoreInstanceState(Bundle state) {
- mAction = state.getString(KEY_ACTION);
- mGroupUri = state.getParcelable(KEY_GROUP_URI);
- mGroupId = state.getLong(KEY_GROUP_ID);
-
- mStatus = (Status) state.getSerializable(KEY_STATUS);
- mAccountName = state.getString(KEY_ACCOUNT_NAME);
- mAccountType = state.getString(KEY_ACCOUNT_TYPE);
- mDataSet = state.getString(KEY_DATA_SET);
-
- mGroupNameIsReadOnly = state.getBoolean(KEY_GROUP_NAME_IS_READ_ONLY);
- mOriginalGroupName = state.getString(KEY_ORIGINAL_GROUP_NAME);
-
- mListMembersToAdd = state.getParcelableArrayList(KEY_MEMBERS_TO_ADD);
- mListMembersToRemove = state.getParcelableArrayList(KEY_MEMBERS_TO_REMOVE);
- mListToDisplay = state.getParcelableArrayList(KEY_MEMBERS_TO_DISPLAY);
- }
-
- public void setContentResolver(ContentResolver resolver) {
- mContentResolver = resolver;
- if (mAutoCompleteAdapter != null) {
- mAutoCompleteAdapter.setContentResolver(mContentResolver);
- }
- }
-
- private void selectAccountAndCreateGroup() {
- final List<AccountWithDataSet> accounts =
- AccountTypeManager.getInstance(mContext).getAccounts(true /* writeable */);
- // No Accounts available
- if (accounts.isEmpty()) {
- Log.e(TAG, "No accounts were found.");
- if (mListener != null) {
- mListener.onAccountsNotFound();
- }
- return;
- }
-
- // In the common case of a single account being writable, auto-select
- // it without showing a dialog.
- if (accounts.size() == 1) {
- mAccountName = accounts.get(0).name;
- mAccountType = accounts.get(0).type;
- mDataSet = accounts.get(0).dataSet;
- setupEditorForAccount();
- return; // Don't show a dialog.
- }
-
- mStatus = Status.SELECTING_ACCOUNT;
- SelectAccountDialogFragment.show(getFragmentManager(), this,
- R.string.dialog_new_group_account, AccountListFilter.ACCOUNTS_GROUP_WRITABLE,
- null);
- }
-
- @Override
- public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
- mAccountName = account.name;
- mAccountType = account.type;
- mDataSet = account.dataSet;
- setupEditorForAccount();
- }
-
- @Override
- public void onAccountSelectorCancelled() {
- if (mListener != null) {
- // Exit the fragment because we cannot continue without selecting an account
- mListener.onGroupNotFound();
- }
- }
-
- private AccountType getAccountType() {
- return AccountTypeManager.getInstance(mContext).getAccountType(mAccountType, mDataSet);
- }
-
- /**
- * @return true if the group membership is editable on this account type. false otherwise,
- * or account is not set yet.
- */
- private boolean isGroupMembershipEditable() {
- if (mAccountType == null) {
- return false;
- }
- return getAccountType().isGroupMembershipEditable();
- }
-
- /**
- * Sets up the editor based on the group's account name and type.
- */
- private void setupEditorForAccount() {
- final AccountType accountType = getAccountType();
- final boolean editable = isGroupMembershipEditable();
- boolean isNewEditor = false;
- mMemberListAdapter.setIsGroupMembershipEditable(editable);
-
- // Since this method can be called multiple time, remove old editor if the editor type
- // is different from the new one and mark the editor with a tag so it can be found for
- // removal if needed
- View editorView;
- int newGroupEditorId =
- editable ? R.layout.group_editor_view : R.layout.external_group_editor_view;
- if (newGroupEditorId != mLastGroupEditorId) {
- View oldEditorView = mRootView.findViewWithTag(CURRENT_EDITOR_TAG);
- if (oldEditorView != null) {
- mRootView.removeView(oldEditorView);
- }
- editorView = mLayoutInflater.inflate(newGroupEditorId, mRootView, false);
- editorView.setTag(CURRENT_EDITOR_TAG);
- mAutoCompleteAdapter = null;
- mLastGroupEditorId = newGroupEditorId;
- isNewEditor = true;
- } else {
- editorView = mRootView.findViewWithTag(CURRENT_EDITOR_TAG);
- if (editorView == null) {
- throw new IllegalStateException("Group editor view not found");
- }
- }
-
- mGroupNameView = (TextView) editorView.findViewById(R.id.group_name);
- mAutoCompleteTextView = (AutoCompleteTextView) editorView.findViewById(
- R.id.add_member_field);
-
- mListView = (ListView) editorView.findViewById(android.R.id.list);
- mListView.setAdapter(mMemberListAdapter);
-
- // Setup the account header, only when exists.
- if (editorView.findViewById(R.id.account_header) != null) {
- CharSequence accountTypeDisplayLabel = accountType.getDisplayLabel(mContext);
- ImageView accountIcon = (ImageView) editorView.findViewById(R.id.account_icon);
- TextView accountTypeTextView = (TextView) editorView.findViewById(R.id.account_type);
- TextView accountNameTextView = (TextView) editorView.findViewById(R.id.account_name);
- if (!TextUtils.isEmpty(mAccountName)) {
- accountNameTextView.setText(
- mContext.getString(R.string.from_account_format, mAccountName));
- }
- accountTypeTextView.setText(accountTypeDisplayLabel);
- accountIcon.setImageDrawable(accountType.getDisplayIcon(mContext));
- }
-
- // Setup the autocomplete adapter (for contacts to suggest to add to the group) based on the
- // account name and type. For groups that cannot have membership edited, there will be no
- // autocomplete text view.
- if (mAutoCompleteTextView != null) {
- mAutoCompleteAdapter = new SuggestedMemberListAdapter(mContext,
- android.R.layout.simple_dropdown_item_1line);
- mAutoCompleteAdapter.setContentResolver(mContentResolver);
- mAutoCompleteAdapter.setAccountType(mAccountType);
- mAutoCompleteAdapter.setAccountName(mAccountName);
- mAutoCompleteAdapter.setDataSet(mDataSet);
- mAutoCompleteTextView.setAdapter(mAutoCompleteAdapter);
- mAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- SuggestedMember member = (SuggestedMember) view.getTag();
- if (member == null) {
- return; // just in case
- }
- loadMemberToAddToGroup(member.getRawContactId(),
- String.valueOf(member.getContactId()));
-
- // Update the autocomplete adapter so the contact doesn't get suggested again
- mAutoCompleteAdapter.addNewMember(member.getContactId());
-
- // Clear out the text field
- mAutoCompleteTextView.setText("");
- }
- });
- // Update the exempt list. (mListToDisplay might have been restored from the saved
- // state.)
- mAutoCompleteAdapter.updateExistingMembersList(mListToDisplay);
- }
-
- // If the group name is ready only, don't let the user focus on the field.
- mGroupNameView.setFocusable(!mGroupNameIsReadOnly);
- if(isNewEditor) {
- mRootView.addView(editorView);
- }
- mStatus = Status.EDITING;
- }
-
- public void load(String action, Uri groupUri, Bundle intentExtras) {
- mAction = action;
- mGroupUri = groupUri;
- mGroupId = (groupUri != null) ? ContentUris.parseId(mGroupUri) : 0;
- mIntentExtras = intentExtras;
- }
-
- private void bindGroupMetaData(Cursor cursor) {
- if (!cursor.moveToFirst()) {
- Log.i(TAG, "Group not found with URI: " + mGroupUri + " Closing activity now.");
- if (mListener != null) {
- mListener.onGroupNotFound();
- }
- return;
- }
- mOriginalGroupName = cursor.getString(GroupMetaDataLoader.TITLE);
- mAccountName = cursor.getString(GroupMetaDataLoader.ACCOUNT_NAME);
- mAccountType = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
- mDataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
- mGroupNameIsReadOnly = (cursor.getInt(GroupMetaDataLoader.IS_READ_ONLY) == 1);
- setupEditorForAccount();
-
- // Setup the group metadata display
- mGroupNameView.setText(mOriginalGroupName);
- }
-
- public void loadMemberToAddToGroup(long rawContactId, String contactId) {
- Bundle args = new Bundle();
- args.putLong(MEMBER_RAW_CONTACT_ID_KEY, rawContactId);
- args.putString(MEMBER_LOOKUP_URI_KEY, contactId);
- getLoaderManager().restartLoader(LOADER_NEW_GROUP_MEMBER, args, mContactLoaderListener);
- }
-
- public void setListener(Listener value) {
- mListener = value;
- }
-
- public void onDoneClicked() {
- if (isGroupMembershipEditable()) {
- save();
- } else {
- // Just revert it.
- doRevertAction();
- }
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
- inflater.inflate(R.menu.edit_group, menu);
- }
-
- private void doRevertAction() {
- // When this Fragment is closed we don't want it to auto-save
- mStatus = Status.CLOSING;
- if (mListener != null) mListener.onReverted();
- }
-
- public static class CancelEditDialogFragment extends DialogFragment {
-
- public static void show(GroupEditorFragment fragment) {
- CancelEditDialogFragment dialog = new CancelEditDialogFragment();
- dialog.setTargetFragment(fragment, 0);
- dialog.show(fragment.getFragmentManager(), "cancelEditor");
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog dialog = new AlertDialog.Builder(getActivity())
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(R.string.cancel_confirmation_dialog_message)
- .setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int whichButton) {
- ((GroupEditorFragment) getTargetFragment()).doRevertAction();
- }
- }
- )
- .setNegativeButton(android.R.string.cancel, null)
- .create();
- return dialog;
- }
- }
-
- /**
- * Saves or creates the group based on the mode, and if successful
- * finishes the activity. This actually only handles saving the group name.
- * @return true when successful
- */
- public boolean save() {
- if (!hasValidGroupName() || mStatus != Status.EDITING) {
- mStatus = Status.CLOSING;
- if (mListener != null) {
- mListener.onReverted();
- }
- return false;
- }
-
- // If we are about to close the editor - there is no need to refresh the data
- getLoaderManager().destroyLoader(LOADER_EXISTING_MEMBERS);
-
- // If there are no changes, then go straight to onSaveCompleted()
- if (!hasNameChange() && !hasMembershipChange()) {
- onSaveCompleted(false, mGroupUri);
- return true;
- }
-
- mStatus = Status.SAVING;
-
- Activity activity = getActivity();
- // If the activity is not there anymore, then we can't continue with the save process.
- if (activity == null) {
- return false;
- }
- Intent saveIntent = null;
- if (Intent.ACTION_INSERT.equals(mAction)) {
- // Create array of raw contact IDs for contacts to add to the group
- long[] membersToAddArray = convertToArray(mListMembersToAdd);
-
- // Create the save intent to create the group and add members at the same time
- saveIntent = ContactSaveService.createNewGroupIntent(activity,
- new AccountWithDataSet(mAccountName, mAccountType, mDataSet),
- mGroupNameView.getText().toString(),
- membersToAddArray, activity.getClass(),
- GroupEditorActivity.ACTION_SAVE_COMPLETED);
- } else if (Intent.ACTION_EDIT.equals(mAction)) {
- // Create array of raw contact IDs for contacts to add to the group
- long[] membersToAddArray = convertToArray(mListMembersToAdd);
-
- // Create array of raw contact IDs for contacts to add to the group
- long[] membersToRemoveArray = convertToArray(mListMembersToRemove);
-
- // Create the update intent (which includes the updated group name if necessary)
- saveIntent = ContactSaveService.createGroupUpdateIntent(activity, mGroupId,
- getUpdatedName(), membersToAddArray, membersToRemoveArray,
- activity.getClass(), GroupEditorActivity.ACTION_SAVE_COMPLETED);
- } else {
- throw new IllegalStateException("Invalid intent action type " + mAction);
- }
- activity.startService(saveIntent);
- return true;
- }
-
- public void onSaveCompleted(boolean hadChanges, Uri groupUri) {
- boolean success = groupUri != null;
- Log.d(TAG, "onSaveCompleted(" + groupUri + ")");
- if (hadChanges) {
- Toast.makeText(mContext, success ? R.string.groupSavedToast :
- R.string.groupSavedErrorToast, Toast.LENGTH_SHORT).show();
- }
- final Intent resultIntent;
- final int resultCode;
- if (success && groupUri != null) {
- final String requestAuthority = groupUri.getAuthority();
-
- resultIntent = new Intent();
- if (LEGACY_CONTACTS_AUTHORITY.equals(requestAuthority)) {
- // Build legacy Uri when requested by caller
- final long groupId = ContentUris.parseId(groupUri);
- final Uri legacyContentUri = Uri.parse("content://contacts/groups");
- final Uri legacyUri = ContentUris.withAppendedId(
- legacyContentUri, groupId);
- resultIntent.setData(legacyUri);
- } else {
- // Otherwise pass back the given Uri
- resultIntent.setData(groupUri);
- }
-
- resultCode = Activity.RESULT_OK;
- } else {
- resultCode = Activity.RESULT_CANCELED;
- resultIntent = null;
- }
- // It is already saved, so prevent that it is saved again
- mStatus = Status.CLOSING;
- if (mListener != null) {
- mListener.onSaveFinished(resultCode, resultIntent);
- }
- }
-
- private boolean hasValidGroupName() {
- return mGroupNameView != null && !TextUtils.isEmpty(mGroupNameView.getText());
- }
-
- private boolean hasNameChange() {
- return mGroupNameView != null &&
- !mGroupNameView.getText().toString().equals(mOriginalGroupName);
- }
-
- private boolean hasMembershipChange() {
- return mListMembersToAdd.size() > 0 || mListMembersToRemove.size() > 0;
- }
-
- /**
- * Returns the group's new name or null if there is no change from the
- * original name that was loaded for the group.
- */
- private String getUpdatedName() {
- String groupNameFromTextView = mGroupNameView.getText().toString();
- if (groupNameFromTextView.equals(mOriginalGroupName)) {
- // No name change, so return null
- return null;
- }
- return groupNameFromTextView;
- }
-
- private static long[] convertToArray(List<Member> listMembers) {
- int size = listMembers.size();
- long[] membersArray = new long[size];
- for (int i = 0; i < size; i++) {
- membersArray[i] = listMembers.get(i).getRawContactId();
- }
- return membersArray;
- }
-
- private void addExistingMembers(List<Member> members) {
-
- // Re-create the list to display
- mListToDisplay.clear();
- mListToDisplay.addAll(members);
- mListToDisplay.addAll(mListMembersToAdd);
- mListToDisplay.removeAll(mListMembersToRemove);
- mMemberListAdapter.notifyDataSetChanged();
-
-
- // Update the autocomplete adapter (if there is one) so these contacts don't get suggested
- if (mAutoCompleteAdapter != null) {
- mAutoCompleteAdapter.updateExistingMembersList(members);
- }
- }
-
- private void addMember(Member member) {
- // Update the display list
- mListMembersToAdd.add(member);
- mListToDisplay.add(member);
- mMemberListAdapter.notifyDataSetChanged();
-
- // Update the autocomplete adapter so the contact doesn't get suggested again
- mAutoCompleteAdapter.addNewMember(member.getContactId());
- }
-
- private void removeMember(Member member) {
- // If the contact was just added during this session, remove it from the list of
- // members to add
- if (mListMembersToAdd.contains(member)) {
- mListMembersToAdd.remove(member);
- } else {
- // Otherwise this contact was already part of the existing list of contacts,
- // so we need to do a content provider deletion operation
- mListMembersToRemove.add(member);
- }
- // In either case, update the UI so the contact is no longer in the list of
- // members
- mListToDisplay.remove(member);
- mMemberListAdapter.notifyDataSetChanged();
-
- // Update the autocomplete adapter so the contact can get suggested again
- mAutoCompleteAdapter.removeMember(member.getContactId());
- }
-
- /**
- * The listener for the group metadata (i.e. group name, account type, and account name) loader.
- */
- private final LoaderManager.LoaderCallbacks<Cursor> mGroupMetaDataLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return new GroupMetaDataLoader(mContext, mGroupUri);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- bindGroupMetaData(data);
-
- // Load existing members
- getLoaderManager().initLoader(LOADER_EXISTING_MEMBERS, null,
- mGroupMemberListLoaderListener);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- /**
- * The loader listener for the list of existing group members.
- */
- private final LoaderManager.LoaderCallbacks<Cursor> mGroupMemberListLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- return GroupMemberLoader.constructLoaderForGroupEditorQuery(mContext, mGroupId);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- List<Member> listExistingMembers = new ArrayList<Member>();
- data.moveToPosition(-1);
- while (data.moveToNext()) {
- long contactId = data.getLong(GroupEditorQuery.CONTACT_ID);
- long rawContactId = data.getLong(GroupEditorQuery.RAW_CONTACT_ID);
- String lookupKey = data.getString(GroupEditorQuery.CONTACT_LOOKUP_KEY);
- String displayName = data.getString(GroupEditorQuery.CONTACT_DISPLAY_NAME_PRIMARY);
- String photoUri = data.getString(GroupEditorQuery.CONTACT_PHOTO_URI);
- listExistingMembers.add(new Member(rawContactId, lookupKey, contactId,
- displayName, photoUri));
- }
-
- // Update the display list
- addExistingMembers(listExistingMembers);
-
- // No more updates
- // TODO: move to a runnable
- getLoaderManager().destroyLoader(LOADER_EXISTING_MEMBERS);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- /**
- * The listener to load a summary of details for a contact.
- */
- // TODO: Remove this step because showing the aggregate contact can be confusing when the user
- // just selected a raw contact
- private final LoaderManager.LoaderCallbacks<Cursor> mContactLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- private long mRawContactId;
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- String memberId = args.getString(MEMBER_LOOKUP_URI_KEY);
- mRawContactId = args.getLong(MEMBER_RAW_CONTACT_ID_KEY);
- return new CursorLoader(mContext, Uri.withAppendedPath(Contacts.CONTENT_URI, memberId),
- PROJECTION_CONTACT, null, null, null);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
- if (!cursor.moveToFirst()) {
- return;
- }
- // Retrieve the contact data fields that will be sufficient to update the adapter with
- // a new entry for this contact
- long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
- String displayName = cursor.getString(CONTACT_DISPLAY_NAME_PRIMARY_COLUMN_INDEX);
- String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
- String photoUri = cursor.getString(CONTACT_PHOTO_URI_COLUMN_INDEX);
- getLoaderManager().destroyLoader(LOADER_NEW_GROUP_MEMBER);
- Member member = new Member(mRawContactId, lookupKey, contactId, displayName, photoUri);
- addMember(member);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- /**
- * This represents a single member of the current group.
- */
- public static class Member implements Parcelable {
-
- // TODO: Switch to just dealing with raw contact IDs everywhere if possible
- private final long mRawContactId;
- private final long mContactId;
- private final Uri mLookupUri;
- private final String mDisplayName;
- private final Uri mPhotoUri;
- private final String mLookupKey;
-
- public Member(long rawContactId, String lookupKey, long contactId, String displayName,
- String photoUri) {
- mRawContactId = rawContactId;
- mContactId = contactId;
- mLookupKey = lookupKey;
- mLookupUri = Contacts.getLookupUri(contactId, lookupKey);
- mDisplayName = displayName;
- mPhotoUri = (photoUri != null) ? Uri.parse(photoUri) : null;
- }
-
- public long getRawContactId() {
- return mRawContactId;
- }
-
- public long getContactId() {
- return mContactId;
- }
-
- public Uri getLookupUri() {
- return mLookupUri;
- }
-
- public String getLookupKey() {
- return mLookupKey;
- }
-
- public String getDisplayName() {
- return mDisplayName;
- }
-
- public Uri getPhotoUri() {
- return mPhotoUri;
- }
-
- @Override
- public boolean equals(Object object) {
- if (object instanceof Member) {
- Member otherMember = (Member) object;
- return Objects.equal(mLookupUri, otherMember.getLookupUri());
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return mLookupUri == null ? 0 : mLookupUri.hashCode();
- }
-
- // Parcelable
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeLong(mRawContactId);
- dest.writeLong(mContactId);
- dest.writeParcelable(mLookupUri, flags);
- dest.writeString(mLookupKey);
- dest.writeString(mDisplayName);
- dest.writeParcelable(mPhotoUri, flags);
- }
-
- private Member(Parcel in) {
- mRawContactId = in.readLong();
- mContactId = in.readLong();
- mLookupUri = in.readParcelable(getClass().getClassLoader());
- mLookupKey = in.readString();
- mDisplayName = in.readString();
- mPhotoUri = in.readParcelable(getClass().getClassLoader());
- }
-
- public static final Parcelable.Creator<Member> CREATOR = new Parcelable.Creator<Member>() {
- @Override
- public Member createFromParcel(Parcel in) {
- return new Member(in);
- }
-
- @Override
- public Member[] newArray(int size) {
- return new Member[size];
- }
- };
- }
-
- /**
- * This adapter displays a list of members for the current group being edited.
- */
- private final class MemberListAdapter extends BaseAdapter {
-
- private boolean mIsGroupMembershipEditable = true;
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View result;
- if (convertView == null) {
- result = mLayoutInflater.inflate(mIsGroupMembershipEditable ?
- R.layout.group_member_item : R.layout.external_group_member_item,
- parent, false);
- } else {
- result = convertView;
- }
- final Member member = getItem(position);
-
- QuickContactBadge badge = (QuickContactBadge) result.findViewById(R.id.badge);
- badge.assignContactUri(member.getLookupUri());
-
- TextView name = (TextView) result.findViewById(R.id.name);
- name.setText(member.getDisplayName());
-
- View deleteButton = result.findViewById(R.id.delete_button_container);
- if (deleteButton != null) {
- deleteButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- removeMember(member);
- }
- });
- }
- DefaultImageRequest request = new DefaultImageRequest(member.getDisplayName(),
- member.getLookupKey(), true /* isCircular */);
- mPhotoManager.loadPhoto(badge, member.getPhotoUri(),
- ViewUtil.getConstantPreLayoutWidth(badge), false, true /* isCircular */,
- request);
- return result;
- }
-
- @Override
- public int getCount() {
- return mListToDisplay.size();
- }
-
- @Override
- public Member getItem(int position) {
- return mListToDisplay.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- public void setIsGroupMembershipEditable(boolean editable) {
- mIsGroupMembershipEditable = editable;
- }
- }
-}
diff --git a/src/com/android/contacts/group/GroupListItem.java b/src/com/android/contacts/group/GroupListItem.java
index a06ec3837..f2359b623 100644
--- a/src/com/android/contacts/group/GroupListItem.java
+++ b/src/com/android/contacts/group/GroupListItem.java
@@ -27,9 +27,12 @@ public final class GroupListItem {
private final String mTitle;
private final boolean mIsFirstGroupInAccount;
private final int mMemberCount;
+ private final boolean mIsReadOnly;
+ private final String mSystemId;
public GroupListItem(String accountName, String accountType, String dataSet, long groupId,
- String title, boolean isFirstGroupInAccount, int memberCount) {
+ String title, boolean isFirstGroupInAccount, int memberCount, boolean isReadOnly,
+ String systemId) {
mAccountName = accountName;
mAccountType = accountType;
mDataSet = dataSet;
@@ -37,6 +40,8 @@ public final class GroupListItem {
mTitle = title;
mIsFirstGroupInAccount = isFirstGroupInAccount;
mMemberCount = memberCount;
+ mIsReadOnly = isReadOnly;
+ mSystemId = systemId;
}
public String getAccountName() {
@@ -70,4 +75,12 @@ public final class GroupListItem {
public boolean isFirstGroupInAccount() {
return mIsFirstGroupInAccount;
}
+
+ public boolean isReadOnly() {
+ return mIsReadOnly;
+ }
+
+ public String getSystemId() {
+ return mSystemId;
+ }
} \ No newline at end of file
diff --git a/src/com/android/contacts/group/GroupMembersAdapter.java b/src/com/android/contacts/group/GroupMembersAdapter.java
new file mode 100644
index 000000000..78dae65bd
--- /dev/null
+++ b/src/com/android/contacts/group/GroupMembersAdapter.java
@@ -0,0 +1,179 @@
+/*
+ * 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.group;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.list.ContactListItemView;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter;
+import com.android.contacts.preference.ContactsPreferences;
+
+/** Group members cursor adapter. */
+public class GroupMembersAdapter extends MultiSelectEntryContactListAdapter {
+
+ public static class GroupMembersQuery {
+
+ private static final String[] PROJECTION_PRIMARY = new String[] {
+ Data.CONTACT_ID,
+ Data.RAW_CONTACT_ID,
+ Data.PHOTO_ID,
+ Data.LOOKUP_KEY,
+ Data.CONTACT_PRESENCE,
+ Data.CONTACT_STATUS,
+ Data.DISPLAY_NAME_PRIMARY,
+ };
+
+ private static final String[] PROJECTION_ALTERNATIVE = new String[] {
+ Data.CONTACT_ID,
+ Data.RAW_CONTACT_ID,
+ Data.PHOTO_ID,
+ Data.LOOKUP_KEY,
+ Data.CONTACT_PRESENCE,
+ Data.CONTACT_STATUS,
+ Data.DISPLAY_NAME_ALTERNATIVE,
+ };
+
+ public static final int CONTACT_ID = 0;
+ public static final int RAW_CONTACT_ID = 1;
+ public static final int CONTACT_PHOTO_ID = 2;
+ public static final int CONTACT_LOOKUP_KEY = 3;
+ public static final int CONTACT_PRESENCE = 4;
+ public static final int CONTACT_STATUS = 5;
+ public static final int CONTACT_DISPLAY_NAME = 6;
+ }
+
+ private final CharSequence mUnknownNameText;
+ private long mGroupId;
+ private boolean mDisplayDeleteButtons;
+
+ public GroupMembersAdapter(Context context) {
+ super(context, GroupMembersQuery.CONTACT_ID);
+
+ mUnknownNameText = context.getText(R.string.missing_name);
+ }
+
+ /** Sets the ID of the group whose members will be displayed. */
+ public void setGroupId(long groupId) {
+ mGroupId = groupId;
+ }
+
+ /** Returns the lookup Uri for the contact at the given position in the underlying cursor. */
+ public Uri getContactUri(int position) {
+ final Cursor cursor = (Cursor) getItem(position);
+ final long contactId = cursor.getLong(GroupMembersQuery.CONTACT_ID);
+ final String lookupKey = cursor.getString(GroupMembersQuery.CONTACT_LOOKUP_KEY);
+ return Contacts.getLookupUri(contactId, lookupKey);
+ }
+
+ /** Returns the ID of the contact at the given position in the underlying cursor. */
+ public long getContactId(int position) {
+ final Cursor cursor = (Cursor) getItem(position);
+ return cursor.getLong(GroupMembersQuery.CONTACT_ID);
+ }
+
+ public void setDisplayDeleteButtons(boolean displayDeleteButtons) {
+ mDisplayDeleteButtons = displayDeleteButtons;
+ notifyDataSetChanged();
+ }
+
+ public boolean getDisplayDeleteButtons() {
+ return mDisplayDeleteButtons;
+ }
+
+ @Override
+ public void configureLoader(CursorLoader loader, long directoryId) {
+ loader.setUri(Data.CONTENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(Directory.DEFAULT))
+ .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
+ .build());
+
+ loader.setSelection(Data.MIMETYPE + "=?" + " AND " + GroupMembership.GROUP_ROW_ID + "=?");
+
+ final String[] selectionArgs = new String[2];
+ selectionArgs[0] = GroupMembership.CONTENT_ITEM_TYPE;
+ selectionArgs[1] = String.valueOf(mGroupId);
+ loader.setSelectionArgs(selectionArgs);
+
+ loader.setProjection(
+ getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY
+ ? GroupMembersQuery.PROJECTION_PRIMARY
+ : GroupMembersQuery.PROJECTION_ALTERNATIVE);
+
+ loader.setSortOrder(
+ getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY
+ ? Contacts.SORT_KEY_PRIMARY : Contacts.SORT_KEY_ALTERNATIVE);
+ }
+
+ @Override
+ public String getContactDisplayName(int position) {
+ return ((Cursor) getItem(position)).getString(GroupMembersQuery.CONTACT_DISPLAY_NAME);
+ }
+
+ @Override
+ protected ContactListItemView newView(Context context, int partition, Cursor cursor,
+ int position, ViewGroup parent) {
+ final ContactListItemView view =
+ super.newView(context, partition, cursor, position, parent);
+ view.setUnknownNameText(mUnknownNameText);
+ return view;
+ }
+
+ @Override
+ protected void bindView(View v, int partition, Cursor cursor, int position) {
+ super.bindView(v, partition, cursor, position);
+ final ContactListItemView view = (ContactListItemView) v;
+ bindSectionHeaderAndDivider(view, position);
+ bindName(view, cursor);
+ bindPhoto(view, cursor, GroupMembersQuery.CONTACT_PHOTO_ID,
+ GroupMembersQuery.CONTACT_LOOKUP_KEY, GroupMembersQuery.CONTACT_DISPLAY_NAME);
+ bindDeleteButton(view, position);
+ }
+
+ protected void bindSectionHeaderAndDivider(ContactListItemView view, int position) {
+ view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+ if (isSectionHeaderDisplayEnabled()) {
+ final Placement placement = getItemPlacementInSection(position);
+ view.setSectionHeader(placement.sectionHeader);
+ } else {
+ view.setSectionHeader(null);
+ }
+ }
+
+ private void bindName(ContactListItemView view, Cursor cursor) {
+ view.showDisplayName(cursor, GroupMembersQuery.CONTACT_DISPLAY_NAME,
+ getContactNameDisplayOrder());
+ }
+
+ private void bindDeleteButton(final ContactListItemView view, int position) {
+ if (mDisplayDeleteButtons) {
+ view.getDeleteImageButton(getDeleteContactListener(), position);
+ } else {
+ view.hideDeleteImageButton();
+ }
+ }
+}
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
new file mode 100644
index 000000000..0d2410d0f
--- /dev/null
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -0,0 +1,908 @@
+/*
+ * 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.group;
+
+import android.app.Activity;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.support.v4.content.ContextCompat;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.Toast;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.R;
+import com.android.contacts.activities.ActionBarAdapter;
+import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.group.GroupMembersAdapter.GroupMembersQuery;
+import com.android.contacts.interactions.GroupDeletionDialogFragment;
+import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.list.ContactsSectionIndexer;
+import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter.DeleteContactListener;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.logging.ListEvent.ListType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contactsbind.FeedbackHelper;
+import com.google.common.primitives.Longs;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/** Displays the members of a group. */
+public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupMembersAdapter> {
+
+ private static final String TAG = "GroupMembers";
+
+ private static final String KEY_IS_EDIT_MODE = "editMode";
+ private static final String KEY_GROUP_URI = "groupUri";
+ private static final String KEY_GROUP_METADATA = "groupMetadata";
+
+ public static final String TAG_GROUP_NAME_EDIT_DIALOG = "groupNameEditDialog";
+
+ private static final String ARG_GROUP_URI = "groupUri";
+
+ private static final int LOADER_GROUP_METADATA = 0;
+ private static final int MSG_FAIL_TO_LOAD = 1;
+ private static final int RESULT_GROUP_ADD_MEMBER = 100;
+
+ /** Filters out duplicate contacts. */
+ private class FilterCursorWrapper extends CursorWrapper {
+
+ private int[] mIndex;
+ private int mCount = 0;
+ private int mPos = 0;
+
+ public FilterCursorWrapper(Cursor cursor) {
+ super(cursor);
+
+ mCount = super.getCount();
+ mIndex = new int[mCount];
+
+ final List<Integer> indicesToFilter = new ArrayList<>();
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Group members CursorWrapper start: " + mCount);
+ }
+
+ final Bundle bundle = cursor.getExtras();
+ final String sections[] = bundle.getStringArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+ final int counts[] = bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+ final ContactsSectionIndexer indexer = (sections == null || counts == null)
+ ? null : new ContactsSectionIndexer(sections, counts);
+
+ mGroupMemberContactIds.clear();
+ for (int i = 0; i < mCount; i++) {
+ super.moveToPosition(i);
+ final String contactId = getString(GroupMembersQuery.CONTACT_ID);
+ if (!mGroupMemberContactIds.contains(contactId)) {
+ mIndex[mPos++] = i;
+ mGroupMemberContactIds.add(contactId);
+ } else {
+ indicesToFilter.add(i);
+ }
+ }
+
+ if (indexer != null && GroupUtil.needTrimming(mCount, counts, indexer.getPositions())) {
+ GroupUtil.updateBundle(bundle, indexer, indicesToFilter, sections, counts);
+ }
+
+ mCount = mPos;
+ mPos = 0;
+ super.moveToFirst();
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Group members CursorWrapper end: " + mCount);
+ }
+ }
+
+ @Override
+ public boolean move(int offset) {
+ return moveToPosition(mPos + offset);
+ }
+
+ @Override
+ public boolean moveToNext() {
+ return moveToPosition(mPos + 1);
+ }
+
+ @Override
+ public boolean moveToPrevious() {
+ return moveToPosition(mPos - 1);
+ }
+
+ @Override
+ public boolean moveToFirst() {
+ return moveToPosition(0);
+ }
+
+ @Override
+ public boolean moveToLast() {
+ return moveToPosition(mCount - 1);
+ }
+
+ @Override
+ public boolean moveToPosition(int position) {
+ if (position >= mCount) {
+ mPos = mCount;
+ return false;
+ } else if (position < 0) {
+ mPos = -1;
+ return false;
+ }
+ mPos = mIndex[position];
+ return super.moveToPosition(mPos);
+ }
+
+ @Override
+ public int getCount() {
+ return mCount;
+ }
+
+ @Override
+ public int getPosition() {
+ return mPos;
+ }
+ }
+
+ private final LoaderCallbacks<Cursor> mGroupMetaDataCallbacks = new LoaderCallbacks<Cursor>() {
+
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ return new GroupMetaDataLoader(mActivity, mGroupUri);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+ if (cursor == null || cursor.isClosed() || !cursor.moveToNext()) {
+ Log.e(TAG, "Failed to load group metadata for " + mGroupUri);
+ Toast.makeText(getContext(), R.string.groupLoadErrorToast, Toast.LENGTH_SHORT)
+ .show();
+ mHandler.sendEmptyMessage(MSG_FAIL_TO_LOAD);
+ return;
+ }
+ mGroupMetaData = new GroupMetaData(getActivity(), cursor);
+ onGroupMetadataLoaded();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {}
+ };
+
+ private ActionBarAdapter mActionBarAdapter;
+
+ private PeopleActivity mActivity;
+
+ private Uri mGroupUri;
+
+ private boolean mIsEditMode;
+
+ private GroupMetaData mGroupMetaData;
+
+ private Set<String> mGroupMemberContactIds = new HashSet();
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ if(msg.what == MSG_FAIL_TO_LOAD) {
+ mActivity.onBackPressed();
+ }
+ }
+ };
+
+ public static GroupMembersFragment newInstance(Uri groupUri) {
+ final Bundle args = new Bundle();
+ args.putParcelable(ARG_GROUP_URI, groupUri);
+
+ final GroupMembersFragment fragment = new GroupMembersFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public GroupMembersFragment() {
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(true);
+ setHasOptionsMenu(true);
+ setListType(ListType.GROUP);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ if (mGroupMetaData == null) {
+ // Hide menu options until metadata is fully loaded
+ return;
+ }
+ inflater.inflate(R.menu.view_group, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final boolean isSelectionMode = mActionBarAdapter.isSelectionMode();
+ final boolean isGroupEditable = mGroupMetaData != null && mGroupMetaData.editable;
+ final boolean isGroupReadOnly = mGroupMetaData != null && mGroupMetaData.readOnly;
+
+ setVisible(getContext(), menu, R.id.menu_multi_send_email, !mIsEditMode && !isGroupEmpty());
+ setVisible(getContext(), menu, R.id.menu_multi_send_message,
+ !mIsEditMode && !isGroupEmpty());
+ setVisible(getContext(), menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
+ setVisible(getContext(), menu, R.id.menu_rename_group,
+ !isGroupReadOnly && !isSelectionMode);
+ setVisible(getContext(), menu, R.id.menu_delete_group,
+ !isGroupReadOnly && !isSelectionMode);
+ setVisible(getContext(), menu, R.id.menu_edit_group,
+ isGroupEditable && !mIsEditMode && !isSelectionMode && !isGroupEmpty());
+ setVisible(getContext(), menu, R.id.menu_remove_from_group,
+ isGroupEditable && isSelectionMode && !mIsEditMode);
+ }
+
+ private boolean isGroupEmpty() {
+ return getAdapter() != null && getAdapter().isEmpty();
+ }
+
+ private static void setVisible(Context context, Menu menu, int id, boolean visible) {
+ final MenuItem menuItem = menu.findItem(id);
+ if (menuItem != null) {
+ menuItem.setVisible(visible);
+ final Drawable icon = menuItem.getIcon();
+ if (icon != null) {
+ icon.mutate().setColorFilter(ContextCompat.getColor(context,
+ R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
+ }
+ }
+ }
+
+ /**
+ * Helper class for cp2 query used to look up all contact's emails and phone numbers.
+ */
+ public static abstract class Query {
+ public static final String EMAIL_SELECTION =
+ ContactsContract.Data.MIMETYPE + "='"
+ + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "'";
+
+ public static final String PHONE_SELECTION =
+ ContactsContract.Data.MIMETYPE + "='"
+ + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'";
+
+ public static final String[] EMAIL_PROJECTION = {
+ ContactsContract.Data.CONTACT_ID,
+ ContactsContract.CommonDataKinds.Email._ID,
+ ContactsContract.Data.IS_SUPER_PRIMARY,
+ ContactsContract.Data.TIMES_USED,
+ ContactsContract.Data.DATA1
+ };
+
+ public static final String[] PHONE_PROJECTION = {
+ ContactsContract.Data.CONTACT_ID,
+ ContactsContract.CommonDataKinds.Phone._ID,
+ ContactsContract.Data.IS_SUPER_PRIMARY,
+ ContactsContract.Data.TIMES_USED,
+ ContactsContract.Data.DATA1
+ };
+
+ public static final int CONTACT_ID = 0;
+ public static final int ITEM_ID = 1;
+ public static final int PRIMARY = 2;
+ public static final int TIMES_USED = 3;
+ public static final int DATA1 = 4;
+ }
+
+ /**
+ * Helper class for managing data related to contacts and emails/phone numbers.
+ */
+ private class ContactDataHelperClass {
+
+ private List<String> items = new ArrayList<>();
+ private String mostUsedItemId = null;
+ private int mostUsedTimes;
+ private String primaryItemId = null;
+
+ public void addItem(String item, int timesUsed, boolean primaryFlag) {
+ if (mostUsedItemId == null || timesUsed > mostUsedTimes) {
+ mostUsedItemId = item;
+ mostUsedTimes = timesUsed;
+ }
+ if (primaryFlag) {
+ primaryItemId = item;
+ }
+ items.add(item);
+ }
+
+ public boolean hasDefaultItem() {
+ return primaryItemId != null || items.size() == 1;
+ }
+
+ public String getDefaultSelectionItemId() {
+ return primaryItemId != null
+ ? primaryItemId
+ : mostUsedItemId;
+ }
+ }
+
+ private void sendToGroup(long[] ids, String sendScheme, String title) {
+ if (ids == null || ids.length == 0) return;
+
+ // Get emails or phone numbers
+ // contactMap <contact_id, contact_data>
+ final Map<String, ContactDataHelperClass> contactMap = new HashMap<>();
+ // itemList <item_data>
+ final List<String> itemList = new ArrayList<>();
+ final String sIds = GroupUtil.convertArrayToString(ids);
+ final String select = (ContactsUtils.SCHEME_MAILTO.equals(sendScheme)
+ ? Query.EMAIL_SELECTION
+ : Query.PHONE_SELECTION)
+ + " AND " + ContactsContract.Data.CONTACT_ID + " IN (" + sIds + ")";
+ final ContentResolver contentResolver = getContext().getContentResolver();
+ final Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
+ ContactsUtils.SCHEME_MAILTO.equals(sendScheme)
+ ? Query.EMAIL_PROJECTION
+ : Query.PHONE_PROJECTION,
+ select, null, null);
+
+ if (cursor == null) {
+ return;
+ }
+
+ try {
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ final String contactId = cursor.getString(Query.CONTACT_ID);
+ final String itemId = cursor.getString(Query.ITEM_ID);
+ final boolean isPrimary = cursor.getInt(Query.PRIMARY) != 0;
+ final int timesUsed = cursor.getInt(Query.TIMES_USED);
+ final String data = cursor.getString(Query.DATA1);
+
+ if (!TextUtils.isEmpty(data)) {
+ final ContactDataHelperClass contact;
+ if (!contactMap.containsKey(contactId)) {
+ contact = new ContactDataHelperClass();
+ contactMap.put(contactId, contact);
+ } else {
+ contact = contactMap.get(contactId);
+ }
+ contact.addItem(itemId, timesUsed, isPrimary);
+ itemList.add(data);
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+
+ // Start picker if a contact does not have a default
+ for (ContactDataHelperClass i : contactMap.values()) {
+ if (!i.hasDefaultItem()) {
+ // Build list of default selected item ids
+ final List<Long> defaultSelection = new ArrayList<>();
+ for (ContactDataHelperClass j : contactMap.values()) {
+ final String selectionItemId = j.getDefaultSelectionItemId();
+ if (selectionItemId != null) {
+ defaultSelection.add(Long.parseLong(selectionItemId));
+ }
+ }
+ final long[] defaultSelectionArray = Longs.toArray(defaultSelection);
+ startSendToSelectionPickerActivity(ids, defaultSelectionArray, sendScheme, title);
+ return;
+ }
+ }
+
+ if (itemList.size() == 0 || contactMap.size() < ids.length) {
+ Toast.makeText(getContext(), ContactsUtils.SCHEME_MAILTO.equals(sendScheme)
+ ? getString(R.string.groupSomeContactsNoEmailsToast)
+ : getString(R.string.groupSomeContactsNoPhonesToast),
+ Toast.LENGTH_LONG).show();
+ }
+
+ if (itemList.size() == 0) {
+ return;
+ }
+
+ final String itemsString = TextUtils.join(",", itemList);
+ GroupUtil.startSendToSelectionActivity(this, itemsString, sendScheme, title);
+ }
+
+ private void startSendToSelectionPickerActivity(long[] ids, long[] defaultSelection,
+ String sendScheme, String title) {
+ startActivity(GroupUtil.createSendToSelectionPickerIntent(getContext(), ids,
+ defaultSelection, sendScheme, title));
+ }
+
+ private void startGroupAddMemberActivity() {
+ startActivityForResult(GroupUtil.createPickMemberIntent(getContext(), mGroupMetaData,
+ getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {
+ mActivity.onBackPressed();
+ } else if (id == R.id.menu_add) {
+ startGroupAddMemberActivity();
+ } else if (id == R.id.menu_multi_send_email) {
+ final long[] ids = mActionBarAdapter.isSelectionMode()
+ ? getAdapter().getSelectedContactIdsArray()
+ : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+ sendToGroup(ids, ContactsUtils.SCHEME_MAILTO,
+ getString(R.string.menu_sendEmailOption));
+ } else if (id == R.id.menu_multi_send_message) {
+ final long[] ids = mActionBarAdapter.isSelectionMode()
+ ? getAdapter().getSelectedContactIdsArray()
+ : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+ sendToGroup(ids, ContactsUtils.SCHEME_SMSTO,
+ getString(R.string.menu_sendMessageOption));
+ } else if (id == R.id.menu_rename_group) {
+ GroupNameEditDialogFragment.newInstanceForUpdate(
+ new AccountWithDataSet(mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet),
+ GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
+ mGroupMetaData.groupName).show(getFragmentManager(),
+ TAG_GROUP_NAME_EDIT_DIALOG);
+ } else if (id == R.id.menu_delete_group) {
+ deleteGroup();
+ } else if (id == R.id.menu_edit_group) {
+ mIsEditMode = true;
+ mActionBarAdapter.setSelectionMode(true);
+ displayDeleteButtons(true);
+ } else if (id == R.id.menu_remove_from_group) {
+ logListEvent();
+ removeSelectedContacts();
+ } else {
+ return super.onOptionsItemSelected(item);
+ }
+ return true;
+ }
+
+ private void removeSelectedContacts() {
+ final long[] contactIds = getAdapter().getSelectedContactIdsArray();
+ new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+
+ mActionBarAdapter.setSelectionMode(false);
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode != Activity.RESULT_OK || data == null
+ || requestCode != RESULT_GROUP_ADD_MEMBER) {
+ return;
+ }
+
+ long[] contactIds = data.getLongArrayExtra(
+ UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
+ if (contactIds == null) {
+ final long contactId = data.getLongExtra(
+ UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
+ if (contactId > -1) {
+ contactIds = new long[1];
+ contactIds[0] = contactId;
+ }
+ }
+ new UpdateGroupMembersAsyncTask(
+ UpdateGroupMembersAsyncTask.TYPE_ADD,
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+ }
+
+ private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
+ @Override
+ public void onAction(int action) {
+ switch (action) {
+ case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+ if (mIsEditMode) {
+ displayDeleteButtons(true);
+ mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+ } else {
+ displayCheckBoxes(true);
+ }
+ mActivity.invalidateOptionsMenu();
+ break;
+ case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
+ mActionBarAdapter.setSearchMode(false);
+ if (mIsEditMode) {
+ displayDeleteButtons(false);
+ } else {
+ displayCheckBoxes(false);
+ }
+ mActivity.invalidateOptionsMenu();
+ break;
+ case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
+ break;
+ }
+ }
+
+ @Override
+ public void onUpButtonPressed() {
+ mActivity.onBackPressed();
+ }
+ };
+
+ private final OnCheckBoxListActionListener mCheckBoxListener =
+ new OnCheckBoxListActionListener() {
+ @Override
+ public void onStartDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(true);
+ }
+
+ @Override
+ public void onSelectedContactIdsChanged() {
+ if (mActionBarAdapter == null) {
+ return;
+ }
+ if (mIsEditMode) {
+ mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+ } else {
+ mActionBarAdapter.setSelectionCount(getSelectedContactIds().size());
+ }
+ }
+
+ @Override
+ public void onStopDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(false);
+ }
+ };
+
+ private void logListEvent() {
+ Logger.logListEvent(
+ ListEvent.ActionType.REMOVE_LABEL,
+ getListType(),
+ getAdapter().getCount(),
+ /* clickedIndex */ -1,
+ getAdapter().getSelectedContactIdsArray().length);
+ }
+
+ private void deleteGroup() {
+ if (getMemberCount() == 0) {
+ final Intent intent = ContactSaveService.createGroupDeletionIntent(
+ getContext(), mGroupMetaData.groupId);
+ getContext().startService(intent);
+ mActivity.switchToAllContacts();
+ } else {
+ GroupDeletionDialogFragment.show(getFragmentManager(), mGroupMetaData.groupId,
+ mGroupMetaData.groupName);
+ }
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ mActivity = (PeopleActivity) getActivity();
+ mActionBarAdapter = new ActionBarAdapter(mActivity, mActionBarListener,
+ mActivity.getSupportActionBar(), mActivity.getToolbar(),
+ R.string.enter_contact_name);
+ mActionBarAdapter.setShowHomeIcon(true);
+ final ContactsRequest contactsRequest = new ContactsRequest();
+ contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
+ mActionBarAdapter.initialize(savedInstanceState, contactsRequest);
+ if (mGroupMetaData != null) {
+ mActivity.setTitle(mGroupMetaData.groupName);
+ if (mGroupMetaData.editable) {
+ setCheckBoxListListener(mCheckBoxListener);
+ }
+ }
+ }
+
+ @Override
+ public ActionBarAdapter getActionBarAdapter() {
+ return mActionBarAdapter;
+ }
+
+ public void displayDeleteButtons(boolean displayDeleteButtons) {
+ getAdapter().setDisplayDeleteButtons(displayDeleteButtons);
+ }
+
+ public ArrayList<String> getMemberContactIds() {
+ return new ArrayList<>(mGroupMemberContactIds);
+ }
+
+ public int getMemberCount() {
+ return mGroupMemberContactIds.size();
+ }
+
+ public boolean isEditMode() {
+ return mIsEditMode;
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+ if (savedState == null) {
+ mGroupUri = getArguments().getParcelable(ARG_GROUP_URI);
+ } else {
+ mIsEditMode = savedState.getBoolean(KEY_IS_EDIT_MODE);
+ mGroupUri = savedState.getParcelable(KEY_GROUP_URI);
+ mGroupMetaData = savedState.getParcelable(KEY_GROUP_METADATA);
+ }
+ maybeAttachCheckBoxListener();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // Re-register the listener, which may have been cleared when onSaveInstanceState was
+ // called. See also: onSaveInstanceState
+ mActionBarAdapter.setListener(mActionBarListener);
+ }
+
+ @Override
+ protected void startLoading() {
+ if (mGroupMetaData == null || !mGroupMetaData.isValid()) {
+ getLoaderManager().restartLoader(LOADER_GROUP_METADATA, null, mGroupMetaDataCallbacks);
+ } else {
+ onGroupMetadataLoaded();
+ }
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (data != null) {
+ // Wait until contacts are loaded before showing the scrollbar
+ setVisibleScrollbarEnabled(true);
+
+ final FilterCursorWrapper cursorWrapper = new FilterCursorWrapper(data);
+ bindMembersCount(cursorWrapper.getCount());
+ super.onLoadFinished(loader, cursorWrapper);
+ // Update state of menu items (e.g. "Remove contacts") based on number of group members.
+ mActivity.invalidateOptionsMenu();
+ mActionBarAdapter.updateOverflowButtonColor();
+ }
+ }
+
+ private void bindMembersCount(int memberCount) {
+ final View accountFilterContainer = getView().findViewById(
+ R.id.account_filter_header_container);
+ final View emptyGroupView = getView().findViewById(R.id.empty_group);
+ if (memberCount > 0) {
+ final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
+ mGroupMetaData.accountName, mGroupMetaData.accountType, mGroupMetaData.dataSet);
+ bindListHeader(getContext(), getListView(), accountFilterContainer,
+ accountWithDataSet, memberCount);
+ emptyGroupView.setVisibility(View.GONE);
+ } else {
+ hideHeaderAndAddPadding(getContext(), getListView(), accountFilterContainer);
+ emptyGroupView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.setListener(null);
+ mActionBarAdapter.onSaveInstanceState(outState);
+ }
+ outState.putBoolean(KEY_IS_EDIT_MODE, mIsEditMode);
+ outState.putParcelable(KEY_GROUP_URI, mGroupUri);
+ outState.putParcelable(KEY_GROUP_METADATA, mGroupMetaData);
+ }
+
+ private void onGroupMetadataLoaded() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "Loaded " + mGroupMetaData);
+
+ maybeAttachCheckBoxListener();
+
+ mActivity.setTitle(mGroupMetaData.groupName);
+ mActivity.invalidateOptionsMenu();
+ mActivity.updateDrawerGroupMenu(mGroupMetaData.groupId);
+
+ // Start loading the group members
+ super.startLoading();
+ }
+
+ private void maybeAttachCheckBoxListener() {
+ // Don't attach the multi select check box listener if we can't edit the group
+ if (mGroupMetaData != null && mGroupMetaData.editable) {
+ setCheckBoxListListener(mCheckBoxListener);
+ }
+ }
+
+ @Override
+ protected GroupMembersAdapter createListAdapter() {
+ final GroupMembersAdapter adapter = new GroupMembersAdapter(getContext());
+ adapter.setSectionHeaderDisplayEnabled(true);
+ adapter.setDisplayPhotos(true);
+ adapter.setDeleteContactListener(new DeletionListener());
+ return adapter;
+ }
+
+ @Override
+ protected void configureAdapter() {
+ super.configureAdapter();
+ if (mGroupMetaData != null) {
+ getAdapter().setGroupId(mGroupMetaData.groupId);
+ }
+ }
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ final View view = inflater.inflate(R.layout.contact_list_content, /* root */ null);
+ final View emptyGroupView = inflater.inflate(R.layout.empty_group_view, null);
+
+ final ImageView image = (ImageView) emptyGroupView.findViewById(R.id.empty_group_image);
+ final LinearLayout.LayoutParams params =
+ (LinearLayout.LayoutParams) image.getLayoutParams();
+ final int screenHeight = getResources().getDisplayMetrics().heightPixels;
+ params.setMargins(0, screenHeight /
+ getResources().getInteger(R.integer.empty_group_view_image_margin_divisor), 0, 0);
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ image.setLayoutParams(params);
+
+ final FrameLayout contactListLayout = (FrameLayout) view.findViewById(R.id.contact_list);
+ contactListLayout.addView(emptyGroupView);
+
+ final Button addContactsButton =
+ (Button) emptyGroupView.findViewById(R.id.add_member_button);
+ addContactsButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivityForResult(GroupUtil.createPickMemberIntent(getContext(),
+ mGroupMetaData, getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+ }
+ });
+ return view;
+ }
+
+ @Override
+ protected void onItemClick(int position, long id) {
+ final Uri uri = getAdapter().getContactUri(position);
+ if (uri == null) {
+ return;
+ }
+ if (getAdapter().isDisplayingCheckBoxes()) {
+ super.onItemClick(position, id);
+ return;
+ }
+ final int count = getAdapter().getCount();
+ Logger.logListEvent(ListEvent.ActionType.CLICK, ListEvent.ListType.GROUP, count,
+ /* clickedIndex */ position, /* numSelected */ 0);
+ ImplicitIntentsUtil.startQuickContact(
+ getActivity(), uri, ScreenEvent.ScreenType.LIST_GROUP);
+ }
+
+ @Override
+ protected boolean onItemLongClick(int position, long id) {
+ if (mActivity != null && mIsEditMode) {
+ return true;
+ }
+ return super.onItemLongClick(position, id);
+ }
+
+ private final class DeletionListener implements DeleteContactListener {
+ @Override
+ public void onContactDeleteClicked(int position) {
+ final long contactId = getAdapter().getContactId(position);
+ final long[] contactIds = new long[1];
+ contactIds[0] = contactId;
+ new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
+ }
+ }
+
+ public GroupMetaData getGroupMetaData() {
+ return mGroupMetaData;
+ }
+
+ public boolean isCurrentGroup(long groupId) {
+ return mGroupMetaData != null && mGroupMetaData.groupId == groupId;
+ }
+
+ /**
+ * Return true if the fragment is not yet added, being removed, or detached.
+ */
+ public boolean isInactive() {
+ return !isAdded() || isRemoving() || isDetached();
+ }
+
+ @Override
+ public void onDestroy() {
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.setListener(null);
+ }
+ super.onDestroy();
+ }
+
+ public void updateExistingGroupFragment(Uri newGroupUri, String action) {
+ toastForSaveAction(action);
+
+ if (isEditMode() && getGroupCount() == 1) {
+ // If we're deleting the last group member, exit edit mode
+ exitEditMode();
+ } else if (!GroupUtil.ACTION_REMOVE_FROM_GROUP.equals(action)) {
+ mGroupUri = newGroupUri;
+ mGroupMetaData = null; // Clear mGroupMetaData to trigger a new load.
+ reloadData();
+ mActivity.invalidateOptionsMenu();
+ }
+ }
+
+ public void toastForSaveAction(String action) {
+ int id = -1;
+ switch(action) {
+ case GroupUtil.ACTION_UPDATE_GROUP:
+ id = R.string.groupUpdatedToast;
+ break;
+ case GroupUtil.ACTION_REMOVE_FROM_GROUP:
+ id = R.string.groupMembersRemovedToast;
+ break;
+ case GroupUtil.ACTION_CREATE_GROUP:
+ id = R.string.groupCreatedToast;
+ break;
+ case GroupUtil.ACTION_ADD_TO_GROUP:
+ id = R.string.groupMembersAddedToast;
+ break;
+ case GroupUtil.ACTION_SWITCH_GROUP:
+ // No toast associated with this action.
+ break;
+ default:
+ FeedbackHelper.sendFeedback(getContext(), TAG,
+ "toastForSaveAction passed unknown action: " + action,
+ new IllegalArgumentException("Unhandled contact save action " + action));
+ }
+ toast(id);
+ }
+
+ private void toast(int resId) {
+ if (resId >= 0) {
+ Toast.makeText(getContext(), resId, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private int getGroupCount() {
+ return getAdapter() != null ? getAdapter().getCount() : -1;
+ }
+
+ public void exitEditMode() {
+ mIsEditMode = false;
+ mActionBarAdapter.setSelectionMode(false);
+ displayDeleteButtons(false);
+ }
+}
diff --git a/src/com/android/contacts/group/GroupMetaData.java b/src/com/android/contacts/group/GroupMetaData.java
new file mode 100644
index 000000000..4a8cb0f11
--- /dev/null
+++ b/src/com/android/contacts/group/GroupMetaData.java
@@ -0,0 +1,143 @@
+/*
+ * 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.group;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+
+import com.google.common.base.MoreObjects;
+
+/** Meta data for a contact group. */
+public final class GroupMetaData implements Parcelable {
+
+ public static final Creator<GroupMetaData> CREATOR = new Creator<GroupMetaData>() {
+
+ public GroupMetaData createFromParcel(Parcel in) {
+ return new GroupMetaData(in);
+ }
+
+ public GroupMetaData[] newArray(int size) {
+ return new GroupMetaData[size];
+ }
+ };
+
+ public final Uri uri;
+ public final String accountName;
+ public final String accountType;
+ public final String dataSet;
+ public final long groupId;
+ public final String groupName;
+ public final boolean readOnly;
+ public final boolean defaultGroup;
+ public final boolean favorites;
+ public final boolean editable;
+
+ /**
+ * @param cursor Cursor loaded with {@link GroupMetaDataLoader#COLUMNS} as the projection.
+ */
+ public GroupMetaData(Context context, Cursor cursor) {
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+ final long groupId = cursor.getLong(GroupMetaDataLoader.GROUP_ID);
+ final Uri groupUri = ContentUris.withAppendedId(
+ ContactsContract.Groups.CONTENT_URI, groupId);
+ final AccountType accountType = accountTypeManager.getAccountType(
+ cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE),
+ cursor.getString(GroupMetaDataLoader.DATA_SET));
+ final boolean editable = accountType == null
+ ? false : accountType.isGroupMembershipEditable();
+
+ this.uri = groupUri;
+ this.accountName = cursor.getString(GroupMetaDataLoader.ACCOUNT_NAME);
+ this.accountType = cursor.getString(GroupMetaDataLoader.ACCOUNT_TYPE);
+ this.dataSet = cursor.getString(GroupMetaDataLoader.DATA_SET);
+ this.groupId = groupId;
+ this.groupName = cursor.getString(GroupMetaDataLoader.TITLE);
+ this.readOnly = getBoolean(cursor, GroupMetaDataLoader.IS_READ_ONLY);
+ this.defaultGroup = getBoolean(cursor, GroupMetaDataLoader.AUTO_ADD);
+ this.favorites = getBoolean(cursor, GroupMetaDataLoader.FAVORITES);
+ this.editable = editable;
+ }
+
+ private static boolean getBoolean(Cursor cursor, int columnIndex) {
+ return cursor.isNull(columnIndex) ? false : cursor.getInt(columnIndex) != 0;
+ }
+
+ private GroupMetaData(Parcel source) {
+ uri = source.readParcelable(Uri.class.getClassLoader());
+ accountName = source.readString();
+ accountType = source.readString();
+ dataSet = source.readString();
+ groupId = source.readLong();
+ groupName = source.readString();
+ readOnly = source.readInt() == 1;
+ defaultGroup = source.readInt() == 1;
+ favorites = source.readInt() == 1;
+ editable = source.readInt() == 1;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(uri, 0);
+ dest.writeString(accountName);
+ dest.writeString(accountType);
+ dest.writeString(dataSet);
+ dest.writeLong(groupId);
+ dest.writeString(groupName);
+ dest.writeInt(readOnly ? 1 : 0);
+ dest.writeInt(defaultGroup ? 1 : 0);
+ dest.writeInt(favorites ? 1 : 0);
+ dest.writeInt(editable ? 1 : 0);
+ }
+
+ /** Whether all metadata fields are set. */
+ public boolean isValid() {
+ return uri != null
+ && !TextUtils.isEmpty(accountName)
+ && !TextUtils.isEmpty(groupName)
+ && groupId > 0;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("accountName", accountName)
+ .add("accountType", accountType)
+ .add("dataSet", dataSet)
+ .add("groupId", groupId)
+ .add("groupName", groupName)
+ .add("readOnly", readOnly)
+ .add("defaultGroup", defaultGroup)
+ .add("favorites", favorites)
+ .add("editable", editable)
+ .add("isValid", isValid())
+ .toString();
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/group/GroupNameEditDialogFragment.java b/src/com/android/contacts/group/GroupNameEditDialogFragment.java
new file mode 100644
index 000000000..80d184bde
--- /dev/null
+++ b/src/com/android/contacts/group/GroupNameEditDialogFragment.java
@@ -0,0 +1,357 @@
+/*
+ * 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, softwareateCre
+ * 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.group;
+
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.provider.ContactsContract.Groups;
+import android.support.design.widget.TextInputLayout;
+import android.support.v7.app.AlertDialog;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.base.Strings;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Edits the name of a group.
+ */
+public final class GroupNameEditDialogFragment extends DialogFragment implements
+ LoaderManager.LoaderCallbacks<Cursor> {
+
+ private static final String KEY_GROUP_NAME = "groupName";
+
+ private static final String ARG_IS_INSERT = "isInsert";
+ private static final String ARG_GROUP_NAME = "groupName";
+ private static final String ARG_ACCOUNT = "account";
+ private static final String ARG_CALLBACK_ACTION = "callbackAction";
+ private static final String ARG_GROUP_ID = "groupId";
+
+ private static final long NO_GROUP_ID = -1;
+
+
+ /** Callbacks for hosts of the {@link GroupNameEditDialogFragment}. */
+ public interface Listener {
+ void onGroupNameEditCancelled();
+ void onGroupNameEditCompleted(String name);
+
+ public static final Listener None = new Listener() {
+ @Override
+ public void onGroupNameEditCancelled() { }
+
+ @Override
+ public void onGroupNameEditCompleted(String name) { }
+ };
+ }
+
+ private boolean mIsInsert;
+ private String mGroupName;
+ private long mGroupId;
+ private Listener mListener;
+ private AccountWithDataSet mAccount;
+ private EditText mGroupNameEditText;
+ private TextInputLayout mGroupNameTextLayout;
+ private Set<String> mExistingGroups = Collections.emptySet();
+
+ public static GroupNameEditDialogFragment newInstanceForCreation(
+ AccountWithDataSet account, String callbackAction) {
+ return newInstance(account, callbackAction, NO_GROUP_ID, null);
+ }
+
+ public static GroupNameEditDialogFragment newInstanceForUpdate(
+ AccountWithDataSet account, String callbackAction, long groupId, String groupName) {
+ return newInstance(account, callbackAction, groupId, groupName);
+ }
+
+ private static GroupNameEditDialogFragment newInstance(
+ AccountWithDataSet account, String callbackAction, long groupId, String groupName) {
+ if (account == null || account.name == null || account.type == null) {
+ throw new IllegalArgumentException("Invalid account");
+ }
+ final boolean isInsert = groupId == NO_GROUP_ID;
+ final Bundle args = new Bundle();
+ args.putBoolean(ARG_IS_INSERT, isInsert);
+ args.putLong(ARG_GROUP_ID, groupId);
+ args.putString(ARG_GROUP_NAME, groupName);
+ args.putParcelable(ARG_ACCOUNT, account);
+ args.putString(ARG_CALLBACK_ACTION, callbackAction);
+
+ final GroupNameEditDialogFragment dialog = new GroupNameEditDialogFragment();
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setStyle(STYLE_NORMAL, R.style.ContactsAlertDialogThemeAppCompat);
+ final Bundle args = getArguments();
+ if (savedInstanceState == null) {
+ mGroupName = args.getString(KEY_GROUP_NAME);
+ } else {
+ mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
+ }
+
+ mGroupId = args.getLong(ARG_GROUP_ID, NO_GROUP_ID);
+ mIsInsert = args.getBoolean(ARG_IS_INSERT, true);
+ mAccount = getArguments().getParcelable(ARG_ACCOUNT);
+
+ // There is only one loader so the id arg doesn't matter.
+ getLoaderManager().initLoader(0, null, this);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Build a dialog with two buttons and a view of a single EditText input field
+ final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+ title.setText(mIsInsert
+ ? R.string.group_name_dialog_insert_title
+ : R.string.group_name_dialog_update_title);
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), getTheme())
+ .setCustomTitle(title)
+ .setView(R.layout.group_name_edit_dialog)
+ .setNegativeButton(android.R.string.cancel, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ hideInputMethod();
+ getListener().onGroupNameEditCancelled();
+ dismiss();
+ }
+ })
+ // The Positive button listener is defined below in the OnShowListener to
+ // allow for input validation
+ .setPositiveButton(android.R.string.ok, null);
+
+ // Disable the create button when the name is empty
+ final AlertDialog alertDialog = builder.create();
+ alertDialog.getWindow().setSoftInputMode(
+ WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ @Override
+ public void onShow(DialogInterface dialog) {
+ mGroupNameEditText = (EditText) alertDialog.findViewById(android.R.id.text1);
+ mGroupNameTextLayout =
+ (TextInputLayout) alertDialog.findViewById(R.id.text_input_layout);
+ if (!TextUtils.isEmpty(mGroupName)) {
+ mGroupNameEditText.setText(mGroupName);
+ // Guard against already created group names that are longer than the max
+ final int maxLength = getResources().getInteger(
+ R.integer.group_name_max_length);
+ mGroupNameEditText.setSelection(
+ mGroupName.length() > maxLength ? maxLength : mGroupName.length());
+ }
+ showInputMethod(mGroupNameEditText);
+
+ final Button createButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
+ createButton.setEnabled(!TextUtils.isEmpty(getGroupName()));
+
+ // Override the click listener to prevent dismissal if creating a duplicate group.
+ createButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ maybePersistCurrentGroupName(v);
+ }
+ });
+ mGroupNameEditText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ mGroupNameTextLayout.setError(null);
+ createButton.setEnabled(!TextUtils.isEmpty(s));
+ }
+ });
+ }
+ });
+
+ return alertDialog;
+ }
+
+ /**
+ * Sets the listener for the rename
+ *
+ * Setting a listener on a fragment is error prone since it will be lost if the fragment
+ * is recreated. This exists because it is used from a view class (GroupMembersView) which
+ * needs to modify it's state when this fragment updates the name.
+ *
+ * @param listener the listener. can be null
+ */
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+
+ private boolean hasNameChanged() {
+ final String name = Strings.nullToEmpty(getGroupName());
+ final String originalName = getArguments().getString(ARG_GROUP_NAME);
+ return (mIsInsert && !name.isEmpty()) || !name.equals(originalName);
+ }
+
+ private void maybePersistCurrentGroupName(View button) {
+ if (!hasNameChanged()) {
+ dismiss();
+ return;
+ }
+ final String name = getGroupName();
+ // Note we don't check if the loader finished populating mExistingGroups. It's not the
+ // end of the world if the user ends up with a duplicate group and in practice it should
+ // never really happen (the query should complete much sooner than the user can edit the
+ // label)
+ if (mExistingGroups.contains(name)) {
+ mGroupNameTextLayout.setError(
+ getString(R.string.groupExistsErrorMessage));
+ button.setEnabled(false);
+ return;
+ }
+ final String callbackAction = getArguments().getString(ARG_CALLBACK_ACTION);
+ final Intent serviceIntent;
+ if (mIsInsert) {
+ serviceIntent = ContactSaveService.createNewGroupIntent(getActivity(), mAccount,
+ name, null, getActivity().getClass(), callbackAction);
+ } else {
+ serviceIntent = ContactSaveService.createGroupRenameIntent(getActivity(), mGroupId,
+ name, getActivity().getClass(), callbackAction);
+ }
+ ContactSaveService.startService(getActivity(), serviceIntent);
+ getListener().onGroupNameEditCompleted(mGroupName);
+ dismiss();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
+ getListener().onGroupNameEditCancelled();
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putString(KEY_GROUP_NAME, getGroupName());
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // Only a single loader so id is ignored.
+ return new CursorLoader(getActivity(), Groups.CONTENT_SUMMARY_URI,
+ new String[] { Groups.TITLE, Groups.SYSTEM_ID, Groups.ACCOUNT_TYPE,
+ Groups.SUMMARY_COUNT, Groups.GROUP_IS_READ_ONLY},
+ getSelection(), getSelectionArgs(), null);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ mExistingGroups = new HashSet<>();
+ final GroupUtil.GroupsProjection projection = new GroupUtil.GroupsProjection(data);
+ while (data.moveToNext()) {
+ final String title = projection.getTitle(data);
+ // Empty system groups aren't shown in the nav drawer so it would be confusing to tell
+ // the user that they already exist. Instead we allow them to create a duplicate
+ // group in this case. This is how the web handles this case as well (it creates a
+ // new non-system group if a new group with a title that matches a system group is
+ // create).
+ if (projection.isEmptyFFCGroup(data)) {
+ continue;
+ }
+ mExistingGroups.add(title);
+ }
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+
+ private void showInputMethod(View view) {
+ final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ imm.showSoftInput(view, /* flags */ 0);
+ }
+ }
+
+ private void hideInputMethod() {
+ final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (imm != null && mGroupNameEditText != null) {
+ imm.hideSoftInputFromWindow(mGroupNameEditText.getWindowToken(), /* flags */ 0);
+ }
+ }
+
+ private Listener getListener() {
+ if (mListener != null) {
+ return mListener;
+ } else if (getActivity() instanceof Listener) {
+ return (Listener) getActivity();
+ } else {
+ return Listener.None;
+ }
+ }
+
+ private String getGroupName() {
+ return mGroupNameEditText == null || mGroupNameEditText.getText() == null
+ ? null : mGroupNameEditText.getText().toString();
+ }
+
+ private String getSelection() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append(Groups.ACCOUNT_NAME).append("=? AND ")
+ .append(Groups.ACCOUNT_TYPE).append("=? AND ")
+ .append(Groups.DELETED).append("=?");
+ if (mAccount.dataSet != null) {
+ builder.append(" AND ").append(Groups.DATA_SET).append("=?");
+ }
+ return builder.toString();
+ }
+
+ private String[] getSelectionArgs() {
+ final int len = mAccount.dataSet == null ? 3 : 4;
+ final String[] args = new String[len];
+ args[0] = mAccount.name;
+ args[1] = mAccount.type;
+ args[2] = "0"; // Not deleted
+ if (mAccount.dataSet != null) {
+ args[3] = mAccount.dataSet;
+ }
+ return args;
+ }
+}
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
new file mode 100644
index 000000000..706f16bd5
--- /dev/null
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -0,0 +1,364 @@
+/*
+ * 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.group;
+
+import android.app.Fragment;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Groups;
+import android.text.TextUtils;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.GroupListLoader;
+import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.list.ContactsSectionIndexer;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Group utility methods.
+ */
+public final class GroupUtil {
+
+ public final static String ALL_GROUPS_SELECTION =
+ Groups.ACCOUNT_TYPE + " NOT NULL AND " + Groups.ACCOUNT_NAME + " NOT NULL AND "
+ + Groups.DELETED + "=0";
+
+ public final static String DEFAULT_SELECTION = ALL_GROUPS_SELECTION + " AND "
+ + Groups.AUTO_ADD + "=0 AND " + Groups.FAVORITES + "=0";
+
+ public static final String ACTION_ADD_TO_GROUP = "addToGroup";
+ public static final String ACTION_CREATE_GROUP = "createGroup";
+ public static final String ACTION_DELETE_GROUP = "deleteGroup";
+ public static final String ACTION_REMOVE_FROM_GROUP = "removeFromGroup";
+ public static final String ACTION_SWITCH_GROUP = "switchGroup";
+ public static final String ACTION_UPDATE_GROUP = "updateGroup";
+
+ public static final int RESULT_SEND_TO_SELECTION = 100;
+
+ // System IDs of FFC groups in Google accounts
+ private static final Set<String> FFC_GROUPS =
+ new HashSet(Arrays.asList("Friends", "Family", "Coworkers"));
+
+ private GroupUtil() {
+ }
+
+ /** Returns a {@link GroupListItem} read from the given cursor and position. */
+ public static GroupListItem getGroupListItem(Cursor cursor, int position) {
+ if (cursor == null || cursor.isClosed() || !cursor.moveToPosition(position)) {
+ return null;
+ }
+ String accountName = cursor.getString(GroupListLoader.ACCOUNT_NAME);
+ String accountType = cursor.getString(GroupListLoader.ACCOUNT_TYPE);
+ String dataSet = cursor.getString(GroupListLoader.DATA_SET);
+ long groupId = cursor.getLong(GroupListLoader.GROUP_ID);
+ String title = cursor.getString(GroupListLoader.TITLE);
+ int memberCount = cursor.getInt(GroupListLoader.MEMBER_COUNT);
+ boolean isReadOnly = cursor.getInt(GroupListLoader.IS_READ_ONLY) == 1;
+ String systemId = cursor.getString(GroupListLoader.SYSTEM_ID);
+
+ // Figure out if this is the first group for this account name / account type pair by
+ // checking the previous entry. This is to determine whether or not we need to display an
+ // account header in this item.
+ int previousIndex = position - 1;
+ boolean isFirstGroupInAccount = true;
+ if (previousIndex >= 0 && cursor.moveToPosition(previousIndex)) {
+ String previousGroupAccountName = cursor.getString(GroupListLoader.ACCOUNT_NAME);
+ String previousGroupAccountType = cursor.getString(GroupListLoader.ACCOUNT_TYPE);
+ String previousGroupDataSet = cursor.getString(GroupListLoader.DATA_SET);
+
+ if (TextUtils.equals(accountName, previousGroupAccountName)
+ && TextUtils.equals(accountType, previousGroupAccountType)
+ && TextUtils.equals(dataSet, previousGroupDataSet)) {
+ isFirstGroupInAccount = false;
+ }
+ }
+
+ return new GroupListItem(accountName, accountType, dataSet, groupId, title,
+ isFirstGroupInAccount, memberCount, isReadOnly, systemId);
+ }
+
+ public static List<String> getSendToDataForIds(Context context, long[] ids, String scheme) {
+ final List<String> items = new ArrayList<>();
+ final String sIds = GroupUtil.convertArrayToString(ids);
+ final String select = (ContactsUtils.SCHEME_MAILTO.equals(scheme)
+ ? GroupMembersFragment.Query.EMAIL_SELECTION
+ + " AND " + ContactsContract.CommonDataKinds.Email._ID + " IN (" + sIds + ")"
+ : GroupMembersFragment.Query.PHONE_SELECTION
+ + " AND " + ContactsContract.CommonDataKinds.Phone._ID + " IN (" + sIds + ")");
+ final ContentResolver contentResolver = context.getContentResolver();
+ final Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
+ ContactsUtils.SCHEME_MAILTO.equals(scheme)
+ ? GroupMembersFragment.Query.EMAIL_PROJECTION
+ : GroupMembersFragment.Query.PHONE_PROJECTION,
+ select, null, null);
+
+ if (cursor == null) {
+ return items;
+ }
+
+ try {
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ final String data = cursor.getString(GroupMembersFragment.Query.DATA1);
+
+ if (!TextUtils.isEmpty(data)) {
+ items.add(data);
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+
+ return items;
+ }
+
+ /** Returns an Intent to send emails/phones to some activity/app */
+ public static void startSendToSelectionActivity(
+ Fragment fragment, String itemsList, String sendScheme, String title) {
+ final Intent intent = new Intent(Intent.ACTION_SENDTO,
+ Uri.fromParts(sendScheme, itemsList, null));
+ fragment.startActivityForResult(
+ Intent.createChooser(intent, title), RESULT_SEND_TO_SELECTION);
+ }
+
+ /** Returns an Intent to pick emails/phones to send to selection (or group) */
+ public static Intent createSendToSelectionPickerIntent(Context context, long[] ids,
+ long[] defaultSelection, String sendScheme, String title) {
+ final Intent intent = new Intent(context, ContactSelectionActivity.class);
+ intent.setAction(UiIntentActions.ACTION_SELECT_ITEMS);
+ intent.setType(ContactsUtils.SCHEME_MAILTO.equals(sendScheme)
+ ? ContactsContract.CommonDataKinds.Email.CONTENT_TYPE
+ : ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
+ intent.putExtra(UiIntentActions.SELECTION_ITEM_LIST, ids);
+ intent.putExtra(UiIntentActions.SELECTION_DEFAULT_SELECTION, defaultSelection);
+ intent.putExtra(UiIntentActions.SELECTION_SEND_SCHEME, sendScheme);
+ intent.putExtra(UiIntentActions.SELECTION_SEND_TITLE, title);
+
+ return intent;
+ }
+
+ /** Returns an Intent to pick contacts to add to a group. */
+ public static Intent createPickMemberIntent(Context context,
+ GroupMetaData groupMetaData, ArrayList<String> memberContactIds) {
+ final Intent intent = new Intent(context, ContactSelectionActivity.class);
+ intent.setAction(Intent.ACTION_PICK);
+ intent.setType(Groups.CONTENT_TYPE);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_NAME, groupMetaData.accountName);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_TYPE, groupMetaData.accountType);
+ intent.putExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET, groupMetaData.dataSet);
+ intent.putExtra(UiIntentActions.GROUP_CONTACT_IDS, memberContactIds);
+ return intent;
+ }
+
+ public static String convertArrayToString(long[] list) {
+ if (list == null || list.length == 0) return "";
+ return Arrays.toString(list).replace("[", "").replace("]", "");
+ }
+
+ public static long[] convertLongSetToLongArray(Set<Long> set) {
+ final Long[] contactIds = set.toArray(new Long[set.size()]);
+ final long[] result = new long[contactIds.length];
+ for (int i = 0; i < contactIds.length; i++) {
+ result[i] = contactIds[i];
+ }
+ return result;
+ }
+
+ public static long[] convertStringSetToLongArray(Set<String> set) {
+ final String[] contactIds = set.toArray(new String[set.size()]);
+ final long[] result = new long[contactIds.length];
+ for (int i = 0; i < contactIds.length; i++) {
+ try {
+ result[i] = Long.parseLong(contactIds[i]);
+ } catch (NumberFormatException e) {
+ result[i] = -1;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if it's an empty and read-only group and the system ID of
+ * the group is one of "Friends", "Family" and "Coworkers".
+ */
+ public static boolean isEmptyFFCGroup(GroupListItem groupListItem) {
+ return groupListItem.isReadOnly()
+ && isSystemIdFFC(groupListItem.getSystemId())
+ && (groupListItem.getMemberCount() <= 0);
+ }
+
+ private static boolean isSystemIdFFC(String systemId) {
+ return !TextUtils.isEmpty(systemId) && FFC_GROUPS.contains(systemId);
+ }
+
+ /**
+ * Returns true the URI is a group URI.
+ */
+ public static boolean isGroupUri(Uri uri) {
+ return uri != null && uri.toString().startsWith(Groups.CONTENT_URI.toString());
+ }
+
+ /**
+ * Sort groups alphabetically and in a localized way.
+ */
+ public static String getGroupsSortOrder() {
+ return Groups.TITLE + " COLLATE LOCALIZED ASC";
+ }
+
+ /**
+ * The sum of the last element in counts[] and the last element in positions[] is the total
+ * number of remaining elements in cursor. If count is more than what's in the indexer now,
+ * then we don't need to trim.
+ */
+ public static boolean needTrimming(int count, int[] counts, int[] positions) {
+ // The sum of the last element in counts[] and the last element in positions[] is
+ // the total number of remaining elements in cursor. If mCount is more than
+ // what's in the indexer now, then we don't need to trim.
+ return positions.length > 0 && counts.length > 0
+ && count <= (counts[counts.length - 1] + positions[positions.length - 1]);
+ }
+
+ /**
+ * Update Bundle extras so as to update indexer.
+ */
+ public static void updateBundle(Bundle bundle, ContactsSectionIndexer indexer,
+ List<Integer> subscripts, String[] sections, int[] counts) {
+ for (int i : subscripts) {
+ final int filteredContact = indexer.getSectionForPosition(i);
+ if (filteredContact < counts.length && filteredContact >= 0) {
+ counts[filteredContact]--;
+ if (counts[filteredContact] == 0) {
+ sections[filteredContact] = "";
+ }
+ }
+ }
+ final String[] newSections = clearEmptyString(sections);
+ bundle.putStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES, newSections);
+ final int[] newCounts = clearZeros(counts);
+ bundle.putIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS, newCounts);
+ }
+
+ private static String[] clearEmptyString(String[] strings) {
+ final List<String> list = new ArrayList<>();
+ for (String s : strings) {
+ if (!TextUtils.isEmpty(s)) {
+ list.add(s);
+ }
+ }
+ return list.toArray(new String[list.size()]);
+ }
+
+ private static int[] clearZeros(int[] numbers) {
+ final List<Integer> list = new ArrayList<>();
+ for (int n : numbers) {
+ if (n > 0) {
+ list.add(n);
+ }
+ }
+ final int[] array = new int[list.size()];
+ for(int i = 0; i < list.size(); i++) {
+ array[i] = list.get(i);
+ }
+ return array;
+ }
+
+ /**
+ * Stores column ordering for the projection of a query of ContactsContract.Groups
+ */
+ public static final class GroupsProjection {
+ public final int groupId;
+ public final int title;
+ public final int summaryCount;
+ public final int systemId;
+ public final int accountName;
+ public final int accountType;
+ public final int dataSet;
+ public final int autoAdd;
+ public final int favorites;
+ public final int isReadOnly;
+ public final int deleted;
+
+ public GroupsProjection(Cursor cursor) {
+ groupId = cursor.getColumnIndex(Groups._ID);
+ title = cursor.getColumnIndex(Groups.TITLE);
+ summaryCount = cursor.getColumnIndex(Groups.SUMMARY_COUNT);
+ systemId = cursor.getColumnIndex(Groups.SYSTEM_ID);
+ accountName = cursor.getColumnIndex(Groups.ACCOUNT_NAME);
+ accountType = cursor.getColumnIndex(Groups.ACCOUNT_TYPE);
+ dataSet = cursor.getColumnIndex(Groups.DATA_SET);
+ autoAdd = cursor.getColumnIndex(Groups.AUTO_ADD);
+ favorites = cursor.getColumnIndex(Groups.FAVORITES);
+ isReadOnly = cursor.getColumnIndex(Groups.GROUP_IS_READ_ONLY);
+ deleted = cursor.getColumnIndex(Groups.DELETED);
+ }
+
+ public GroupsProjection(String[] projection) {
+ List<String> list = Arrays.asList(projection);
+ groupId = list.indexOf(Groups._ID);
+ title = list.indexOf(Groups.TITLE);
+ summaryCount = list.indexOf(Groups.SUMMARY_COUNT);
+ systemId = list.indexOf(Groups.SYSTEM_ID);
+ accountName = list.indexOf(Groups.ACCOUNT_NAME);
+ accountType = list.indexOf(Groups.ACCOUNT_TYPE);
+ dataSet = list.indexOf(Groups.DATA_SET);
+ autoAdd = list.indexOf(Groups.AUTO_ADD);
+ favorites = list.indexOf(Groups.FAVORITES);
+ isReadOnly = list.indexOf(Groups.GROUP_IS_READ_ONLY);
+ deleted = list.indexOf(Groups.DELETED);
+ }
+
+ public String getTitle(Cursor cursor) {
+ return cursor.getString(title);
+ }
+
+ public long getId(Cursor cursor) {
+ return cursor.getLong(groupId);
+ }
+
+ public String getSystemId(Cursor cursor) {
+ return cursor.getString(systemId);
+ }
+
+ public int getSummaryCount(Cursor cursor) {
+ return cursor.getInt(summaryCount);
+ }
+
+ public boolean isEmptyFFCGroup(Cursor cursor) {
+ if (accountType == -1 || isReadOnly == -1 ||
+ systemId == -1 || summaryCount == -1) {
+ throw new IllegalArgumentException("Projection is missing required columns");
+ }
+ return GoogleAccountType.ACCOUNT_TYPE.equals(cursor.getString(accountType))
+ && cursor.getInt(isReadOnly) != 0
+ && isSystemIdFFC(cursor.getString(systemId))
+ && cursor.getInt(summaryCount) <= 0;
+ }
+ }
+}
diff --git a/src/com/android/contacts/group/SuggestedMemberListAdapter.java b/src/com/android/contacts/group/SuggestedMemberListAdapter.java
deleted file mode 100644
index 19ff61177..000000000
--- a/src/com/android/contacts/group/SuggestedMemberListAdapter.java
+++ /dev/null
@@ -1,379 +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.group;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.Contacts.Data;
-import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.RawContactsEntity;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.AutoCompleteTextView;
-import android.widget.Filter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.group.SuggestedMemberListAdapter.SuggestedMember;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * This adapter provides suggested contacts that can be added to a group for an
- * {@link AutoCompleteTextView} within the group editor.
- */
-public class SuggestedMemberListAdapter extends ArrayAdapter<SuggestedMember> {
-
- private static final String[] PROJECTION_FILTERED_MEMBERS = new String[] {
- RawContacts._ID, // 0
- RawContacts.CONTACT_ID, // 1
- RawContacts.DISPLAY_NAME_PRIMARY // 2
- };
-
- private static final int RAW_CONTACT_ID_COLUMN_INDEX = 0;
- private static final int CONTACT_ID_COLUMN_INDEX = 1;
- private static final int DISPLAY_NAME_PRIMARY_COLUMN_INDEX = 2;
-
- private static final String[] PROJECTION_MEMBER_DATA = new String[] {
- RawContacts._ID, // 0
- RawContacts.CONTACT_ID, // 1
- Data.MIMETYPE, // 2
- Data.DATA1, // 3
- Photo.PHOTO, // 4
- };
-
- private static final int MIMETYPE_COLUMN_INDEX = 2;
- private static final int DATA_COLUMN_INDEX = 3;
- private static final int PHOTO_COLUMN_INDEX = 4;
-
- private Filter mFilter;
- private ContentResolver mContentResolver;
- private LayoutInflater mInflater;
-
- private String mAccountType;
- private String mAccountName;
- private String mDataSet;
-
- // TODO: Make this a Map for better performance when we check if a new contact is in the list
- // or not
- private final List<Long> mExistingMemberContactIds = new ArrayList<Long>();
-
- private static final int SUGGESTIONS_LIMIT = 5;
-
- public SuggestedMemberListAdapter(Context context, int textViewResourceId) {
- super(context, textViewResourceId);
- mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- }
-
- public void setAccountType(String accountType) {
- mAccountType = accountType;
- }
-
- public void setAccountName(String accountName) {
- mAccountName = accountName;
- }
-
- public void setDataSet(String dataSet) {
- mDataSet = dataSet;
- }
-
- public void setContentResolver(ContentResolver resolver) {
- mContentResolver = resolver;
- }
-
- public void updateExistingMembersList(List<GroupEditorFragment.Member> list) {
- mExistingMemberContactIds.clear();
- for (GroupEditorFragment.Member member : list) {
- mExistingMemberContactIds.add(member.getContactId());
- }
- }
-
- public void addNewMember(long contactId) {
- mExistingMemberContactIds.add(contactId);
- }
-
- public void removeMember(long contactId) {
- if (mExistingMemberContactIds.contains(contactId)) {
- mExistingMemberContactIds.remove(contactId);
- }
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View result = convertView;
- if (result == null) {
- result = mInflater.inflate(R.layout.group_member_suggestion, parent, false);
- }
- // TODO: Use a viewholder
- SuggestedMember member = getItem(position);
- TextView text1 = (TextView) result.findViewById(R.id.text1);
- TextView text2 = (TextView) result.findViewById(R.id.text2);
- ImageView icon = (ImageView) result.findViewById(R.id.icon);
- text1.setText(member.getDisplayName());
- if (member.hasExtraInfo()) {
- text2.setText(member.getExtraInfo());
- } else {
- text2.setVisibility(View.GONE);
- }
- byte[] byteArray = member.getPhotoByteArray();
- if (byteArray == null) {
- icon.setImageDrawable(ContactPhotoManager.getDefaultAvatarDrawableForContact(
- icon.getResources(), false, null));
- } else {
- Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
- icon.setImageBitmap(bitmap);
- }
- result.setTag(member);
- return result;
- }
-
- @Override
- public Filter getFilter() {
- if (mFilter == null) {
- mFilter = new SuggestedMemberFilter();
- }
- return mFilter;
- }
-
- /**
- * This filter queries for raw contacts that match the given account name and account type,
- * as well as the search query.
- */
- public class SuggestedMemberFilter extends Filter {
-
- @Override
- protected FilterResults performFiltering(CharSequence prefix) {
- FilterResults results = new FilterResults();
- if (mContentResolver == null || TextUtils.isEmpty(prefix)) {
- return results;
- }
-
- // Create a list to store the suggested contacts (which will be alphabetically ordered),
- // but also keep a map of raw contact IDs to {@link SuggestedMember}s to make it easier
- // to add supplementary data to the contact (photo, phone, email) to the members based
- // on raw contact IDs after the second query is completed.
- List<SuggestedMember> suggestionsList = new ArrayList<SuggestedMember>();
- HashMap<Long, SuggestedMember> suggestionsMap = new HashMap<Long, SuggestedMember>();
-
- // First query for all the raw contacts that match the given search query
- // and have the same account name and type as specified in this adapter
- String searchQuery = prefix.toString() + "%";
- String accountClause = RawContacts.ACCOUNT_NAME + "=? AND " +
- RawContacts.ACCOUNT_TYPE + "=?";
- String[] args;
- if (mDataSet == null) {
- accountClause += " AND " + RawContacts.DATA_SET + " IS NULL";
- args = new String[] {mAccountName, mAccountType, searchQuery, searchQuery};
- } else {
- accountClause += " AND " + RawContacts.DATA_SET + "=?";
- args = new String[] {
- mAccountName, mAccountType, mDataSet, searchQuery, searchQuery
- };
- }
-
- Cursor cursor = mContentResolver.query(
- RawContacts.CONTENT_URI, PROJECTION_FILTERED_MEMBERS,
- accountClause + " AND (" +
- RawContacts.DISPLAY_NAME_PRIMARY + " LIKE ? OR " +
- RawContacts.DISPLAY_NAME_ALTERNATIVE + " LIKE ? )",
- args, RawContacts.DISPLAY_NAME_PRIMARY + " COLLATE LOCALIZED ASC");
-
- if (cursor == null) {
- return results;
- }
-
- // Read back the results from the cursor and filter out existing group members.
- // For valid suggestions, add them to the hash map of suggested members.
- try {
- cursor.moveToPosition(-1);
- while (cursor.moveToNext() && suggestionsMap.keySet().size() < SUGGESTIONS_LIMIT) {
- long rawContactId = cursor.getLong(RAW_CONTACT_ID_COLUMN_INDEX);
- long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
- // Filter out contacts that have already been added to this group
- if (mExistingMemberContactIds.contains(contactId)) {
- continue;
- }
- // Otherwise, add the contact as a suggested new group member
- String displayName = cursor.getString(DISPLAY_NAME_PRIMARY_COLUMN_INDEX);
- SuggestedMember member = new SuggestedMember(rawContactId, displayName,
- contactId);
- // Store the member in the list of suggestions and add it to the hash map too.
- suggestionsList.add(member);
- suggestionsMap.put(rawContactId, member);
- }
- } finally {
- cursor.close();
- }
-
- int numSuggestions = suggestionsMap.keySet().size();
- if (numSuggestions == 0) {
- return results;
- }
-
- // Create a part of the selection string for the next query with the pattern (?, ?, ?)
- // where the number of comma-separated question marks represent the number of raw
- // contact IDs found in the previous query (while respective the SUGGESTION_LIMIT)
- final StringBuilder rawContactIdSelectionBuilder = new StringBuilder();
- final String[] questionMarks = new String[numSuggestions];
- Arrays.fill(questionMarks, "?");
- rawContactIdSelectionBuilder.append(RawContacts._ID + " IN (")
- .append(TextUtils.join(",", questionMarks))
- .append(")");
-
- // Construct the selection args based on the raw contact IDs we're interested in
- // (as well as the photo, email, and phone mimetypes)
- List<String> selectionArgs = new ArrayList<String>();
- selectionArgs.add(Photo.CONTENT_ITEM_TYPE);
- selectionArgs.add(Email.CONTENT_ITEM_TYPE);
- selectionArgs.add(Phone.CONTENT_ITEM_TYPE);
- for (Long rawContactId : suggestionsMap.keySet()) {
- selectionArgs.add(String.valueOf(rawContactId));
- }
-
- // Perform a second query to retrieve a photo and possibly a phone number or email
- // address for the suggested contact
- Cursor memberDataCursor = mContentResolver.query(
- RawContactsEntity.CONTENT_URI, PROJECTION_MEMBER_DATA,
- "(" + Data.MIMETYPE + "=? OR " + Data.MIMETYPE + "=? OR " + Data.MIMETYPE +
- "=?) AND " + rawContactIdSelectionBuilder.toString(),
- selectionArgs.toArray(new String[0]), null);
-
- if (memberDataCursor != null) {
- try {
- memberDataCursor.moveToPosition(-1);
- while (memberDataCursor.moveToNext()) {
- long rawContactId = memberDataCursor.getLong(RAW_CONTACT_ID_COLUMN_INDEX);
- SuggestedMember member = suggestionsMap.get(rawContactId);
- if (member == null) {
- continue;
- }
- String mimetype = memberDataCursor.getString(MIMETYPE_COLUMN_INDEX);
- if (Photo.CONTENT_ITEM_TYPE.equals(mimetype)) {
- // Set photo
- byte[] bitmapArray = memberDataCursor.getBlob(PHOTO_COLUMN_INDEX);
- member.setPhotoByteArray(bitmapArray);
- } else if (Email.CONTENT_ITEM_TYPE.equals(mimetype) ||
- Phone.CONTENT_ITEM_TYPE.equals(mimetype)) {
- // Set at most 1 extra piece of contact info that can be a phone number or
- // email
- if (!member.hasExtraInfo()) {
- String info = memberDataCursor.getString(DATA_COLUMN_INDEX);
- member.setExtraInfo(info);
- }
- }
- }
- } finally {
- memberDataCursor.close();
- }
- }
- results.values = suggestionsList;
- return results;
- }
-
- @Override
- protected void publishResults(CharSequence constraint, FilterResults results) {
- @SuppressWarnings("unchecked")
- List<SuggestedMember> suggestionsList = (List<SuggestedMember>) results.values;
- if (suggestionsList == null) {
- return;
- }
-
- // Clear out the existing suggestions in this adapter
- clear();
-
- // Add all the suggested members to this adapter
- for (SuggestedMember member : suggestionsList) {
- add(member);
- }
-
- notifyDataSetChanged();
- }
- }
-
- /**
- * This represents a single contact that is a suggestion for the user to add to a group.
- */
- // TODO: Merge this with the {@link GroupEditorFragment} Member class once we can find the
- // lookup URI for this contact using the autocomplete filter queries
- public class SuggestedMember {
-
- private long mRawContactId;
- private long mContactId;
- private String mDisplayName;
- private String mExtraInfo;
- private byte[] mPhoto;
-
- public SuggestedMember(long rawContactId, String displayName, long contactId) {
- mRawContactId = rawContactId;
- mDisplayName = displayName;
- mContactId = contactId;
- }
-
- public String getDisplayName() {
- return mDisplayName;
- }
-
- public String getExtraInfo() {
- return mExtraInfo;
- }
-
- public long getRawContactId() {
- return mRawContactId;
- }
-
- public long getContactId() {
- return mContactId;
- }
-
- public byte[] getPhotoByteArray() {
- return mPhoto;
- }
-
- public boolean hasExtraInfo() {
- return mExtraInfo != null;
- }
-
- /**
- * Set a phone number or email to distinguish this contact
- */
- public void setExtraInfo(String info) {
- mExtraInfo = info;
- }
-
- public void setPhotoByteArray(byte[] photo) {
- mPhoto = photo;
- }
-
- @Override
- public String toString() {
- return getDisplayName();
- }
- }
-}
diff --git a/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
new file mode 100644
index 000000000..9b255eb93
--- /dev/null
+++ b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
@@ -0,0 +1,130 @@
+/*
+ * 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.group;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.widget.Toast;
+
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity;
+
+/**
+ * Starts an Intent to add/remove the raw contacts for the given contact IDs to/from a group.
+ * Only the raw contacts that belong to the specified account are added or removed.
+ */
+public class UpdateGroupMembersAsyncTask extends AsyncTask<Void, Void, Intent> {
+ static final int TYPE_ADD = 0;
+ static final int TYPE_REMOVE = 1;
+
+ private final Context mContext;
+ private final int mType;
+ private final long[] mContactIds;
+ private final long mGroupId;
+ private final String mAccountName;
+ private final String mAccountType;
+ private final String mDataSet;
+
+ public UpdateGroupMembersAsyncTask(int type, Context context, long[] contactIds,
+ long groupId, String accountName, String accountType, String dataSet) {
+ mContext = context;
+ mType = type;
+ mContactIds = contactIds;
+ mGroupId = groupId;
+ mAccountName = accountName;
+ mAccountType = accountType;
+ mDataSet = dataSet;
+ }
+
+ @Override
+ protected Intent doInBackground(Void... params) {
+ final long[] rawContactIds = getRawContactIds();
+ if (rawContactIds.length == 0) {
+ return null;
+ }
+ final long[] rawContactIdsToAdd;
+ final long[] rawContactIdsToRemove;
+ final String action;
+ if (mType == TYPE_ADD) {
+ rawContactIdsToAdd = rawContactIds;
+ rawContactIdsToRemove = null;
+ action = GroupUtil.ACTION_ADD_TO_GROUP;
+ } else if (mType == TYPE_REMOVE) {
+ rawContactIdsToAdd = null;
+ rawContactIdsToRemove = rawContactIds;
+ action = GroupUtil.ACTION_REMOVE_FROM_GROUP;
+ } else {
+ throw new IllegalStateException("Unrecognized type " + mType);
+ }
+ return ContactSaveService.createGroupUpdateIntent(
+ mContext, mGroupId, /* newLabel */ null, rawContactIdsToAdd,
+ rawContactIdsToRemove, PeopleActivity.class, action);
+ }
+
+ // TODO(wjang): prune raw contacts that are already in the group; ContactSaveService will
+ // log a warning if the raw contact is already a member and keep going but it is not ideal.
+ private long[] getRawContactIds() {
+ final Uri.Builder builder = RawContacts.CONTENT_URI.buildUpon();
+ // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+ if (mAccountName != null) {
+ builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccountName);
+ builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccountType);
+ }
+ if (mDataSet != null) {
+ builder.appendQueryParameter(RawContacts.DATA_SET, mDataSet);
+ }
+ final Uri rawContactUri = builder.build();
+ final String[] projection = new String[]{ContactsContract.RawContacts._ID};
+ final StringBuilder selection = new StringBuilder();
+ final String[] selectionArgs = new String[mContactIds.length];
+ for (int i = 0; i < mContactIds.length; i++) {
+ if (i > 0) {
+ selection.append(" OR ");
+ }
+ selection.append(ContactsContract.RawContacts.CONTACT_ID).append("=?");
+ selectionArgs[i] = Long.toString(mContactIds[i]);
+ }
+ final Cursor cursor = mContext.getContentResolver().query(
+ rawContactUri, projection, selection.toString(), selectionArgs, null, null);
+ final long[] rawContactIds = new long[cursor.getCount()];
+ try {
+ int i = 0;
+ while (cursor.moveToNext()) {
+ rawContactIds[i] = cursor.getLong(0);
+ i++;
+ }
+ } finally {
+ cursor.close();
+ }
+ return rawContactIds;
+ }
+
+ @Override
+ protected void onPostExecute(Intent intent) {
+ if (intent == null) {
+ Toast.makeText(mContext, R.string.groupSavedErrorToast, Toast.LENGTH_SHORT).show();
+ } else {
+ mContext.startService(intent);
+ }
+ }
+}
diff --git a/src/com/android/contacts/interactions/CalendarInteraction.java b/src/com/android/contacts/interactions/CalendarInteraction.java
index e249e4f93..9b7ab3137 100644
--- a/src/com/android/contacts/interactions/CalendarInteraction.java
+++ b/src/com/android/contacts/interactions/CalendarInteraction.java
@@ -1,20 +1,17 @@
package com.android.contacts.interactions;
-import com.android.contacts.R;
-
-import android.content.ContentValues;
import android.content.ContentUris;
+import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.graphics.drawable.Drawable;
-import android.net.Uri;
import android.provider.CalendarContract.Attendees;
import android.provider.CalendarContract.Events;
import android.text.Spannable;
import android.text.TextUtils;
import android.text.format.Time;
-import android.util.Log;
+
+import com.android.contacts.R;
/**
* Represents a calendar event interaction, wrapping the columns in
@@ -23,7 +20,7 @@ import android.util.Log;
public class CalendarInteraction implements ContactInteraction {
private static final String TAG = CalendarInteraction.class.getSimpleName();
- private static final int CALENDAR_ICON_RES = R.drawable.ic_event_24dp;
+ private static final int CALENDAR_ICON_RES = R.drawable.quantum_ic_event_vd_theme_24;
private ContentValues mValues;
diff --git a/src/com/android/contacts/interactions/CalendarInteractionUtils.java b/src/com/android/contacts/interactions/CalendarInteractionUtils.java
index c7943f0b7..36a562183 100644
--- a/src/com/android/contacts/interactions/CalendarInteractionUtils.java
+++ b/src/com/android/contacts/interactions/CalendarInteractionUtils.java
@@ -1,13 +1,13 @@
package com.android.contacts.interactions;
-import com.android.contacts.R;
-
import android.content.Context;
import android.content.res.Resources;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.text.format.Time;
+import com.android.contacts.R;
+
import java.util.Formatter;
import java.util.Locale;
diff --git a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
index 481386699..646b2dbfe 100644
--- a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
@@ -1,16 +1,5 @@
package com.android.contacts.interactions;
-import com.google.common.base.Preconditions;
-
-import com.android.contacts.common.util.PermissionsUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
import android.Manifest.permission;
import android.content.AsyncTaskLoader;
import android.content.ContentValues;
@@ -21,6 +10,17 @@ import android.provider.CalendarContract;
import android.provider.CalendarContract.Calendars;
import android.util.Log;
+import com.android.contacts.util.PermissionsUtil;
+
+import com.google.common.base.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
/**
* Loads a list of calendar interactions showing shared calendar events with everyone passed in
@@ -29,7 +29,7 @@ import android.util.Log;
* Note: the calendar provider treats mailing lists as atomic email addresses.
*/
public class CalendarInteractionsLoader extends AsyncTaskLoader<List<ContactInteraction>> {
- private static final String TAG = CalendarInteractionsLoader.class.getSimpleName();
+ private static final String TAG = "CalendarInteractions";
private List<String> mEmailAddresses;
private int mMaxFutureToRetrieve;
@@ -73,7 +73,9 @@ public class CalendarInteractionsLoader extends AsyncTaskLoader<List<ContactInte
allInteractions.addAll(interactions);
allInteractions.addAll(interactions2);
- Log.v(TAG, "# ContactInteraction Loaded: " + allInteractions.size());
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "# ContactInteraction Loaded: " + allInteractions.size());
+ }
return allInteractions;
}
diff --git a/src/com/android/contacts/interactions/CallLogInteraction.java b/src/com/android/contacts/interactions/CallLogInteraction.java
index 3464c0f95..8890478fe 100644
--- a/src/com/android/contacts/interactions/CallLogInteraction.java
+++ b/src/com/android/contacts/interactions/CallLogInteraction.java
@@ -15,10 +15,6 @@
*/
package com.android.contacts.interactions;
-import com.android.contacts.R;
-import com.android.contacts.common.util.BitmapUtil;
-import com.android.contacts.common.util.ContactDisplayUtils;
-
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@@ -32,6 +28,12 @@ import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.TextDirectionHeuristics;
+import com.android.contacts.GeoUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.ContactDisplayUtils;
+
/**
* Represents a call log event interaction, wrapping the columns in
* {@link android.provider.CallLog.Calls}.
@@ -47,7 +49,7 @@ import android.text.TextDirectionHeuristics;
public class CallLogInteraction implements ContactInteraction {
private static final String URI_TARGET_PREFIX = "tel:";
- private static final int CALL_LOG_ICON_RES = R.drawable.ic_phone_24dp;
+ private static final int CALL_LOG_ICON_RES = R.drawable.quantum_ic_phone_vd_theme_24;
private static final int CALL_ARROW_ICON_RES = R.drawable.ic_call_arrow;
private static BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
@@ -66,7 +68,14 @@ public class CallLogInteraction implements ContactInteraction {
@Override
public String getViewHeader(Context context) {
- return getNumber();
+ String number = mValues.getAsString(Calls.NUMBER);
+ if (number != null) {
+ number = PhoneNumberUtilsCompat.formatNumber(number,
+ PhoneNumberUtilsCompat.normalizeNumber(number),
+ GeoUtil.getCurrentCountryIso(context));
+ return sBidiFormatter.unicodeWrap(number, TextDirectionHeuristics.LTR);
+ }
+ return null;
}
@Override
@@ -87,9 +96,18 @@ public class CallLogInteraction implements ContactInteraction {
@Override
public String getViewFooter(Context context) {
- Long date = getDate();
- return date == null ? null : ContactInteractionUtil.formatDateStringFromTimestamp(
- date, context);
+ final Long date = getDate();
+ if (date != null) {
+ final StringBuilder callDetail = new StringBuilder();
+ callDetail.append(ContactInteractionUtil.formatDateStringFromTimestamp(date, context));
+ final Long duration = getDuration();
+ if (duration != null) {
+ callDetail.append("\n");
+ callDetail.append(ContactInteractionUtil.formatDuration(duration, context));
+ }
+ return callDetail.toString();
+ }
+ return null;
}
@Override
@@ -113,12 +131,12 @@ public class CallLogInteraction implements ContactInteraction {
switch (type) {
case Calls.INCOMING_TYPE:
callArrow = res.getDrawable(CALL_ARROW_ICON_RES);
- callArrow.setColorFilter(res.getColor(R.color.call_arrow_green),
+ callArrow.mutate().setColorFilter(res.getColor(R.color.call_arrow_green),
PorterDuff.Mode.MULTIPLY);
break;
case Calls.MISSED_TYPE:
callArrow = res.getDrawable(CALL_ARROW_ICON_RES);
- callArrow.setColorFilter(res.getColor(R.color.call_arrow_red),
+ callArrow.mutate().setColorFilter(res.getColor(R.color.call_arrow_red),
PorterDuff.Mode.MULTIPLY);
break;
case Calls.OUTGOING_TYPE:
diff --git a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
index 4277a279f..8813ecc00 100644
--- a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
@@ -24,11 +24,12 @@ import android.database.DatabaseUtils;
import android.net.Uri;
import android.provider.CallLog.Calls;
import android.text.TextUtils;
+import android.util.Log;
-import com.google.common.annotations.VisibleForTesting;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.util.PermissionsUtil;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.util.PermissionsUtil;
+import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
import java.util.Collections;
@@ -37,30 +38,47 @@ import java.util.List;
public class CallLogInteractionsLoader extends AsyncTaskLoader<List<ContactInteraction>> {
+ private static final String TAG = "CallLogInteractions";
+
private final String[] mPhoneNumbers;
+ private final String[] mSipNumbers;
private final int mMaxToRetrieve;
private List<ContactInteraction> mData;
- public CallLogInteractionsLoader(Context context, String[] phoneNumbers,
+ public CallLogInteractionsLoader(Context context, String[] phoneNumbers, String[] sipNumbers,
int maxToRetrieve) {
super(context);
mPhoneNumbers = phoneNumbers;
+ mSipNumbers = sipNumbers;
mMaxToRetrieve = maxToRetrieve;
}
@Override
public List<ContactInteraction> loadInBackground() {
+ final boolean hasPhoneNumber = mPhoneNumbers != null && mPhoneNumbers.length > 0;
+ final boolean hasSipNumber = mSipNumbers != null && mSipNumbers.length > 0;
if (!PermissionsUtil.hasPhonePermissions(getContext())
|| !getContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
- || mPhoneNumbers == null || mPhoneNumbers.length <= 0 || mMaxToRetrieve <= 0) {
+ || (!hasPhoneNumber && !hasSipNumber) || mMaxToRetrieve <= 0) {
return Collections.emptyList();
}
final List<ContactInteraction> interactions = new ArrayList<>();
- for (String number : mPhoneNumbers) {
- interactions.addAll(getCallLogInteractions(number));
+ if (hasPhoneNumber) {
+ for (String number : mPhoneNumbers) {
+ final String normalizedNumber = PhoneNumberUtilsCompat.normalizeNumber(number);
+ if (!TextUtils.isEmpty(normalizedNumber)) {
+ interactions.addAll(getCallLogInteractions(normalizedNumber));
+ }
+ }
+ }
+ if (hasSipNumber) {
+ for (String number : mSipNumbers) {
+ interactions.addAll(getCallLogInteractions(number));
+ }
}
+
// Sort the call log interactions by date for duplicate removal
Collections.sort(interactions, new Comparator<ContactInteraction>() {
@Override
@@ -75,7 +93,8 @@ public class CallLogInteractionsLoader extends AsyncTaskLoader<List<ContactInter
}
});
// Duplicates only occur because of fuzzy matching. No need to dedupe a single number.
- if (mPhoneNumbers.length == 1) {
+ if ((hasPhoneNumber && mPhoneNumbers.length == 1 && !hasSipNumber)
+ || (hasSipNumber && mSipNumbers.length == 1 && !hasPhoneNumber)) {
return interactions;
}
return pruneDuplicateCallLogInteractions(interactions, mMaxToRetrieve);
@@ -107,19 +126,19 @@ public class CallLogInteractionsLoader extends AsyncTaskLoader<List<ContactInter
}
private List<ContactInteraction> getCallLogInteractions(String phoneNumber) {
- final String normalizedNumber = PhoneNumberUtilsCompat.normalizeNumber(phoneNumber);
- // If the number contains only symbols, we can skip it
- if (TextUtils.isEmpty(normalizedNumber)) {
- return Collections.emptyList();
- }
final Uri uri = Uri.withAppendedPath(Calls.CONTENT_FILTER_URI,
- Uri.encode(normalizedNumber));
+ Uri.encode(phoneNumber));
// Append the LIMIT clause onto the ORDER BY clause. This won't cause crashes as long
// as we don't also set the {@link android.provider.CallLog.Calls.LIMIT_PARAM_KEY} that
// becomes available in KK.
final String orderByAndLimit = Calls.DATE + " DESC LIMIT " + mMaxToRetrieve;
- final Cursor cursor = getContext().getContentResolver().query(uri, null, null, null,
- orderByAndLimit);
+ Cursor cursor = null;
+ try {
+ cursor = getContext().getContentResolver().query(uri, null, null, null,
+ orderByAndLimit);
+ } catch (Exception e) {
+ Log.e(TAG, "Can not query calllog", e);
+ }
try {
if (cursor == null || cursor.getCount() < 1) {
return Collections.emptyList();
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index c9a5a9b17..240588bd1 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -38,8 +38,11 @@ import android.widget.Toast;
import com.android.contacts.ContactSaveService;
import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
+
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Sets;
@@ -51,7 +54,7 @@ import java.util.HashSet;
public class ContactDeletionInteraction extends Fragment
implements LoaderCallbacks<Cursor>, OnDismissListener {
- private static final String TAG = "ContactDeletionInteraction";
+ private static final String TAG = "ContactDeletion";
private static final String FRAGMENT_TAG = "deleteContact";
private static final String KEY_ACTIVE = "active";
@@ -66,6 +69,8 @@ public class ContactDeletionInteraction extends Fragment
Entity.DATA_SET, // 2
Entity.CONTACT_ID, // 3
Entity.LOOKUP_KEY, // 4
+ Entity.DISPLAY_NAME, // 5
+ Entity.DISPLAY_NAME_ALTERNATIVE, // 6
};
private static final int COLUMN_INDEX_RAW_CONTACT_ID = 0;
@@ -73,9 +78,13 @@ public class ContactDeletionInteraction extends Fragment
private static final int COLUMN_INDEX_DATA_SET = 2;
private static final int COLUMN_INDEX_CONTACT_ID = 3;
private static final int COLUMN_INDEX_LOOKUP_KEY = 4;
+ private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
+ private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 6;
private boolean mActive;
private Uri mContactUri;
+ private String mDisplayName;
+ private String mDisplayNameAlt;
private boolean mFinishActivityWhenDone;
private Context mContext;
private AlertDialog mDialog;
@@ -248,6 +257,8 @@ public class ContactDeletionInteraction extends Fragment
final String dataSet = cursor.getString(COLUMN_INDEX_DATA_SET);
contactId = cursor.getLong(COLUMN_INDEX_CONTACT_ID);
lookupKey = cursor.getString(COLUMN_INDEX_LOOKUP_KEY);
+ mDisplayName = cursor.getString(COLUMN_INDEX_DISPLAY_NAME);
+ mDisplayNameAlt = cursor.getString(COLUMN_INDEX_DISPLAY_NAME_ALT);
AccountType type = accountTypes.getAccountType(accountType, dataSet);
boolean writable = type == null || type.areContactsWritable();
if (writable) {
@@ -338,8 +349,16 @@ public class ContactDeletionInteraction extends Fragment
if (isAdded() && mFinishActivityWhenDone) {
getActivity().setResult(RESULT_CODE_DELETED);
getActivity().finish();
- final String deleteToastMessage = getResources().getQuantityString(R.plurals
- .contacts_deleted_toast, /* quantity */ 1);
+ final String deleteToastMessage;
+ final String name = ContactDisplayUtils.getPreferredDisplayName(mDisplayName,
+ mDisplayNameAlt, new ContactsPreferences(mContext));
+ if (TextUtils.isEmpty(name)) {
+ deleteToastMessage = getResources().getQuantityString(
+ R.plurals.contacts_deleted_toast, /* quantity */ 1);
+ } else {
+ deleteToastMessage = getResources().getString(
+ R.string.contacts_deleted_one_named_toast, name);
+ }
Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show();
}
}
diff --git a/src/com/android/contacts/interactions/ContactInteraction.java b/src/com/android/contacts/interactions/ContactInteraction.java
index bf001328b..6bca0af3a 100644
--- a/src/com/android/contacts/interactions/ContactInteraction.java
+++ b/src/com/android/contacts/interactions/ContactInteraction.java
@@ -18,7 +18,6 @@ package com.android.contacts.interactions;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
-import android.net.Uri;
import android.text.Spannable;
/**
diff --git a/src/com/android/contacts/interactions/ContactInteractionUtil.java b/src/com/android/contacts/interactions/ContactInteractionUtil.java
index 98d45ee0b..e7a7a6db8 100644
--- a/src/com/android/contacts/interactions/ContactInteractionUtil.java
+++ b/src/com/android/contacts/interactions/ContactInteractionUtil.java
@@ -15,20 +15,16 @@
*/
package com.android.contacts.interactions;
-import com.google.common.base.Preconditions;
-
import android.content.Context;
import android.text.format.DateUtils;
-import com.android.contacts.common.testing.NeededForTesting;
+import com.android.contacts.R;
-import java.text.DateFormat;
+import com.google.common.base.Preconditions;
+import java.text.DateFormat;
import java.util.Calendar;
-import com.android.contacts.R;
-
-
/**
* Utility methods for interactions and their loaders
*/
@@ -37,7 +33,6 @@ public class ContactInteractionUtil {
/**
* @return a string like (?,?,?...) with {@param count} question marks.
*/
- @NeededForTesting
public static String questionMarks(int count) {
Preconditions.checkArgument(count > 0);
StringBuilder sb = new StringBuilder("(?");
@@ -51,7 +46,6 @@ public class ContactInteractionUtil {
* Same as {@link formatDateStringFromTimestamp(long, Context, Calendar)} but uses the current
* time.
*/
- @NeededForTesting
public static String formatDateStringFromTimestamp(long timestamp, Context context) {
return formatDateStringFromTimestamp(timestamp, context, Calendar.getInstance());
}
@@ -61,10 +55,8 @@ public class ContactInteractionUtil {
* compareCalendar.
* This formats the date based on a few conditions:
* 1. If the timestamp is today, the time is shown
- * 2. If the timestamp occurs tomorrow or yesterday, that is displayed
- * 3. Otherwise {Month Date} format is used
+ * 2. Otherwise show full date and time
*/
- @NeededForTesting
public static String formatDateStringFromTimestamp(long timestamp, Context context,
Calendar compareCalendar) {
Calendar interactionCalendar = Calendar.getInstance();
@@ -76,19 +68,9 @@ public class ContactInteractionUtil {
interactionCalendar.getTime());
}
- // Turn compareCalendar to yesterday
- compareCalendar.add(Calendar.DAY_OF_YEAR, -1);
- if (compareCalendarDayYear(interactionCalendar, compareCalendar)) {
- return context.getString(R.string.yesterday);
- }
-
- // Turn compareCalendar to tomorrow
- compareCalendar.add(Calendar.DAY_OF_YEAR, 2);
- if (compareCalendarDayYear(interactionCalendar, compareCalendar)) {
- return context.getString(R.string.tomorrow);
- }
- return DateUtils.formatDateTime(context, interactionCalendar.getTimeInMillis(),
- DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR);
+ return DateUtils.formatDateTime(context, timestamp, DateUtils.FORMAT_SHOW_TIME
+ | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_WEEKDAY
+ | DateUtils.FORMAT_SHOW_YEAR);
}
/**
@@ -98,4 +80,22 @@ public class ContactInteractionUtil {
return c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR) &&
c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR);
}
+
+ /**
+ * Takes duration of the call in seconds.
+ * Return the formatted duration in hr, min, sec order if they exist.
+ */
+ public static String formatDuration(long callDuration, Context context) {
+ final int hours = (int) callDuration / 3600;
+ final int minutes = (int) (callDuration % 3600) / 60;
+ final int seconds = (int) (callDuration % 60);
+
+ if (hours > 0) {
+ return context.getString(R.string.callDurationHourFormat, hours, minutes, seconds);
+ } else if (minutes > 0) {
+ return context.getString(R.string.callDurationMinuteFormat, minutes, seconds);
+ } else {
+ return context.getString(R.string.callDurationSecondFormat, seconds);
+ }
+ }
}
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index 173f66e24..47b76a539 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -16,13 +16,6 @@
package com.android.contacts.interactions;
-import com.google.common.collect.Sets;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -36,8 +29,18 @@ import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
+
+import com.google.common.collect.Sets;
+
import java.util.HashSet;
import java.util.TreeSet;
@@ -54,7 +57,7 @@ public class ContactMultiDeletionInteraction extends Fragment
}
private static final String FRAGMENT_TAG = "deleteMultipleContacts";
- private static final String TAG = "ContactMultiDeletionInteraction";
+ private static final String TAG = "ContactMultiDeletion";
private static final String KEY_ACTIVE = "active";
private static final String KEY_CONTACTS_IDS = "contactIds";
public static final String ARG_CONTACT_IDS = "contactIds";
@@ -64,32 +67,37 @@ public class ContactMultiDeletionInteraction extends Fragment
RawContacts.ACCOUNT_TYPE,
RawContacts.DATA_SET,
RawContacts.CONTACT_ID,
+ RawContacts.DISPLAY_NAME_PRIMARY,
+ RawContacts.DISPLAY_NAME_ALTERNATIVE
};
private static final int COLUMN_INDEX_RAW_CONTACT_ID = 0;
private static final int COLUMN_INDEX_ACCOUNT_TYPE = 1;
private static final int COLUMN_INDEX_DATA_SET = 2;
private static final int COLUMN_INDEX_CONTACT_ID = 3;
+ private static final int COLUMN_INDEX_DISPLAY_NAME = 4;
+ private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 5;
private boolean mIsLoaderActive;
private TreeSet<Long> mContactIds;
private Context mContext;
private AlertDialog mDialog;
+ private MultiContactDeleteListener mListener;
/**
* Starts the interaction.
*
- * @param activity the activity within which to start the interaction
+ * @param hostFragment the fragment within which to start the interaction
* @param contactIds the IDs of contacts to be deleted
* @return the newly created interaction
*/
public static ContactMultiDeletionInteraction start(
- Activity activity, TreeSet<Long> contactIds) {
+ Fragment hostFragment, TreeSet<Long> contactIds) {
if (contactIds == null) {
return null;
}
- final FragmentManager fragmentManager = activity.getFragmentManager();
+ final FragmentManager fragmentManager = hostFragment.getFragmentManager();
ContactMultiDeletionInteraction fragment =
(ContactMultiDeletionInteraction) fragmentManager.findFragmentByTag(FRAGMENT_TAG);
if (fragment == null) {
@@ -192,6 +200,9 @@ public class ContactMultiDeletionInteraction extends Fragment
final HashSet<Long> readOnlyRawContacts = Sets.newHashSet();
final HashSet<Long> writableRawContacts = Sets.newHashSet();
final HashSet<Long> contactIds = Sets.newHashSet();
+ final HashSet<String> names = Sets.newHashSet();
+
+ final ContactsPreferences contactsPreferences = new ContactsPreferences(mContext);
AccountTypeManager accountTypes = AccountTypeManager.getInstance(getActivity());
cursor.moveToPosition(-1);
@@ -200,6 +211,15 @@ public class ContactMultiDeletionInteraction extends Fragment
final String accountType = cursor.getString(COLUMN_INDEX_ACCOUNT_TYPE);
final String dataSet = cursor.getString(COLUMN_INDEX_DATA_SET);
final long contactId = cursor.getLong(COLUMN_INDEX_CONTACT_ID);
+ final String displayName = cursor.getString(COLUMN_INDEX_DISPLAY_NAME);
+ final String displayNameAlt = cursor.getString(COLUMN_INDEX_DISPLAY_NAME_ALT);
+
+ final String name = ContactDisplayUtils.getPreferredDisplayName(displayName,
+ displayNameAlt, contactsPreferences);
+ if (!TextUtils.isEmpty(name)) {
+ names.add(name);
+ }
+
contactIds.add(contactId);
final AccountType type = accountTypes.getAccountType(accountType, dataSet);
boolean writable = type == null || type.areContactsWritable();
@@ -236,7 +256,8 @@ public class ContactMultiDeletionInteraction extends Fragment
contactIdArray[i] = contactIdObjectArray[i];
}
- showDialog(messageId, positiveButtonId, contactIdArray);
+ final String[] namesArray = names.toArray(new String[names.size()]);
+ showDialog(messageId, positiveButtonId, contactIdArray, namesArray);
// We don't want onLoadFinished() calls any more, which may come when the database is
// updating.
@@ -247,7 +268,8 @@ public class ContactMultiDeletionInteraction extends Fragment
public void onLoaderReset(Loader<Cursor> loader) {
}
- private void showDialog(int messageId, int positiveButtonId, final long[] contactIds) {
+ private void showDialog(int messageId, int positiveButtonId, final long[] contactIds,
+ final String[] namesArray) {
mDialog = new AlertDialog.Builder(getActivity())
.setIconAttribute(android.R.attr.alertDialogIcon)
.setMessage(messageId)
@@ -256,7 +278,7 @@ public class ContactMultiDeletionInteraction extends Fragment
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int whichButton) {
- doDeleteContact(contactIds);
+ doDeleteContact(contactIds, namesArray);
}
}
)
@@ -288,16 +310,13 @@ public class ContactMultiDeletionInteraction extends Fragment
}
}
- protected void doDeleteContact(long[] contactIds) {
+ protected void doDeleteContact(long[] contactIds, final String[] names) {
mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
- contactIds));
- notifyListenerActivity();
+ contactIds, names));
+ mListener.onDeletionFinished();
}
- private void notifyListenerActivity() {
- if (getActivity() instanceof MultiContactDeleteListener) {
- final MultiContactDeleteListener listener = (MultiContactDeleteListener) getActivity();
- listener.onDeletionFinished();
- }
+ public void setListener(MultiContactDeleteListener listener) {
+ mListener = listener;
}
}
diff --git a/src/com/android/contacts/interactions/ExportDialogFragment.java b/src/com/android/contacts/interactions/ExportDialogFragment.java
new file mode 100644
index 000000000..c7ce07230
--- /dev/null
+++ b/src/com/android/contacts/interactions/ExportDialogFragment.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2010 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.interactions;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.telephony.SubscriptionManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.vcard.ExportVCardActivity;
+import com.android.contacts.vcard.ShareVCardActivity;
+import com.android.contacts.vcard.VCardCommonArguments;
+
+/**
+ * An dialog invoked to import/export contacts.
+ */
+public class ExportDialogFragment extends DialogFragment {
+ public static final String TAG = "ExportDialogFragment";
+
+ public static final int EXPORT_MODE_FAVORITES = 0;
+ public static final int EXPORT_MODE_ALL_CONTACTS = 1;
+ public static final int EXPORT_MODE_DEFAULT = -1;
+
+ private static int mExportMode = EXPORT_MODE_DEFAULT;
+
+ private final String[] LOOKUP_PROJECTION = new String[] {
+ Contacts.LOOKUP_KEY
+ };
+
+ private SubscriptionManager mSubscriptionManager;
+
+ /** Preferred way to show this dialog */
+ public static void show(FragmentManager fragmentManager, Class callingActivity,
+ int exportMode) {
+ final ExportDialogFragment fragment = new ExportDialogFragment();
+ Bundle args = new Bundle();
+ args.putString(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity.getName());
+ fragment.setArguments(args);
+ fragment.show(fragmentManager, TAG);
+ mExportMode = exportMode;
+ }
+
+ @Override
+ public Context getContext() {
+ return getActivity();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Wrap our context to inflate list items using the correct theme
+ final Resources res = getActivity().getResources();
+ final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final String callingActivity = getArguments().getString(
+ VCardCommonArguments.ARG_CALLING_ACTIVITY);
+
+ // Adapter that shows a list of string resources
+ final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
+ R.layout.select_dialog_item) {
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final View result = convertView != null ? convertView :
+ dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
+
+ final TextView text = (TextView) result.findViewById(R.id.primary_text);
+ final View secondaryText = result.findViewById(R.id.secondary_text);
+ secondaryText.setVisibility(View.GONE);
+
+ text.setText(getItem(position).mLabel);
+ return result;
+ }
+ };
+
+ if (res.getBoolean(R.bool.config_allow_export)) {
+ adapter.add(new AdapterEntry(getString(R.string.export_to_vcf_file),
+ R.string.export_to_vcf_file));
+ }
+ if (res.getBoolean(R.bool.config_allow_share_contacts)) {
+ if (mExportMode == EXPORT_MODE_FAVORITES) {
+ // share favorite and frequently contacted contacts from Favorites tab
+ adapter.add(new AdapterEntry(getString(R.string.share_favorite_contacts),
+ R.string.share_contacts));
+ } else {
+ // share "all" contacts (in groups selected in "Customize") from All tab for now
+ // TODO: change the string to share_visible_contacts if implemented
+ adapter.add(new AdapterEntry(getString(R.string.share_contacts),
+ R.string.share_contacts));
+ }
+ }
+
+ final DialogInterface.OnClickListener clickListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ boolean dismissDialog;
+ final int resId = adapter.getItem(which).mChoiceResourceId;
+ if (resId == R.string.export_to_vcf_file) {
+ dismissDialog = true;
+ final Intent exportIntent = new Intent(
+ getActivity(), ExportVCardActivity.class);
+ exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+ callingActivity);
+ getActivity().startActivity(exportIntent);
+ } else if (resId == R.string.share_contacts) {
+ dismissDialog = true;
+ if (mExportMode == EXPORT_MODE_FAVORITES) {
+ doShareFavoriteContacts();
+ } else { // EXPORT_MODE_ALL_CONTACTS
+ final Intent exportIntent = new Intent(
+ getActivity(), ShareVCardActivity.class);
+ exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+ callingActivity);
+ getActivity().startActivity(exportIntent);
+ }
+ } else {
+ dismissDialog = true;
+ Log.e(TAG, "Unexpected resource: "
+ + getActivity().getResources().getResourceEntryName(resId));
+ }
+ if (dismissDialog) {
+ dialog.dismiss();
+ }
+ }
+ };
+ final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+ title.setText(R.string.dialog_export);
+ return new AlertDialog.Builder(getActivity())
+ .setCustomTitle(title)
+ .setSingleChoiceItems(adapter, -1, clickListener)
+ .create();
+ }
+
+ private void doShareFavoriteContacts() {
+ try{
+ final Cursor cursor = getActivity().getContentResolver().query(
+ Contacts.CONTENT_STREQUENT_URI, LOOKUP_PROJECTION, null, null,
+ Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
+ if (cursor != null) {
+ try {
+ if (!cursor.moveToFirst()) {
+ Toast.makeText(getActivity(), R.string.no_contact_to_share,
+ Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ // Build multi-vcard Uri for sharing
+ final StringBuilder uriListBuilder = new StringBuilder();
+ int index = 0;
+ do {
+ if (index != 0)
+ uriListBuilder.append(':');
+ uriListBuilder.append(cursor.getString(0));
+ index++;
+ } while (cursor.moveToNext());
+ final Uri uri = Uri.withAppendedPath(
+ Contacts.CONTENT_MULTI_VCARD_URI,
+ Uri.encode(uriListBuilder.toString()));
+
+ final Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType(Contacts.CONTENT_VCARD_TYPE);
+ intent.putExtra(Intent.EXTRA_STREAM, uri);
+ ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+ } finally {
+ cursor.close();
+ }
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "Sharing contacts failed", e);
+ getActivity().runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(getContext(), R.string.share_contacts_failure,
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ }
+
+ private static class AdapterEntry {
+ public final CharSequence mLabel;
+ public final int mChoiceResourceId;
+ public final int mSubscriptionId;
+
+ public AdapterEntry(CharSequence label, int resId, int subId) {
+ mLabel = label;
+ mChoiceResourceId = resId;
+ mSubscriptionId = subId;
+ }
+
+ public AdapterEntry(String label, int resId) {
+ // Store a nonsense value for mSubscriptionId. If this constructor is used,
+ // the mSubscriptionId value should not be read later.
+ this(label, resId, /* subId = */ -1);
+ }
+ }
+}
diff --git a/src/com/android/contacts/interactions/GroupCreationDialogFragment.java b/src/com/android/contacts/interactions/GroupCreationDialogFragment.java
deleted file mode 100644
index e99868839..000000000
--- a/src/com/android/contacts/interactions/GroupCreationDialogFragment.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2010 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.interactions;
-
-import android.app.Activity;
-import android.app.FragmentManager;
-import android.content.Intent;
-import android.os.Bundle;
-import android.widget.EditText;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorBaseActivity;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-/**
- * A dialog for creating a new group.
- */
-public class GroupCreationDialogFragment extends GroupNameDialogFragment {
- private static final String ARG_ACCOUNT_TYPE = "accountType";
- private static final String ARG_ACCOUNT_NAME = "accountName";
- private static final String ARG_DATA_SET = "dataSet";
-
- public static final String FRAGMENT_TAG = "createGroupDialog";
-
- private final OnGroupCreatedListener mListener;
-
- public interface OnGroupCreatedListener {
- public void onGroupCreated();
- }
-
- public static void show(
- FragmentManager fragmentManager, String accountType, String accountName,
- String dataSet, OnGroupCreatedListener listener) {
- GroupCreationDialogFragment dialog = new GroupCreationDialogFragment(listener);
- Bundle args = new Bundle();
- args.putString(ARG_ACCOUNT_TYPE, accountType);
- args.putString(ARG_ACCOUNT_NAME, accountName);
- args.putString(ARG_DATA_SET, dataSet);
- dialog.setArguments(args);
- dialog.show(fragmentManager, FRAGMENT_TAG);
- }
-
- public GroupCreationDialogFragment() {
- super();
- mListener = null;
- }
-
- private GroupCreationDialogFragment(OnGroupCreatedListener listener) {
- super();
- mListener = listener;
- }
-
- public OnGroupCreatedListener getOnGroupCreatedListener() {
- return mListener;
- }
-
- @Override
- protected void initializeGroupLabelEditText(EditText editText) {
- }
-
- @Override
- protected int getTitleResourceId() {
- return R.string.create_group_dialog_title;
- }
-
- @Override
- protected void onCompleted(String groupLabel) {
- Bundle arguments = getArguments();
- String accountType = arguments.getString(ARG_ACCOUNT_TYPE);
- String accountName = arguments.getString(ARG_ACCOUNT_NAME);
- String dataSet = arguments.getString(ARG_DATA_SET);
-
- // Indicate to the listener that a new group will be created.
- // If the device is rotated, mListener will become null, so that the
- // popup from GroupMembershipView will not be shown.
- if (mListener != null) {
- mListener.onGroupCreated();
- }
-
- Activity activity = getActivity();
- activity.startService(ContactSaveService.createNewGroupIntent(activity,
- new AccountWithDataSet(accountName, accountType, dataSet), groupLabel,
- null /* no new members to add */,
- activity.getClass(), ContactEditorBaseActivity.ACTION_EDIT));
- }
-}
diff --git a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
index 2df7fe26e..01361b2a3 100644
--- a/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
+++ b/src/com/android/contacts/interactions/GroupDeletionDialogFragment.java
@@ -24,6 +24,7 @@ import android.os.Bundle;
import com.android.contacts.ContactSaveService;
import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity;
/**
* A dialog for deleting a group.
@@ -32,15 +33,12 @@ public class GroupDeletionDialogFragment extends DialogFragment {
private static final String ARG_GROUP_ID = "groupId";
private static final String ARG_LABEL = "label";
- private static final String ARG_SHOULD_END_ACTIVITY = "endActivity";
- public static void show(FragmentManager fragmentManager, long groupId, String label,
- boolean endActivity) {
+ public static void show(FragmentManager fragmentManager, long groupId, String label) {
GroupDeletionDialogFragment dialog = new GroupDeletionDialogFragment();
Bundle args = new Bundle();
args.putLong(ARG_GROUP_ID, groupId);
args.putString(ARG_LABEL, label);
- args.putBoolean(ARG_SHOULD_END_ACTIVITY, endActivity);
dialog.setArguments(args);
dialog.show(fragmentManager, "deleteGroup");
}
@@ -66,17 +64,10 @@ public class GroupDeletionDialogFragment extends DialogFragment {
}
protected void deleteGroup() {
- Bundle arguments = getArguments();
- long groupId = arguments.getLong(ARG_GROUP_ID);
-
- getActivity().startService(ContactSaveService.createGroupDeletionIntent(
+ final long groupId = getArguments().getLong(ARG_GROUP_ID);
+ final PeopleActivity activity = ((PeopleActivity) getActivity());
+ activity.startService(ContactSaveService.createGroupDeletionIntent(
getActivity(), groupId));
- if (shouldEndActivity()) {
- getActivity().finish();
- }
- }
-
- private boolean shouldEndActivity() {
- return getArguments().getBoolean(ARG_SHOULD_END_ACTIVITY);
+ activity.switchToAllContacts();
}
}
diff --git a/src/com/android/contacts/interactions/GroupNameDialogFragment.java b/src/com/android/contacts/interactions/GroupNameDialogFragment.java
deleted file mode 100644
index b0ad9c9c5..000000000
--- a/src/com/android/contacts/interactions/GroupNameDialogFragment.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2010 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.interactions;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnShowListener;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.EditText;
-
-import com.android.contacts.R;
-
-/**
- * A common superclass for creating and renaming groups.
- */
-public abstract class GroupNameDialogFragment extends DialogFragment {
- protected abstract int getTitleResourceId();
- protected abstract void initializeGroupLabelEditText(EditText editText);
- protected abstract void onCompleted(String groupLabel);
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- final LayoutInflater layoutInflater = LayoutInflater.from(builder.getContext());
- final View view = layoutInflater.inflate(R.layout.group_name_dialog, null);
- final EditText editText = (EditText) view.findViewById(R.id.group_label);
- initializeGroupLabelEditText(editText);
-
- builder.setTitle(getTitleResourceId());
- builder.setView(view);
- editText.requestFocus();
- builder.setPositiveButton(android.R.string.ok,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int whichButton) {
- onCompleted(editText.getText().toString().trim());
- }
- }
- );
-
- builder.setNegativeButton(android.R.string.cancel, null);
- final AlertDialog dialog = builder.create();
-
- dialog.setOnShowListener(new OnShowListener() {
- @Override
- public void onShow(DialogInterface dialogInterface) {
- updateOkButtonState(dialog, editText);
- }
- });
- editText.addTextChangedListener(new TextWatcher() {
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- updateOkButtonState(dialog, editText);
- }
- });
- dialog.getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
- return dialog;
- }
-
- /* package */ void updateOkButtonState(AlertDialog dialog, EditText editText) {
- final Button okButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
- okButton.setEnabled(!TextUtils.isEmpty(editText.getText().toString().trim()));
- }
-}
diff --git a/src/com/android/contacts/interactions/ImportDialogFragment.java b/src/com/android/contacts/interactions/ImportDialogFragment.java
new file mode 100644
index 000000000..367ae2f8d
--- /dev/null
+++ b/src/com/android/contacts/interactions/ImportDialogFragment.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright (C) 2010 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.interactions;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.SimImportActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.editor.SelectAccountDialogFragment;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountSelectionUtil;
+import com.google.common.util.concurrent.Futures;
+
+import java.util.List;
+import java.util.concurrent.Future;
+
+/**
+ * An dialog invoked to import/export contacts.
+ */
+public class ImportDialogFragment extends DialogFragment {
+ public static final String TAG = "ImportDialogFragment";
+
+ public static final String KEY_RES_ID = "resourceId";
+ public static final String KEY_SUBSCRIPTION_ID = "subscriptionId";
+
+ public static final String EXTRA_SIM_ONLY = "extraSimOnly";
+
+ public static final String EXTRA_SIM_CONTACT_COUNT_PREFIX = "simContactCount_";
+
+ private boolean mSimOnly = false;
+ private SimContactDao mSimDao;
+
+ private Future<List<AccountInfo>> mAccountsFuture;
+
+ /** Preferred way to show this dialog */
+ public static void show(FragmentManager fragmentManager) {
+ final ImportDialogFragment fragment = new ImportDialogFragment();
+ fragment.show(fragmentManager, TAG);
+ }
+
+ public static void show(FragmentManager fragmentManager, List<SimCard> sims,
+ boolean includeVcf) {
+ final ImportDialogFragment fragment = new ImportDialogFragment();
+ final Bundle args = new Bundle();
+ args.putBoolean(EXTRA_SIM_ONLY, !includeVcf);
+ for (SimCard sim : sims) {
+ final List<SimContact> contacts = sim.getContacts();
+ if (contacts == null) {
+ continue;
+ }
+ args.putInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), contacts.size());
+ }
+
+ fragment.setArguments(args);
+ fragment.show(fragmentManager, TAG);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setStyle(STYLE_NORMAL, R.style.ContactsAlertDialogTheme);
+
+ final Bundle args = getArguments();
+ mSimOnly = args != null && args.getBoolean(EXTRA_SIM_ONLY, false);
+ mSimDao = SimContactDao.create(getContext());
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ // Start loading the accounts. This is done in onResume in case they were refreshed.
+ mAccountsFuture = AccountTypeManager.getInstance(getActivity()).filterAccountsAsync(
+ AccountTypeManager.writableFilter());
+ }
+
+ @Override
+ public Context getContext() {
+ return getActivity();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final LayoutInflater dialogInflater = (LayoutInflater)
+ getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ // Adapter that shows a list of string resources
+ final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
+ R.layout.select_dialog_item) {
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final View result = convertView != null ? convertView :
+ dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
+ final TextView primaryText = (TextView) result.findViewById(R.id.primary_text);
+ final TextView secondaryText = (TextView) result.findViewById(R.id.secondary_text);
+ final AdapterEntry entry = getItem(position);
+ secondaryText.setVisibility(View.GONE);
+ if (entry.mChoiceResourceId == R.string.import_from_sim) {
+ final CharSequence secondary = getSimSecondaryText(entry.mSim);
+ if (TextUtils.isEmpty(secondary)) {
+ secondaryText.setVisibility(View.GONE);
+ } else {
+ secondaryText.setText(secondary);
+ secondaryText.setVisibility(View.VISIBLE);
+ }
+ }
+ primaryText.setText(entry.mLabel);
+ return result;
+ }
+
+ CharSequence getSimSecondaryText(SimCard sim) {
+ int count = getSimContactCount(sim);
+
+ CharSequence phone = sim.getFormattedPhone();
+ if (phone == null) {
+ phone = sim.getPhone();
+ }
+ if (phone != null) {
+ phone = PhoneNumberUtilsCompat.createTtsSpannable(phone);
+ }
+
+ if (count != -1 && phone != null) {
+ // We use a template instead of format string so that the TTS span is preserved
+ final CharSequence template = getResources()
+ .getQuantityString(R.plurals.import_from_sim_secondary_template, count);
+ return TextUtils.expandTemplate(template, String.valueOf(count), phone);
+ } else if (phone != null) {
+ return phone;
+ } else if (count != -1) {
+ // count != -1
+ return getResources()
+ .getQuantityString(
+ R.plurals.import_from_sim_secondary_contact_count_fmt, count,
+ count);
+ } else {
+ return null;
+ }
+ }
+ };
+
+ addItems(adapter);
+
+ final DialogInterface.OnClickListener clickListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final int resId = adapter.getItem(which).mChoiceResourceId;
+ if (resId == R.string.import_from_sim) {
+ handleSimImportRequest(adapter.getItem(which).mSim);
+ } else if (resId == R.string.import_from_vcf_file) {
+ handleImportRequest(resId, SimCard.NO_SUBSCRIPTION_ID);
+ } else {
+ Log.e(TAG, "Unexpected resource: "
+ + getActivity().getResources().getResourceEntryName(resId));
+ }
+ dialog.dismiss();
+ }
+ };
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), getTheme())
+ .setTitle(R.string.dialog_import)
+ .setNegativeButton(android.R.string.cancel, null);
+ if (adapter.isEmpty()) {
+ // Handle edge case; e.g. SIM card was removed.
+ builder.setMessage(R.string.nothing_to_import_message);
+ } else {
+ builder.setSingleChoiceItems(adapter, -1, clickListener);
+ }
+
+ return builder.create();
+ }
+
+ private int getSimContactCount(SimCard sim) {
+ if (sim.getContacts() != null) {
+ return sim.getContacts().size();
+ }
+ final Bundle args = getArguments();
+ if (args == null) {
+ return -1;
+ }
+ return args.getInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), -1);
+ }
+
+ private void addItems(ArrayAdapter<AdapterEntry> adapter) {
+ final Resources res = getActivity().getResources();
+ if (res.getBoolean(R.bool.config_allow_import_from_vcf_file) && !mSimOnly) {
+ adapter.add(new AdapterEntry(getString(R.string.import_from_vcf_file),
+ R.string.import_from_vcf_file));
+ }
+ final List<SimCard> sims = mSimDao.getSimCards();
+
+ if (sims.size() == 1) {
+ adapter.add(new AdapterEntry(getString(R.string.import_from_sim),
+ R.string.import_from_sim, sims.get(0)));
+ return;
+ }
+ for (int i = 0; i < sims.size(); i++) {
+ final SimCard sim = sims.get(i);
+ adapter.add(new AdapterEntry(getSimDescription(sim, i), R.string.import_from_sim, sim));
+ }
+ }
+
+ private void handleSimImportRequest(SimCard sim) {
+ startActivity(new Intent(getActivity(), SimImportActivity.class)
+ .putExtra(SimImportActivity.EXTRA_SUBSCRIPTION_ID, sim.getSubscriptionId()));
+ }
+
+ /**
+ * Handle "import from SD".
+ */
+ private void handleImportRequest(int resId, int subscriptionId) {
+ // Get the accounts. Because this only happens after a user action this should pretty
+ // much never block since it will usually be at least several seconds before the user
+ // interacts with the view
+ final List<AccountWithDataSet> accountList = AccountInfo.extractAccounts(
+ Futures.getUnchecked(mAccountsFuture));
+
+ // There are three possibilities:
+ // - more than one accounts -> ask the user
+ // - just one account -> use the account without asking the user
+ // - no account -> use phone-local storage without asking the user
+ final int size = accountList.size();
+ if (size > 1) {
+ // Send over to the account selector
+ final Bundle args = new Bundle();
+ args.putInt(KEY_RES_ID, resId);
+ args.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
+ SelectAccountDialogFragment.show(
+ getFragmentManager(), R.string.dialog_new_contact_account,
+ AccountTypeManager.AccountFilter.CONTACTS_WRITABLE, args);
+ } else {
+ AccountSelectionUtil.doImport(getActivity(), resId,
+ (size == 1 ? accountList.get(0) : null),
+ (CompatUtils.isMSIMCompatible() ? subscriptionId : -1));
+ }
+ }
+
+ private CharSequence getSimDescription(SimCard sim, int index) {
+ final CharSequence name = sim.getDisplayName();
+ if (name != null) {
+ return getString(R.string.import_from_sim_summary_fmt, name);
+ } else {
+ return getString(R.string.import_from_sim_summary_fmt, String.valueOf(index));
+ }
+ }
+
+ private static class AdapterEntry {
+ public final CharSequence mLabel;
+ public final int mChoiceResourceId;
+ public final SimCard mSim;
+
+ public AdapterEntry(CharSequence label, int resId, SimCard sim) {
+ mLabel = label;
+ mChoiceResourceId = resId;
+ mSim = sim;
+ }
+
+ public AdapterEntry(String label, int resId) {
+ // Store a nonsense value for mSubscriptionId. If this constructor is used,
+ // the mSubscriptionId value should not be read later.
+ this(label, resId, /* sim= */ null);
+ }
+ }
+}
diff --git a/src/com/android/contacts/interactions/JoinContactsDialogFragment.java b/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
deleted file mode 100644
index 205e18e6c..000000000
--- a/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
+++ /dev/null
@@ -1,107 +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.interactions;
-
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentTransaction;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-
-import java.util.TreeSet;
-
-/**
- * An interaction invoked to join multiple contacts together.
- */
-public class JoinContactsDialogFragment extends DialogFragment {
-
- private static final String FRAGMENT_TAG = "joinDialog";
- private static final String KEY_CONTACT_IDS = "contactIds";
-
- public interface JoinContactsListener {
- void onContactsJoined();
- }
-
- public static void start(Activity activity, TreeSet<Long> contactIds) {
- final FragmentTransaction ft = activity.getFragmentManager().beginTransaction();
- final JoinContactsDialogFragment newFragment
- = JoinContactsDialogFragment.newInstance(contactIds);
- newFragment.show(ft, FRAGMENT_TAG);
- }
-
- private static JoinContactsDialogFragment newInstance(TreeSet<Long> contactIds) {
- final JoinContactsDialogFragment fragment = new JoinContactsDialogFragment();
- Bundle arguments = new Bundle();
- arguments.putSerializable(KEY_CONTACT_IDS, contactIds);
- fragment.setArguments(arguments);
- return fragment;
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final TreeSet<Long> contactIds =
- (TreeSet<Long>) getArguments().getSerializable(KEY_CONTACT_IDS);
- if (contactIds.size() <= 1) {
- return new AlertDialog.Builder(getActivity())
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(R.string.batch_link_single_contact_warning)
- .setPositiveButton(android.R.string.ok, null)
- .create();
- }
- return new AlertDialog.Builder(getActivity())
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(R.string.batch_link_confirmation)
- .setNegativeButton(android.R.string.cancel, null)
- .setPositiveButton(R.string.batch_link_confirmation_positive_button,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- joinContacts(contactIds);
- }
- }
- )
- .create();
- }
-
- private void joinContacts(TreeSet<Long> contactIds) {
- final Long[] contactIdsArray = contactIds.toArray(new Long[contactIds.size()]);
- final long[] contactIdsArray2 = new long[contactIdsArray.length];
- for (int i = 0; i < contactIds.size(); i++) {
- contactIdsArray2[i] = contactIdsArray[i];
- }
-
- final Intent intent = ContactSaveService.createJoinSeveralContactsIntent(getActivity(),
- contactIdsArray2);
- getActivity().startService(intent);
-
- notifyListener();
- }
-
- private void notifyListener() {
- if (getActivity() instanceof JoinContactsListener) {
- ((JoinContactsListener) getActivity()).onContactsJoined();
- }
- }
-
-}
diff --git a/src/com/android/contacts/interactions/OnBootOrUpgradeReceiver.java b/src/com/android/contacts/interactions/OnBootOrUpgradeReceiver.java
new file mode 100644
index 000000000..5c55f2083
--- /dev/null
+++ b/src/com/android/contacts/interactions/OnBootOrUpgradeReceiver.java
@@ -0,0 +1,35 @@
+/*
+ * 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.contacts.interactions;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+
+import com.android.contacts.util.ContactsNotificationChannelsUtil;
+
+public class OnBootOrUpgradeReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ if (Intent.ACTION_BOOT_COMPLETED.equals(action)
+ || Intent.ACTION_MY_PACKAGE_REPLACED.equals(action)) {
+ ContactsNotificationChannelsUtil.createDefaultChannel(context);
+ }
+ }
+}
diff --git a/src/com/android/contacts/interactions/SmsInteraction.java b/src/com/android/contacts/interactions/SmsInteraction.java
index ba0070c2c..4aad07ba5 100644
--- a/src/com/android/contacts/interactions/SmsInteraction.java
+++ b/src/com/android/contacts/interactions/SmsInteraction.java
@@ -15,9 +15,6 @@
*/
package com.android.contacts.interactions;
-import com.android.contacts.R;
-import com.android.contacts.common.util.ContactDisplayUtils;
-
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
@@ -28,6 +25,9 @@ import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.TextDirectionHeuristics;
+import com.android.contacts.R;
+import com.android.contacts.util.ContactDisplayUtils;
+
/**
* Represents an sms interaction, wrapping the columns in
* {@link android.provider.Telephony.Sms}.
@@ -35,7 +35,7 @@ import android.text.TextDirectionHeuristics;
public class SmsInteraction implements ContactInteraction {
private static final String URI_TARGET_PREFIX = "smsto:";
- private static final int SMS_ICON_RES = R.drawable.ic_message_24dp_mirrored;
+ private static final int SMS_ICON_RES = R.drawable.quantum_ic_message_vd_theme_24;
private static BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
private ContentValues mValues;
diff --git a/src/com/android/contacts/interactions/SmsInteractionsLoader.java b/src/com/android/contacts/interactions/SmsInteractionsLoader.java
index 5c7d5e39d..31ab83103 100644
--- a/src/com/android/contacts/interactions/SmsInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/SmsInteractionsLoader.java
@@ -24,7 +24,7 @@ import android.database.DatabaseUtils;
import android.provider.Telephony;
import android.util.Log;
-import com.android.contacts.common.compat.TelephonyThreadsCompat;
+import com.android.contacts.compat.TelephonyThreadsCompat;
import java.util.ArrayList;
import java.util.Collections;
@@ -51,14 +51,18 @@ public class SmsInteractionsLoader extends AsyncTaskLoader<List<ContactInteracti
public SmsInteractionsLoader(Context context, String[] phoneNums,
int maxToRetrieve) {
super(context);
- Log.v(TAG, "SmsInteractionsLoader");
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "SmsInteractionsLoader");
+ }
mPhoneNums = phoneNums;
mMaxToRetrieve = maxToRetrieve;
}
@Override
public List<ContactInteraction> loadInBackground() {
- Log.v(TAG, "loadInBackground");
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "loadInBackground");
+ }
// Confirm the device has Telephony and numbers were provided before proceeding
if (!getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
|| mPhoneNums == null || mPhoneNums.length == 0) {
diff --git a/src/com/android/contacts/interactions/TestLoaderManagerBase.java b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
index 92ae3b901..920df415d 100644
--- a/src/com/android/contacts/interactions/TestLoaderManagerBase.java
+++ b/src/com/android/contacts/interactions/TestLoaderManagerBase.java
@@ -18,6 +18,8 @@ package com.android.contacts.interactions;
import android.app.LoaderManager;
+import com.google.common.annotations.VisibleForTesting;
+
/**
* A {@link LoaderManager} that records which loaders have been completed.
* <p>
@@ -71,6 +73,7 @@ import android.app.LoaderManager;
* }
* </pre>
*/
+@VisibleForTesting
abstract class TestLoaderManagerBase extends LoaderManager {
/**
@@ -84,6 +87,7 @@ abstract class TestLoaderManagerBase extends LoaderManager {
* It can not be set to null. Once set, it cannot be changed (but it allows setting it to the
* same value again).
*/
+ @VisibleForTesting
public abstract void setDelegate(LoaderManager delegate);
}
diff --git a/src/com/android/contacts/interactions/TouchPointManager.java b/src/com/android/contacts/interactions/TouchPointManager.java
new file mode 100644
index 000000000..67387e5d4
--- /dev/null
+++ b/src/com/android/contacts/interactions/TouchPointManager.java
@@ -0,0 +1,46 @@
+package com.android.contacts.interactions;
+
+import android.graphics.Point;
+
+/**
+ * Singleton class to keep track of where the user last touched the screen.
+ *
+ * Used to pass on to the InCallUI for animation.
+ */
+public class TouchPointManager {
+ public static final String TOUCH_POINT = "touchPoint";
+
+ private static TouchPointManager sInstance = new TouchPointManager();
+
+ private Point mPoint = new Point();
+
+ /**
+ * Private constructor. Instance should only be acquired through getInstance().
+ */
+ private TouchPointManager() {
+ }
+
+ public static TouchPointManager getInstance() {
+ return sInstance;
+ }
+
+ public Point getPoint() {
+ return mPoint;
+ }
+
+ public void setPoint(int x, int y) {
+ mPoint.set(x, y);
+ }
+
+ /**
+ * When a point is initialized, its value is (0,0). Since it is highly unlikely a user will
+ * touch at that exact point, if the point in TouchPointManager is (0,0), it is safe to assume
+ * that the TouchPointManager has not yet collected a touch.
+ *
+ * @return True if there is a valid point saved. Define a valid point as any point that is
+ * not (0,0).
+ */
+ public boolean hasValidPoint() {
+ return mPoint.x != 0 || mPoint.y != 0;
+ }
+}
diff --git a/src/com/android/contacts/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
new file mode 100644
index 000000000..5652ac646
--- /dev/null
+++ b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.lettertiles;
+
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.Paint.Align;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+
+import com.android.contacts.R;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * A drawable that encapsulates all the functionality needed to display a letter tile to
+ * represent a contact image.
+ */
+public class LetterTileDrawable extends Drawable {
+
+ private final String TAG = LetterTileDrawable.class.getSimpleName();
+
+ private final Paint mPaint;
+
+ /** Letter tile */
+ private static TypedArray sColors;
+ private static int sDefaultColor;
+ private static int sTileFontColor;
+ private static float sLetterToTileRatio;
+ private static Bitmap DEFAULT_PERSON_AVATAR;
+ private static Bitmap DEFAULT_BUSINESS_AVATAR;
+ private static Bitmap DEFAULT_VOICEMAIL_AVATAR;
+
+ /** Reusable components to avoid new allocations */
+ private static final Paint sPaint = new Paint();
+ private static final Rect sRect = new Rect();
+ private static final char[] sFirstChar = new char[1];
+
+ /** Contact type constants */
+ public static final int TYPE_PERSON = 1;
+ public static final int TYPE_BUSINESS = 2;
+ public static final int TYPE_VOICEMAIL = 3;
+ public static final int TYPE_DEFAULT = TYPE_PERSON;
+
+ /** 54% opacity */
+ private static final int ALPHA = 138;
+
+ private int mContactType = TYPE_DEFAULT;
+ private float mScale = 1.0f;
+ private float mOffset = 0.0f;
+ private boolean mIsCircle = false;
+
+ private int mColor;
+ private Character mLetter = null;
+
+ public LetterTileDrawable(final Resources res) {
+ if (sColors == null) {
+ sColors = res.obtainTypedArray(R.array.letter_tile_colors);
+ sDefaultColor = res.getColor(R.color.letter_tile_default_color);
+ sTileFontColor = res.getColor(R.color.letter_tile_font_color);
+ sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
+ DEFAULT_PERSON_AVATAR = BitmapFactory.decodeResource(res,
+ R.drawable.ic_person_avatar);
+ DEFAULT_BUSINESS_AVATAR = BitmapFactory.decodeResource(res,
+ R.drawable.ic_business_white_120dp);
+ DEFAULT_VOICEMAIL_AVATAR = BitmapFactory.decodeResource(res,
+ R.drawable.ic_voicemail_avatar);
+ sPaint.setTypeface(Typeface.create(
+ res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
+ sPaint.setTextAlign(Align.CENTER);
+ sPaint.setAntiAlias(true);
+ }
+ mPaint = new Paint();
+ mPaint.setFilterBitmap(true);
+ mPaint.setDither(true);
+ mColor = sDefaultColor;
+ }
+
+ @Override
+ public void draw(final Canvas canvas) {
+ final Rect bounds = getBounds();
+ if (!isVisible() || bounds.isEmpty()) {
+ return;
+ }
+ // Draw letter tile.
+ drawLetterTile(canvas);
+ }
+
+ /**
+ * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
+ */
+ private void drawBitmap(final Bitmap bitmap, final int width, final int height,
+ final Canvas canvas) {
+ // The bitmap should be drawn in the middle of the canvas without changing its width to
+ // height ratio.
+ final Rect destRect = copyBounds();
+
+ // Crop the destination bounds into a square, scaled and offset as appropriate
+ final int halfLength = (int) (mScale * Math.min(destRect.width(), destRect.height()) / 2);
+
+ destRect.set(destRect.centerX() - halfLength,
+ (int) (destRect.centerY() - halfLength + mOffset * destRect.height()),
+ destRect.centerX() + halfLength,
+ (int) (destRect.centerY() + halfLength + mOffset * destRect.height()));
+
+ // Source rectangle remains the entire bounds of the source bitmap.
+ sRect.set(0, 0, width, height);
+
+ sPaint.setTextAlign(Align.CENTER);
+ sPaint.setAntiAlias(true);
+ sPaint.setAlpha(ALPHA);
+
+ canvas.drawBitmap(bitmap, sRect, destRect, sPaint);
+ }
+
+ private void drawLetterTile(final Canvas canvas) {
+ // Draw background color.
+ sPaint.setColor(mColor);
+
+ sPaint.setAlpha(mPaint.getAlpha());
+ final Rect bounds = getBounds();
+ final int minDimension = Math.min(bounds.width(), bounds.height());
+
+ if (mIsCircle) {
+ canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, sPaint);
+ } else {
+ canvas.drawRect(bounds, sPaint);
+ }
+
+ // Draw letter/digit only if the first character is an english letter or there's a override
+
+ if (mLetter != null) {
+ // Draw letter or digit.
+ sFirstChar[0] = mLetter;
+
+ // Scale text by canvas bounds and user selected scaling factor
+ sPaint.setTextSize(mScale * sLetterToTileRatio * minDimension);
+ sPaint.getTextBounds(sFirstChar, 0, 1, sRect);
+ sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
+ sPaint.setColor(sTileFontColor);
+ sPaint.setAlpha(ALPHA);
+
+ // Draw the letter in the canvas, vertically shifted up or down by the user-defined
+ // offset
+ canvas.drawText(sFirstChar, 0, 1, bounds.centerX(),
+ bounds.centerY() + mOffset * bounds.height() - sRect.exactCenterY(),
+ sPaint);
+ } else {
+ // Draw the default image if there is no letter/digit to be drawn
+ final Bitmap bitmap = getBitmapForContactType(mContactType);
+ drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(),
+ canvas);
+ }
+ }
+
+ public int getColor() {
+ return mColor;
+ }
+
+ /**
+ * Returns a deterministic color based on the provided contact identifier string.
+ */
+ private int pickColor(final String identifier) {
+ if (TextUtils.isEmpty(identifier) || mContactType == TYPE_VOICEMAIL) {
+ return sDefaultColor;
+ }
+ // String.hashCode() implementation is not supposed to change across java versions, so
+ // this should guarantee the same email address always maps to the same color.
+ // The email should already have been normalized by the ContactRequest.
+ final int color = Math.abs(identifier.hashCode()) % sColors.length();
+ return sColors.getColor(color, sDefaultColor);
+ }
+
+ private static Bitmap getBitmapForContactType(int contactType) {
+ switch (contactType) {
+ case TYPE_PERSON:
+ return DEFAULT_PERSON_AVATAR;
+ case TYPE_BUSINESS:
+ return DEFAULT_BUSINESS_AVATAR;
+ case TYPE_VOICEMAIL:
+ return DEFAULT_VOICEMAIL_AVATAR;
+ default:
+ return DEFAULT_PERSON_AVATAR;
+ }
+ }
+
+ private static boolean isEnglishLetter(final char c) {
+ return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z');
+ }
+
+ @Override
+ public void setAlpha(final int alpha) {
+ mPaint.setAlpha(alpha);
+ }
+
+ @Override
+ public void setColorFilter(final ColorFilter cf) {
+ mPaint.setColorFilter(cf);
+ }
+
+ @Override
+ public int getOpacity() {
+ return android.graphics.PixelFormat.OPAQUE;
+ }
+
+ /**
+ * Scale the drawn letter tile to a ratio of its default size
+ *
+ * @param scale The ratio the letter tile should be scaled to as a percentage of its default
+ * size, from a scale of 0 to 2.0f. The default is 1.0f.
+ */
+ public LetterTileDrawable setScale(float scale) {
+ mScale = scale;
+ return this;
+ }
+
+ /**
+ * Assigns the vertical offset of the position of the letter tile to the ContactDrawable
+ *
+ * @param offset The provided offset must be within the range of -0.5f to 0.5f.
+ * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
+ * it is being drawn on, which means it will be drawn with the center of the letter starting
+ * at the top edge of the canvas.
+ * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the canvas
+ * it is being drawn on, which means it will be drawn with the center of the letter starting
+ * at the bottom edge of the canvas.
+ * The default is 0.0f.
+ */
+ public LetterTileDrawable setOffset(float offset) {
+ Preconditions.checkArgument(offset >= -0.5f && offset <= 0.5f);
+ mOffset = offset;
+ return this;
+ }
+
+ public LetterTileDrawable setLetter(Character letter){
+ mLetter = letter;
+ return this;
+ }
+
+ public LetterTileDrawable setColor(int color){
+ mColor = color;
+ return this;
+ }
+
+ public LetterTileDrawable setLetterAndColorFromContactDetails(final String displayName,
+ final String identifier) {
+ if (displayName != null && displayName.length() > 0
+ && isEnglishLetter(displayName.charAt(0))) {
+ mLetter = Character.toUpperCase(displayName.charAt(0));
+ }else{
+ mLetter = null;
+ }
+ mColor = pickColor(identifier);
+ return this;
+ }
+
+ public LetterTileDrawable setContactType(int contactType) {
+ mContactType = contactType;
+ return this;
+ }
+
+ public LetterTileDrawable setIsCircular(boolean isCircle) {
+ mIsCircle = isCircle;
+ return this;
+ }
+}
diff --git a/src/com/android/contacts/list/AccountFilterActivity.java b/src/com/android/contacts/list/AccountFilterActivity.java
new file mode 100644
index 000000000..6559489fd
--- /dev/null
+++ b/src/com/android/contacts/list/AccountFilterActivity.java
@@ -0,0 +1,199 @@
+/*
+ * 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.list;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Shows a list of all available accounts, letting the user select under which account to view
+ * contacts.
+ */
+public class AccountFilterActivity extends Activity implements AdapterView.OnItemClickListener {
+
+ private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0;
+
+ public static final String EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
+
+ private ListView mListView;
+
+ // The default contact list type, it should be either FILTER_TYPE_ALL_ACCOUNTS or
+ // FILTER_TYPE_CUSTOM, since those are the only two options we give the user.
+ private int mCurrentFilterType;
+
+ private ContactListFilterView mCustomFilterView; // the "Customize" filter
+
+ private boolean mIsCustomFilterViewSelected;
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setContentView(R.layout.contact_list_filter);
+
+ mListView = (ListView) findViewById(android.R.id.list);
+ mListView.setOnItemClickListener(this);
+
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+
+ mCurrentFilterType = ContactListFilterController.getInstance(this).isCustomFilterPersisted()
+ ? ContactListFilter.FILTER_TYPE_CUSTOM
+ : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+
+ // We don't need to use AccountFilterUtil.FilterLoader since we only want to show
+ // the "All contacts" and "Customize" options.
+ final List<ContactListFilter> filters = new ArrayList<>();
+ filters.add(ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
+ filters.add(ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_CUSTOM));
+ mListView.setAdapter(new FilterListAdapter(this, filters, mCurrentFilterType));
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ final ContactListFilterView listFilterView = (ContactListFilterView) view;
+ final ContactListFilter filter = (ContactListFilter) view.getTag();
+ if (filter == null) return; // Just in case
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ mCustomFilterView = listFilterView;
+ mIsCustomFilterViewSelected = listFilterView.isChecked();
+ final Intent intent = new Intent(this, CustomContactListFilterActivity.class)
+ .putExtra(CustomContactListFilterActivity.EXTRA_CURRENT_LIST_FILTER_TYPE,
+ mCurrentFilterType);
+ listFilterView.setActivated(true);
+ // Switching activity has the highest priority. So when we open another activity, the
+ // announcement that indicates an account is checked will be interrupted. This is the
+ // way to overcome -- View.announceForAccessibility(CharSequence text);
+ listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
+ startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER);
+ } else {
+ listFilterView.setActivated(true);
+ listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
+ final Intent intent = new Intent();
+ intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
+ setResult(Activity.RESULT_OK, intent);
+ finish();
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (resultCode == Activity.RESULT_CANCELED && mCustomFilterView != null &&
+ !mIsCustomFilterViewSelected) {
+ mCustomFilterView.setActivated(false);
+ return;
+ }
+
+ if (resultCode != Activity.RESULT_OK) {
+ return;
+ }
+
+ switch (requestCode) {
+ case SUBACTIVITY_CUSTOMIZE_FILTER: {
+ final Intent intent = new Intent();
+ ContactListFilter filter = ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_CUSTOM);
+ intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
+ setResult(Activity.RESULT_OK, intent);
+ finish();
+ break;
+ }
+ }
+ }
+
+ private static class FilterListAdapter extends BaseAdapter {
+ private final List<ContactListFilter> mFilters;
+ private final LayoutInflater mLayoutInflater;
+ private final AccountTypeManager mAccountTypes;
+ private final int mCurrentFilter;
+
+ public FilterListAdapter(
+ Context context, List<ContactListFilter> filters, int current) {
+ mLayoutInflater = (LayoutInflater) context.getSystemService
+ (Context.LAYOUT_INFLATER_SERVICE);
+ mFilters = filters;
+ mCurrentFilter = current;
+ mAccountTypes = AccountTypeManager.getInstance(context);
+ }
+
+ @Override
+ public int getCount() {
+ return mFilters.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public ContactListFilter getItem(int position) {
+ return mFilters.get(position);
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final ContactListFilterView view;
+ if (convertView != null) {
+ view = (ContactListFilterView) convertView;
+ } else {
+ view = (ContactListFilterView) mLayoutInflater.inflate(
+ R.layout.contact_list_filter_item, parent, false);
+ }
+ view.setSingleAccount(mFilters.size() == 1);
+ final ContactListFilter filter = mFilters.get(position);
+ view.setContactListFilter(filter);
+ view.bindView(mAccountTypes);
+ view.setTag(filter);
+ view.setActivated(filter.filterType == mCurrentFilter);
+ return view;
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // We have two logical "up" Activities: People and Phone.
+ // Instead of having one static "up" direction, behave like back as an
+ // exceptional case.
+ onBackPressed();
+ return true;
+ default:
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/src/com/android/contacts/list/AutoScrollListView.java b/src/com/android/contacts/list/AutoScrollListView.java
new file mode 100644
index 000000000..f3bc7a2fc
--- /dev/null
+++ b/src/com/android/contacts/list/AutoScrollListView.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.widget.ListView;
+
+/**
+ * A ListView that can be asked to scroll (smoothly or otherwise) to a specific
+ * position. This class takes advantage of similar functionality that exists
+ * in {@link ListView} and enhances it.
+ */
+public class AutoScrollListView extends ListView {
+
+ /**
+ * Position the element at about 1/3 of the list height
+ */
+ private static final float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;
+
+ private int mRequestedScrollPosition = -1;
+ private boolean mSmoothScrollRequested;
+
+ public AutoScrollListView(Context context) {
+ super(context);
+ }
+
+ public AutoScrollListView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public AutoScrollListView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ /**
+ * Brings the specified position to view by optionally performing a jump-scroll maneuver:
+ * first it jumps to some position near the one requested and then does a smooth
+ * scroll to the requested position. This creates an impression of full smooth
+ * scrolling without actually traversing the entire list. If smooth scrolling is
+ * not requested, instantly positions the requested item at a preferred offset.
+ */
+ public void requestPositionToScreen(int position, boolean smoothScroll) {
+ mRequestedScrollPosition = position;
+ mSmoothScrollRequested = smoothScroll;
+ requestLayout();
+ }
+
+ @Override
+ protected void layoutChildren() {
+ super.layoutChildren();
+ if (mRequestedScrollPosition == -1) {
+ return;
+ }
+
+ final int position = mRequestedScrollPosition;
+ mRequestedScrollPosition = -1;
+
+ int firstPosition = getFirstVisiblePosition() + 1;
+ int lastPosition = getLastVisiblePosition();
+ if (position >= firstPosition && position <= lastPosition) {
+ return; // Already on screen
+ }
+
+ final int offset = (int) (getHeight() * PREFERRED_SELECTION_OFFSET_FROM_TOP);
+ if (!mSmoothScrollRequested) {
+ setSelectionFromTop(position, offset);
+
+ // Since we have changed the scrolling position, we need to redo child layout
+ // Calling "requestLayout" in the middle of a layout pass has no effect,
+ // so we call layoutChildren explicitly
+ super.layoutChildren();
+
+ } else {
+ // We will first position the list a couple of screens before or after
+ // the new selection and then scroll smoothly to it.
+ int twoScreens = (lastPosition - firstPosition) * 2;
+ int preliminaryPosition;
+ if (position < firstPosition) {
+ preliminaryPosition = position + twoScreens;
+ if (preliminaryPosition >= getCount()) {
+ preliminaryPosition = getCount() - 1;
+ }
+ if (preliminaryPosition < firstPosition) {
+ setSelection(preliminaryPosition);
+ super.layoutChildren();
+ }
+ } else {
+ preliminaryPosition = position - twoScreens;
+ if (preliminaryPosition < 0) {
+ preliminaryPosition = 0;
+ }
+ if (preliminaryPosition > lastPosition) {
+ setSelection(preliminaryPosition);
+ super.layoutChildren();
+ }
+ }
+
+
+ smoothScrollToPositionFromTop(position, offset);
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+
+ // Workaround for b/31160338.
+ if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N
+ || android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1) {
+ layoutChildren();
+ }
+ }
+}
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 923208cc0..dcef568e0 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -35,12 +35,7 @@ import android.text.TextUtils;
import android.util.Log;
import com.android.common.widget.CompositeCursorAdapter.Partition;
-import com.android.contacts.common.list.AutoScrollListView;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.DirectoryPartition;
-import com.android.contacts.common.util.ContactLoaderUtils;
+import com.android.contacts.util.ContactLoaderUtils;
import java.util.List;
@@ -49,7 +44,7 @@ import java.util.List;
* picking a contact with one of the PICK intents).
*/
public abstract class ContactBrowseListFragment extends
- ContactEntryListFragment<ContactListAdapter> {
+ MultiSelectContactsListFragment<ContactListAdapter> {
private static final String TAG = "ContactList";
@@ -194,24 +189,23 @@ public abstract class ContactBrowseListFragment extends
}
}
- public void setFilter(ContactListFilter filter) {
- setFilter(filter, true);
- }
-
- public void setFilter(ContactListFilter filter, boolean restoreSelectedUri) {
+ public void updateListFilter(ContactListFilter filter, boolean restoreSelectedUri) {
if (mFilter == null && filter == null) {
return;
}
if (mFilter != null && mFilter.equals(filter)) {
+ setLogListEvents(false);
return;
}
- Log.v(TAG, "New filter: " + filter);
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "New filter: " + filter);
+ setListType(filter.toListType());
+ setLogListEvents(true);
mFilter = filter;
mLastSelectedPosition = -1;
- saveFilter();
+
if (restoreSelectedUri) {
mSelectedContactUri = null;
restoreSelectedUri(true);
@@ -383,6 +377,11 @@ public abstract class ContactBrowseListFragment extends
}
@Override
+ public ContactListAdapter getAdapter() {
+ return (ContactListAdapter) super.getAdapter();
+ }
+
+ @Override
protected void configureAdapter() {
super.configureAdapter();
@@ -401,8 +400,7 @@ public abstract class ContactBrowseListFragment extends
}
}
- // Display the user's profile if not in search mode
- adapter.setIncludeProfile(!searchMode);
+ adapter.setIncludeFavorites(!searchMode && mFilter.isContactsFilterType());
}
@Override
@@ -600,9 +598,10 @@ public abstract class ContactBrowseListFragment extends
mListener = listener;
}
- public void viewContact(Uri contactUri, boolean isEnterpriseContact) {
+ public void viewContact(int position, Uri contactUri, boolean isEnterpriseContact) {
setSelectedContactUri(contactUri, false, false, true, false);
- if (mListener != null) mListener.onViewContactAction(contactUri, isEnterpriseContact);
+ if (mListener != null) mListener.onViewContactAction(position, contactUri,
+ isEnterpriseContact);
}
public void deleteContact(Uri contactUri) {
@@ -665,9 +664,4 @@ public abstract class ContactBrowseListFragment extends
return mPersistentSelectionPrefix + "-" + mFilter.getId();
}
}
-
- public boolean isOptionsMenuChanged() {
- // This fragment does not have an option menu of its own
- return false;
- }
}
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
new file mode 100644
index 000000000..b508ddae1
--- /dev/null
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -0,0 +1,786 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+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;
+import android.widget.QuickContactBadge;
+import android.widget.SectionIndexer;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.util.SearchUtil;
+
+import java.util.HashSet;
+
+/**
+ * Common base class for various contact-related lists, e.g. contact list, phone number list
+ * etc.
+ */
+public abstract class ContactEntryListAdapter extends IndexerListAdapter {
+
+ private static final String TAG = "ContactEntryListAdapter";
+
+ /**
+ * Indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
+ * be included in the search.
+ */
+ public static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false;
+
+ private int mDisplayOrder;
+ private int mSortOrder;
+
+ private boolean mDisplayPhotos;
+ private boolean mCircularPhotos = true;
+ private boolean mQuickContactEnabled;
+ private boolean mAdjustSelectionBoundsEnabled;
+
+ /**
+ * indicates if contact queries include favorites
+ */
+ private boolean mIncludeFavorites;
+
+ private int mNumberOfFavorites;
+
+ /**
+ * The root view of the fragment that this adapter is associated with.
+ */
+ private View mFragmentRootView;
+
+ private ContactPhotoManager mPhotoLoader;
+
+ private String mQueryString;
+ private String mUpperCaseQueryString;
+ private boolean mSearchMode;
+ private int mDirectorySearchMode;
+ private int mDirectoryResultLimit = Integer.MAX_VALUE;
+
+ private boolean mEmptyListEnabled = true;
+
+ private boolean mSelectionVisible;
+
+ private ContactListFilter mFilter;
+ private boolean mDarkTheme = false;
+
+ /** Resource used to provide header-text for default filter. */
+ private CharSequence mDefaultFilterHeaderText;
+
+ public ContactEntryListAdapter(Context context) {
+ super(context);
+ setDefaultFilterHeaderText(R.string.local_search_label);
+ addPartitions();
+ }
+
+ /**
+ * @param fragmentRootView Root view of the fragment. This is used to restrict the scope of
+ * image loading requests that get cancelled on cursor changes.
+ */
+ protected void setFragmentRootView(View fragmentRootView) {
+ mFragmentRootView = fragmentRootView;
+ }
+
+ protected void setDefaultFilterHeaderText(int resourceId) {
+ mDefaultFilterHeaderText = getContext().getResources().getText(resourceId);
+ }
+
+ @Override
+ protected ContactListItemView newView(
+ Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+ final ContactListItemView view = new ContactListItemView(context, null);
+ view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+ view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
+ return view;
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ final ContactListItemView view = (ContactListItemView) itemView;
+ view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+ bindWorkProfileIcon(view, partition);
+ }
+
+ @Override
+ protected View createPinnedSectionHeaderView(Context context, ViewGroup parent) {
+ return new ContactListPinnedHeaderView(context, null, parent);
+ }
+
+ @Override
+ protected void setPinnedSectionTitle(View pinnedHeaderView, String title) {
+ ((ContactListPinnedHeaderView) pinnedHeaderView).setSectionHeaderTitle(title);
+ }
+
+ protected void addPartitions() {
+ addPartition(createDefaultDirectoryPartition());
+ }
+
+ protected DirectoryPartition createDefaultDirectoryPartition() {
+ DirectoryPartition partition = new DirectoryPartition(true, true);
+ partition.setDirectoryId(Directory.DEFAULT);
+ partition.setDirectoryType(getContext().getString(R.string.contactsList));
+ partition.setPriorityDirectory(true);
+ partition.setPhotoSupported(true);
+ partition.setLabel(mDefaultFilterHeaderText.toString());
+ return partition;
+ }
+
+ /**
+ * Remove all directories after the default directory. This is typically used when contacts
+ * list screens are asked to exit the search mode and thus need to remove all remote directory
+ * results for the search.
+ *
+ * This code assumes that the default directory and directories before that should not be
+ * deleted (e.g. Join screen has "suggested contacts" directory before the default director,
+ * and we should not remove the directory).
+ */
+ public void removeDirectoriesAfterDefault() {
+ final int partitionCount = getPartitionCount();
+ for (int i = partitionCount - 1; i >= 0; i--) {
+ final Partition partition = getPartition(i);
+ if ((partition instanceof DirectoryPartition)
+ && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) {
+ break;
+ } else {
+ removePartition(i);
+ }
+ }
+ }
+
+ protected int getPartitionByDirectoryId(long id) {
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ if (((DirectoryPartition)partition).getDirectoryId() == id) {
+ return i;
+ }
+ }
+ }
+ return -1;
+ }
+
+ protected DirectoryPartition getDirectoryById(long id) {
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
+ if (directoryPartition.getDirectoryId() == id) {
+ return directoryPartition;
+ }
+ }
+ }
+ return null;
+ }
+
+ public abstract String getContactDisplayName(int position);
+ public abstract void configureLoader(CursorLoader loader, long directoryId);
+
+ /**
+ * Marks all partitions as "loading"
+ */
+ public void onDataReload() {
+ boolean notify = false;
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+ if (!directoryPartition.isLoading()) {
+ notify = true;
+ }
+ directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
+ }
+ }
+ if (notify) {
+ notifyDataSetChanged();
+ }
+ }
+
+ @Override
+ public void clearPartitions() {
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+ directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
+ }
+ }
+ super.clearPartitions();
+ }
+
+ public boolean isSearchMode() {
+ return mSearchMode;
+ }
+
+ public void setSearchMode(boolean flag) {
+ mSearchMode = flag;
+ }
+
+ public String getQueryString() {
+ return mQueryString;
+ }
+
+ public void setQueryString(String queryString) {
+ mQueryString = queryString;
+ if (TextUtils.isEmpty(queryString)) {
+ mUpperCaseQueryString = null;
+ } else {
+ mUpperCaseQueryString = SearchUtil
+ .cleanStartAndEndOfSearchQuery(queryString.toUpperCase()) ;
+ }
+ }
+
+ public String getUpperCaseQueryString() {
+ return mUpperCaseQueryString;
+ }
+
+ public int getDirectorySearchMode() {
+ return mDirectorySearchMode;
+ }
+
+ public void setDirectorySearchMode(int mode) {
+ mDirectorySearchMode = mode;
+ }
+
+ public int getDirectoryResultLimit() {
+ return mDirectoryResultLimit;
+ }
+
+ public int getDirectoryResultLimit(DirectoryPartition directoryPartition) {
+ final int limit = directoryPartition.getResultLimit();
+ return limit == DirectoryPartition.RESULT_LIMIT_DEFAULT ? mDirectoryResultLimit : limit;
+ }
+
+ public void setDirectoryResultLimit(int limit) {
+ this.mDirectoryResultLimit = limit;
+ }
+
+ public int getContactNameDisplayOrder() {
+ return mDisplayOrder;
+ }
+
+ public void setContactNameDisplayOrder(int displayOrder) {
+ mDisplayOrder = displayOrder;
+ }
+
+ public int getSortOrder() {
+ return mSortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ mSortOrder = sortOrder;
+ }
+
+ public void setPhotoLoader(ContactPhotoManager photoLoader) {
+ mPhotoLoader = photoLoader;
+ }
+
+ protected ContactPhotoManager getPhotoLoader() {
+ return mPhotoLoader;
+ }
+
+ public boolean getDisplayPhotos() {
+ return mDisplayPhotos;
+ }
+
+ public void setDisplayPhotos(boolean displayPhotos) {
+ mDisplayPhotos = displayPhotos;
+ }
+
+ public boolean getCircularPhotos() {
+ return mCircularPhotos;
+ }
+
+ public void setCircularPhotos(boolean circularPhotos) {
+ mCircularPhotos = circularPhotos;
+ }
+
+ public boolean isEmptyListEnabled() {
+ return mEmptyListEnabled;
+ }
+
+ public void setEmptyListEnabled(boolean flag) {
+ mEmptyListEnabled = flag;
+ }
+
+ public boolean isSelectionVisible() {
+ return mSelectionVisible;
+ }
+
+ public void setSelectionVisible(boolean flag) {
+ this.mSelectionVisible = flag;
+ }
+
+ public boolean isQuickContactEnabled() {
+ return mQuickContactEnabled;
+ }
+
+ public void setQuickContactEnabled(boolean quickContactEnabled) {
+ mQuickContactEnabled = quickContactEnabled;
+ }
+
+ public boolean isAdjustSelectionBoundsEnabled() {
+ return mAdjustSelectionBoundsEnabled;
+ }
+
+ public void setAdjustSelectionBoundsEnabled(boolean enabled) {
+ mAdjustSelectionBoundsEnabled = enabled;
+ }
+
+ public boolean shouldIncludeFavorites() {
+ return mIncludeFavorites;
+ }
+
+ public void setIncludeFavorites(boolean includeFavorites) {
+ mIncludeFavorites = includeFavorites;
+ }
+
+ public void setFavoritesSectionHeader(int numberOfFavorites) {
+ if (mIncludeFavorites) {
+ mNumberOfFavorites = numberOfFavorites;
+ setSectionHeader(numberOfFavorites);
+ }
+ }
+
+ public int getNumberOfFavorites() {
+ return mNumberOfFavorites;
+ }
+
+ private void setSectionHeader(int numberOfItems) {
+ SectionIndexer indexer = getIndexer();
+ if (indexer != null) {
+ ((ContactsSectionIndexer) indexer).setFavoritesHeader(numberOfItems);
+ }
+ }
+
+ public void setDarkTheme(boolean value) {
+ mDarkTheme = value;
+ }
+
+ /**
+ * Updates partitions according to the directory meta-data contained in the supplied
+ * cursor.
+ */
+ public void changeDirectories(Cursor cursor) {
+ 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 " +
+ "no directory entries.", new RuntimeException());
+ return;
+ }
+ HashSet<Long> directoryIds = new HashSet<Long>();
+
+ int idColumnIndex = cursor.getColumnIndex(Directory._ID);
+ int directoryTypeColumnIndex = cursor.getColumnIndex(DirectoryListLoader.DIRECTORY_TYPE);
+ int displayNameColumnIndex = cursor.getColumnIndex(Directory.DISPLAY_NAME);
+ int photoSupportColumnIndex = cursor.getColumnIndex(Directory.PHOTO_SUPPORT);
+
+ // TODO preserve the order of partition to match those of the cursor
+ // Phase I: add new directories
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ long id = cursor.getLong(idColumnIndex);
+ directoryIds.add(id);
+ if (getPartitionByDirectoryId(id) == -1) {
+ DirectoryPartition partition = new DirectoryPartition(false, true);
+ partition.setDirectoryId(id);
+ if (DirectoryCompat.isRemoteDirectoryId(id)) {
+ if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
+ partition.setLabel(mContext.getString(R.string.directory_search_label_work));
+ } else {
+ partition.setLabel(mContext.getString(R.string.directory_search_label));
+ }
+ } else {
+ if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
+ partition.setLabel(mContext.getString(R.string.list_filter_phones_work));
+ } else {
+ partition.setLabel(mDefaultFilterHeaderText.toString());
+ }
+ }
+ partition.setDirectoryType(cursor.getString(directoryTypeColumnIndex));
+ partition.setDisplayName(cursor.getString(displayNameColumnIndex));
+ int photoSupport = cursor.getInt(photoSupportColumnIndex);
+ partition.setPhotoSupported(photoSupport == Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY
+ || photoSupport == Directory.PHOTO_SUPPORT_FULL);
+ addPartition(partition);
+ }
+ }
+
+ // Phase II: remove deleted directories
+ int count = getPartitionCount();
+ for (int i = count; --i >= 0; ) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ long id = ((DirectoryPartition)partition).getDirectoryId();
+ if (!directoryIds.contains(id)) {
+ removePartition(i);
+ }
+ }
+ }
+
+ invalidate();
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public void changeCursor(int partitionIndex, Cursor cursor) {
+ if (partitionIndex >= getPartitionCount()) {
+ // There is no partition for this data
+ return;
+ }
+
+ Partition partition = getPartition(partitionIndex);
+ if (partition instanceof DirectoryPartition) {
+ ((DirectoryPartition)partition).setStatus(DirectoryPartition.STATUS_LOADED);
+ }
+
+ if (mDisplayPhotos && mPhotoLoader != null && isPhotoSupported(partitionIndex)) {
+ mPhotoLoader.refreshCache();
+ }
+
+ super.changeCursor(partitionIndex, cursor);
+
+ if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
+ updateIndexer(cursor);
+ }
+
+ // When the cursor changes, cancel any pending asynchronous photo loads.
+ mPhotoLoader.cancelPendingRequests(mFragmentRootView);
+ }
+
+ public void changeCursor(Cursor cursor) {
+ changeCursor(0, cursor);
+ }
+
+ /**
+ * Updates the indexer, which is used to produce section headers.
+ */
+ private void updateIndexer(Cursor cursor) {
+ if (cursor == null || cursor.isClosed()) {
+ setIndexer(null);
+ return;
+ }
+
+ Bundle bundle = cursor.getExtras();
+ if (bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES) &&
+ bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS)) {
+ String sections[] =
+ bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+ int counts[] = bundle.getIntArray(
+ Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+
+ if (getExtraStartingSection()) {
+ // Insert an additional unnamed section at the top of the list.
+ String allSections[] = new String[sections.length + 1];
+ int allCounts[] = new int[counts.length + 1];
+ for (int i = 0; i < sections.length; i++) {
+ allSections[i + 1] = sections[i];
+ allCounts[i + 1] = counts[i];
+ }
+ allCounts[0] = 1;
+ allSections[0] = "";
+ setIndexer(new ContactsSectionIndexer(allSections, allCounts));
+ } else {
+ setIndexer(new ContactsSectionIndexer(sections, counts));
+ }
+ } else {
+ setIndexer(null);
+ }
+ }
+
+ protected boolean getExtraStartingSection() {
+ return false;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ // We need a separate view type for each item type, plus another one for
+ // each type with header, plus one for "other".
+ return getItemViewTypeCount() * 2 + 1;
+ }
+
+ @Override
+ public int getItemViewType(int partitionIndex, int position) {
+ int type = super.getItemViewType(partitionIndex, position);
+ if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
+ Placement placement = getItemPlacementInSection(position);
+ return placement.firstInSection ? type : getItemViewTypeCount() + type;
+ } else {
+ return type;
+ }
+ }
+
+ @Override
+ public boolean isEmpty() {
+ // TODO
+// if (contactsListActivity.mProviderStatus != ProviderStatus.STATUS_NORMAL) {
+// return true;
+// }
+
+ if (!mEmptyListEnabled) {
+ return false;
+ } else if (isSearchMode()) {
+ return TextUtils.isEmpty(getQueryString());
+ } else {
+ return super.isEmpty();
+ }
+ }
+
+ public boolean isLoading() {
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ Partition partition = getPartition(i);
+ if (partition instanceof DirectoryPartition
+ && ((DirectoryPartition) partition).isLoading()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean areAllPartitionsEmpty() {
+ int count = getPartitionCount();
+ for (int i = 0; i < count; i++) {
+ if (!isPartitionEmpty(i)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Changes visibility parameters for the default directory partition.
+ */
+ public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
+ int defaultPartitionIndex = -1;
+ int count = getPartitionCount();
+ for (int i = 0; i < count; 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);
+ }
+ }
+
+ @Override
+ protected View newHeaderView(Context context, int partition, Cursor cursor,
+ ViewGroup parent) {
+ LayoutInflater inflater = LayoutInflater.from(context);
+ View view = inflater.inflate(R.layout.directory_header, parent, false);
+ if (!getPinnedPartitionHeadersEnabled()) {
+ // If the headers are unpinned, there is no need for their background
+ // color to be non-transparent. Setting this transparent reduces maintenance for
+ // non-pinned headers. We don't need to bother synchronizing the activity's
+ // background color with the header background color.
+ view.setBackground(null);
+ }
+ return view;
+ }
+
+ protected void bindWorkProfileIcon(final ContactListItemView view, int partitionId) {
+ final Partition partition = getPartition(partitionId);
+ if (partition instanceof DirectoryPartition) {
+ final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
+ final long directoryId = directoryPartition.getDirectoryId();
+ final long userType = ContactsUtils.determineUserType(directoryId, null);
+ view.setWorkProfileIconEnabled(userType == ContactsUtils.USER_TYPE_WORK);
+ }
+ }
+
+ @Override
+ protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) {
+ Partition partition = getPartition(partitionIndex);
+ if (!(partition instanceof DirectoryPartition)) {
+ return;
+ }
+
+ DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+ long directoryId = directoryPartition.getDirectoryId();
+ TextView labelTextView = (TextView)view.findViewById(R.id.label);
+ TextView displayNameTextView = (TextView)view.findViewById(R.id.display_name);
+ labelTextView.setText(directoryPartition.getLabel());
+ if (!DirectoryCompat.isRemoteDirectoryId(directoryId)) {
+ displayNameTextView.setText(null);
+ } else {
+ String directoryName = directoryPartition.getDisplayName();
+ String displayName = !TextUtils.isEmpty(directoryName)
+ ? directoryName
+ : directoryPartition.getDirectoryType();
+ displayNameTextView.setText(displayName);
+ }
+
+ final Resources res = getContext().getResources();
+ final int headerPaddingTop = partitionIndex == 1 && getPartition(0).isEmpty()?
+ 0 : res.getDimensionPixelOffset(R.dimen.directory_header_extra_top_padding);
+ // There should be no extra padding at the top of the first directory header
+ view.setPaddingRelative(view.getPaddingStart(), headerPaddingTop, view.getPaddingEnd(),
+ view.getPaddingBottom());
+ }
+
+ // Default implementation simply returns number of rows in the cursor.
+ // Broken out into its own routine so can be overridden by child classes
+ // for eg number of unique contacts for a phone list.
+ protected int getResultCount(Cursor cursor) {
+ return cursor == null ? 0 : cursor.getCount();
+ }
+
+ // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
+ public String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
+ if (count == 0) {
+ return getContext().getString(zeroResourceId);
+ } else {
+ String format = getContext().getResources()
+ .getQuantityText(pluralResourceId, count).toString();
+ return String.format(format, count);
+ }
+ }
+
+ public boolean isPhotoSupported(int partitionIndex) {
+ Partition partition = getPartition(partitionIndex);
+ if (partition instanceof DirectoryPartition) {
+ return ((DirectoryPartition) partition).isPhotoSupported();
+ }
+ return true;
+ }
+
+ /**
+ * Returns the currently selected filter.
+ */
+ public ContactListFilter getFilter() {
+ return mFilter;
+ }
+
+ public void setFilter(ContactListFilter filter) {
+ mFilter = filter;
+ }
+
+ // TODO: move sharable logic (bindXX() methods) to here with extra arguments
+
+ /**
+ * Loads the photo for the quick contact view and assigns the contact uri.
+ * @param photoIdColumn Index of the photo id column
+ * @param photoUriColumn Index of the photo uri column. Optional: Can be -1
+ * @param contactIdColumn Index of the contact id column
+ * @param lookUpKeyColumn Index of the lookup key column
+ * @param displayNameColumn Index of the display name column
+ */
+ protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
+ Cursor cursor, int photoIdColumn, int photoUriColumn, int contactIdColumn,
+ int lookUpKeyColumn, int displayNameColumn) {
+ long photoId = 0;
+ if (!cursor.isNull(photoIdColumn)) {
+ photoId = cursor.getLong(photoIdColumn);
+ }
+
+ QuickContactBadge quickContact = view.getQuickContact();
+ quickContact.assignContactUri(
+ getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn));
+ if (CompatUtils.hasPrioritizedMimeType()) {
+ // The Contacts app never uses the QuickContactBadge. Therefore, it is safe to assume
+ // that only Dialer will use this QuickContact badge. This means prioritizing the phone
+ // mimetype here is reasonable.
+ quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
+ }
+
+ if (photoId != 0 || photoUriColumn == -1) {
+ getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos,
+ null);
+ } else {
+ final String photoUriString = cursor.getString(photoUriColumn);
+ final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+ DefaultImageRequest request = null;
+ if (photoUri == null) {
+ request = getDefaultImageRequestFromCursor(cursor, displayNameColumn,
+ lookUpKeyColumn);
+ }
+ getPhotoLoader().loadPhoto(quickContact, photoUri, -1, mDarkTheme, mCircularPhotos,
+ request);
+ }
+
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ // Whenever bindViewId() is called, the values passed into setId() are stable or
+ // stable-ish. For example, when one contact is modified we don't expect a second
+ // contact's Contact._ID values to change.
+ return true;
+ }
+
+ protected void bindViewId(final ContactListItemView view, Cursor cursor, int idColumn) {
+ // Set a semi-stable id, so that talkback won't get confused when the list gets
+ // refreshed. There is little harm in inserting the same ID twice.
+ long contactId = cursor.getLong(idColumn);
+ view.setId((int) (contactId % Integer.MAX_VALUE));
+
+ }
+
+ protected Uri getContactUri(int partitionIndex, Cursor cursor,
+ int contactIdColumn, int lookUpKeyColumn) {
+ long contactId = cursor.getLong(contactIdColumn);
+ String lookupKey = cursor.getString(lookUpKeyColumn);
+ long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+ Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+ if (uri != null && directoryId != Directory.DEFAULT) {
+ uri = uri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+ }
+ return uri;
+ }
+
+ /**
+ * Retrieves the lookup key and display name from a cursor, and returns a
+ * {@link DefaultImageRequest} containing these contact details
+ *
+ * @param cursor Contacts cursor positioned at the current row to retrieve contact details for
+ * @param displayNameColumn Column index of the display name
+ * @param lookupKeyColumn Column index of the lookup key
+ * @return {@link DefaultImageRequest} with the displayName and identifier fields set to the
+ * display name and lookup key of the contact.
+ */
+ public DefaultImageRequest getDefaultImageRequestFromCursor(Cursor cursor,
+ int displayNameColumn, int lookupKeyColumn) {
+ final String displayName = cursor.getString(displayNameColumn);
+ final String lookupKey = cursor.getString(lookupKeyColumn);
+ return new DefaultImageRequest(displayName, lookupKey, mCircularPhotos);
+ }
+}
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
new file mode 100644
index 000000000..72aa44c29
--- /dev/null
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -0,0 +1,987 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnFocusChangeListener;
+import android.view.View.OnTouchListener;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ListView;
+
+import com.android.common.widget.CompositeCursorAdapter.Partition;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.logging.ListEvent.ActionType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.preference.ContactsPreferences;
+
+import java.util.Locale;
+
+/**
+ * Common base class for various contact-related list fragments.
+ */
+public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter>
+ extends Fragment
+ implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener,
+ OnItemLongClickListener, LoaderCallbacks<Cursor> {
+ private static final String TAG = "ContactEntryList";
+
+ // TODO: Make this protected. This should not be used from the PeopleActivity but
+ // instead use the new startActivityWithResultFromFragment API
+ public static final int ACTIVITY_REQUEST_CODE_PICKER = 1;
+
+ private static final String KEY_LIST_STATE = "liststate";
+ private static final String KEY_SECTION_HEADER_DISPLAY_ENABLED = "sectionHeaderDisplayEnabled";
+ private static final String KEY_PHOTO_LOADER_ENABLED = "photoLoaderEnabled";
+ private static final String KEY_QUICK_CONTACT_ENABLED = "quickContactEnabled";
+ private static final String KEY_ADJUST_SELECTION_BOUNDS_ENABLED =
+ "adjustSelectionBoundsEnabled";
+ private static final String KEY_SEARCH_MODE = "searchMode";
+ private static final String KEY_DISPLAY_DIRECTORY_HEADER = "displayDirectoryHeader";
+ private static final String KEY_VISIBLE_SCROLLBAR_ENABLED = "visibleScrollbarEnabled";
+ private static final String KEY_SCROLLBAR_POSITION = "scrollbarPosition";
+ private static final String KEY_QUERY_STRING = "queryString";
+ private static final String KEY_DIRECTORY_SEARCH_MODE = "directorySearchMode";
+ private static final String KEY_SELECTION_VISIBLE = "selectionVisible";
+ private static final String KEY_REQUEST = "request";
+ private static final String KEY_DARK_THEME = "darkTheme";
+ private static final String KEY_LEGACY_COMPATIBILITY = "legacyCompatibility";
+ private static final String KEY_DIRECTORY_RESULT_LIMIT = "directoryResultLimit";
+ private static final String KEY_LOGS_LIST_EVENTS = "logsListEvents";
+ private static final String KEY_DATA_LOADED = "dataLoaded";
+
+ private static final String DIRECTORY_ID_ARG_KEY = "directoryId";
+
+ private static final int DIRECTORY_LOADER_ID = -1;
+
+ private static final int DIRECTORY_SEARCH_DELAY_MILLIS = 300;
+ private static final int DIRECTORY_SEARCH_MESSAGE = 1;
+
+ private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
+
+ private boolean mSectionHeaderDisplayEnabled;
+ private boolean mPhotoLoaderEnabled;
+ private boolean mQuickContactEnabled = true;
+ private boolean mAdjustSelectionBoundsEnabled = true;
+ private boolean mIncludeFavorites;
+ private boolean mSearchMode;
+ private boolean mDisplayDirectoryHeader = true;
+ private boolean mVisibleScrollbarEnabled;
+ private boolean mShowEmptyListForEmptyQuery;
+ private int mVerticalScrollbarPosition = getDefaultVerticalScrollbarPosition();
+ private String mQueryString;
+ private int mDirectorySearchMode = DirectoryListLoader.SEARCH_MODE_NONE;
+ private boolean mSelectionVisible;
+ private boolean mLegacyCompatibility;
+ // Whether we should log list LOAD events. It may be modified when list filter is changed.
+ private boolean mLogListEvents = true;
+ // Whether data has been loaded ever. It will stay true once it's set to true in the lifecycle.
+ // We use this flag to log LOAD events when the activity/fragment is initialized.
+ private boolean mDataLoaded;
+
+ private boolean mEnabled = true;
+
+ private T mAdapter;
+ protected View mView;
+ private ListView mListView;
+
+ /**
+ * Used to save the scrolling state of the list when the fragment is not recreated.
+ */
+ private int mListViewTopIndex;
+ private int mListViewTopOffset;
+
+ /**
+ * Used for keeping track of the scroll state of the list.
+ */
+ private Parcelable mListState;
+
+ /**
+ * The type of the contacts list.
+ */
+ private int mListType;
+
+ private int mDisplayOrder;
+ private int mSortOrder;
+ private int mDirectoryResultLimit = DEFAULT_DIRECTORY_RESULT_LIMIT;
+
+ private ContactPhotoManager mPhotoManager;
+ private ContactsPreferences mContactsPrefs;
+
+ private boolean mForceLoad;
+
+ private boolean mDarkTheme;
+
+ private static final int STATUS_NOT_LOADED = 0;
+ private static final int STATUS_LOADING = 1;
+ private static final int STATUS_LOADED = 2;
+
+ private int mDirectoryListStatus = STATUS_NOT_LOADED;
+
+ /**
+ * Indicates whether we are doing the initial complete load of data (false) or
+ * a refresh caused by a change notification (true)
+ */
+ private boolean mLoadPriorityDirectoriesOnly;
+
+ private Context mContext;
+
+ private LoaderManager mLoaderManager;
+
+ private Handler mDelayedDirectorySearchHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.what == DIRECTORY_SEARCH_MESSAGE) {
+ loadDirectoryPartition(msg.arg1, (DirectoryPartition) msg.obj);
+ }
+ }
+ };
+ private int defaultVerticalScrollbarPosition;
+
+ protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
+ protected abstract T createListAdapter();
+
+ /**
+ * @param position Please note that the position is already adjusted for
+ * header views, so "0" means the first list item below header
+ * views.
+ */
+ protected abstract void onItemClick(int position, long id);
+
+ /**
+ * @param position Please note that the position is already adjusted for
+ * header views, so "0" means the first list item below header
+ * views.
+ */
+ protected boolean onItemLongClick(int position, long id) {
+ return false;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ setContext(activity);
+ setLoaderManager(super.getLoaderManager());
+ }
+
+ /**
+ * Sets a context for the fragment in the unit test environment.
+ */
+ public void setContext(Context context) {
+ mContext = context;
+ configurePhotoLoader();
+ }
+
+ public Context getContext() {
+ return mContext;
+ }
+
+ public void setEnabled(boolean enabled) {
+ if (mEnabled != enabled) {
+ mEnabled = enabled;
+ if (mAdapter != null) {
+ if (mEnabled) {
+ reloadData();
+ } else {
+ mAdapter.clearPartitions();
+ }
+ }
+ }
+ }
+
+ /**
+ * Overrides a loader manager for use in unit tests.
+ */
+ public void setLoaderManager(LoaderManager loaderManager) {
+ mLoaderManager = loaderManager;
+ }
+
+ @Override
+ public LoaderManager getLoaderManager() {
+ return mLoaderManager;
+ }
+
+ public T getAdapter() {
+ return mAdapter;
+ }
+
+ @Override
+ public View getView() {
+ return mView;
+ }
+
+ public ListView getListView() {
+ return mListView;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED, mSectionHeaderDisplayEnabled);
+ outState.putBoolean(KEY_PHOTO_LOADER_ENABLED, mPhotoLoaderEnabled);
+ outState.putBoolean(KEY_QUICK_CONTACT_ENABLED, mQuickContactEnabled);
+ outState.putBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED, mAdjustSelectionBoundsEnabled);
+ outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
+ outState.putBoolean(KEY_DISPLAY_DIRECTORY_HEADER, mDisplayDirectoryHeader);
+ outState.putBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED, mVisibleScrollbarEnabled);
+ outState.putInt(KEY_SCROLLBAR_POSITION, mVerticalScrollbarPosition);
+ outState.putInt(KEY_DIRECTORY_SEARCH_MODE, mDirectorySearchMode);
+ outState.putBoolean(KEY_SELECTION_VISIBLE, mSelectionVisible);
+ outState.putBoolean(KEY_LEGACY_COMPATIBILITY, mLegacyCompatibility);
+ outState.putString(KEY_QUERY_STRING, mQueryString);
+ outState.putInt(KEY_DIRECTORY_RESULT_LIMIT, mDirectoryResultLimit);
+ outState.putBoolean(KEY_DARK_THEME, mDarkTheme);
+ outState.putBoolean(KEY_LOGS_LIST_EVENTS, mLogListEvents);
+ outState.putBoolean(KEY_DATA_LOADED, mDataLoaded);
+
+ if (mListView != null) {
+ outState.putParcelable(KEY_LIST_STATE, mListView.onSaveInstanceState());
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+ restoreSavedState(savedState);
+ mAdapter = createListAdapter();
+ mContactsPrefs = new ContactsPreferences(mContext);
+ }
+
+ public void restoreSavedState(Bundle savedState) {
+ if (savedState == null) {
+ return;
+ }
+
+ mSectionHeaderDisplayEnabled = savedState.getBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED);
+ mPhotoLoaderEnabled = savedState.getBoolean(KEY_PHOTO_LOADER_ENABLED);
+ mQuickContactEnabled = savedState.getBoolean(KEY_QUICK_CONTACT_ENABLED);
+ mAdjustSelectionBoundsEnabled = savedState.getBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED);
+ mSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
+ mDisplayDirectoryHeader = savedState.getBoolean(KEY_DISPLAY_DIRECTORY_HEADER);
+ mVisibleScrollbarEnabled = savedState.getBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED);
+ mVerticalScrollbarPosition = savedState.getInt(KEY_SCROLLBAR_POSITION);
+ mDirectorySearchMode = savedState.getInt(KEY_DIRECTORY_SEARCH_MODE);
+ mSelectionVisible = savedState.getBoolean(KEY_SELECTION_VISIBLE);
+ mLegacyCompatibility = savedState.getBoolean(KEY_LEGACY_COMPATIBILITY);
+ mQueryString = savedState.getString(KEY_QUERY_STRING);
+ mDirectoryResultLimit = savedState.getInt(KEY_DIRECTORY_RESULT_LIMIT);
+ mDarkTheme = savedState.getBoolean(KEY_DARK_THEME);
+
+ // Retrieve list state. This will be applied in onLoadFinished
+ mListState = savedState.getParcelable(KEY_LIST_STATE);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ mContactsPrefs.registerChangeListener(mPreferencesChangeListener);
+
+ mForceLoad = loadPreferences();
+
+ mDirectoryListStatus = STATUS_NOT_LOADED;
+ mLoadPriorityDirectoriesOnly = true;
+
+ startLoading();
+ }
+
+ protected void startLoading() {
+ if (mAdapter == null) {
+ // The method was called before the fragment was started
+ return;
+ }
+
+ configureAdapter();
+ int partitionCount = mAdapter.getPartitionCount();
+ for (int i = 0; i < partitionCount; i++) {
+ Partition partition = mAdapter.getPartition(i);
+ if (partition instanceof DirectoryPartition) {
+ DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+ if (directoryPartition.getStatus() == DirectoryPartition.STATUS_NOT_LOADED) {
+ if (directoryPartition.isPriorityDirectory() || !mLoadPriorityDirectoriesOnly) {
+ startLoadingDirectoryPartition(i);
+ }
+ }
+ } else {
+ getLoaderManager().initLoader(i, null, this);
+ }
+ }
+
+ // Next time this method is called, we should start loading non-priority directories
+ mLoadPriorityDirectoriesOnly = false;
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ if (id == DIRECTORY_LOADER_ID) {
+ DirectoryListLoader loader = new DirectoryListLoader(mContext);
+ loader.setDirectorySearchMode(mAdapter.getDirectorySearchMode());
+ loader.setLocalInvisibleDirectoryEnabled(
+ ContactEntryListAdapter.LOCAL_INVISIBLE_DIRECTORY_ENABLED);
+ return loader;
+ } else {
+ CursorLoader loader = createCursorLoader(mContext);
+ long directoryId = args != null && args.containsKey(DIRECTORY_ID_ARG_KEY)
+ ? args.getLong(DIRECTORY_ID_ARG_KEY)
+ : Directory.DEFAULT;
+ mAdapter.configureLoader(loader, directoryId);
+ return loader;
+ }
+ }
+
+ public CursorLoader createCursorLoader(Context context) {
+ return new CursorLoader(context, null, null, null, null, null) {
+ @Override
+ protected Cursor onLoadInBackground() {
+ try {
+ return super.onLoadInBackground();
+ } catch (RuntimeException e) {
+ // We don't even know what the projection should be, so no point trying to
+ // return an empty MatrixCursor with the correct projection here.
+ Log.w(TAG, "RuntimeException while trying to query ContactsProvider.");
+ return null;
+ }
+ }
+ };
+ }
+
+ private void startLoadingDirectoryPartition(int partitionIndex) {
+ DirectoryPartition partition = (DirectoryPartition)mAdapter.getPartition(partitionIndex);
+ partition.setStatus(DirectoryPartition.STATUS_LOADING);
+ long directoryId = partition.getDirectoryId();
+ if (mForceLoad) {
+ if (directoryId == Directory.DEFAULT) {
+ loadDirectoryPartition(partitionIndex, partition);
+ } else {
+ loadDirectoryPartitionDelayed(partitionIndex, partition);
+ }
+ } else {
+ Bundle args = new Bundle();
+ args.putLong(DIRECTORY_ID_ARG_KEY, directoryId);
+ getLoaderManager().initLoader(partitionIndex, args, this);
+ }
+ }
+
+ /**
+ * Queues up a delayed request to search the specified directory. Since
+ * directory search will likely introduce a lot of network traffic, we want
+ * to wait for a pause in the user's typing before sending a directory request.
+ */
+ private void loadDirectoryPartitionDelayed(int partitionIndex, DirectoryPartition partition) {
+ mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE, partition);
+ Message msg = mDelayedDirectorySearchHandler.obtainMessage(
+ DIRECTORY_SEARCH_MESSAGE, partitionIndex, 0, partition);
+ mDelayedDirectorySearchHandler.sendMessageDelayed(msg, DIRECTORY_SEARCH_DELAY_MILLIS);
+ }
+
+ /**
+ * Loads the directory partition.
+ */
+ protected void loadDirectoryPartition(int partitionIndex, DirectoryPartition partition) {
+ Bundle args = new Bundle();
+ args.putLong(DIRECTORY_ID_ARG_KEY, partition.getDirectoryId());
+ getLoaderManager().restartLoader(partitionIndex, args, this);
+ }
+
+ /**
+ * Cancels all queued directory loading requests.
+ */
+ private void removePendingDirectorySearchRequests() {
+ mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (!mEnabled) {
+ return;
+ }
+
+ getListView().setVisibility(View.VISIBLE);
+ getView().setVisibility(View.VISIBLE);
+
+ int loaderId = loader.getId();
+ if (loaderId == DIRECTORY_LOADER_ID) {
+ mDirectoryListStatus = STATUS_LOADED;
+ mAdapter.changeDirectories(data);
+ startLoading();
+ } else {
+ onPartitionLoaded(loaderId, data);
+ if (isSearchMode()) {
+ int directorySearchMode = getDirectorySearchMode();
+ if (directorySearchMode != DirectoryListLoader.SEARCH_MODE_NONE) {
+ if (mDirectoryListStatus == STATUS_NOT_LOADED) {
+ mDirectoryListStatus = STATUS_LOADING;
+ getLoaderManager().initLoader(DIRECTORY_LOADER_ID, null, this);
+ } else {
+ startLoading();
+ }
+ }
+ } else {
+ maybeLogListEvent();
+ mDirectoryListStatus = STATUS_NOT_LOADED;
+ getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
+ }
+ }
+ }
+
+ protected void maybeLogListEvent() {
+ if (!mDataLoaded || mLogListEvents) {
+ Logger.logListEvent(ActionType.LOAD, getListType(), getAdapter().getCount(),
+ /* clickedIndex */ -1, /* numSelected */ 0);
+ mLogListEvents = false;
+ mDataLoaded = true;
+ }
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+
+ protected void onPartitionLoaded(int partitionIndex, Cursor data) {
+ if (partitionIndex >= mAdapter.getPartitionCount()) {
+ // When we get unsolicited data, ignore it. This could happen
+ // when we are switching from search mode to the default mode.
+ return;
+ }
+
+ mAdapter.changeCursor(partitionIndex, data);
+ setListHeader();
+
+ if (!isLoading()) {
+ completeRestoreInstanceState();
+ }
+ }
+
+ public boolean isLoading() {
+ if (mAdapter != null && mAdapter.isLoading()) {
+ return true;
+ }
+
+ if (isLoadingDirectoryList()) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public boolean isLoadingDirectoryList() {
+ return isSearchMode() && getDirectorySearchMode() != DirectoryListLoader.SEARCH_MODE_NONE
+ && (mDirectoryListStatus == STATUS_NOT_LOADED
+ || mDirectoryListStatus == STATUS_LOADING);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ mContactsPrefs.unregisterChangeListener();
+ mAdapter.clearPartitions();
+ }
+
+ protected void reloadData() {
+ removePendingDirectorySearchRequests();
+ mAdapter.onDataReload();
+ mLoadPriorityDirectoriesOnly = true;
+ mForceLoad = true;
+ startLoading();
+ }
+
+ /**
+ * Shows a view at the top of the list.
+ */
+ protected void setListHeader() {}
+
+ /**
+ * Provides logic that dismisses this fragment. The default implementation
+ * does nothing.
+ */
+ protected void finish() {
+ }
+
+ public void setSectionHeaderDisplayEnabled(boolean flag) {
+ if (mSectionHeaderDisplayEnabled != flag) {
+ mSectionHeaderDisplayEnabled = flag;
+ if (mAdapter != null) {
+ mAdapter.setSectionHeaderDisplayEnabled(flag);
+ }
+ configureVerticalScrollbar();
+ }
+ }
+
+ public boolean isSectionHeaderDisplayEnabled() {
+ return mSectionHeaderDisplayEnabled;
+ }
+
+ public void setVisibleScrollbarEnabled(boolean flag) {
+ if (mVisibleScrollbarEnabled != flag) {
+ mVisibleScrollbarEnabled = flag;
+ configureVerticalScrollbar();
+ }
+ }
+
+ public boolean isVisibleScrollbarEnabled() {
+ return mVisibleScrollbarEnabled;
+ }
+
+ public void setVerticalScrollbarPosition(int position) {
+ if (mVerticalScrollbarPosition != position) {
+ mVerticalScrollbarPosition = position;
+ configureVerticalScrollbar();
+ }
+ }
+
+ private void configureVerticalScrollbar() {
+ boolean hasScrollbar = isVisibleScrollbarEnabled() && isSectionHeaderDisplayEnabled();
+
+ if (mListView != null) {
+ mListView.setFastScrollEnabled(hasScrollbar);
+ mListView.setVerticalScrollbarPosition(mVerticalScrollbarPosition);
+ mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
+ }
+ }
+
+ public void setPhotoLoaderEnabled(boolean flag) {
+ mPhotoLoaderEnabled = flag;
+ configurePhotoLoader();
+ }
+
+ public boolean isPhotoLoaderEnabled() {
+ return mPhotoLoaderEnabled;
+ }
+
+ /**
+ * Returns true if the list is supposed to visually highlight the selected item.
+ */
+ public boolean isSelectionVisible() {
+ return mSelectionVisible;
+ }
+
+ public void setSelectionVisible(boolean flag) {
+ this.mSelectionVisible = flag;
+ }
+
+ public void setQuickContactEnabled(boolean flag) {
+ this.mQuickContactEnabled = flag;
+ }
+
+ public void setAdjustSelectionBoundsEnabled(boolean flag) {
+ mAdjustSelectionBoundsEnabled = flag;
+ }
+
+ public void setIncludeFavorites(boolean flag) {
+ mIncludeFavorites = flag;
+ if (mAdapter != null) {
+ mAdapter.setIncludeFavorites(flag);
+ }
+ }
+
+ public void setDisplayDirectoryHeader(boolean flag) {
+ mDisplayDirectoryHeader = flag;
+ }
+
+ /**
+ * Enter/exit search mode. This is method is tightly related to the current query, and should
+ * only be called by {@link #setQueryString}.
+ *
+ * Also note this method doesn't call {@link #reloadData()}; {@link #setQueryString} does it.
+ */
+ protected void setSearchMode(boolean flag) {
+ if (mSearchMode != flag) {
+ mSearchMode = flag;
+ setSectionHeaderDisplayEnabled(!mSearchMode);
+
+ if (!flag) {
+ mDirectoryListStatus = STATUS_NOT_LOADED;
+ getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
+ }
+
+ if (mAdapter != null) {
+ mAdapter.setSearchMode(flag);
+
+ mAdapter.clearPartitions();
+ if (!flag) {
+ // If we are switching from search to regular display, remove all directory
+ // partitions after default one, assuming they are remote directories which
+ // should be cleaned up on exiting the search mode.
+ mAdapter.removeDirectoriesAfterDefault();
+ }
+ mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
+ }
+
+ if (mListView != null) {
+ mListView.setFastScrollEnabled(!flag);
+ }
+ }
+ }
+
+ /**
+ * When not in search mode, directory header should always be hidden.
+ * When in search mode, directory header should be displayed when mDisplayDirectoryHeader is
+ * set to true. (mDisplayDirectoryHeader default value is true)
+ */
+ private boolean shouldDisplayDirectoryHeader() {
+ if (!mSearchMode) {
+ return false;
+ }
+ return mDisplayDirectoryHeader;
+ }
+
+ public final boolean isSearchMode() {
+ return mSearchMode;
+ }
+
+ public final String getQueryString() {
+ return mQueryString;
+ }
+
+ // TODO: the paramter delaySelection is not in use, and let's remove it.
+ public void setQueryString(String queryString, boolean delaySelection) {
+ if (!TextUtils.equals(mQueryString, queryString)) {
+ if (mShowEmptyListForEmptyQuery && mAdapter != null && mListView != null) {
+ if (TextUtils.isEmpty(mQueryString)) {
+ // Restore the adapter if the query used to be empty.
+ mListView.setAdapter(mAdapter);
+ } else if (TextUtils.isEmpty(queryString)) {
+ // Instantly clear the list view if the new query is empty.
+ mListView.setAdapter(null);
+ }
+ }
+
+ mQueryString = queryString;
+ setSearchMode(!TextUtils.isEmpty(mQueryString) || mShowEmptyListForEmptyQuery);
+
+ if (mAdapter != null) {
+ mAdapter.setQueryString(queryString);
+ reloadData();
+ }
+ }
+ }
+
+ public void setShowEmptyListForNullQuery(boolean show) {
+ mShowEmptyListForEmptyQuery = show;
+ }
+
+ public int getDirectoryLoaderId() {
+ return DIRECTORY_LOADER_ID;
+ }
+
+ public int getDirectorySearchMode() {
+ return mDirectorySearchMode;
+ }
+
+ public void setDirectorySearchMode(int mode) {
+ mDirectorySearchMode = mode;
+ }
+
+ public boolean isLegacyCompatibilityMode() {
+ return mLegacyCompatibility;
+ }
+
+ public void setLegacyCompatibilityMode(boolean flag) {
+ mLegacyCompatibility = flag;
+ }
+
+ protected int getContactNameDisplayOrder() {
+ return mDisplayOrder;
+ }
+
+ protected void setContactNameDisplayOrder(int displayOrder) {
+ mDisplayOrder = displayOrder;
+ if (mAdapter != null) {
+ mAdapter.setContactNameDisplayOrder(displayOrder);
+ }
+ }
+
+ public int getSortOrder() {
+ return mSortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ mSortOrder = sortOrder;
+ if (mAdapter != null) {
+ mAdapter.setSortOrder(sortOrder);
+ }
+ }
+
+ public void setDirectoryResultLimit(int limit) {
+ mDirectoryResultLimit = limit;
+ }
+
+ protected boolean loadPreferences() {
+ boolean changed = false;
+ if (getContactNameDisplayOrder() != mContactsPrefs.getDisplayOrder()) {
+ setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
+ changed = true;
+ }
+
+ if (getSortOrder() != mContactsPrefs.getSortOrder()) {
+ setSortOrder(mContactsPrefs.getSortOrder());
+ changed = true;
+ }
+
+ return changed;
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ onCreateView(inflater, container);
+
+ boolean searchMode = isSearchMode();
+ mAdapter.setSearchMode(searchMode);
+ mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
+ mAdapter.setPhotoLoader(mPhotoManager);
+ mListView.setAdapter(mAdapter);
+
+ if (!isSearchMode()) {
+ mListView.setFocusableInTouchMode(true);
+ mListView.requestFocus();
+ }
+
+ if (savedInstanceState != null) {
+ mLogListEvents = savedInstanceState.getBoolean(KEY_LOGS_LIST_EVENTS, true);
+ mDataLoaded = savedInstanceState.getBoolean(KEY_DATA_LOADED, false);
+ }
+
+ return mView;
+ }
+
+ protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+ mView = inflateView(inflater, container);
+
+ mListView = (ListView)mView.findViewById(android.R.id.list);
+ if (mListView == null) {
+ throw new RuntimeException(
+ "Your content must have a ListView whose id attribute is " +
+ "'android.R.id.list'");
+ }
+
+ View emptyView = mView.findViewById(android.R.id.empty);
+ if (emptyView != null) {
+ mListView.setEmptyView(emptyView);
+ }
+
+ mListView.setOnItemClickListener(this);
+ mListView.setOnItemLongClickListener(this);
+ mListView.setOnFocusChangeListener(this);
+ mListView.setOnTouchListener(this);
+ mListView.setFastScrollEnabled(!isSearchMode());
+
+ // Tell list view to not show dividers. We'll do it ourself so that we can *not* show
+ // them when an A-Z headers is visible.
+ mListView.setDividerHeight(0);
+
+ // We manually save/restore the listview state
+ mListView.setSaveEnabled(false);
+
+ configureVerticalScrollbar();
+ configurePhotoLoader();
+
+ getAdapter().setFragmentRootView(getView());
+ }
+
+ protected void configurePhotoLoader() {
+ if (isPhotoLoaderEnabled() && mContext != null) {
+ if (mPhotoManager == null) {
+ mPhotoManager = ContactPhotoManager.getInstance(mContext);
+ }
+ if (mListView != null) {
+ mListView.setOnScrollListener(this);
+ }
+ if (mAdapter != null) {
+ mAdapter.setPhotoLoader(mPhotoManager);
+ }
+ }
+ }
+
+ protected void configureAdapter() {
+ if (mAdapter == null) {
+ return;
+ }
+
+ mAdapter.setQuickContactEnabled(mQuickContactEnabled);
+ mAdapter.setAdjustSelectionBoundsEnabled(mAdjustSelectionBoundsEnabled);
+ mAdapter.setIncludeFavorites(mIncludeFavorites);
+ mAdapter.setQueryString(mQueryString);
+ mAdapter.setDirectorySearchMode(mDirectorySearchMode);
+ mAdapter.setPinnedPartitionHeadersEnabled(false);
+ mAdapter.setContactNameDisplayOrder(mDisplayOrder);
+ mAdapter.setSortOrder(mSortOrder);
+ mAdapter.setSectionHeaderDisplayEnabled(mSectionHeaderDisplayEnabled);
+ mAdapter.setSelectionVisible(mSelectionVisible);
+ mAdapter.setDirectoryResultLimit(mDirectoryResultLimit);
+ mAdapter.setDarkTheme(mDarkTheme);
+ }
+
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {
+ if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
+ mPhotoManager.pause();
+ } else if (isPhotoLoaderEnabled()) {
+ mPhotoManager.resume();
+ }
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ hideSoftKeyboard();
+
+ int adjPosition = position - mListView.getHeaderViewsCount();
+ if (adjPosition >= 0) {
+ onItemClick(adjPosition, id);
+ }
+ }
+
+ @Override
+ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+ int adjPosition = position - mListView.getHeaderViewsCount();
+
+ if (adjPosition >= 0) {
+ return onItemLongClick(adjPosition, id);
+ }
+ return false;
+ }
+
+ private void hideSoftKeyboard() {
+ // Hide soft keyboard, if visible
+ InputMethodManager inputMethodManager = (InputMethodManager)
+ mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
+ }
+
+ /**
+ * Dismisses the soft keyboard when the list takes focus.
+ */
+ @Override
+ public void onFocusChange(View view, boolean hasFocus) {
+ if (view == mListView && hasFocus) {
+ hideSoftKeyboard();
+ }
+ }
+
+ /**
+ * Dismisses the soft keyboard when the list is touched.
+ */
+ @Override
+ public boolean onTouch(View view, MotionEvent event) {
+ if (view == mListView) {
+ hideSoftKeyboard();
+ }
+ return false;
+ }
+
+ @Override
+ public void onPause() {
+ // Save the scrolling state of the list view
+ mListViewTopIndex = mListView.getFirstVisiblePosition();
+ View v = mListView.getChildAt(0);
+ mListViewTopOffset = (v == null) ? 0 : (v.getTop() - mListView.getPaddingTop());
+
+ super.onPause();
+ removePendingDirectorySearchRequests();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // Restore the selection of the list view. See b/19982820.
+ // This has to be done manually because if the list view has its emptyView set,
+ // the scrolling state will be reset when clearPartitions() is called on the adapter.
+ mListView.setSelectionFromTop(mListViewTopIndex, mListViewTopOffset);
+ }
+
+ /**
+ * Restore the list state after the adapter is populated.
+ */
+ protected void completeRestoreInstanceState() {
+ if (mListState != null) {
+ mListView.onRestoreInstanceState(mListState);
+ mListState = null;
+ }
+ }
+
+ public void setDarkTheme(boolean value) {
+ mDarkTheme = value;
+ if (mAdapter != null) mAdapter.setDarkTheme(value);
+ }
+
+ /**
+ * Processes a result returned by the contact picker.
+ */
+ public void onPickerResult(Intent data) {
+ throw new UnsupportedOperationException("Picker result handler is not implemented.");
+ }
+
+ private ContactsPreferences.ChangeListener mPreferencesChangeListener =
+ new ContactsPreferences.ChangeListener() {
+ @Override
+ public void onChange() {
+ loadPreferences();
+ reloadData();
+ }
+ };
+
+ private int getDefaultVerticalScrollbarPosition() {
+ final Locale locale = Locale.getDefault();
+ final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale);
+ switch (layoutDirection) {
+ case View.LAYOUT_DIRECTION_RTL:
+ return View.SCROLLBAR_POSITION_LEFT;
+ case View.LAYOUT_DIRECTION_LTR:
+ default:
+ return View.SCROLLBAR_POSITION_RIGHT;
+ }
+ }
+
+ public void setListType(int listType) {
+ mListType = listType;
+ }
+
+ public int getListType() {
+ return mListType;
+ }
+
+ public void setLogListEvents(boolean logListEvents) {
+ mLogListEvents = logListEvents;
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
new file mode 100644
index 000000000..cb63f53eb
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -0,0 +1,444 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.SearchSnippets;
+import android.text.TextUtils;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.R;
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.preference.ContactsPreferences;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
+ */
+public abstract class ContactListAdapter extends MultiSelectEntryContactListAdapter {
+
+ public static class ContactQuery {
+ public static final String[] CONTACT_PROJECTION_PRIMARY = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.CONTACT_PRESENCE, // 2
+ Contacts.CONTACT_STATUS, // 3
+ Contacts.PHOTO_ID, // 4
+ Contacts.PHOTO_THUMBNAIL_URI, // 5
+ Contacts.LOOKUP_KEY, // 6
+ Contacts.PHONETIC_NAME, // 7
+ Contacts.STARRED, // 9
+ };
+
+ private static final String[] CONTACT_PROJECTION_ALTERNATIVE = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 1
+ Contacts.CONTACT_PRESENCE, // 2
+ Contacts.CONTACT_STATUS, // 3
+ Contacts.PHOTO_ID, // 4
+ Contacts.PHOTO_THUMBNAIL_URI, // 5
+ Contacts.LOOKUP_KEY, // 6
+ Contacts.PHONETIC_NAME, // 7
+ Contacts.STARRED, // 8
+ };
+
+ private static final String[] FILTER_PROJECTION_PRIMARY = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.CONTACT_PRESENCE, // 2
+ Contacts.CONTACT_STATUS, // 3
+ Contacts.PHOTO_ID, // 4
+ Contacts.PHOTO_THUMBNAIL_URI, // 5
+ Contacts.LOOKUP_KEY, // 6
+ Contacts.PHONETIC_NAME, // 7
+ Contacts.STARRED, // 8
+ SearchSnippets.SNIPPET, // 9
+ };
+
+ private static final String[] FILTER_PROJECTION_ALTERNATIVE = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 1
+ Contacts.CONTACT_PRESENCE, // 2
+ Contacts.CONTACT_STATUS, // 3
+ Contacts.PHOTO_ID, // 4
+ Contacts.PHOTO_THUMBNAIL_URI, // 5
+ Contacts.LOOKUP_KEY, // 6
+ Contacts.PHONETIC_NAME, // 7
+ Contacts.STARRED, // 8
+ SearchSnippets.SNIPPET, // 9
+ };
+
+ public static final int CONTACT_ID = 0;
+ public static final int CONTACT_DISPLAY_NAME = 1;
+ public static final int CONTACT_PRESENCE_STATUS = 2;
+ public static final int CONTACT_CONTACT_STATUS = 3;
+ public static final int CONTACT_PHOTO_ID = 4;
+ public static final int CONTACT_PHOTO_URI = 5;
+ public static final int CONTACT_LOOKUP_KEY = 6;
+ public static final int CONTACT_PHONETIC_NAME = 7;
+ public static final int CONTACT_STARRED = 8;
+ public static final int CONTACT_SNIPPET = 9;
+ }
+
+ private CharSequence mUnknownNameText;
+
+ private long mSelectedContactDirectoryId;
+ private String mSelectedContactLookupKey;
+ private long mSelectedContactId;
+ private ContactListItemView.PhotoPosition mPhotoPosition;
+
+ public ContactListAdapter(Context context) {
+ super(context, ContactQuery.CONTACT_ID);
+
+ mUnknownNameText = context.getText(R.string.missing_name);
+ }
+
+ public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+ mPhotoPosition = photoPosition;
+ }
+
+ public ContactListItemView.PhotoPosition getPhotoPosition() {
+ return mPhotoPosition;
+ }
+
+ public CharSequence getUnknownNameText() {
+ return mUnknownNameText;
+ }
+
+ public long getSelectedContactDirectoryId() {
+ return mSelectedContactDirectoryId;
+ }
+
+ public String getSelectedContactLookupKey() {
+ return mSelectedContactLookupKey;
+ }
+
+ public long getSelectedContactId() {
+ return mSelectedContactId;
+ }
+
+ public void setSelectedContact(long selectedDirectoryId, String lookupKey, long contactId) {
+ mSelectedContactDirectoryId = selectedDirectoryId;
+ mSelectedContactLookupKey = lookupKey;
+ mSelectedContactId = contactId;
+ }
+
+ protected static Uri buildSectionIndexerUri(Uri uri) {
+ return uri.buildUpon()
+ .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true").build();
+ }
+
+ @Override
+ public String getContactDisplayName(int position) {
+ return ((Cursor) getItem(position)).getString(ContactQuery.CONTACT_DISPLAY_NAME);
+ }
+
+ /**
+ * Builds the {@link Contacts#CONTENT_LOOKUP_URI} for the given
+ * {@link ListView} position.
+ */
+ public Uri getContactUri(int position) {
+ int partitionIndex = getPartitionForPosition(position);
+ Cursor item = (Cursor)getItem(position);
+ return item != null ? getContactUri(partitionIndex, item) : null;
+ }
+
+ public Uri getContactUri(int partitionIndex, Cursor cursor) {
+ long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+ String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
+ Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+ long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+ if (uri != null && directoryId != Directory.DEFAULT) {
+ uri = uri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+ }
+ return uri;
+ }
+
+ /**
+ * Returns the {@link Contacts#_ID} for the given {@link ListView} position.
+ */
+ public long getContactId(int position) {
+ final Cursor cursor = (Cursor) getItem(position);
+ return cursor == null ? -1 : cursor.getLong(ContactQuery.CONTACT_ID);
+ }
+
+ public boolean isEnterpriseContact(int position) {
+ final Cursor cursor = (Cursor) getItem(position);
+ if (cursor != null) {
+ final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+ return ContactsCompat.isEnterpriseContactId(contactId);
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if the specified contact is selected in the list. For a
+ * contact to be shown as selected, we need both the directory and and the
+ * lookup key to be the same. We are paying no attention to the contactId,
+ * because it is volatile, especially in the case of directories.
+ */
+ public boolean isSelectedContact(int partitionIndex, Cursor cursor) {
+ long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+ if (getSelectedContactDirectoryId() != directoryId) {
+ return false;
+ }
+ String lookupKey = getSelectedContactLookupKey();
+ if (lookupKey != null && TextUtils.equals(lookupKey,
+ cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY))) {
+ return true;
+ }
+
+ return directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE
+ && getSelectedContactId() == cursor.getLong(ContactQuery.CONTACT_ID);
+ }
+
+ @Override
+ protected ContactListItemView newView(
+ Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+ ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+ view.setUnknownNameText(mUnknownNameText);
+ view.setQuickContactEnabled(isQuickContactEnabled());
+ view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
+ view.setActivatedStateSupported(isSelectionVisible());
+ if (mPhotoPosition != null) {
+ view.setPhotoPosition(mPhotoPosition);
+ }
+ return view;
+ }
+
+ protected void bindSectionHeaderAndDivider(ContactListItemView view, int position,
+ Cursor cursor) {
+ view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+ if (isSectionHeaderDisplayEnabled()) {
+ Placement placement = getItemPlacementInSection(position);
+ view.setSectionHeader(placement.sectionHeader);
+ } else {
+ view.setSectionHeader(null);
+ }
+ }
+
+ protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
+ if (!isPhotoSupported(partitionIndex)) {
+ view.removePhotoView();
+ return;
+ }
+
+ // Set the photo, if available
+ long photoId = 0;
+ if (!cursor.isNull(ContactQuery.CONTACT_PHOTO_ID)) {
+ photoId = cursor.getLong(ContactQuery.CONTACT_PHOTO_ID);
+ }
+
+ if (photoId != 0) {
+ getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+ getCircularPhotos(), null);
+ } else {
+ final String photoUriString = cursor.getString(ContactQuery.CONTACT_PHOTO_URI);
+ final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+ DefaultImageRequest request = null;
+ if (photoUri == null) {
+ request = getDefaultImageRequestFromCursor(cursor,
+ ContactQuery.CONTACT_DISPLAY_NAME,
+ ContactQuery.CONTACT_LOOKUP_KEY);
+ }
+ getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+ getCircularPhotos(), request);
+ }
+ }
+
+ protected void bindNameAndViewId(final ContactListItemView view, Cursor cursor) {
+ view.showDisplayName(
+ cursor, ContactQuery.CONTACT_DISPLAY_NAME, getContactNameDisplayOrder());
+ // Note: we don't show phonetic any more (See issue 5265330)
+
+ bindViewId(view, cursor, ContactQuery.CONTACT_ID);
+ }
+
+ protected void bindPresenceAndStatusMessage(final ContactListItemView view, Cursor cursor) {
+ view.showPresenceAndStatusMessage(cursor, ContactQuery.CONTACT_PRESENCE_STATUS,
+ ContactQuery.CONTACT_CONTACT_STATUS);
+ }
+
+ protected void bindSearchSnippet(final ContactListItemView view, Cursor cursor) {
+ view.showSnippet(cursor, ContactQuery.CONTACT_SNIPPET);
+ }
+
+ public int getSelectedContactPosition() {
+ if (mSelectedContactLookupKey == null && mSelectedContactId == 0) {
+ return -1;
+ }
+
+ Cursor cursor = null;
+ int partitionIndex = -1;
+ int partitionCount = getPartitionCount();
+ for (int i = 0; i < partitionCount; i++) {
+ DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+ if (partition.getDirectoryId() == mSelectedContactDirectoryId) {
+ partitionIndex = i;
+ break;
+ }
+ }
+ if (partitionIndex == -1) {
+ return -1;
+ }
+
+ cursor = getCursor(partitionIndex);
+ if (cursor == null) {
+ return -1;
+ }
+
+ cursor.moveToPosition(-1); // Reset cursor
+ int offset = -1;
+ while (cursor.moveToNext()) {
+ if (mSelectedContactLookupKey != null) {
+ String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
+ if (mSelectedContactLookupKey.equals(lookupKey)) {
+ offset = cursor.getPosition();
+ break;
+ }
+ }
+ if (mSelectedContactId != 0 && (mSelectedContactDirectoryId == Directory.DEFAULT
+ || mSelectedContactDirectoryId == Directory.LOCAL_INVISIBLE)) {
+ long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+ if (contactId == mSelectedContactId) {
+ offset = cursor.getPosition();
+ break;
+ }
+ }
+ }
+ if (offset == -1) {
+ return -1;
+ }
+
+ int position = getPositionForPartition(partitionIndex) + offset;
+ if (hasHeader(partitionIndex)) {
+ position++;
+ }
+ return position;
+ }
+
+ public boolean hasValidSelection() {
+ return getSelectedContactPosition() != -1;
+ }
+
+ public Uri getFirstContactUri() {
+ int partitionCount = getPartitionCount();
+ for (int i = 0; i < partitionCount; i++) {
+ DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+ if (partition.isLoading()) {
+ continue;
+ }
+
+ Cursor cursor = getCursor(i);
+ if (cursor == null) {
+ continue;
+ }
+
+ if (!cursor.moveToFirst()) {
+ continue;
+ }
+
+ return getContactUri(i, cursor);
+ }
+
+ return null;
+ }
+
+ @Override
+ public void changeCursor(int partitionIndex, Cursor cursor) {
+ super.changeCursor(partitionIndex, cursor);
+
+ if (cursor == null || !cursor.moveToFirst()) {
+ return;
+ }
+
+ if (shouldIncludeFavorites()) {
+ if (cursor.getInt(ContactQuery.CONTACT_STARRED) == 1) {
+ final Set<Integer> favorites = new HashSet<>();
+ favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
+ while (cursor != null && cursor.moveToNext()) {
+ if (cursor.getInt(ContactQuery.CONTACT_STARRED) != 1
+ || favorites.contains(cursor.getInt(ContactQuery.CONTACT_ID))) {
+ break;
+ }
+ favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
+ }
+ setFavoritesSectionHeader(favorites.size());
+ }
+ }
+ }
+
+ /**
+ * @return Projection useful for children.
+ */
+ protected final String[] getProjection(boolean forSearch) {
+ final int sortOrder = getContactNameDisplayOrder();
+ if (forSearch) {
+ if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return ContactQuery.FILTER_PROJECTION_PRIMARY;
+ } else {
+ return ContactQuery.FILTER_PROJECTION_ALTERNATIVE;
+ }
+ } else {
+ if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return ContactQuery.CONTACT_PROJECTION_PRIMARY;
+ } else {
+ return ContactQuery.CONTACT_PROJECTION_ALTERNATIVE;
+ }
+ }
+ }
+
+ /**
+ * @return Projection from Data that is useful for children.
+ */
+ protected final String[] getDataProjectionForContacts(boolean forSearch) {
+ final int sortOrder = getContactNameDisplayOrder();
+ if (forSearch) {
+ if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return replaceFirstString(ContactQuery.FILTER_PROJECTION_PRIMARY);
+ } else {
+ return replaceFirstString(ContactQuery.FILTER_PROJECTION_ALTERNATIVE);
+ }
+ } else {
+ if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return replaceFirstString(ContactQuery.CONTACT_PROJECTION_PRIMARY);
+ } else {
+ return replaceFirstString(ContactQuery.CONTACT_PROJECTION_ALTERNATIVE);
+ }
+ }
+ }
+
+ /**
+ * @param sourceProjection
+ * @return Replace the first String of sourceProjection with Data.CONTACT_ID.
+ */
+ private String[] replaceFirstString(String[] sourceProjection) {
+ String[] result = sourceProjection.clone();
+ result[0] = Data.CONTACT_ID;
+ return result;
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
new file mode 100644
index 000000000..32e4b9c27
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -0,0 +1,464 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.accounts.Account;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Contact list filter parameters.
+ */
+public final class ContactListFilter implements Comparable<ContactListFilter>, Parcelable {
+
+ public static final int FILTER_TYPE_DEFAULT = -1;
+ public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
+ public static final int FILTER_TYPE_CUSTOM = -3;
+ public static final int FILTER_TYPE_STARRED = -4;
+ public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
+ public static final int FILTER_TYPE_SINGLE_CONTACT = -6;
+ public static final int FILTER_TYPE_GROUP_MEMBERS = -7;
+ public static final int FILTER_TYPE_DEVICE_CONTACTS = -8;
+
+ public static final int FILTER_TYPE_ACCOUNT = 0;
+
+ /**
+ * Obsolete filter which had been used in Honeycomb. This may be stored in
+ * {@link SharedPreferences}, but should be replaced with ALL filter when it is found.
+ *
+ * TODO: "group" filter and relevant variables are all obsolete. Remove them.
+ */
+ private static final int FILTER_TYPE_GROUP = 1;
+
+ private static final String KEY_FILTER_TYPE = "filter.type";
+ private static final String KEY_ACCOUNT_NAME = "filter.accountName";
+ private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
+ private static final String KEY_DATA_SET = "filter.dataSet";
+
+ public final int filterType;
+ public final String accountType;
+ public final String accountName;
+ public final String dataSet;
+ public final Drawable icon;
+ private String mId;
+
+ public ContactListFilter(int filterType, String accountType, String accountName, String dataSet,
+ Drawable icon) {
+ this.filterType = filterType;
+ this.accountType = accountType;
+ this.accountName = accountName;
+ this.dataSet = dataSet;
+ this.icon = icon;
+ }
+
+ public static ContactListFilter createFilterWithType(int filterType) {
+ return new ContactListFilter(filterType, null, null, null, null);
+ }
+
+ public static ContactListFilter createAccountFilter(String accountType, String accountName,
+ String dataSet, Drawable icon) {
+ return new ContactListFilter(ContactListFilter.FILTER_TYPE_ACCOUNT, accountType,
+ accountName, dataSet, icon);
+ }
+
+ public static ContactListFilter createGroupMembersFilter(String accountType, String accountName,
+ String dataSet) {
+ return new ContactListFilter(ContactListFilter.FILTER_TYPE_GROUP_MEMBERS, accountType,
+ accountName, dataSet, /* icon */ null);
+ }
+
+ public static ContactListFilter createDeviceContactsFilter(Drawable icon) {
+ return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
+ /* accountType= */ null, /* accountName= */ null, /* dataSet= */ null, icon);
+ }
+
+ public static ContactListFilter createDeviceContactsFilter(Drawable icon,
+ AccountWithDataSet account) {
+ return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
+ account.type, account.name, account.dataSet, icon);
+ }
+
+ /**
+ * Whether the given {@link ContactListFilter} has a filter type that should be displayed as
+ * the default contacts list view.
+ */
+ public boolean isContactsFilterType() {
+ return filterType == ContactListFilter.FILTER_TYPE_DEFAULT
+ || filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+ || filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
+ }
+
+ /** Returns the {@link ListEvent.ListType} for the type of this filter. */
+ public int toListType() {
+ switch (filterType) {
+ case FILTER_TYPE_DEFAULT:
+ // Fall through
+ case FILTER_TYPE_ALL_ACCOUNTS:
+ return ListEvent.ListType.ALL_CONTACTS;
+ case FILTER_TYPE_CUSTOM:
+ return ListEvent.ListType.CUSTOM;
+ case FILTER_TYPE_STARRED:
+ return ListEvent.ListType.STARRED;
+ case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+ return ListEvent.ListType.PHONE_NUMBERS;
+ case FILTER_TYPE_SINGLE_CONTACT:
+ return ListEvent.ListType.SINGLE_CONTACT;
+ case FILTER_TYPE_ACCOUNT:
+ return ListEvent.ListType.ACCOUNT;
+ case FILTER_TYPE_GROUP_MEMBERS:
+ return ListEvent.ListType.GROUP;
+ case FILTER_TYPE_DEVICE_CONTACTS:
+ return ListEvent.ListType.DEVICE;
+ }
+ return ListEvent.ListType.UNKNOWN_LIST;
+ }
+
+
+ /**
+ * Returns true if this filter is based on data and may become invalid over time.
+ */
+ public boolean isValidationRequired() {
+ return filterType == FILTER_TYPE_ACCOUNT;
+ }
+
+ @Override
+ public String toString() {
+ switch (filterType) {
+ case FILTER_TYPE_DEFAULT:
+ return "default";
+ case FILTER_TYPE_ALL_ACCOUNTS:
+ return "all_accounts";
+ case FILTER_TYPE_CUSTOM:
+ return "custom";
+ case FILTER_TYPE_STARRED:
+ return "starred";
+ case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+ return "with_phones";
+ case FILTER_TYPE_SINGLE_CONTACT:
+ return "single";
+ case FILTER_TYPE_ACCOUNT:
+ return "account: " + accountType + (dataSet != null ? "/" + dataSet : "")
+ + " " + accountName;
+ case FILTER_TYPE_GROUP_MEMBERS:
+ return "group_members";
+ case FILTER_TYPE_DEVICE_CONTACTS:
+ return "device_contacts";
+ }
+ return super.toString();
+ }
+
+ @Override
+ public int compareTo(ContactListFilter another) {
+ int res = accountName.compareTo(another.accountName);
+ if (res != 0) {
+ return res;
+ }
+
+ res = accountType.compareTo(another.accountType);
+ if (res != 0) {
+ return res;
+ }
+
+ return filterType - another.filterType;
+ }
+
+ @Override
+ public int hashCode() {
+ int code = filterType;
+ if (accountType != null) {
+ code = code * 31 + accountType.hashCode();
+ }
+ if (accountName != null) {
+ code = code * 31 + accountName.hashCode();
+ }
+ if (dataSet != null) {
+ code = code * 31 + dataSet.hashCode();
+ }
+ return code;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+
+ if (!(other instanceof ContactListFilter)) {
+ return false;
+ }
+
+ ContactListFilter otherFilter = (ContactListFilter) other;
+ if (filterType != otherFilter.filterType
+ || !TextUtils.equals(accountName, otherFilter.accountName)
+ || !TextUtils.equals(accountType, otherFilter.accountType)
+ || !TextUtils.equals(dataSet, otherFilter.dataSet)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Store the given {@link ContactListFilter} to preferences. If the requested filter is
+ * of type {@link #FILTER_TYPE_SINGLE_CONTACT} then do not save it to preferences because
+ * it is a temporary state.
+ */
+ public static void storeToPreferences(SharedPreferences prefs, ContactListFilter filter) {
+ if (filter != null && filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
+ return;
+ }
+ prefs.edit()
+ .putInt(KEY_FILTER_TYPE, filter == null ? FILTER_TYPE_DEFAULT : filter.filterType)
+ .putString(KEY_ACCOUNT_NAME, filter == null ? null : filter.accountName)
+ .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
+ .putString(KEY_DATA_SET, filter == null ? null : filter.dataSet)
+ .apply();
+ }
+
+ /**
+ * Try to obtain ContactListFilter object saved in SharedPreference.
+ * If there's no info there, return ALL filter instead.
+ */
+ public static ContactListFilter restoreDefaultPreferences(SharedPreferences prefs) {
+ ContactListFilter filter = restoreFromPreferences(prefs);
+ if (filter == null) {
+ filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
+ }
+ // "Group" filter is obsolete and thus is not exposed anymore. The "single contact mode"
+ // should also not be stored in preferences anymore since it is a temporary state.
+ if (filter.filterType == FILTER_TYPE_GROUP ||
+ filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
+ filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
+ }
+ return filter;
+ }
+
+ private static ContactListFilter restoreFromPreferences(SharedPreferences prefs) {
+ int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT);
+ if (filterType == FILTER_TYPE_DEFAULT) {
+ return null;
+ }
+
+ String accountName = prefs.getString(KEY_ACCOUNT_NAME, null);
+ String accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
+ String dataSet = prefs.getString(KEY_DATA_SET, null);
+ return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
+ }
+
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(filterType);
+ dest.writeString(accountName);
+ dest.writeString(accountType);
+ dest.writeString(dataSet);
+ }
+
+ public static final Parcelable.Creator<ContactListFilter> CREATOR =
+ new Parcelable.Creator<ContactListFilter>() {
+ @Override
+ public ContactListFilter createFromParcel(Parcel source) {
+ int filterType = source.readInt();
+ String accountName = source.readString();
+ String accountType = source.readString();
+ String dataSet = source.readString();
+ return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
+ }
+
+ @Override
+ public ContactListFilter[] newArray(int size) {
+ return new ContactListFilter[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ /**
+ * Returns a string that can be used as a stable persistent identifier for this filter.
+ */
+ public String getId() {
+ if (mId == null) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(filterType);
+ if (accountType != null) {
+ sb.append('-').append(accountType);
+ }
+ if (dataSet != null) {
+ sb.append('/').append(dataSet);
+ }
+ if (accountName != null) {
+ sb.append('-').append(accountName.replace('-', '_'));
+ }
+ mId = sb.toString();
+ }
+ return mId;
+ }
+
+ /**
+ * Adds the account query parameters to the given {@code uriBuilder}.
+ *
+ * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT} or
+ * {@link #FILTER_TYPE_GROUP_MEMBERS}.
+ */
+ public Uri.Builder addAccountQueryParameterToUrl(Uri.Builder uriBuilder) {
+ if (filterType != FILTER_TYPE_ACCOUNT
+ && filterType != FILTER_TYPE_GROUP_MEMBERS) {
+ throw new IllegalStateException(
+ "filterType must be FILTER_TYPE_ACCOUNT or FILER_TYPE_GROUP_MEMBERS");
+ }
+ // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+ if (accountName != null) {
+ uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
+ uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
+ }
+ if (dataSet != null) {
+ uriBuilder.appendQueryParameter(RawContacts.DATA_SET, dataSet);
+ }
+ return uriBuilder;
+ }
+
+ public AccountWithDataSet toAccountWithDataSet() {
+ if (filterType == FILTER_TYPE_ACCOUNT || filterType == FILTER_TYPE_DEVICE_CONTACTS) {
+ return new AccountWithDataSet(accountName, accountType, dataSet);
+ } else {
+ throw new IllegalStateException("Cannot create Account from filter type " +
+ filterTypeToString(filterType));
+ }
+ }
+
+ public String toDebugString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
+ if (filterType == FILTER_TYPE_ACCOUNT) {
+ builder.append(", accountType: " + accountType)
+ .append(", accountName: " + accountName)
+ .append(", dataSet: " + dataSet);
+ }
+ builder.append(", icon: " + icon + "]");
+ return builder.toString();
+ }
+
+ public static final String filterTypeToString(int filterType) {
+ switch (filterType) {
+ case FILTER_TYPE_DEFAULT:
+ return "FILTER_TYPE_DEFAULT";
+ case FILTER_TYPE_ALL_ACCOUNTS:
+ return "FILTER_TYPE_ALL_ACCOUNTS";
+ case FILTER_TYPE_CUSTOM:
+ return "FILTER_TYPE_CUSTOM";
+ case FILTER_TYPE_STARRED:
+ return "FILTER_TYPE_STARRED";
+ case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+ return "FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY";
+ case FILTER_TYPE_SINGLE_CONTACT:
+ return "FILTER_TYPE_SINGLE_CONTACT";
+ case FILTER_TYPE_ACCOUNT:
+ return "FILTER_TYPE_ACCOUNT";
+ case FILTER_TYPE_GROUP_MEMBERS:
+ return "FILTER_TYPE_GROUP_MEMBERS";
+ case FILTER_TYPE_DEVICE_CONTACTS:
+ return "FILTER_TYPE_DEVICE_CONTACTS";
+ default:
+ return "(unknown)";
+ }
+ }
+
+ public boolean isSyncable() {
+ return isGoogleAccountType() && filterType == FILTER_TYPE_ACCOUNT;
+ }
+
+ /**
+ * Returns true if this ContactListFilter contains at least one Google account.
+ * (see {@link #isGoogleAccountType)
+ */
+ public boolean isSyncable(List<AccountWithDataSet> accounts) {
+ if (isSyncable()) {
+ return true;
+ }
+ // Since we don't know which group is selected until the actual contacts loading, we
+ // consider a custom filter syncable as long as there is a Google account on the device,
+ // and don't check if there is any group that belongs to a Google account is selected.
+ if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+ || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+ || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
+ if (accounts != null && accounts.size() > 0) {
+ // If we're showing all contacts and there is any Google account on the device then
+ // we're syncable.
+ for (AccountWithDataSet account : accounts) {
+ if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
+ && account.dataSet == null) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean shouldShowSyncState() {
+ return (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT)
+ || filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+ || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+ || filterType == ContactListFilter.FILTER_TYPE_DEFAULT;
+ }
+
+ /**
+ * Returns the Google accounts (see {@link #isGoogleAccountType) for this ContactListFilter.
+ */
+ public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
+ final List<Account> syncableAccounts = new ArrayList<>();
+
+ if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+ syncableAccounts.add(new Account(accountName, accountType));
+ } else if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+ || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+ || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
+ if (accounts != null && accounts.size() > 0) {
+ for (AccountWithDataSet account : accounts) {
+ if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
+ && account.dataSet == null) {
+ syncableAccounts.add(new Account(account.name, account.type));
+ }
+ }
+ }
+ }
+ return syncableAccounts;
+ }
+
+ /**
+ * Returns true if this ContactListFilter is Google account type. (i.e. where
+ * accountType = "com.google" and dataSet = null)
+ */
+ public boolean isGoogleAccountType() {
+ return GoogleAccountType.ACCOUNT_TYPE.equals(accountType) && dataSet == null;
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
new file mode 100644
index 000000000..df818322e
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Manages {@link ContactListFilter}. All methods must be called from UI thread.
+ */
+public abstract class ContactListFilterController {
+
+ // singleton to cache the filter controller
+ private static ContactListFilterControllerImpl sFilterController = null;
+
+ public interface ContactListFilterListener {
+ void onContactListFilterChanged();
+ }
+
+ public static ContactListFilterController getInstance(Context context) {
+ // We may need to synchronize this in the future if background task will call this.
+ if (sFilterController == null) {
+ sFilterController = new ContactListFilterControllerImpl(context);
+ }
+ return sFilterController;
+ }
+
+ public abstract void addListener(ContactListFilterListener listener);
+
+ public abstract void removeListener(ContactListFilterListener listener);
+
+ /**
+ * Return the currently-active filter.
+ */
+ public abstract ContactListFilter getFilter();
+
+ public abstract int getFilterListType();
+
+ /** Whether the persisted filter is a custom filter. */
+ public abstract boolean isCustomFilterPersisted();
+
+ /** Returns the persisted filter. */
+ public abstract ContactListFilter getPersistedFilter();
+
+ /**
+ * @param filter the filter
+ * @param persistent True when the given filter should be saved soon. False when the filter
+ * should not be saved. The latter case may happen when some Intent requires a certain type of
+ * UI (e.g. single contact) temporarily.
+ */
+ public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
+
+ public abstract void selectCustomFilter();
+
+ /**
+ * Checks if the current filter is valid and reset the filter if not. It may happen when
+ * an account is removed while the filter points to the account with
+ * {@link ContactListFilter#FILTER_TYPE_ACCOUNT} type, for example. It may also happen if
+ * the current filter is {@link ContactListFilter#FILTER_TYPE_SINGLE_CONTACT}, in
+ * which case, we should switch to the last saved filter in {@link SharedPreferences}.
+ */
+ public abstract void checkFilterValidity(boolean notifyListeners);
+}
+
+/**
+ * Stores the {@link ContactListFilter} selected by the user and saves it to
+ * {@link SharedPreferences} if necessary.
+ */
+class ContactListFilterControllerImpl extends ContactListFilterController {
+ private final Context mContext;
+ private final List<ContactListFilterListener> mListeners =
+ new ArrayList<ContactListFilterListener>();
+ private ContactListFilter mFilter;
+
+ public ContactListFilterControllerImpl(Context context) {
+ mContext = context.getApplicationContext();
+ mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
+ checkFilterValidity(true /* notify listeners */);
+ }
+
+ @Override
+ public void addListener(ContactListFilterListener listener) {
+ mListeners.add(listener);
+ }
+
+ @Override
+ public void removeListener(ContactListFilterListener listener) {
+ mListeners.remove(listener);
+ }
+
+ @Override
+ public ContactListFilter getFilter() {
+ return mFilter;
+ }
+
+ @Override
+ public int getFilterListType() {
+ return mFilter == null ? ListEvent.ListType.UNKNOWN_LIST : mFilter.toListType();
+ }
+
+ @Override
+ public boolean isCustomFilterPersisted() {
+ final ContactListFilter filter = getPersistedFilter();
+ return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
+ }
+
+ @Override
+ public ContactListFilter getPersistedFilter() {
+ return ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
+ }
+
+ private SharedPreferences getSharedPreferences() {
+ return PreferenceManager.getDefaultSharedPreferences(mContext);
+ }
+
+ @Override
+ public void setContactListFilter(ContactListFilter filter, boolean persistent) {
+ setContactListFilter(filter, persistent, /* notifyListeners */ true);
+ }
+
+ private void setContactListFilter(ContactListFilter filter, boolean persistent,
+ boolean notifyListeners) {
+ if (!filter.equals(mFilter)) {
+ mFilter = filter;
+ if (persistent) {
+ ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
+ }
+ if (notifyListeners && !mListeners.isEmpty()) {
+ notifyContactListFilterChanged();
+ }
+ }
+ }
+
+ @Override
+ public void selectCustomFilter() {
+ setContactListFilter(ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_CUSTOM), /* persistent */ true);
+ }
+
+ private void notifyContactListFilterChanged() {
+ for (ContactListFilterListener listener : mListeners) {
+ listener.onContactListFilterChanged();
+ }
+ }
+
+ @Override
+ public void checkFilterValidity(boolean notifyListeners) {
+ if (mFilter == null) {
+ return;
+ }
+
+ switch (mFilter.filterType) {
+ case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT:
+ setContactListFilter(
+ ContactListFilter.restoreDefaultPreferences(getSharedPreferences()),
+ false, notifyListeners);
+ break;
+ case ContactListFilter.FILTER_TYPE_ACCOUNT:
+ if (!filterAccountExists()) {
+ // The current account filter points to invalid account. Use "all" filter
+ // instead.
+ setContactListFilter(ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), true, notifyListeners);
+ }
+ break;
+ }
+ }
+
+ /**
+ * @return true if the Account for the current filter exists.
+ */
+ private boolean filterAccountExists() {
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(mContext);
+ final AccountWithDataSet filterAccount = new AccountWithDataSet(
+ mFilter.accountName, mFilter.accountType, mFilter.dataSet);
+ return accountTypeManager.exists(filterAccount);
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
new file mode 100644
index 000000000..d4b83c692
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -0,0 +1,164 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+
+/**
+ * Contact list filter parameters.
+ */
+public class ContactListFilterView extends LinearLayout {
+
+ private static final String TAG = ContactListFilterView.class.getSimpleName();
+
+ private ImageView mIcon;
+ private TextView mAccountType;
+ private TextView mAccountUserName;
+ private RadioButton mRadioButton;
+ private ContactListFilter mFilter;
+ private boolean mSingleAccount;
+
+ public ContactListFilterView(Context context) {
+ super(context);
+ }
+
+ public ContactListFilterView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void setContactListFilter(ContactListFilter filter) {
+ mFilter = filter;
+ }
+
+ public ContactListFilter getContactListFilter() {
+ return mFilter;
+ }
+
+ public void setSingleAccount(boolean flag) {
+ this.mSingleAccount = flag;
+ }
+
+ @Override
+ public void setActivated(boolean activated) {
+ super.setActivated(activated);
+ if (mRadioButton != null) {
+ mRadioButton.setChecked(activated);
+ } else {
+ // We're guarding against null-pointer exceptions,
+ // but otherwise this code is not expected to work
+ // properly if the button hasn't been initialized.
+ Log.wtf(TAG, "radio-button cannot be activated because it is null");
+ }
+ setContentDescription(generateContentDescription());
+ }
+
+ public boolean isChecked() {
+ return mRadioButton.isChecked();
+ }
+
+ public void bindView(AccountTypeManager accountTypes) {
+ if (mAccountType == null) {
+ mIcon = (ImageView) findViewById(R.id.icon);
+ mAccountType = (TextView) findViewById(R.id.accountType);
+ mAccountUserName = (TextView) findViewById(R.id.accountUserName);
+ mRadioButton = (RadioButton) findViewById(R.id.radioButton);
+ mRadioButton.setChecked(isActivated());
+ }
+
+ if (mFilter == null) {
+ mAccountType.setText(R.string.contactsList);
+ return;
+ }
+
+ mAccountUserName.setVisibility(View.GONE);
+ switch (mFilter.filterType) {
+ case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
+ bindView(0, R.string.list_filter_all_accounts);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_STARRED: {
+ bindView(R.drawable.quantum_ic_star_vd_theme_24, R.string.list_filter_all_starred);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_CUSTOM: {
+ bindView(0, R.string.list_filter_customize);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+ bindView(0, R.string.list_filter_phones);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
+ bindView(0, R.string.list_filter_single);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+ mAccountUserName.setVisibility(View.VISIBLE);
+ mIcon.setVisibility(View.VISIBLE);
+ if (mFilter.icon != null) {
+ mIcon.setImageDrawable(mFilter.icon);
+ } else {
+ mIcon.setImageResource(R.drawable.unknown_source);
+ }
+ final AccountType accountType =
+ accountTypes.getAccountType(mFilter.accountType, mFilter.dataSet);
+ mAccountUserName.setText(mFilter.accountName);
+ mAccountType.setText(accountType.getDisplayLabel(getContext()));
+ break;
+ }
+ }
+ setContentDescription(generateContentDescription());
+ }
+
+ private void bindView(int iconResource, int textResource) {
+ if (iconResource != 0) {
+ mIcon.setVisibility(View.VISIBLE);
+ mIcon.setImageResource(iconResource);
+ } else {
+ mIcon.setVisibility(View.GONE);
+ }
+
+ mAccountType.setText(textResource);
+ }
+
+ String generateContentDescription() {
+ final StringBuilder sb = new StringBuilder();
+ if (!TextUtils.isEmpty(mAccountType.getText())) {
+ sb.append(mAccountType.getText());
+ }
+ if (!TextUtils.isEmpty(mAccountUserName.getText())) {
+ if (sb.length() > 0) {
+ sb.append(" ");
+ }
+ sb.append(mAccountUserName.getText());
+ }
+ return getContext().getString(isActivated() ? R.string.account_filter_view_checked :
+ R.string.account_filter_view_not_checked, sb.toString());
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
new file mode 100644
index 000000000..4f42a0f69
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -0,0 +1,1896 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.database.CharArrayBuffer;
+import android.database.Cursor;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.SearchSnippets;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.res.ResourcesCompat;
+import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v7.widget.AppCompatCheckBox;
+import android.support.v7.widget.AppCompatImageButton;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView.SelectionBoundsAdjuster;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPresenceIconUtil;
+import com.android.contacts.ContactStatusUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.format.TextHighlighter;
+import com.android.contacts.util.ContactDisplayUtils;
+import com.android.contacts.util.SearchUtil;
+import com.android.contacts.util.ViewUtil;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A custom view for an item in the contact list.
+ * The view contains the contact's photo, a set of text views (for name, status, etc...) and
+ * icons for presence and call.
+ * The view uses no XML file for layout and all the measurements and layouts are done
+ * in the onMeasure and onLayout methods.
+ *
+ * The layout puts the contact's photo on the right side of the view, the call icon (if present)
+ * to the left of the photo, the text lines are aligned to the left and the presence icon (if
+ * present) is set to the left of the status line.
+ *
+ * The layout also supports a header (used as a header of a group of contacts) that is above the
+ * contact's data and a divider between contact view.
+ */
+
+public class ContactListItemView extends ViewGroup
+ implements SelectionBoundsAdjuster {
+
+ private static final String TAG = "ContactListItemView";
+
+ // Style values for layout and appearance
+ // The initialized values are defaults if none is provided through xml.
+ private int mPreferredHeight = 0;
+ private int mGapBetweenImageAndText = 0;
+ private int mGapBetweenIndexerAndImage = 0;
+ private int mGapBetweenLabelAndData = 0;
+ private int mPresenceIconMargin = 4;
+ private int mPresenceIconSize = 16;
+ private int mTextIndent = 0;
+ private int mTextOffsetTop;
+ private int mAvatarOffsetTop;
+ private int mNameTextViewTextSize;
+ private int mHeaderWidth;
+ private Drawable mActivatedBackgroundDrawable;
+ private int mVideoCallIconSize = 32;
+ private int mVideoCallIconMargin = 16;
+ private int mGapFromScrollBar = 20;
+
+ // Set in onLayout. Represent left and right position of the View on the screen.
+ private int mLeftOffset;
+ private int mRightOffset;
+
+ /**
+ * Used with {@link #mLabelView}, specifying the width ratio between label and data.
+ */
+ private int mLabelViewWidthWeight = 3;
+ /**
+ * Used with {@link #mDataView}, specifying the width ratio between label and data.
+ */
+ private int mDataViewWidthWeight = 5;
+
+ protected static class HighlightSequence {
+ private final int start;
+ private final int end;
+
+ HighlightSequence(int start, int end) {
+ this.start = start;
+ this.end = end;
+ }
+ }
+
+ private ArrayList<HighlightSequence> mNameHighlightSequence;
+ private ArrayList<HighlightSequence> mNumberHighlightSequence;
+
+ // Highlighting prefix for names.
+ private String mHighlightedPrefix;
+
+ /**
+ * Used to notify listeners when a video call icon is clicked.
+ */
+ private PhoneNumberListAdapter.Listener mPhoneNumberListAdapterListener;
+
+ /**
+ * Indicates whether to show the "video call" icon, used to initiate a video call.
+ */
+ private boolean mShowVideoCallIcon = false;
+
+ /**
+ * Indicates whether the view should leave room for the "video call" icon.
+ */
+ private boolean mSupportVideoCallIcon = false;
+
+ /**
+ * Where to put contact photo. This affects the other Views' layout or look-and-feel.
+ *
+ * TODO: replace enum with int constants
+ */
+ public enum PhotoPosition {
+ LEFT,
+ RIGHT
+ }
+
+ static public final 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);
+ }
+ }
+
+ private PhotoPosition mPhotoPosition = getDefaultPhotoPosition(false /* normal/non opposite */);
+
+ // Header layout data
+ private View mHeaderView;
+ private boolean mIsSectionHeaderEnabled;
+
+ // The views inside the contact view
+ private boolean mQuickContactEnabled = true;
+ private QuickContactBadge mQuickContact;
+ private ImageView mPhotoView;
+ private TextView mNameTextView;
+ private TextView mPhoneticNameTextView;
+ private TextView mLabelView;
+ private TextView mDataView;
+ private TextView mSnippetView;
+ private TextView mStatusView;
+ private ImageView mPresenceIcon;
+ private AppCompatCheckBox mCheckBox;
+ private AppCompatImageButton mDeleteImageButton;
+ private ImageView mVideoCallIcon;
+ private ImageView mWorkProfileIcon;
+
+ private ColorStateList mSecondaryTextColor;
+
+ private int mDefaultPhotoViewSize = 0;
+ /**
+ * Can be effective even when {@link #mPhotoView} is null, as we want to have horizontal padding
+ * to align other data in this View.
+ */
+ private int mPhotoViewWidth;
+ /**
+ * Can be effective even when {@link #mPhotoView} is null, as we want to have vertical padding.
+ */
+ private int mPhotoViewHeight;
+
+ /**
+ * Only effective when {@link #mPhotoView} is null.
+ * When true all the Views on the right side of the photo should have horizontal padding on
+ * those left assuming there is a photo.
+ */
+ private boolean mKeepHorizontalPaddingForPhotoView;
+ /**
+ * Only effective when {@link #mPhotoView} is null.
+ */
+ private boolean mKeepVerticalPaddingForPhotoView;
+
+ /**
+ * True when {@link #mPhotoViewWidth} and {@link #mPhotoViewHeight} are ready for being used.
+ * False indicates those values should be updated before being used in position calculation.
+ */
+ private boolean mPhotoViewWidthAndHeightAreReady = false;
+
+ private int mNameTextViewHeight;
+ private int mNameTextViewTextColor = Color.BLACK;
+ private int mPhoneticNameTextViewHeight;
+ private int mLabelViewHeight;
+ private int mDataViewHeight;
+ private int mSnippetTextViewHeight;
+ private int mStatusTextViewHeight;
+ private int mCheckBoxHeight;
+ private int mCheckBoxWidth;
+ private int mDeleteImageButtonHeight;
+ private int mDeleteImageButtonWidth;
+
+ // Holds Math.max(mLabelTextViewHeight, mDataViewHeight), assuming Label and Data share the
+ // same row.
+ private int mLabelAndDataViewMaxHeight;
+
+ // TODO: some TextView fields are using CharArrayBuffer while some are not. Determine which is
+ // more efficient for each case or in general, and simplify the whole implementation.
+ // Note: if we're sure MARQUEE will be used every time, there's no reason to use
+ // CharArrayBuffer, since MARQUEE requires Span and thus we need to copy characters inside the
+ // buffer to Spannable once, while CharArrayBuffer is for directly applying char array to
+ // TextView without any modification.
+ private final CharArrayBuffer mDataBuffer = new CharArrayBuffer(128);
+ private final CharArrayBuffer mPhoneticNameBuffer = new CharArrayBuffer(128);
+
+ private boolean mActivatedStateSupported;
+ private boolean mAdjustSelectionBoundsEnabled = true;
+
+ private Rect mBoundsWithoutHeader = new Rect();
+
+ /** A helper used to highlight a prefix in a text field. */
+ private final TextHighlighter mTextHighlighter;
+ private CharSequence mUnknownNameText;
+ private int mPosition;
+
+ public ContactListItemView(Context context) {
+ super(context);
+
+ mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+ mNameHighlightSequence = new ArrayList<HighlightSequence>();
+ mNumberHighlightSequence = new ArrayList<HighlightSequence>();
+ }
+
+ public ContactListItemView(Context context, AttributeSet attrs, boolean supportVideoCallIcon) {
+ this(context, attrs);
+
+ mSupportVideoCallIcon = supportVideoCallIcon;
+ }
+
+ public ContactListItemView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ TypedArray a;
+
+ if (R.styleable.ContactListItemView != null) {
+ // Read all style values
+ a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
+ mPreferredHeight = a.getDimensionPixelSize(
+ R.styleable.ContactListItemView_list_item_height, mPreferredHeight);
+ mActivatedBackgroundDrawable = a.getDrawable(
+ R.styleable.ContactListItemView_activated_background);
+
+ mGapBetweenImageAndText = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_gap_between_image_and_text,
+ mGapBetweenImageAndText);
+ mGapBetweenIndexerAndImage = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_gap_between_indexer_and_image,
+ mGapBetweenIndexerAndImage);
+ mGapBetweenLabelAndData = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_gap_between_label_and_data,
+ mGapBetweenLabelAndData);
+ mPresenceIconMargin = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_presence_icon_margin,
+ mPresenceIconMargin);
+ mPresenceIconSize = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_presence_icon_size,
+ mPresenceIconSize);
+ mDefaultPhotoViewSize = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_photo_size, mDefaultPhotoViewSize);
+ mTextIndent = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_text_indent, mTextIndent);
+ mTextOffsetTop = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_text_offset_top, mTextOffsetTop);
+ mAvatarOffsetTop = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_avatar_offset_top, mAvatarOffsetTop);
+ mDataViewWidthWeight = a.getInteger(
+ R.styleable.ContactListItemView_list_item_data_width_weight,
+ mDataViewWidthWeight);
+ mLabelViewWidthWeight = a.getInteger(
+ R.styleable.ContactListItemView_list_item_label_width_weight,
+ mLabelViewWidthWeight);
+ mNameTextViewTextColor = a.getColor(
+ R.styleable.ContactListItemView_list_item_name_text_color,
+ mNameTextViewTextColor);
+ mNameTextViewTextSize = (int) a.getDimension(
+ R.styleable.ContactListItemView_list_item_name_text_size,
+ (int) getResources().getDimension(R.dimen.contact_browser_list_item_text_size));
+ mVideoCallIconSize = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_video_call_icon_size,
+ mVideoCallIconSize);
+ mVideoCallIconMargin = a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_video_call_icon_margin,
+ mVideoCallIconMargin);
+
+
+ setPaddingRelative(
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_left, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_top, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_right, 0),
+ a.getDimensionPixelOffset(
+ R.styleable.ContactListItemView_list_item_padding_bottom, 0));
+
+ a.recycle();
+ }
+
+ mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+
+ if (R.styleable.Theme != null) {
+ a = getContext().obtainStyledAttributes(R.styleable.Theme);
+ mSecondaryTextColor = a.getColorStateList(R.styleable.Theme_android_textColorSecondary);
+ a.recycle();
+ }
+
+ mHeaderWidth =
+ getResources().getDimensionPixelSize(R.dimen.contact_list_section_header_width);
+
+ if (mActivatedBackgroundDrawable != null) {
+ mActivatedBackgroundDrawable.setCallback(this);
+ }
+
+ mNameHighlightSequence = new ArrayList<HighlightSequence>();
+ mNumberHighlightSequence = new ArrayList<HighlightSequence>();
+
+ setLayoutDirection(View.LAYOUT_DIRECTION_LOCALE);
+ }
+
+ public void setUnknownNameText(CharSequence unknownNameText) {
+ mUnknownNameText = unknownNameText;
+ }
+
+ public void setQuickContactEnabled(boolean flag) {
+ mQuickContactEnabled = flag;
+ }
+
+ /**
+ * Sets whether the video calling icon is shown. For the video calling icon to be shown,
+ * {@link #mSupportVideoCallIcon} must be {@code true}.
+ *
+ * @param showVideoCallIcon {@code true} if the video calling icon is shown, {@code false}
+ * otherwise.
+ * @param listener Listener to notify when the video calling icon is clicked.
+ * @param position The position in the adapater of the video calling icon.
+ */
+ public void setShowVideoCallIcon(boolean showVideoCallIcon,
+ PhoneNumberListAdapter.Listener listener, int position) {
+ mShowVideoCallIcon = showVideoCallIcon;
+ mPhoneNumberListAdapterListener = listener;
+ mPosition = position;
+
+ if (mShowVideoCallIcon) {
+ if (mVideoCallIcon == null) {
+ mVideoCallIcon = new ImageView(getContext());
+ addView(mVideoCallIcon);
+ }
+ mVideoCallIcon.setContentDescription(getContext().getString(
+ R.string.description_search_video_call));
+ mVideoCallIcon.setImageResource(R.drawable.quantum_ic_videocam_vd_theme_24);
+ mVideoCallIcon.setScaleType(ScaleType.CENTER);
+ mVideoCallIcon.setVisibility(View.VISIBLE);
+ mVideoCallIcon.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // Inform the adapter that the video calling icon was clicked.
+ if (mPhoneNumberListAdapterListener != null) {
+ mPhoneNumberListAdapterListener.onVideoCallIconClicked(mPosition);
+ }
+ }
+ });
+ } else {
+ if (mVideoCallIcon != null) {
+ mVideoCallIcon.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ /**
+ * Sets whether the view supports a video calling icon. This is independent of whether the view
+ * is actually showing an icon. Support for the video calling icon ensures that the layout
+ * leaves space for the video icon, should it be shown.
+ *
+ * @param supportVideoCallIcon {@code true} if the video call icon is supported, {@code false}
+ * otherwise.
+ */
+ public void setSupportVideoCallIcon(boolean supportVideoCallIcon) {
+ mSupportVideoCallIcon = supportVideoCallIcon;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ // We will match parent's width and wrap content vertically, but make sure
+ // height is no less than listPreferredItemHeight.
+ final int specWidth = resolveSize(0, widthMeasureSpec);
+ final int preferredHeight = mPreferredHeight;
+
+ mNameTextViewHeight = 0;
+ mPhoneticNameTextViewHeight = 0;
+ mLabelViewHeight = 0;
+ mDataViewHeight = 0;
+ mLabelAndDataViewMaxHeight = 0;
+ mSnippetTextViewHeight = 0;
+ mStatusTextViewHeight = 0;
+ mCheckBoxWidth = 0;
+ mCheckBoxHeight = 0;
+ mDeleteImageButtonWidth = 0;
+ mDeleteImageButtonHeight = 0;
+
+ ensurePhotoViewSize();
+
+ // Width each TextView is able to use.
+ int effectiveWidth;
+ // All the other Views will honor the photo, so available width for them may be shrunk.
+ if (mPhotoViewWidth > 0 || mKeepHorizontalPaddingForPhotoView) {
+ effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight()
+ - (mPhotoViewWidth + mGapBetweenImageAndText + mGapBetweenIndexerAndImage);
+ } else {
+ effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight();
+ }
+
+ if (mIsSectionHeaderEnabled) {
+ effectiveWidth -= mHeaderWidth;
+ }
+
+ if (mSupportVideoCallIcon) {
+ effectiveWidth -= (mVideoCallIconSize + mVideoCallIconMargin);
+ }
+
+ // 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.
+
+ if (isVisible(mCheckBox)) {
+ mCheckBox.measure(
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mCheckBoxWidth = mCheckBox.getMeasuredWidth();
+ mCheckBoxHeight = mCheckBox.getMeasuredHeight();
+ effectiveWidth -= mCheckBoxWidth + mGapBetweenImageAndText;
+ }
+
+ if (isVisible(mDeleteImageButton)) {
+ mDeleteImageButton.measure(
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mDeleteImageButtonWidth = mDeleteImageButton.getMeasuredWidth();
+ mDeleteImageButtonHeight = mDeleteImageButton.getMeasuredHeight();
+ effectiveWidth -= mDeleteImageButtonWidth + mGapBetweenImageAndText;
+ }
+
+ if (isVisible(mNameTextView)) {
+ // Calculate width for name text - this parallels similar measurement in onLayout.
+ int nameTextWidth = effectiveWidth;
+ if (mPhotoPosition != PhotoPosition.LEFT) {
+ nameTextWidth -= mTextIndent;
+ }
+ mNameTextView.measure(
+ MeasureSpec.makeMeasureSpec(nameTextWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mNameTextViewHeight = mNameTextView.getMeasuredHeight();
+ }
+
+ if (isVisible(mPhoneticNameTextView)) {
+ mPhoneticNameTextView.measure(
+ MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mPhoneticNameTextViewHeight = mPhoneticNameTextView.getMeasuredHeight();
+ }
+
+ // If both data (phone number/email address) and label (type like "MOBILE") are quite long,
+ // we should ellipsize both using appropriate ratio.
+ final int dataWidth;
+ final int labelWidth;
+ if (isVisible(mDataView)) {
+ if (isVisible(mLabelView)) {
+ final int totalWidth = effectiveWidth - mGapBetweenLabelAndData;
+ dataWidth = ((totalWidth * mDataViewWidthWeight)
+ / (mDataViewWidthWeight + mLabelViewWidthWeight));
+ labelWidth = ((totalWidth * mLabelViewWidthWeight) /
+ (mDataViewWidthWeight + mLabelViewWidthWeight));
+ } else {
+ dataWidth = effectiveWidth;
+ labelWidth = 0;
+ }
+ } else {
+ dataWidth = 0;
+ if (isVisible(mLabelView)) {
+ labelWidth = effectiveWidth;
+ } else {
+ labelWidth = 0;
+ }
+ }
+
+ if (isVisible(mDataView)) {
+ mDataView.measure(MeasureSpec.makeMeasureSpec(dataWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mDataViewHeight = mDataView.getMeasuredHeight();
+ }
+
+ if (isVisible(mLabelView)) {
+ mLabelView.measure(MeasureSpec.makeMeasureSpec(labelWidth, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mLabelViewHeight = mLabelView.getMeasuredHeight();
+ }
+ mLabelAndDataViewMaxHeight = Math.max(mLabelViewHeight, mDataViewHeight);
+
+ if (isVisible(mSnippetView)) {
+ mSnippetView.measure(
+ MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mSnippetTextViewHeight = mSnippetView.getMeasuredHeight();
+ }
+
+ // Status view height is the biggest of the text view and the presence icon
+ if (isVisible(mPresenceIcon)) {
+ mPresenceIcon.measure(
+ MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY));
+ mStatusTextViewHeight = mPresenceIcon.getMeasuredHeight();
+ }
+
+ if (mSupportVideoCallIcon && isVisible(mVideoCallIcon)) {
+ mVideoCallIcon.measure(
+ MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY));
+ }
+
+ if (isVisible(mWorkProfileIcon)) {
+ mWorkProfileIcon.measure(
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mNameTextViewHeight =
+ Math.max(mNameTextViewHeight, mWorkProfileIcon.getMeasuredHeight());
+ }
+
+ if (isVisible(mStatusView)) {
+ // Presence and status are in a same row, so status will be affected by icon size.
+ final int statusWidth;
+ if (isVisible(mPresenceIcon)) {
+ statusWidth = (effectiveWidth - mPresenceIcon.getMeasuredWidth()
+ - mPresenceIconMargin);
+ } else {
+ statusWidth = effectiveWidth;
+ }
+ mStatusView.measure(MeasureSpec.makeMeasureSpec(statusWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ mStatusTextViewHeight =
+ Math.max(mStatusTextViewHeight, mStatusView.getMeasuredHeight());
+ }
+
+ // Calculate height including padding.
+ int height = (mNameTextViewHeight + mPhoneticNameTextViewHeight +
+ mLabelAndDataViewMaxHeight +
+ mSnippetTextViewHeight + mStatusTextViewHeight);
+
+ // Make sure the height is at least as high as the photo
+ height = Math.max(height, mPhotoViewHeight + getPaddingBottom() + getPaddingTop());
+
+ // Make sure height is at least the preferred height
+ height = Math.max(height, preferredHeight);
+
+ // Measure the header if it is visible.
+ if (mHeaderView != null && mHeaderView.getVisibility() == VISIBLE) {
+ mHeaderView.measure(
+ MeasureSpec.makeMeasureSpec(mHeaderWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+ }
+
+ setMeasuredDimension(specWidth, height);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ final int height = bottom - top;
+ final int width = right - left;
+
+ // Determine the vertical bounds by laying out the header first.
+ int topBound = 0;
+ int bottomBound = height;
+ int leftBound = getPaddingLeft();
+ int rightBound = width - getPaddingRight();
+
+ final boolean isLayoutRtl = ViewUtil.isViewLayoutRtl(this);
+
+ // Put the section header on the left side of the contact view.
+ if (mIsSectionHeaderEnabled) {
+ if (mHeaderView != null) {
+ int headerHeight = mHeaderView.getMeasuredHeight();
+ int headerTopBound = (bottomBound + topBound - headerHeight) / 2 + mTextOffsetTop;
+
+ mHeaderView.layout(
+ isLayoutRtl ? rightBound - mHeaderWidth : leftBound,
+ headerTopBound,
+ isLayoutRtl ? rightBound : leftBound + mHeaderWidth,
+ headerTopBound + headerHeight);
+ }
+ if (isLayoutRtl) {
+ rightBound -= mHeaderWidth;
+ } else {
+ leftBound += mHeaderWidth;
+ }
+ }
+
+ mBoundsWithoutHeader.set(left + leftBound, topBound, left + rightBound, bottomBound);
+ mLeftOffset = left + leftBound;
+ mRightOffset = left + rightBound;
+ if (isLayoutRtl) {
+ rightBound -= mGapBetweenIndexerAndImage;
+ } else {
+ leftBound += mGapBetweenIndexerAndImage;
+ }
+
+ if (mActivatedStateSupported && isActivated()) {
+ mActivatedBackgroundDrawable.setBounds(mBoundsWithoutHeader);
+ }
+
+ if (isVisible(mCheckBox)) {
+ final int photoTop = topBound + (bottomBound - topBound - mCheckBoxHeight) / 2;
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ mCheckBox.layout(rightBound - mGapFromScrollBar - mCheckBoxWidth,
+ photoTop,
+ rightBound - mGapFromScrollBar,
+ photoTop + mCheckBoxHeight);
+ } else {
+ mCheckBox.layout(leftBound + mGapFromScrollBar,
+ photoTop,
+ leftBound + mGapFromScrollBar + mCheckBoxWidth,
+ photoTop + mCheckBoxHeight);
+ }
+ }
+
+ if (isVisible(mDeleteImageButton)) {
+ final int photoTop = topBound + (bottomBound - topBound - mDeleteImageButtonHeight) / 2;
+ final int mDeleteImageButtonSize = mDeleteImageButtonHeight > mDeleteImageButtonWidth
+ ? mDeleteImageButtonHeight : mDeleteImageButtonWidth;
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ mDeleteImageButton.layout(rightBound - mDeleteImageButtonSize,
+ photoTop,
+ rightBound,
+ photoTop + mDeleteImageButtonSize);
+ rightBound -= mDeleteImageButtonSize;
+ } else {
+ mDeleteImageButton.layout(leftBound,
+ photoTop,
+ leftBound + mDeleteImageButtonSize,
+ photoTop + mDeleteImageButtonSize);
+ leftBound += mDeleteImageButtonSize;
+ }
+ }
+
+ final View photoView = mQuickContact != null ? mQuickContact : mPhotoView;
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ // Photo is the left most view. All the other Views should on the right of the photo.
+ if (photoView != null) {
+ // Center the photo vertically
+ final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
+ + mAvatarOffsetTop;
+ photoView.layout(
+ leftBound,
+ photoTop,
+ leftBound + mPhotoViewWidth,
+ photoTop + mPhotoViewHeight);
+ leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
+ } else if (mKeepHorizontalPaddingForPhotoView) {
+ // Draw nothing but keep the padding.
+ leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
+ }
+ } else {
+ // Photo is the right most view. Right bound should be adjusted that way.
+ if (photoView != null) {
+ // Center the photo vertically
+ final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
+ + mAvatarOffsetTop;
+ photoView.layout(
+ rightBound - mPhotoViewWidth,
+ photoTop,
+ rightBound,
+ photoTop + mPhotoViewHeight);
+ rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
+ } else if (mKeepHorizontalPaddingForPhotoView) {
+ // Draw nothing but keep the padding.
+ rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
+ }
+
+ // Add indent between left-most padding and texts.
+ leftBound += mTextIndent;
+ }
+
+ if (mSupportVideoCallIcon) {
+ // Place the video call button at the end of the list (e.g. take into account RTL mode).
+ if (isVisible(mVideoCallIcon)) {
+ // Center the video icon vertically
+ final int videoIconTop = topBound +
+ (bottomBound - topBound - mVideoCallIconSize) / 2;
+
+ if (!isLayoutRtl) {
+ // When photo is on left, video icon is placed on the right edge.
+ mVideoCallIcon.layout(rightBound - mVideoCallIconSize,
+ videoIconTop,
+ rightBound,
+ videoIconTop + mVideoCallIconSize);
+ } else {
+ // When photo is on right, video icon is placed on the left edge.
+ mVideoCallIcon.layout(leftBound,
+ videoIconTop,
+ leftBound + mVideoCallIconSize,
+ videoIconTop + mVideoCallIconSize);
+ }
+ }
+
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ rightBound -= (mVideoCallIconSize + mVideoCallIconMargin);
+ } else {
+ leftBound += mVideoCallIconSize + mVideoCallIconMargin;
+ }
+ }
+
+
+ // Center text vertically, then apply the top offset.
+ final int totalTextHeight = mNameTextViewHeight + mPhoneticNameTextViewHeight +
+ mLabelAndDataViewMaxHeight + mSnippetTextViewHeight + mStatusTextViewHeight;
+ int textTopBound = (bottomBound + topBound - totalTextHeight) / 2 + mTextOffsetTop;
+
+ // Work Profile icon align top
+ int workProfileIconWidth = 0;
+ if (isVisible(mWorkProfileIcon)) {
+ workProfileIconWidth = mWorkProfileIcon.getMeasuredWidth();
+ final int distanceFromEnd = mCheckBoxWidth > 0
+ ? mCheckBoxWidth + mGapBetweenImageAndText : 0;
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ // When photo is on left, label is placed on the right edge of the list item.
+ mWorkProfileIcon.layout(rightBound - workProfileIconWidth - distanceFromEnd,
+ textTopBound,
+ rightBound - distanceFromEnd,
+ textTopBound + mNameTextViewHeight);
+ } else {
+ // When photo is on right, label is placed on the left of data view.
+ mWorkProfileIcon.layout(leftBound + distanceFromEnd,
+ textTopBound,
+ leftBound + workProfileIconWidth + distanceFromEnd,
+ textTopBound + mNameTextViewHeight);
+ }
+ }
+
+ // Layout all text view and presence icon
+ // Put name TextView first
+ if (isVisible(mNameTextView)) {
+ final int distanceFromEnd = workProfileIconWidth
+ + (mCheckBoxWidth > 0 ? mCheckBoxWidth + mGapBetweenImageAndText : 0);
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ mNameTextView.layout(leftBound,
+ textTopBound,
+ rightBound - distanceFromEnd,
+ textTopBound + mNameTextViewHeight);
+ } else {
+ mNameTextView.layout(leftBound + distanceFromEnd,
+ textTopBound,
+ rightBound,
+ textTopBound + mNameTextViewHeight);
+ }
+ }
+
+ if (isVisible(mNameTextView) || isVisible(mWorkProfileIcon)) {
+ textTopBound += mNameTextViewHeight;
+ }
+
+ // Presence and status
+ if (isLayoutRtl) {
+ int statusRightBound = rightBound;
+ if (isVisible(mPresenceIcon)) {
+ int iconWidth = mPresenceIcon.getMeasuredWidth();
+ mPresenceIcon.layout(
+ rightBound - iconWidth,
+ textTopBound,
+ rightBound,
+ textTopBound + mStatusTextViewHeight);
+ statusRightBound -= (iconWidth + mPresenceIconMargin);
+ }
+
+ if (isVisible(mStatusView)) {
+ mStatusView.layout(leftBound,
+ textTopBound,
+ statusRightBound,
+ textTopBound + mStatusTextViewHeight);
+ }
+ } else {
+ int statusLeftBound = leftBound;
+ if (isVisible(mPresenceIcon)) {
+ int iconWidth = mPresenceIcon.getMeasuredWidth();
+ mPresenceIcon.layout(
+ leftBound,
+ textTopBound,
+ leftBound + iconWidth,
+ textTopBound + mStatusTextViewHeight);
+ statusLeftBound += (iconWidth + mPresenceIconMargin);
+ }
+
+ if (isVisible(mStatusView)) {
+ mStatusView.layout(statusLeftBound,
+ textTopBound,
+ rightBound,
+ textTopBound + mStatusTextViewHeight);
+ }
+ }
+
+ if (isVisible(mStatusView) || isVisible(mPresenceIcon)) {
+ textTopBound += mStatusTextViewHeight;
+ }
+
+ // Rest of text views
+ int dataLeftBound = leftBound;
+ if (isVisible(mPhoneticNameTextView)) {
+ mPhoneticNameTextView.layout(leftBound,
+ textTopBound,
+ rightBound,
+ textTopBound + mPhoneticNameTextViewHeight);
+ textTopBound += mPhoneticNameTextViewHeight;
+ }
+
+ // Label and Data align bottom.
+ if (isVisible(mLabelView)) {
+ if (!isLayoutRtl) {
+ mLabelView.layout(dataLeftBound,
+ textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
+ rightBound,
+ textTopBound + mLabelAndDataViewMaxHeight);
+ dataLeftBound += mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData;
+ } else {
+ dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
+ mLabelView.layout(rightBound - mLabelView.getMeasuredWidth(),
+ textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
+ rightBound,
+ textTopBound + mLabelAndDataViewMaxHeight);
+ rightBound -= (mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData);
+ }
+ }
+
+ if (isVisible(mDataView)) {
+ if (!isLayoutRtl) {
+ mDataView.layout(dataLeftBound,
+ textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
+ rightBound,
+ textTopBound + mLabelAndDataViewMaxHeight);
+ } else {
+ mDataView.layout(rightBound - mDataView.getMeasuredWidth(),
+ textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
+ rightBound,
+ textTopBound + mLabelAndDataViewMaxHeight);
+ }
+ }
+ if (isVisible(mLabelView) || isVisible(mDataView)) {
+ textTopBound += mLabelAndDataViewMaxHeight;
+ }
+
+ if (isVisible(mSnippetView)) {
+ mSnippetView.layout(leftBound,
+ textTopBound,
+ rightBound,
+ textTopBound + mSnippetTextViewHeight);
+ }
+ }
+
+ @Override
+ public void adjustListItemSelectionBounds(Rect bounds) {
+ if (mAdjustSelectionBoundsEnabled) {
+ bounds.top += mBoundsWithoutHeader.top;
+ bounds.bottom = bounds.top + mBoundsWithoutHeader.height();
+ bounds.left = mBoundsWithoutHeader.left;
+ bounds.right = mBoundsWithoutHeader.right;
+ }
+ }
+
+ protected boolean isVisible(View view) {
+ return view != null && view.getVisibility() == View.VISIBLE;
+ }
+
+ /**
+ * Extracts width and height from the style
+ */
+ private void ensurePhotoViewSize() {
+ if (!mPhotoViewWidthAndHeightAreReady) {
+ mPhotoViewWidth = mPhotoViewHeight = getDefaultPhotoViewSize();
+ if (!mQuickContactEnabled && mPhotoView == null) {
+ if (!mKeepHorizontalPaddingForPhotoView) {
+ mPhotoViewWidth = 0;
+ }
+ if (!mKeepVerticalPaddingForPhotoView) {
+ mPhotoViewHeight = 0;
+ }
+ }
+
+ mPhotoViewWidthAndHeightAreReady = true;
+ }
+ }
+
+ protected int getDefaultPhotoViewSize() {
+ return mDefaultPhotoViewSize;
+ }
+
+ /**
+ * Gets a LayoutParam that corresponds to the default photo size.
+ *
+ * @return A new LayoutParam.
+ */
+ private LayoutParams getDefaultPhotoLayoutParams() {
+ LayoutParams params = generateDefaultLayoutParams();
+ params.width = getDefaultPhotoViewSize();
+ params.height = params.width;
+ return params;
+ }
+
+ @Override
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+ if (mActivatedStateSupported) {
+ mActivatedBackgroundDrawable.setState(getDrawableState());
+ }
+ }
+
+ @Override
+ protected boolean verifyDrawable(Drawable who) {
+ return who == mActivatedBackgroundDrawable || super.verifyDrawable(who);
+ }
+
+ @Override
+ public void jumpDrawablesToCurrentState() {
+ super.jumpDrawablesToCurrentState();
+ if (mActivatedStateSupported) {
+ mActivatedBackgroundDrawable.jumpToCurrentState();
+ }
+ }
+
+ @Override
+ public void dispatchDraw(Canvas canvas) {
+ if (mActivatedStateSupported && isActivated()) {
+ mActivatedBackgroundDrawable.draw(canvas);
+ }
+
+ super.dispatchDraw(canvas);
+ }
+
+ /**
+ * Sets section header or makes it invisible if the title is null.
+ */
+ public void setSectionHeader(String title) {
+ if (title != null) {
+ // Empty section title is the favorites so show the star here.
+ if (title.isEmpty()) {
+ if (mHeaderView == null) {
+ addStarImageHeader();
+ } else if (mHeaderView instanceof TextView) {
+ removeView(mHeaderView);
+ addStarImageHeader();
+ } else {
+ mHeaderView.setVisibility(View.VISIBLE);
+ }
+ } else {
+ if (mHeaderView == null) {
+ addTextHeader(title);
+ } else if (mHeaderView instanceof ImageView) {
+ removeView(mHeaderView);
+ addTextHeader(title);
+ } else {
+ updateHeaderText((TextView) mHeaderView, title);
+ }
+ }
+ } else if (mHeaderView != null) {
+ mHeaderView.setVisibility(View.GONE);
+ }
+ }
+
+ private void addTextHeader(String title) {
+ mHeaderView = new TextView(getContext());
+ final TextView headerTextView = (TextView) mHeaderView;
+ headerTextView.setTextAppearance(getContext(), R.style.SectionHeaderStyle);
+ headerTextView.setGravity(Gravity.CENTER_HORIZONTAL);
+ updateHeaderText(headerTextView, title);
+ addView(headerTextView);
+ }
+
+ private void updateHeaderText(TextView headerTextView, String title) {
+ setMarqueeText(headerTextView, title);
+ headerTextView.setAllCaps(true);
+ if (ContactsSectionIndexer.BLANK_HEADER_STRING.equals(title)) {
+ headerTextView.setContentDescription(
+ getContext().getString(R.string.description_no_name_header));
+ } else {
+ headerTextView.setContentDescription(title);
+ }
+ headerTextView.setVisibility(View.VISIBLE);
+ }
+
+ private void addStarImageHeader() {
+ mHeaderView = new ImageView(getContext());
+ final ImageView headerImageView = (ImageView) mHeaderView;
+ headerImageView.setImageDrawable(
+ getResources().getDrawable(R.drawable.quantum_ic_star_vd_theme_24,
+ getContext().getTheme()));
+ headerImageView.setImageTintList(ColorStateList.valueOf(getResources()
+ .getColor(R.color.material_star_pink)));
+ headerImageView.setContentDescription(
+ getContext().getString(R.string.contactsFavoritesLabel));
+ headerImageView.setVisibility(View.VISIBLE);
+ addView(headerImageView);
+ }
+
+ public void setIsSectionHeaderEnabled(boolean isSectionHeaderEnabled) {
+ mIsSectionHeaderEnabled = isSectionHeaderEnabled;
+ }
+
+ /**
+ * Returns the quick contact badge, creating it if necessary.
+ */
+ public QuickContactBadge getQuickContact() {
+ if (!mQuickContactEnabled) {
+ throw new IllegalStateException("QuickContact is disabled for this view");
+ }
+ if (mQuickContact == null) {
+ mQuickContact = new QuickContactBadge(getContext());
+ if (CompatUtils.isLollipopCompatible()) {
+ mQuickContact.setOverlay(null);
+ }
+ mQuickContact.setLayoutParams(getDefaultPhotoLayoutParams());
+ if (mNameTextView != null) {
+ mQuickContact.setContentDescription(getContext().getString(
+ R.string.description_quick_contact_for, mNameTextView.getText()));
+ }
+
+ addView(mQuickContact);
+ mPhotoViewWidthAndHeightAreReady = false;
+ }
+ return mQuickContact;
+ }
+
+ /**
+ * Returns the photo view, creating it if necessary.
+ */
+ public ImageView getPhotoView() {
+ if (mPhotoView == null) {
+ mPhotoView = new ImageView(getContext());
+ mPhotoView.setLayoutParams(getDefaultPhotoLayoutParams());
+ // Quick contact style used above will set a background - remove it
+ mPhotoView.setBackground(null);
+ addView(mPhotoView);
+ mPhotoViewWidthAndHeightAreReady = false;
+ }
+ return mPhotoView;
+ }
+
+ /**
+ * Removes the photo view.
+ */
+ public void removePhotoView() {
+ removePhotoView(false, true);
+ }
+
+ /**
+ * Removes the photo view.
+ *
+ * @param keepHorizontalPadding True means data on the right side will have
+ * padding on left, pretending there is still a photo view.
+ * @param keepVerticalPadding True means the View will have some height
+ * enough for accommodating a photo view.
+ */
+ public void removePhotoView(boolean keepHorizontalPadding, boolean keepVerticalPadding) {
+ mPhotoViewWidthAndHeightAreReady = false;
+ mKeepHorizontalPaddingForPhotoView = keepHorizontalPadding;
+ mKeepVerticalPaddingForPhotoView = keepVerticalPadding;
+ if (mPhotoView != null) {
+ removeView(mPhotoView);
+ mPhotoView = null;
+ }
+ if (mQuickContact != null) {
+ removeView(mQuickContact);
+ mQuickContact = null;
+ }
+ }
+
+ /**
+ * Sets a word prefix that will be highlighted if encountered in fields like
+ * name and search snippet. This will disable the mask highlighting for names.
+ * <p>
+ * NOTE: must be all upper-case
+ */
+ public void setHighlightedPrefix(String upperCasePrefix) {
+ mHighlightedPrefix = upperCasePrefix;
+ }
+
+ /**
+ * Clears previously set highlight sequences for the view.
+ */
+ public void clearHighlightSequences() {
+ mNameHighlightSequence.clear();
+ mNumberHighlightSequence.clear();
+ mHighlightedPrefix = null;
+ }
+
+ /**
+ * Adds a highlight sequence to the name highlighter.
+ * @param start The start position of the highlight sequence.
+ * @param end The end position of the highlight sequence.
+ */
+ public void addNameHighlightSequence(int start, int end) {
+ mNameHighlightSequence.add(new HighlightSequence(start, end));
+ }
+
+ /**
+ * Adds a highlight sequence to the number highlighter.
+ * @param start The start position of the highlight sequence.
+ * @param end The end position of the highlight sequence.
+ */
+ public void addNumberHighlightSequence(int start, int end) {
+ mNumberHighlightSequence.add(new HighlightSequence(start, end));
+ }
+
+ /**
+ * Returns the text view for the contact name, creating it if necessary.
+ */
+ public TextView getNameTextView() {
+ if (mNameTextView == null) {
+ mNameTextView = new TextView(getContext());
+ mNameTextView.setSingleLine(true);
+ mNameTextView.setEllipsize(getTextEllipsis());
+ mNameTextView.setTextColor(ResourcesCompat.getColorStateList(getResources(),
+ R.color.contact_list_name_text_color, getContext().getTheme()));
+ mNameTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mNameTextViewTextSize);
+ // Manually call setActivated() since this view may be added after the first
+ // setActivated() call toward this whole item view.
+ mNameTextView.setActivated(isActivated());
+ 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);
+ }
+ addView(mNameTextView);
+ }
+ return mNameTextView;
+ }
+
+ /**
+ * Adds or updates a text view for the phonetic name.
+ */
+ public void setPhoneticName(char[] text, int size) {
+ if (text == null || size == 0) {
+ if (mPhoneticNameTextView != null) {
+ mPhoneticNameTextView.setVisibility(View.GONE);
+ }
+ } else {
+ getPhoneticNameTextView();
+ setMarqueeText(mPhoneticNameTextView, text, size);
+ mPhoneticNameTextView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the text view for the phonetic name, creating it if necessary.
+ */
+ public TextView getPhoneticNameTextView() {
+ if (mPhoneticNameTextView == null) {
+ mPhoneticNameTextView = new TextView(getContext());
+ mPhoneticNameTextView.setSingleLine(true);
+ mPhoneticNameTextView.setEllipsize(getTextEllipsis());
+ mPhoneticNameTextView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+ mPhoneticNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+ mPhoneticNameTextView.setTypeface(mPhoneticNameTextView.getTypeface(), Typeface.BOLD);
+ mPhoneticNameTextView.setActivated(isActivated());
+ mPhoneticNameTextView.setId(R.id.cliv_phoneticname_textview);
+ addView(mPhoneticNameTextView);
+ }
+ return mPhoneticNameTextView;
+ }
+
+ /**
+ * Adds or updates a text view for the data label.
+ */
+ public void setLabel(CharSequence text) {
+ if (TextUtils.isEmpty(text)) {
+ if (mLabelView != null) {
+ mLabelView.setVisibility(View.GONE);
+ }
+ } else {
+ getLabelView();
+ setMarqueeText(mLabelView, text);
+ mLabelView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Returns the text view for the data label, creating it if necessary.
+ */
+ public TextView getLabelView() {
+ if (mLabelView == null) {
+ mLabelView = new TextView(getContext());
+ mLabelView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
+ LayoutParams.WRAP_CONTENT));
+
+ mLabelView.setSingleLine(true);
+ mLabelView.setEllipsize(getTextEllipsis());
+ mLabelView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
+ if (mPhotoPosition == PhotoPosition.LEFT) {
+ mLabelView.setAllCaps(true);
+ } else {
+ mLabelView.setTypeface(mLabelView.getTypeface(), Typeface.BOLD);
+ }
+ mLabelView.setActivated(isActivated());
+ mLabelView.setId(R.id.cliv_label_textview);
+ addView(mLabelView);
+ }
+ return mLabelView;
+ }
+
+ /**
+ * Adds or updates a text view for the data element.
+ */
+ public void setData(char[] text, int size) {
+ if (text == null || size == 0) {
+ if (mDataView != null) {
+ mDataView.setVisibility(View.GONE);
+ }
+ } else {
+ getDataView();
+ setMarqueeText(mDataView, text, size);
+ mDataView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Sets phone number for a list item. This takes care of number highlighting if the highlight
+ * mask exists.
+ */
+ public void setPhoneNumber(String text, String countryIso) {
+ if (text == null) {
+ if (mDataView != null) {
+ mDataView.setVisibility(View.GONE);
+ }
+ } else {
+ getDataView();
+
+ // TODO: Format number using PhoneNumberUtils.formatNumber before assigning it to
+ // mDataView. Make sure that determination of the highlight sequences are done only
+ // after number formatting.
+
+ // Sets phone number texts for display after highlighting it, if applicable.
+ // CharSequence textToSet = text;
+ final SpannableString textToSet = new SpannableString(text);
+
+ if (mNumberHighlightSequence.size() != 0) {
+ final HighlightSequence highlightSequence = mNumberHighlightSequence.get(0);
+ mTextHighlighter.applyMaskingHighlight(textToSet, highlightSequence.start,
+ highlightSequence.end);
+ }
+
+ setMarqueeText(mDataView, textToSet);
+ mDataView.setVisibility(VISIBLE);
+
+ // We have a phone number as "mDataView" so make it always LTR and VIEW_START
+ mDataView.setTextDirection(View.TEXT_DIRECTION_LTR);
+ mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+ }
+ }
+
+ private void setMarqueeText(TextView textView, char[] text, int size) {
+ if (getTextEllipsis() == TruncateAt.MARQUEE) {
+ setMarqueeText(textView, new String(text, 0, size));
+ } else {
+ textView.setText(text, 0, size);
+ }
+ }
+
+ private void setMarqueeText(TextView textView, CharSequence text) {
+ if (getTextEllipsis() == TruncateAt.MARQUEE) {
+ // To show MARQUEE correctly (with END effect during non-active state), we need
+ // to build Spanned with MARQUEE in addition to TextView's ellipsize setting.
+ final SpannableString spannable = new SpannableString(text);
+ spannable.setSpan(TruncateAt.MARQUEE, 0, spannable.length(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ textView.setText(spannable);
+ } else {
+ textView.setText(text);
+ }
+ }
+
+ /**
+ * Returns the {@link AppCompatCheckBox} view, creating it if necessary.
+ */
+ public AppCompatCheckBox getCheckBox() {
+ if (mCheckBox == null) {
+ mCheckBox = new AppCompatCheckBox(getContext());
+ // Make non-focusable, so the rest of the ContactListItemView can be clicked.
+ mCheckBox.setFocusable(false);
+ addView(mCheckBox);
+ }
+ return mCheckBox;
+ }
+
+ /**
+ * Returns the {@link AppCompatImageButton} delete button, creating it if necessary.
+ */
+ public AppCompatImageButton getDeleteImageButton(
+ final MultiSelectEntryContactListAdapter.DeleteContactListener listener,
+ final int position) {
+ if (mDeleteImageButton == null) {
+ mDeleteImageButton = new AppCompatImageButton(getContext());
+ mDeleteImageButton.setImageResource(R.drawable.quantum_ic_cancel_vd_theme_24);
+ mDeleteImageButton.setScaleType(ScaleType.CENTER);
+ mDeleteImageButton.setBackgroundColor(Color.TRANSPARENT);
+ mDeleteImageButton.setContentDescription(
+ getResources().getString(R.string.description_delete_contact));
+ if (CompatUtils. isLollipopCompatible()) {
+ final TypedValue typedValue = new TypedValue();
+ getContext().getTheme().resolveAttribute(
+ android.R.attr.selectableItemBackgroundBorderless, typedValue, true);
+ mDeleteImageButton.setBackgroundResource(typedValue.resourceId);
+ }
+ addView(mDeleteImageButton);
+ }
+ // Reset onClickListener because after reloading the view, position might be changed.
+ mDeleteImageButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // Inform the adapter that delete icon was clicked.
+ if (listener != null) {
+ listener.onContactDeleteClicked(position);
+ }
+ }
+ });
+ return mDeleteImageButton;
+ }
+
+ /**
+ * Returns the text view for the data text, creating it if necessary.
+ */
+ public TextView getDataView() {
+ if (mDataView == null) {
+ mDataView = new TextView(getContext());
+ mDataView.setSingleLine(true);
+ mDataView.setEllipsize(getTextEllipsis());
+ mDataView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
+ mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+ mDataView.setActivated(isActivated());
+ mDataView.setId(R.id.cliv_data_view);
+ if (CompatUtils.isLollipopCompatible()) {
+ mDataView.setElegantTextHeight(false);
+ }
+ addView(mDataView);
+ }
+ return mDataView;
+ }
+
+ /**
+ * Adds or updates a text view for the search snippet.
+ */
+ public void setSnippet(String text) {
+ if (TextUtils.isEmpty(text)) {
+ if (mSnippetView != null) {
+ mSnippetView.setVisibility(View.GONE);
+ }
+ } else {
+ mTextHighlighter.setPrefixText(getSnippetView(), text, mHighlightedPrefix);
+ mSnippetView.setVisibility(VISIBLE);
+ if (ContactDisplayUtils.isPossiblePhoneNumber(text)) {
+ // Give the text-to-speech engine a hint that it's a phone number
+ mSnippetView.setContentDescription(
+ PhoneNumberUtilsCompat.createTtsSpannable(text));
+ } else {
+ mSnippetView.setContentDescription(null);
+ }
+ }
+ }
+
+ /**
+ * Returns the text view for the search snippet, creating it if necessary.
+ */
+ public TextView getSnippetView() {
+ if (mSnippetView == null) {
+ mSnippetView = new TextView(getContext());
+ mSnippetView.setSingleLine(true);
+ mSnippetView.setEllipsize(getTextEllipsis());
+ mSnippetView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+ mSnippetView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+ mSnippetView.setActivated(isActivated());
+ addView(mSnippetView);
+ }
+ return mSnippetView;
+ }
+
+ /**
+ * Returns the text view for the status, creating it if necessary.
+ */
+ public TextView getStatusView() {
+ if (mStatusView == null) {
+ mStatusView = new TextView(getContext());
+ mStatusView.setSingleLine(true);
+ mStatusView.setEllipsize(getTextEllipsis());
+ mStatusView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+ mStatusView.setTextColor(mSecondaryTextColor);
+ mStatusView.setActivated(isActivated());
+ mStatusView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+ addView(mStatusView);
+ }
+ return mStatusView;
+ }
+
+ /**
+ * Adds or updates a text view for the status.
+ */
+ public void setStatus(CharSequence text) {
+ if (TextUtils.isEmpty(text)) {
+ if (mStatusView != null) {
+ mStatusView.setVisibility(View.GONE);
+ }
+ } else {
+ getStatusView();
+ setMarqueeText(mStatusView, text);
+ mStatusView.setVisibility(VISIBLE);
+ }
+ }
+
+ /**
+ * Adds or updates the presence icon view.
+ */
+ public void setPresence(Drawable icon) {
+ if (icon != null) {
+ if (mPresenceIcon == null) {
+ mPresenceIcon = new ImageView(getContext());
+ addView(mPresenceIcon);
+ }
+ mPresenceIcon.setImageDrawable(icon);
+ mPresenceIcon.setScaleType(ScaleType.CENTER);
+ mPresenceIcon.setVisibility(View.VISIBLE);
+ } else {
+ if (mPresenceIcon != null) {
+ mPresenceIcon.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ /**
+ * Set to display work profile icon or not
+ *
+ * @param enabled set to display work profile icon or not
+ */
+ public void setWorkProfileIconEnabled(boolean enabled) {
+ if (mWorkProfileIcon != null) {
+ mWorkProfileIcon.setVisibility(enabled ? View.VISIBLE : View.GONE);
+ } else if (enabled) {
+ mWorkProfileIcon = new ImageView(getContext());
+ addView(mWorkProfileIcon);
+ mWorkProfileIcon.setImageResource(R.drawable.ic_work_profile);
+ mWorkProfileIcon.setScaleType(ScaleType.CENTER_INSIDE);
+ mWorkProfileIcon.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private TruncateAt getTextEllipsis() {
+ return TruncateAt.MARQUEE;
+ }
+
+ public void showDisplayName(Cursor cursor, int nameColumnIndex, int displayOrder) {
+ CharSequence name = cursor.getString(nameColumnIndex);
+ setDisplayName(name);
+
+ // Since the quick contact content description is derived from the display name and there is
+ // no guarantee that when the quick contact is initialized the display name is already set,
+ // do it here too.
+ if (mQuickContact != null) {
+ mQuickContact.setContentDescription(getContext().getString(
+ R.string.description_quick_contact_for, mNameTextView.getText()));
+ }
+ }
+
+ public void setDisplayName(CharSequence name, boolean highlight) {
+ if (!TextUtils.isEmpty(name) && highlight) {
+ clearHighlightSequences();
+ addNameHighlightSequence(0, name.length());
+ }
+ setDisplayName(name);
+ }
+
+ public void setDisplayName(CharSequence name) {
+ if (!TextUtils.isEmpty(name)) {
+ // Chooses the available highlighting method for highlighting.
+ if (mHighlightedPrefix != null) {
+ name = mTextHighlighter.applyPrefixHighlight(name, mHighlightedPrefix);
+ } else if (mNameHighlightSequence.size() != 0) {
+ final SpannableString spannableName = new SpannableString(name);
+ for (HighlightSequence highlightSequence : mNameHighlightSequence) {
+ mTextHighlighter.applyMaskingHighlight(spannableName, highlightSequence.start,
+ highlightSequence.end);
+ }
+ name = spannableName;
+ }
+ } else {
+ name = mUnknownNameText;
+ }
+ setMarqueeText(getNameTextView(), name);
+
+ if (ContactDisplayUtils.isPossiblePhoneNumber(name)) {
+ // Give the text-to-speech engine a hint that it's a phone number
+ mNameTextView.setTextDirection(View.TEXT_DIRECTION_LTR);
+ mNameTextView.setContentDescription(
+ PhoneNumberUtilsCompat.createTtsSpannable(name.toString()));
+ } else {
+ // Remove span tags of highlighting for talkback to avoid reading highlighting and rest
+ // of the name into two separate parts.
+ mNameTextView.setContentDescription(name.toString());
+ }
+ }
+
+ public void hideCheckBox() {
+ if (mCheckBox != null) {
+ removeView(mCheckBox);
+ mCheckBox = null;
+ }
+ }
+
+ public void hideDeleteImageButton() {
+ if (mDeleteImageButton != null) {
+ removeView(mDeleteImageButton);
+ mDeleteImageButton = null;
+ }
+ }
+
+ public void hideDisplayName() {
+ if (mNameTextView != null) {
+ removeView(mNameTextView);
+ mNameTextView = null;
+ }
+ }
+
+ public void showPhoneticName(Cursor cursor, int phoneticNameColumnIndex) {
+ cursor.copyStringToBuffer(phoneticNameColumnIndex, mPhoneticNameBuffer);
+ int phoneticNameSize = mPhoneticNameBuffer.sizeCopied;
+ if (phoneticNameSize != 0) {
+ setPhoneticName(mPhoneticNameBuffer.data, phoneticNameSize);
+ } else {
+ setPhoneticName(null, 0);
+ }
+ }
+
+ public void hidePhoneticName() {
+ if (mPhoneticNameTextView != null) {
+ removeView(mPhoneticNameTextView);
+ mPhoneticNameTextView = null;
+ }
+ }
+
+ /**
+ * Sets the proper icon (star or presence or nothing) and/or status message.
+ */
+ public void showPresenceAndStatusMessage(Cursor cursor, int presenceColumnIndex,
+ int contactStatusColumnIndex) {
+ Drawable icon = null;
+ int presence = 0;
+ if (!cursor.isNull(presenceColumnIndex)) {
+ presence = cursor.getInt(presenceColumnIndex);
+ icon = ContactPresenceIconUtil.getPresenceIcon(getContext(), presence);
+ }
+ setPresence(icon);
+
+ String statusMessage = null;
+ if (contactStatusColumnIndex != 0 && !cursor.isNull(contactStatusColumnIndex)) {
+ statusMessage = cursor.getString(contactStatusColumnIndex);
+ }
+ // If there is no status message from the contact, but there was a presence value, then use
+ // the default status message string
+ if (statusMessage == null && presence != 0) {
+ statusMessage = ContactStatusUtil.getStatusString(getContext(), presence);
+ }
+ setStatus(statusMessage);
+ }
+
+ /**
+ * Shows search snippet for email and phone number matches.
+ */
+ public void showSnippet(Cursor cursor, String query, int snippetColumn) {
+ // TODO: this does not properly handle phone numbers with control characters
+ // For example if the phone number is 444-5555, the search query 4445 will match the
+ // number since we normalize it before querying CP2 but the snippet will fail since
+ // the portion to be highlighted is 444-5 not 4445.
+ final String snippet = cursor.getString(snippetColumn);
+ if (snippet == null) {
+ setSnippet(null);
+ return;
+ }
+ final String displayName = cursor.getColumnIndex(Contacts.DISPLAY_NAME) >= 0
+ ? cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME)) : null;
+ if (snippet.equals(displayName)) {
+ // If the snippet exactly matches the display name (i.e. the phone number or email
+ // address is being used as the display name) then no snippet is necessary
+ setSnippet(null);
+ return;
+ }
+ // Show the snippet with the part of the query that matched it
+ setSnippet(updateSnippet(snippet, query, displayName));
+ }
+
+ /**
+ * Shows search snippet.
+ */
+ public void showSnippet(Cursor cursor, int summarySnippetColumnIndex) {
+ if (cursor.getColumnCount() <= summarySnippetColumnIndex
+ || !SearchSnippets.SNIPPET.equals(cursor.getColumnName(summarySnippetColumnIndex))) {
+ setSnippet(null);
+ return;
+ }
+
+ String snippet = cursor.getString(summarySnippetColumnIndex);
+
+ // Do client side snippeting if provider didn't do it
+ final Bundle extras = cursor.getExtras();
+ if (extras.getBoolean(ContactsContract.DEFERRED_SNIPPETING)) {
+
+ final String query = extras.getString(ContactsContract.DEFERRED_SNIPPETING_QUERY);
+
+ String displayName = null;
+ int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
+ if (displayNameIndex >= 0) {
+ displayName = cursor.getString(displayNameIndex);
+ }
+
+ snippet = updateSnippet(snippet, query, displayName);
+
+ } else {
+ if (snippet != null) {
+ int from = 0;
+ int to = snippet.length();
+ int start = snippet.indexOf(DefaultContactListAdapter.SNIPPET_START_MATCH);
+ if (start == -1) {
+ snippet = null;
+ } else {
+ int firstNl = snippet.lastIndexOf('\n', start);
+ if (firstNl != -1) {
+ from = firstNl + 1;
+ }
+ int end = snippet.lastIndexOf(DefaultContactListAdapter.SNIPPET_END_MATCH);
+ if (end != -1) {
+ int lastNl = snippet.indexOf('\n', end);
+ if (lastNl != -1) {
+ to = lastNl;
+ }
+ }
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = from; i < to; i++) {
+ char c = snippet.charAt(i);
+ if (c != DefaultContactListAdapter.SNIPPET_START_MATCH &&
+ c != DefaultContactListAdapter.SNIPPET_END_MATCH) {
+ sb.append(c);
+ }
+ }
+ snippet = sb.toString();
+ }
+ }
+ }
+
+ setSnippet(snippet);
+ }
+
+ /**
+ * Used for deferred snippets from the database. The contents come back as large strings which
+ * need to be extracted for display.
+ *
+ * @param snippet The snippet from the database.
+ * @param query The search query substring.
+ * @param displayName The contact display name.
+ * @return The proper snippet to display.
+ */
+ private String updateSnippet(String snippet, String query, String displayName) {
+
+ if (TextUtils.isEmpty(snippet) || TextUtils.isEmpty(query)) {
+ return null;
+ }
+ query = SearchUtil.cleanStartAndEndOfSearchQuery(query.toLowerCase());
+
+ // If the display name already contains the query term, return empty - snippets should
+ // not be needed in that case.
+ if (!TextUtils.isEmpty(displayName)) {
+ final String lowerDisplayName = displayName.toLowerCase();
+ final List<String> nameTokens = split(lowerDisplayName);
+ for (String nameToken : nameTokens) {
+ if (nameToken.startsWith(query)) {
+ return null;
+ }
+ }
+ }
+
+ // The snippet may contain multiple data lines.
+ // Show the first line that matches the query.
+ final SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(snippet, query);
+
+ if (matched != null && matched.line != null) {
+ // Tokenize for long strings since the match may be at the end of it.
+ // Skip this part for short strings since the whole string will be displayed.
+ // Most contact strings are short so the snippetize method will be called infrequently.
+ final int lengthThreshold = getResources().getInteger(
+ R.integer.snippet_length_before_tokenize);
+ if (matched.line.length() > lengthThreshold) {
+ return snippetize(matched.line, matched.startIndex, lengthThreshold);
+ } else {
+ return matched.line;
+ }
+ }
+
+ // No match found.
+ return null;
+ }
+
+ private String snippetize(String line, int matchIndex, int maxLength) {
+ // Show up to maxLength characters. But we only show full tokens so show the last full token
+ // up to maxLength characters. So as many starting tokens as possible before trying ending
+ // tokens.
+ int remainingLength = maxLength;
+ int tempRemainingLength = remainingLength;
+
+ // Start the end token after the matched query.
+ int index = matchIndex;
+ int endTokenIndex = index;
+
+ // Find the match token first.
+ while (index < line.length()) {
+ if (!Character.isLetterOrDigit(line.charAt(index))) {
+ endTokenIndex = index;
+ remainingLength = tempRemainingLength;
+ break;
+ }
+ tempRemainingLength--;
+ index++;
+ }
+
+ // Find as much content before the match.
+ index = matchIndex - 1;
+ tempRemainingLength = remainingLength;
+ int startTokenIndex = matchIndex;
+ while (index > -1 && tempRemainingLength > 0) {
+ if (!Character.isLetterOrDigit(line.charAt(index))) {
+ startTokenIndex = index;
+ remainingLength = tempRemainingLength;
+ }
+ tempRemainingLength--;
+ index--;
+ }
+
+ index = endTokenIndex;
+ tempRemainingLength = remainingLength;
+ // Find remaining content at after match.
+ while (index < line.length() && tempRemainingLength > 0) {
+ if (!Character.isLetterOrDigit(line.charAt(index))) {
+ endTokenIndex = index;
+ }
+ tempRemainingLength--;
+ index++;
+ }
+ // Append ellipse if there is content before or after.
+ final StringBuilder sb = new StringBuilder();
+ if (startTokenIndex > 0) {
+ sb.append("...");
+ }
+ sb.append(line.substring(startTokenIndex, endTokenIndex));
+ if (endTokenIndex < line.length()) {
+ sb.append("...");
+ }
+ return sb.toString();
+ }
+
+ private static final Pattern SPLIT_PATTERN = Pattern.compile(
+ "([\\w-\\.]+)@((?:[\\w]+\\.)+)([a-zA-Z]{2,4})|[\\w]+");
+
+ /**
+ * Helper method for splitting a string into tokens. The lists passed in are populated with
+ * the
+ * tokens and offsets into the content of each token. The tokenization function parses e-mail
+ * addresses as a single token; otherwise it splits on any non-alphanumeric character.
+ *
+ * @param content Content to split.
+ * @return List of token strings.
+ */
+ private static List<String> split(String content) {
+ final Matcher matcher = SPLIT_PATTERN.matcher(content);
+ final ArrayList<String> tokens = Lists.newArrayList();
+ while (matcher.find()) {
+ tokens.add(matcher.group());
+ }
+ return tokens;
+ }
+
+ /**
+ * Shows data element.
+ */
+ public void showData(Cursor cursor, int dataColumnIndex) {
+ cursor.copyStringToBuffer(dataColumnIndex, mDataBuffer);
+ setData(mDataBuffer.data, mDataBuffer.sizeCopied);
+ }
+
+ public void setActivatedStateSupported(boolean flag) {
+ this.mActivatedStateSupported = flag;
+ }
+
+ public void setAdjustSelectionBoundsEnabled(boolean enabled) {
+ mAdjustSelectionBoundsEnabled = enabled;
+ }
+
+ @Override
+ public void requestLayout() {
+ // We will assume that once measured this will not need to resize
+ // itself, so there is no need to pass the layout request to the parent
+ // view (ListView).
+ forceLayout();
+ }
+
+ public void setPhotoPosition(PhotoPosition photoPosition) {
+ mPhotoPosition = photoPosition;
+ }
+
+ public PhotoPosition getPhotoPosition() {
+ return mPhotoPosition;
+ }
+
+ /**
+ * Set drawable resources directly for the drawable resource of the photo view.
+ *
+ * @param drawableId Id of drawable resource.
+ */
+ public void setDrawableResource(int drawableId) {
+ 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);
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ final float x = event.getX();
+ final float y = event.getY();
+ // If the touch event's coordinates are not within the view's header, then delegate
+ // to super.onTouchEvent so that regular view behavior is preserved. Otherwise, consume
+ // and ignore the touch event.
+ if (mBoundsWithoutHeader.contains((int) x, (int) y) || !pointIsInView(x, y)) {
+ return super.onTouchEvent(event);
+ } else {
+ return true;
+ }
+ }
+
+ private final boolean pointIsInView(float localX, float localY) {
+ return localX >= mLeftOffset && localX < mRightOffset
+ && localY >= 0 && localY < (getBottom() - getTop());
+ }
+}
diff --git a/src/com/android/contacts/list/ContactListPinnedHeaderView.java b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
new file mode 100644
index 000000000..e65dea08f
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+
+/**
+ * A custom view for the pinned section header shown at the top of the contact list.
+ */
+public class ContactListPinnedHeaderView extends TextView {
+
+ public ContactListPinnedHeaderView(Context context, AttributeSet attrs, View parent) {
+ super(context, attrs);
+
+ if (R.styleable.ContactListItemView == null) {
+ return;
+ }
+ TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
+ int backgroundColor = a.getColor(
+ R.styleable.ContactListItemView_list_item_background_color, Color.WHITE);
+ int textOffsetTop = a.getDimensionPixelSize(
+ R.styleable.ContactListItemView_list_item_text_offset_top, 0);
+ int paddingStartOffset = a.getDimensionPixelSize(
+ R.styleable.ContactListItemView_list_item_padding_left, 0);
+ int textWidth = getResources().getDimensionPixelSize(
+ R.dimen.contact_list_section_header_width);
+ int widthIncludingPadding = paddingStartOffset + textWidth;
+ a.recycle();
+
+ setBackgroundColor(backgroundColor);
+ setTextAppearance(getContext(), R.style.SectionHeaderStyle);
+ setLayoutParams(new LayoutParams(widthIncludingPadding, LayoutParams.WRAP_CONTENT));
+ setLayoutDirection(parent.getLayoutDirection());
+ setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
+
+ // Apply text top offset. Multiply by two, because we are implementing this by padding for a
+ // vertically centered view, rather than adjusting the position directly via a layout.
+ setPaddingRelative(
+ getPaddingStart() + paddingStartOffset,
+ getPaddingTop() + (textOffsetTop * 2),
+ getPaddingEnd(),
+ getPaddingBottom());
+ }
+
+ /**
+ * Sets section header or makes it invisible if the title is null.
+ */
+ public void setSectionHeaderTitle(String title) {
+ if (title != null) {
+ setText(title);
+ setVisibility(View.VISIBLE);
+ } else {
+ setVisibility(View.GONE);
+ }
+ }
+}
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 4e8138916..504828f24 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -24,13 +24,8 @@ import android.view.ViewGroup;
import android.widget.AdapterView;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.list.ShortcutIntentBuilder;
-import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+import com.android.contacts.ShortcutIntentBuilder;
+import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
/**
* Fragment for the contact list used for browsing contacts (as compared to
@@ -60,18 +55,10 @@ public class ContactPickerFragment extends ContactEntryListFragment<ContactEntry
mListener = listener;
}
- public boolean isCreateContactEnabled() {
- return mCreateContactEnabled;
- }
-
public void setCreateContactEnabled(boolean flag) {
this.mCreateContactEnabled = flag;
}
- public boolean isEditMode() {
- return mEditMode;
- }
-
public void setEditMode(boolean flag) {
mEditMode = flag;
}
@@ -102,16 +89,6 @@ public class ContactPickerFragment extends ContactEntryListFragment<ContactEntry
}
@Override
- protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
- super.onCreateView(inflater, container);
- if (mCreateContactEnabled && isLegacyCompatibilityMode()) {
- // Since we are using the legacy adapter setShowCreateContact(true) isn't supported.
- // So we need to add an ugly header above the list.
- getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false));
- }
- }
-
- @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0 && mCreateContactEnabled && mListener != null) {
mListener.onCreateNewContactAction();
@@ -141,12 +118,6 @@ public class ContactPickerFragment extends ContactEntryListFragment<ContactEntry
}
}
- public void createNewContact() {
- if (mListener != null) {
- mListener.onCreateNewContactAction();
- }
- }
-
public void editContact(Uri contactUri) {
if (mListener != null) {
mListener.onEditContactAction(contactUri);
@@ -180,16 +151,6 @@ public class ContactPickerFragment extends ContactEntryListFragment<ContactEntry
}
@Override
- protected void configureAdapter() {
- super.configureAdapter();
-
- ContactEntryListAdapter adapter = getAdapter();
-
- // If "Create new contact" is shown, don't display the empty list UI
- adapter.setEmptyListEnabled(!isCreateContactEnabled());
- }
-
- @Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
return inflater.inflate(R.layout.contact_picker_content, null);
}
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
deleted file mode 100644
index 189cfd375..000000000
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ /dev/null
@@ -1,246 +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.list;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.CursorLoader;
-import android.content.Loader;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-import android.widget.TextView;
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.list.ContactTileAdapter;
-import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.contacts.common.util.ContactListViewUtils;
-import com.android.contacts.common.util.SchedulingUtils;
-
-/**
- * Fragment containing a list of starred contacts followed by a list of frequently contacted.
- *
- * TODO: Make this an abstract class so that the favorites, frequent, and group list functionality
- * can be separated out. This will make it easier to customize any of those lists if necessary
- * (i.e. adding header views to the ListViews in the fragment). This work was started
- * by creating {@link ContactTileFrequentFragment}.
- */
-public class ContactTileListFragment extends Fragment {
- private static final String TAG = ContactTileListFragment.class.getSimpleName();
-
- public interface Listener {
- void onContactSelected(Uri contactUri, Rect targetRect);
- void onCallNumberDirectly(String phoneNumber);
- }
-
- private Listener mListener;
- private ContactTileAdapter mAdapter;
- private DisplayType mDisplayType;
- private TextView mEmptyView;
- private ListView mListView;
-
- private boolean mOptionsMenuHasFrequents;
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
-
- Resources res = getResources();
- int columnCount = res.getInteger(R.integer.contact_tile_column_count_in_favorites);
-
- mAdapter = new ContactTileAdapter(activity, mAdapterListener,
- columnCount, mDisplayType);
- mAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflateAndSetupView(inflater, container, savedInstanceState,
- R.layout.contact_tile_list);
- }
-
- protected View inflateAndSetupView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState, int layoutResourceId) {
- View listLayout = inflater.inflate(layoutResourceId, container, false);
-
- mEmptyView = (TextView) listLayout.findViewById(R.id.contact_tile_list_empty);
- mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
-
- mListView.setItemsCanFocus(true);
- mListView.setAdapter(mAdapter);
- ContactListViewUtils.applyCardPaddingToView(getResources(), mListView, listLayout);
-
- return listLayout;
- }
-
- @Override
- public void onHiddenChanged(boolean hidden) {
- super.onHiddenChanged(hidden);
- if (getActivity() != null && getView() != null && !hidden) {
- // If the padding was last applied when in a hidden state, it may have been applied
- // incorrectly. Therefore we need to reapply it.
- ContactListViewUtils.applyCardPaddingToView(getResources(), mListView, getView());
- }
- }
-
- @Override
- public void onStart() {
- super.onStart();
-
- // initialize the loader for this display type and destroy all others
- final DisplayType[] loaderTypes = mDisplayType.values();
- for (int i = 0; i < loaderTypes.length; i++) {
- if (loaderTypes[i] == mDisplayType) {
- getLoaderManager().initLoader(mDisplayType.ordinal(), null,
- mContactTileLoaderListener);
- } else {
- getLoaderManager().destroyLoader(loaderTypes[i].ordinal());
- }
- }
- }
-
- /**
- * Returns whether there are any frequents with the side effect of setting the
- * internal flag mOptionsMenuHasFrequents to the value. This should be called externally
- * by the activity that is about to prepare the options menu with the clear frequents
- * menu item.
- */
- public boolean hasFrequents() {
- mOptionsMenuHasFrequents = internalHasFrequents();
- return mOptionsMenuHasFrequents;
- }
-
- /**
- * Returns whether there are any frequents.
- */
- private boolean internalHasFrequents() {
- return mAdapter.getNumFrequents() > 0;
- }
-
- public void setColumnCount(int columnCount) {
- mAdapter.setColumnCount(columnCount);
- }
-
- public void setDisplayType(DisplayType displayType) {
- mDisplayType = displayType;
- mAdapter.setDisplayType(mDisplayType);
- }
-
- public void enableQuickContact(boolean enableQuickContact) {
- mAdapter.enableQuickContact(enableQuickContact);
- }
-
- private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
- new LoaderCallbacks<Cursor>() {
-
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- switch (mDisplayType) {
- case STARRED_ONLY:
- return ContactTileLoaderFactory.createStarredLoader(getActivity());
- case STREQUENT:
- return ContactTileLoaderFactory.createStrequentLoader(getActivity());
- case FREQUENT_ONLY:
- return ContactTileLoaderFactory.createFrequentLoader(getActivity());
- default:
- throw new IllegalStateException(
- "Unrecognized DisplayType " + mDisplayType);
- }
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (data == null || data.isClosed()) {
- Log.e(TAG, "Failed to load contacts");
- return;
- }
- mAdapter.setContactCursor(data);
- mEmptyView.setText(getEmptyStateText());
- mListView.setEmptyView(mEmptyView);
-
- // invalidate the menu options if needed
- invalidateOptionsMenuIfNeeded();
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {}
- };
-
- private boolean isOptionsMenuChanged() {
- return mOptionsMenuHasFrequents != internalHasFrequents();
- }
-
- private void invalidateOptionsMenuIfNeeded() {
- if (isOptionsMenuChanged()) {
- getActivity().invalidateOptionsMenu();
- }
- }
-
- private String getEmptyStateText() {
- String emptyText;
- switch (mDisplayType) {
- case STREQUENT:
- case STARRED_ONLY:
- emptyText = getString(R.string.listTotalAllContactsZeroStarred);
- break;
- case FREQUENT_ONLY:
- case GROUP_MEMBERS:
- emptyText = getString(R.string.noContacts);
- break;
- default:
- throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
- }
- return emptyText;
- }
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- private ContactTileView.Listener mAdapterListener =
- new ContactTileView.Listener() {
- @Override
- public void onContactSelected(Uri contactUri, Rect targetRect) {
- if (mListener != null) {
- mListener.onContactSelected(contactUri, targetRect);
- }
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- if (mListener != null) {
- mListener.onCallNumberDirectly(phoneNumber);
- }
- }
-
- @Override
- public int getApproximateTileWidth() {
- return getView().getWidth() / mAdapter.getColumnCount();
- }
- };
-}
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 259e0c717..7cf9f5ad4 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -28,11 +28,15 @@ import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.Intents.Insert;
import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.model.account.AccountWithDataSet;
+
/**
* Parses a Contacts intent, extracting all relevant parts and packaging them
* as a {@link ContactsRequest} object.
@@ -70,6 +74,13 @@ public class ContactsIntentResolver {
} else if (UiIntentActions.LIST_GROUP_ACTION.equals(action)) {
request.setActionCode(ContactsRequest.ACTION_GROUP);
// We no longer support UiIntentActions.GROUP_NAME_EXTRA_KEY
+ } else if (UiIntentActions.ACTION_SELECT_ITEMS.equals(action)) {
+ final String resolvedType = intent.resolveType(mContext);
+ if (Phone.CONTENT_TYPE.equals(resolvedType)) {
+ request.setActionCode(ContactsRequest.ACTION_PICK_PHONES);
+ } else if (Email.CONTENT_TYPE.equals(resolvedType)) {
+ request.setActionCode(ContactsRequest.ACTION_PICK_EMAILS);
+ }
} else if (Intent.ACTION_PICK.equals(action)) {
final String resolvedType = intent.resolveType(mContext);
if (Contacts.CONTENT_TYPE.equals(resolvedType)) {
@@ -89,6 +100,14 @@ public class ContactsIntentResolver {
request.setLegacyCompatibilityMode(true);
} else if (Email.CONTENT_TYPE.equals(resolvedType)) {
request.setActionCode(ContactsRequest.ACTION_PICK_EMAIL);
+ } else if (Groups.CONTENT_TYPE.equals(resolvedType)) {
+ request.setActionCode(ContactsRequest.ACTION_PICK_GROUP_MEMBERS);
+ request.setAccountWithDataSet(new AccountWithDataSet(
+ intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_NAME),
+ intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_TYPE),
+ intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET)));
+ request.setRawContactIds(intent.getStringArrayListExtra(
+ UiIntentActions.GROUP_CONTACT_IDS));
}
} else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
String component = intent.getComponent().getClassName();
@@ -119,6 +138,9 @@ public class ContactsIntentResolver {
}
} else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
request.setActionCode(ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT);
+ } else if (Intent.ACTION_INSERT.equals(action) &&
+ Groups.CONTENT_TYPE.equals(intent.getType())) {
+ request.setActionCode(ContactsRequest.ACTION_INSERT_GROUP);
} else if (Intent.ACTION_SEARCH.equals(action)) {
String query = intent.getStringExtra(SearchManager.QUERY);
// If the {@link SearchManager.QUERY} is empty, then check if a phone number
@@ -136,11 +158,19 @@ public class ContactsIntentResolver {
if (ContactsContract.Contacts.CONTENT_TYPE.equals(resolvedType)
|| android.provider.Contacts.People.CONTENT_TYPE.equals(resolvedType)) {
request.setActionCode(ContactsRequest.ACTION_ALL_CONTACTS);
- } else {
+ } else if (!GroupUtil.isGroupUri(intent.getData())){
request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
request.setContactUri(intent.getData());
intent.setAction(Intent.ACTION_DEFAULT);
intent.setData(null);
+ } else {
+ request.setActionCode(ContactsRequest.ACTION_VIEW_GROUP);
+ request.setContactUri(intent.getData());
+ }
+ } else if (Intent.ACTION_EDIT.equals(action)) {
+ if (GroupUtil.isGroupUri(intent.getData())){
+ request.setActionCode(ContactsRequest.ACTION_EDIT_GROUP);
+ request.setContactUri(intent.getData());
}
// Since this is the filter activity it receives all intents
// dispatched from the SearchManager for security reasons
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 636fe58ce..f581b0a85 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -16,10 +16,11 @@
package com.android.contacts.list;
-import android.content.Intent;
import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
/**
* Parsed form of the intent sent to the Contacts application.
@@ -38,6 +39,18 @@ public class ContactsRequest {
/** Show contents of a specific group */
public static final int ACTION_GROUP = 20;
+ /** Show potential new members of a specific group */
+ public static final int ACTION_PICK_GROUP_MEMBERS = 21;
+
+ /** Create a new group */
+ public static final int ACTION_INSERT_GROUP = 22;
+
+ /** View a group */
+ public static final int ACTION_VIEW_GROUP = 23;
+
+ /** Edit a group */
+ public static final int ACTION_EDIT_GROUP = 24;
+
/** Show all starred contacts */
public static final int ACTION_STARRED = 30;
@@ -65,6 +78,12 @@ public class ContactsRequest {
/** Show all postal addresses and pick them when clicking */
public static final int ACTION_PICK_EMAIL = 105;
+ /** Show a list of emails for selected contacts and select them when clicking */
+ public static final int ACTION_PICK_EMAILS = 106;
+
+ /** Show a list of phones for selected contacts and select them when clicking */
+ public static final int ACTION_PICK_PHONES = 107;
+
/** Show all contacts and create a shortcut for the picked contact */
public static final int ACTION_CREATE_SHORTCUT_CONTACT = 110;
@@ -85,10 +104,12 @@ public class ContactsRequest {
private CharSequence mTitle;
private boolean mSearchMode;
private String mQueryString;
- private boolean mIncludeProfile;
+ private boolean mIncludeFavorites;
private boolean mLegacyCompatibilityMode;
private boolean mDirectorySearchEnabled = true;
private Uri mContactUri;
+ private AccountWithDataSet mAccountWithDataSet;
+ private ArrayList<String> mRawContactIds;
@Override
public String toString() {
@@ -97,10 +118,12 @@ public class ContactsRequest {
+ " mTitle=" + mTitle
+ " mSearchMode=" + mSearchMode
+ " mQueryString=" + mQueryString
- + " mIncludeProfile=" + mIncludeProfile
+ + " mIncludeFavorites=" + mIncludeFavorites
+ " mLegacyCompatibilityMode=" + mLegacyCompatibilityMode
+ " mDirectorySearchEnabled=" + mDirectorySearchEnabled
+ " mContactUri=" + mContactUri
+ + " mAccountWithDataSet=" + mAccountWithDataSet
+ + " mRawContactIds=" + mRawContactIds
+ "}";
}
@@ -144,12 +167,12 @@ public class ContactsRequest {
mQueryString = string;
}
- public boolean shouldIncludeProfile() {
- return mIncludeProfile;
+ public boolean shouldIncludeFavorites() {
+ return mIncludeFavorites;
}
- public void setIncludeProfile(boolean includeProfile) {
- mIncludeProfile = includeProfile;
+ public void setIncludeFavorites(boolean includeFavorites) {
+ mIncludeFavorites = includeFavorites;
}
public boolean isLegacyCompatibilityMode() {
@@ -179,4 +202,20 @@ public class ContactsRequest {
public void setContactUri(Uri contactUri) {
this.mContactUri = contactUri;
}
+
+ public AccountWithDataSet getAccountWithDataSet() {
+ return mAccountWithDataSet;
+ }
+
+ public void setAccountWithDataSet(AccountWithDataSet accountWithDataSet) {
+ mAccountWithDataSet = accountWithDataSet;
+ }
+
+ public ArrayList<String> getRawContactIds() {
+ return mRawContactIds;
+ }
+
+ public void setRawContactIds(ArrayList<String> rawContactIds) {
+ mRawContactIds = rawContactIds;
+ }
}
diff --git a/src/com/android/contacts/list/ContactsSectionIndexer.java b/src/com/android/contacts/list/ContactsSectionIndexer.java
new file mode 100644
index 000000000..9d20bfe13
--- /dev/null
+++ b/src/com/android/contacts/list/ContactsSectionIndexer.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.text.TextUtils;
+import android.widget.SectionIndexer;
+
+import java.util.Arrays;
+
+/**
+ * A section indexer that is configured with precomputed section titles and
+ * their respective counts.
+ */
+public class ContactsSectionIndexer implements SectionIndexer {
+
+ protected static final String BLANK_HEADER_STRING = "\u2026"; // ellipsis
+
+ private String[] mSections;
+ private int[] mPositions;
+ private int mCount;
+
+ /**
+ * Constructor.
+ *
+ * @param sections a non-null array
+ * @param counts a non-null array of the same size as <code>sections</code>
+ */
+ public ContactsSectionIndexer(String[] sections, int[] counts) {
+ if (sections == null || counts == null) {
+ throw new NullPointerException();
+ }
+
+ if (sections.length != counts.length) {
+ throw new IllegalArgumentException(
+ "The sections and counts arrays must have the same length");
+ }
+
+ // TODO process sections/counts based on current locale and/or specific section titles
+
+ this.mSections = sections;
+ mPositions = new int[counts.length];
+ int position = 0;
+ for (int i = 0; i < counts.length; i++) {
+ // Enforce that there will be no null or empty sections.
+ if (TextUtils.isEmpty(mSections[i])) {
+ mSections[i] = BLANK_HEADER_STRING;
+ } else if (!mSections[i].equals(BLANK_HEADER_STRING)) {
+ mSections[i] = mSections[i].trim();
+ }
+
+ mPositions[i] = position;
+ position += counts[i];
+ }
+ mCount = position;
+ }
+
+ public Object[] getSections() {
+ return mSections;
+ }
+
+ public int[] getPositions() {
+ return mPositions;
+ }
+
+ public int getPositionForSection(int section) {
+ if (section < 0 || section >= mSections.length) {
+ return -1;
+ }
+
+ return mPositions[section];
+ }
+
+ public int getSectionForPosition(int position) {
+ if (position < 0 || position >= mCount) {
+ return -1;
+ }
+
+ int index = Arrays.binarySearch(mPositions, position);
+
+ /*
+ * Consider this example: section positions are 0, 3, 5; the supplied
+ * position is 4. The section corresponding to position 4 starts at
+ * position 3, so the expected return value is 1. Binary search will not
+ * find 4 in the array and thus will return -insertPosition-1, i.e. -3.
+ * To get from that number to the expected value of 1 we need to negate
+ * and subtract 2.
+ */
+ return index >= 0 ? index : -index - 2;
+ }
+
+ public void setFavoritesHeader(int numberOfItemsToAdd) {
+ if (mSections != null) {
+ // Don't do anything if the header is already set properly.
+ if (mSections.length > 0 && mSections[0].isEmpty()) {
+ return;
+ }
+
+ // Since the section indexer isn't aware of the profile at the top, we need to add a
+ // special section at the top for it and shift everything else down.
+ String[] tempSections = new String[mSections.length + 1];
+ int[] tempPositions = new int[mPositions.length + 1];
+ // Favorites section is empty to hide fast scroll preview.
+ tempSections[0] = "";
+ tempPositions[0] = 0;
+ for (int i = 1; i <= mPositions.length; i++) {
+ tempSections[i] = mSections[i - 1];
+ tempPositions[i] = mPositions[i - 1] + numberOfItemsToAdd;
+ }
+ mSections = tempSections;
+ mPositions = tempPositions;
+ mCount = mCount + numberOfItemsToAdd;
+ }
+ }
+}
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index 8cbbaa85c..c13e475fa 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -17,6 +17,7 @@ package com.android.contacts.list;
import android.app.Fragment;
import android.content.Context;
+import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.PorterDuff;
import android.os.Bundle;
@@ -28,12 +29,14 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.activities.ActionBarAdapter.TabState;
import com.android.contacts.compat.ProviderStatusCompat;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.util.ImplicitIntentsUtil;
/**
* Fragment shown when contacts are unavailable. It contains provider status
@@ -48,24 +51,26 @@ public class ContactsUnavailableFragment extends Fragment implements OnClickList
private Button mImportContactsButton;
private ProgressBar mProgress;
private View mButtonsContainer;
- private int mNoContactsMsgResId = -1;
- private int mLastTab = -1;
-
- private OnContactsUnavailableActionListener mListener;
private Integer mProviderStatus;
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
- @Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.contacts_unavailable_fragment, null);
mImageView = (ImageView) mView.findViewById(R.id.empty_image);
+ final LinearLayout.LayoutParams layoutParams =
+ (LinearLayout.LayoutParams) mImageView.getLayoutParams();
+ final int screenHeight = getResources().getDisplayMetrics().heightPixels;
+ final int topMargin =
+ screenHeight / getResources()
+ .getInteger(R.integer.contacts_no_account_empty_image_margin_divisor)
+ - getResources()
+ .getDimensionPixelSize(R.dimen.contacts_no_account_empty_image_offset);
+ layoutParams.setMargins(0, topMargin, 0, 0);
+ layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
+ mImageView.setLayoutParams(layoutParams);
mMessageView = (TextView) mView.findViewById(R.id.message);
mAddAccountButton = (Button) mView.findViewById(R.id.add_account_button);
@@ -89,11 +94,6 @@ public class ContactsUnavailableFragment extends Fragment implements OnClickList
return mView;
}
- public void setOnContactsUnavailableActionListener(
- OnContactsUnavailableActionListener listener) {
- mListener = listener;
- }
-
public void updateStatus(int providerStatus) {
mProviderStatus = providerStatus;
if (mView == null) {
@@ -102,10 +102,9 @@ public class ContactsUnavailableFragment extends Fragment implements OnClickList
}
if (providerStatus == ProviderStatusCompat.STATUS_EMPTY) {
updateViewsForEmptyStatus();
- } else if (providerStatus == ProviderStatusCompat.STATUS_BUSY) {
- updateViewsForBusyStatus(R.string.upgrade_in_progress);
- } else if (providerStatus == ProviderStatusCompat.STATUS_CHANGING_LOCALE) {
- updateViewsForBusyStatus(R.string.locale_change_in_progress);
+ } else if (providerStatus == ProviderStatusCompat.STATUS_BUSY
+ || providerStatus == ProviderStatusCompat.STATUS_CHANGING_LOCALE) {
+ updateViewsForBusyStatus();
}
}
@@ -113,80 +112,35 @@ public class ContactsUnavailableFragment extends Fragment implements OnClickList
* Update views in the fragment when provider status is empty.
*/
private void updateViewsForEmptyStatus() {
- setTabInfo(mNoContactsMsgResId, mLastTab);
- if (mLastTab == TabState.ALL) {
- updateButtonVisibilty(View.VISIBLE);
- }
+ mMessageView.setVisibility(View.VISIBLE);
+ updateButtonVisibility(View.VISIBLE);
mProgress.setVisibility(View.GONE);
}
/**
* Update views in the fragment when provider status is busy.
- *
- * @param resId resource ID of the string to show in mMessageView.
*/
- private void updateViewsForBusyStatus(int resId) {
- mMessageView.setText(resId);
- mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
- mMessageView.setVisibility(View.VISIBLE);
- updateButtonVisibilty(View.GONE);
+ private void updateViewsForBusyStatus() {
+ mMessageView.setVisibility(View.GONE);
+ mImageView.setVisibility(View.GONE);
+ updateButtonVisibility(View.GONE);
mProgress.setVisibility(View.VISIBLE);
- if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
- final ViewGroup.MarginLayoutParams lp =
- (ViewGroup.MarginLayoutParams) mMessageView.getLayoutParams();
- final int marginTop =
- (int) getResources().getDimension(R.dimen.update_contact_list_top_margin);
- lp.setMargins(0, marginTop, 0, 0);
- mImageView.setVisibility(View.GONE);
- } else {
- mImageView.setVisibility(View.INVISIBLE);
- }
}
@Override
public void onClick(View v) {
- if (mListener == null) {
- return;
- }
- switch (v.getId()) {
- case R.id.add_account_button:
- mListener.onAddAccountAction();
- break;
- case R.id.import_contacts_button:
- mListener.onImportContactsFromFileAction();
- break;
- }
- }
+ final int id = v.getId();
+ if (id == R.id.add_account_button) {
+ final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
+ ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+
+ } else if (id == R.id.import_contacts_button) {
+ ImportDialogFragment.show(getFragmentManager());
- /**
- * Set the message to be shown if no data is available for the selected tab
- *
- * @param resId - String resource ID of the message , -1 means view will not be visible
- */
- public void setTabInfo(int resId, int callerTab) {
- mNoContactsMsgResId = resId;
- mLastTab = callerTab;
- if ((mMessageView != null) && (mProviderStatus != null) &&
- mProviderStatus.equals(ProviderStatusCompat.STATUS_EMPTY)) {
- if (resId != -1) {
- mMessageView.setText(mNoContactsMsgResId);
- mMessageView.setGravity(Gravity.CENTER_HORIZONTAL);
- mMessageView.setVisibility(View.VISIBLE);
- if (callerTab == TabState.FAVORITES) {
- mImageView.setImageResource(R.drawable.ic_star_black_128dp);
- mProgress.setVisibility(View.GONE);
- updateButtonVisibilty(View.GONE);
- } else if (callerTab == TabState.ALL) {
- mImageView.setImageResource(R.drawable.ic_person_black_128dp);
- updateButtonVisibilty(View.VISIBLE);
- }
- } else {
- mMessageView.setVisibility(View.GONE);
- }
}
}
- private void updateButtonVisibilty(int visibility) {
+ private void updateButtonVisibility(int visibility) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
mAddAccountButton.setVisibility(visibility);
mImportContactsButton.setVisibility(visibility);
diff --git a/src/com/android/contacts/list/CustomContactListFilterActivity.java b/src/com/android/contacts/list/CustomContactListFilterActivity.java
new file mode 100644
index 000000000..92087b3a4
--- /dev/null
+++ b/src/com/android/contacts/list/CustomContactListFilterActivity.java
@@ -0,0 +1,991 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.app.ProgressDialog;
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.Settings;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseExpandableListAdapter;
+import android.widget.CheckBox;
+import android.widget.ExpandableListAdapter;
+import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.util.EmptyService;
+import com.android.contacts.util.LocalizedNameResolver;
+import com.android.contacts.util.WeakAsyncTask;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Shows a list of all available {@link Groups} available, letting the user
+ * select which ones they want to be visible.
+ */
+public class CustomContactListFilterActivity extends Activity implements
+ ExpandableListView.OnChildClickListener,
+ LoaderCallbacks<CustomContactListFilterActivity.AccountSet> {
+ private static final String TAG = "CustomContactListFilter";
+
+ public static final String EXTRA_CURRENT_LIST_FILTER_TYPE = "currentListFilterType";
+
+ private static final int ACCOUNT_SET_LOADER_ID = 1;
+
+ private ExpandableListView mList;
+ private DisplayAdapter mAdapter;
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setContentView(R.layout.contact_list_filter_custom);
+
+ mList = (ExpandableListView) findViewById(android.R.id.list);
+ mList.setOnChildClickListener(this);
+ mList.setHeaderDividersEnabled(true);
+ mList.setChildDivider(new ColorDrawable(Color.TRANSPARENT));
+
+ mList.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(final View v, final int left, final int top, final int right,
+ final int bottom, final int oldLeft, final int oldTop, final int oldRight,
+ final int oldBottom) {
+ mList.setIndicatorBounds(
+ mList.getWidth() - getResources().getDimensionPixelSize(
+ R.dimen.contact_filter_indicator_padding_end),
+ mList.getWidth() - getResources().getDimensionPixelSize(
+ R.dimen.contact_filter_indicator_padding_start));
+ }
+ });
+
+ mAdapter = new DisplayAdapter(this);
+
+ mList.setOnCreateContextMenuListener(this);
+
+ mList.setAdapter(mAdapter);
+
+ ActionBar actionBar = getActionBar();
+ if (actionBar != null) {
+ // android.R.id.home will be triggered in onOptionsItemSelected()
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
+ public static class CustomFilterConfigurationLoader extends ListenableFutureLoader<AccountSet> {
+
+ private AccountTypeManager mAccountTypeManager;
+
+ public CustomFilterConfigurationLoader(Context context) {
+ super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+ mAccountTypeManager = AccountTypeManager.getInstance(context);
+ }
+
+ @Override
+ public ListenableFuture<AccountSet> loadData() {
+ return Futures.transform(mAccountTypeManager.getAccountsAsync(),
+ new Function<List<AccountInfo>, AccountSet>() {
+ @Nullable
+ @Override
+ public AccountSet apply(@Nullable List<AccountInfo> input) {
+ return createAccountSet(input);
+ }
+ }, ContactsExecutors.getDefaultThreadPoolExecutor());
+ }
+
+ private AccountSet createAccountSet(List<AccountInfo> sourceAccounts) {
+ final Context context = getContext();
+ final ContentResolver resolver = context.getContentResolver();
+
+ final AccountSet accounts = new AccountSet();
+
+ // Don't include the null account because it doesn't support writing to
+ // ContactsContract.Settings
+ for (AccountInfo info : sourceAccounts) {
+ final AccountWithDataSet account = info.getAccount();
+ final AccountDisplay accountDisplay = new AccountDisplay(resolver, info);
+
+ final Uri.Builder groupsUri = Groups.CONTENT_URI.buildUpon()
+ .appendQueryParameter(Groups.ACCOUNT_NAME, account.name)
+ .appendQueryParameter(Groups.ACCOUNT_TYPE, account.type);
+ if (account.dataSet != null) {
+ groupsUri.appendQueryParameter(Groups.DATA_SET, account.dataSet).build();
+ }
+ final Cursor cursor = resolver.query(groupsUri.build(), null, null, null, null);
+ if (cursor == null) {
+ continue;
+ }
+ android.content.EntityIterator iterator =
+ ContactsContract.Groups.newEntityIterator(cursor);
+ try {
+ boolean hasGroups = false;
+
+ // Create entries for each known group
+ while (iterator.hasNext()) {
+ final ContentValues values = iterator.next().getEntityValues();
+ final GroupDelta group = GroupDelta.fromBefore(values);
+ accountDisplay.addGroup(group);
+ hasGroups = true;
+ }
+ // Create single entry handling ungrouped status
+ accountDisplay.mUngrouped =
+ GroupDelta.fromSettings(resolver, account.name, account.type,
+ account.dataSet, hasGroups);
+ accountDisplay.addGroup(accountDisplay.mUngrouped);
+ } finally {
+ iterator.close();
+ }
+
+ accounts.add(accountDisplay);
+ }
+
+ return accounts;
+ }
+ }
+
+ @Override
+ protected void onStart() {
+ getLoaderManager().initLoader(ACCOUNT_SET_LOADER_ID, null, this);
+ super.onStart();
+ }
+
+ @Override
+ public Loader<AccountSet> onCreateLoader(int id, Bundle args) {
+ return new CustomFilterConfigurationLoader(this);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<AccountSet> loader, AccountSet data) {
+ mAdapter.setAccounts(data);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<AccountSet> loader) {
+ mAdapter.setAccounts(null);
+ }
+
+ private static final int DEFAULT_SHOULD_SYNC = 1;
+ private static final int DEFAULT_VISIBLE = 0;
+
+ /**
+ * Entry holding any changes to {@link Groups} or {@link Settings} rows,
+ * such as {@link Groups#SHOULD_SYNC} or {@link Groups#GROUP_VISIBLE}.
+ */
+ protected static class GroupDelta extends ValuesDelta {
+ private boolean mUngrouped = false;
+ private boolean mAccountHasGroups;
+
+ private GroupDelta() {
+ super();
+ }
+
+ /**
+ * Build {@link GroupDelta} from the {@link Settings} row for the given
+ * {@link Settings#ACCOUNT_NAME}, {@link Settings#ACCOUNT_TYPE}, and
+ * {@link Settings#DATA_SET}.
+ */
+ public static GroupDelta fromSettings(ContentResolver resolver, String accountName,
+ String accountType, String dataSet, boolean accountHasGroups) {
+ final Uri.Builder settingsUri = Settings.CONTENT_URI.buildUpon()
+ .appendQueryParameter(Settings.ACCOUNT_NAME, accountName)
+ .appendQueryParameter(Settings.ACCOUNT_TYPE, accountType);
+ if (dataSet != null) {
+ settingsUri.appendQueryParameter(Settings.DATA_SET, dataSet);
+ }
+ final Cursor cursor = resolver.query(settingsUri.build(), new String[] {
+ Settings.SHOULD_SYNC, Settings.UNGROUPED_VISIBLE
+ }, null, null, null);
+
+ try {
+ final ContentValues values = new ContentValues();
+ values.put(Settings.ACCOUNT_NAME, accountName);
+ values.put(Settings.ACCOUNT_TYPE, accountType);
+ values.put(Settings.DATA_SET, dataSet);
+
+ if (cursor != null && cursor.moveToFirst()) {
+ // Read existing values when present
+ values.put(Settings.SHOULD_SYNC, cursor.getInt(0));
+ values.put(Settings.UNGROUPED_VISIBLE, cursor.getInt(1));
+ return fromBefore(values).setUngrouped(accountHasGroups);
+ } else {
+ // Nothing found, so treat as create
+ values.put(Settings.SHOULD_SYNC, DEFAULT_SHOULD_SYNC);
+ values.put(Settings.UNGROUPED_VISIBLE, DEFAULT_VISIBLE);
+ return fromAfter(values).setUngrouped(accountHasGroups);
+ }
+ } finally {
+ if (cursor != null) cursor.close();
+ }
+ }
+
+ public static GroupDelta fromBefore(ContentValues before) {
+ final GroupDelta entry = new GroupDelta();
+ entry.mBefore = before;
+ entry.mAfter = new ContentValues();
+ return entry;
+ }
+
+ public static GroupDelta fromAfter(ContentValues after) {
+ final GroupDelta entry = new GroupDelta();
+ entry.mBefore = null;
+ entry.mAfter = after;
+ return entry;
+ }
+
+ protected GroupDelta setUngrouped(boolean accountHasGroups) {
+ mUngrouped = true;
+ mAccountHasGroups = accountHasGroups;
+ return this;
+ }
+
+ @Override
+ public boolean beforeExists() {
+ return mBefore != null;
+ }
+
+ public boolean getShouldSync() {
+ return getAsInteger(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC,
+ DEFAULT_SHOULD_SYNC) != 0;
+ }
+
+ public boolean getVisible() {
+ return getAsInteger(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE,
+ DEFAULT_VISIBLE) != 0;
+ }
+
+ public void putShouldSync(boolean shouldSync) {
+ put(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC, shouldSync ? 1 : 0);
+ }
+
+ public void putVisible(boolean visible) {
+ put(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE, visible ? 1 : 0);
+ }
+
+ private String getAccountType() {
+ return (mBefore == null ? mAfter : mBefore).getAsString(Settings.ACCOUNT_TYPE);
+ }
+
+ public CharSequence getTitle(Context context) {
+ if (mUngrouped) {
+ final String customAllContactsName =
+ LocalizedNameResolver.getAllContactsName(context, getAccountType());
+ if (customAllContactsName != null) {
+ return customAllContactsName;
+ }
+ if (mAccountHasGroups) {
+ return context.getText(R.string.display_ungrouped);
+ } else {
+ return context.getText(R.string.display_all_contacts);
+ }
+ } else {
+ final Integer titleRes = getAsInteger(Groups.TITLE_RES);
+ if (titleRes != null && titleRes != 0) {
+ final String packageName = getAsString(Groups.RES_PACKAGE);
+ if (packageName != null) {
+ return context.getPackageManager().getText(packageName, titleRes, null);
+ }
+ }
+ return getAsString(Groups.TITLE);
+ }
+ }
+
+ /**
+ * Build a possible {@link ContentProviderOperation} to persist any
+ * changes to the {@link Groups} or {@link Settings} row described by
+ * this {@link GroupDelta}.
+ */
+ public ContentProviderOperation buildDiff() {
+ if (isInsert()) {
+ // Only allow inserts for Settings
+ if (mUngrouped) {
+ mAfter.remove(mIdColumn);
+ return ContentProviderOperation.newInsert(Settings.CONTENT_URI)
+ .withValues(mAfter)
+ .build();
+ }
+ else {
+ throw new IllegalStateException("Unexpected diff");
+ }
+ } else if (isUpdate()) {
+ if (mUngrouped) {
+ String accountName = this.getAsString(Settings.ACCOUNT_NAME);
+ String accountType = this.getAsString(Settings.ACCOUNT_TYPE);
+ String dataSet = this.getAsString(Settings.DATA_SET);
+ StringBuilder selection = new StringBuilder(Settings.ACCOUNT_NAME + "=? AND "
+ + Settings.ACCOUNT_TYPE + "=?");
+ String[] selectionArgs;
+ if (dataSet == null) {
+ selection.append(" AND " + Settings.DATA_SET + " IS NULL");
+ selectionArgs = new String[] {accountName, accountType};
+ } else {
+ selection.append(" AND " + Settings.DATA_SET + "=?");
+ selectionArgs = new String[] {accountName, accountType, dataSet};
+ }
+ return ContentProviderOperation.newUpdate(Settings.CONTENT_URI)
+ .withSelection(selection.toString(), selectionArgs)
+ .withValues(mAfter)
+ .build();
+ } else {
+ return ContentProviderOperation.newUpdate(
+ addCallerIsSyncAdapterParameter(Groups.CONTENT_URI))
+ .withSelection(Groups._ID + "=" + this.getId(), null)
+ .withValues(mAfter)
+ .build();
+ }
+ } else {
+ return null;
+ }
+ }
+ }
+
+ private static Uri addCallerIsSyncAdapterParameter(Uri uri) {
+ return uri.buildUpon()
+ .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
+ .build();
+ }
+
+ /**
+ * {@link Comparator} to sort by {@link Groups#_ID}.
+ */
+ private static Comparator<GroupDelta> sIdComparator = new Comparator<GroupDelta>() {
+ public int compare(GroupDelta object1, GroupDelta object2) {
+ final Long id1 = object1.getId();
+ final Long id2 = object2.getId();
+ if (id1 == null && id2 == null) {
+ return 0;
+ } else if (id1 == null) {
+ return -1;
+ } else if (id2 == null) {
+ return 1;
+ } else if (id1 < id2) {
+ return -1;
+ } else if (id1 > id2) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ };
+
+ /**
+ * Set of all {@link AccountDisplay} entries, one for each source.
+ */
+ protected static class AccountSet extends ArrayList<AccountDisplay> {
+ public ArrayList<ContentProviderOperation> buildDiff() {
+ final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
+ for (AccountDisplay account : this) {
+ account.buildDiff(diff);
+ }
+ return diff;
+ }
+ }
+
+ /**
+ * {@link GroupDelta} details for a single {@link AccountWithDataSet}, usually shown as
+ * children under a single expandable group.
+ */
+ protected static class AccountDisplay {
+ public final String mName;
+ public final String mType;
+ public final String mDataSet;
+ public final AccountInfo mAccountInfo;
+
+ public GroupDelta mUngrouped;
+ public ArrayList<GroupDelta> mSyncedGroups = Lists.newArrayList();
+ public ArrayList<GroupDelta> mUnsyncedGroups = Lists.newArrayList();
+
+ public GroupDelta getGroup(int position) {
+ if (position < mSyncedGroups.size()) {
+ return mSyncedGroups.get(position);
+ }
+ position -= mSyncedGroups.size();
+ return mUnsyncedGroups.get(position);
+ }
+
+ /**
+ * Build an {@link AccountDisplay} covering all {@link Groups} under the
+ * given {@link AccountWithDataSet}.
+ */
+ public AccountDisplay(ContentResolver resolver, AccountInfo accountInfo) {
+ mName = accountInfo.getAccount().name;
+ mType = accountInfo.getAccount().type;
+ mDataSet = accountInfo.getAccount().dataSet;
+ mAccountInfo = accountInfo;
+ }
+
+ /**
+ * Add the given {@link GroupDelta} internally, filing based on its
+ * {@link GroupDelta#getShouldSync()} status.
+ */
+ private void addGroup(GroupDelta group) {
+ if (group.getShouldSync()) {
+ mSyncedGroups.add(group);
+ } else {
+ mUnsyncedGroups.add(group);
+ }
+ }
+
+ /**
+ * Set the {@link GroupDelta#putShouldSync(boolean)} value for all
+ * children {@link GroupDelta} rows.
+ */
+ public void setShouldSync(boolean shouldSync) {
+ final Iterator<GroupDelta> oppositeChildren = shouldSync ?
+ mUnsyncedGroups.iterator() : mSyncedGroups.iterator();
+ while (oppositeChildren.hasNext()) {
+ final GroupDelta child = oppositeChildren.next();
+ setShouldSync(child, shouldSync, false);
+ oppositeChildren.remove();
+ }
+ }
+
+ public void setShouldSync(GroupDelta child, boolean shouldSync) {
+ setShouldSync(child, shouldSync, true);
+ }
+
+ /**
+ * Set {@link GroupDelta#putShouldSync(boolean)}, and file internally
+ * based on updated state.
+ */
+ public void setShouldSync(GroupDelta child, boolean shouldSync, boolean attemptRemove) {
+ child.putShouldSync(shouldSync);
+ if (shouldSync) {
+ if (attemptRemove) {
+ mUnsyncedGroups.remove(child);
+ }
+ mSyncedGroups.add(child);
+ Collections.sort(mSyncedGroups, sIdComparator);
+ } else {
+ if (attemptRemove) {
+ mSyncedGroups.remove(child);
+ }
+ mUnsyncedGroups.add(child);
+ }
+ }
+
+ /**
+ * Build set of {@link ContentProviderOperation} to persist any user
+ * changes to {@link GroupDelta} rows under this {@link AccountWithDataSet}.
+ */
+ public void buildDiff(ArrayList<ContentProviderOperation> diff) {
+ for (GroupDelta group : mSyncedGroups) {
+ final ContentProviderOperation oper = group.buildDiff();
+ if (oper != null) diff.add(oper);
+ }
+ for (GroupDelta group : mUnsyncedGroups) {
+ final ContentProviderOperation oper = group.buildDiff();
+ if (oper != null) diff.add(oper);
+ }
+ }
+ }
+
+ /**
+ * {@link ExpandableListAdapter} that shows {@link GroupDelta} settings,
+ * grouped by {@link AccountWithDataSet} type. Shows footer row when any groups are
+ * unsynced, as determined through {@link AccountDisplay#mUnsyncedGroups}.
+ */
+ protected static class DisplayAdapter extends BaseExpandableListAdapter {
+ private Context mContext;
+ private LayoutInflater mInflater;
+ private AccountTypeManager mAccountTypes;
+ private AccountSet mAccounts;
+
+ private boolean mChildWithPhones = false;
+
+ public DisplayAdapter(Context context) {
+ mContext = context;
+ mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ mAccountTypes = AccountTypeManager.getInstance(context);
+ }
+
+ public void setAccounts(AccountSet accounts) {
+ mAccounts = accounts;
+ notifyDataSetChanged();
+ }
+
+ /**
+ * In group descriptions, show the number of contacts with phone
+ * numbers, in addition to the total contacts.
+ */
+ public void setChildDescripWithPhones(boolean withPhones) {
+ mChildWithPhones = withPhones;
+ }
+
+ @Override
+ public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
+ ViewGroup parent) {
+ if (convertView == null) {
+ convertView = mInflater.inflate(
+ R.layout.custom_contact_list_filter_account, parent, false);
+ }
+
+ final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
+ final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
+
+ final AccountDisplay account = (AccountDisplay)this.getGroup(groupPosition);
+
+ text1.setText(account.mAccountInfo.getNameLabel());
+ text1.setVisibility(!account.mAccountInfo.isDeviceAccount()
+ || account.mAccountInfo.hasDistinctName()
+ ? View.VISIBLE : View.GONE);
+ text2.setText(account.mAccountInfo.getTypeLabel());
+
+ final int textColor = mContext.getResources().getColor(isExpanded
+ ? R.color.dialtacts_theme_color
+ : R.color.account_filter_text_color);
+ text1.setTextColor(textColor);
+ text2.setTextColor(textColor);
+
+ return convertView;
+ }
+
+ @Override
+ public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
+ View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = mInflater.inflate(
+ R.layout.custom_contact_list_filter_group, parent, false);
+ }
+
+ final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
+ final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
+ final CheckBox checkbox = (CheckBox)convertView.findViewById(android.R.id.checkbox);
+
+ final AccountDisplay account = mAccounts.get(groupPosition);
+ final GroupDelta child = (GroupDelta)this.getChild(groupPosition, childPosition);
+ if (child != null) {
+ // Handle normal group, with title and checkbox
+ final boolean groupVisible = child.getVisible();
+ checkbox.setVisibility(View.VISIBLE);
+ checkbox.setChecked(groupVisible);
+
+ final CharSequence groupTitle = child.getTitle(mContext);
+ text1.setText(groupTitle);
+ text2.setVisibility(View.GONE);
+ } else {
+ // When unknown child, this is "more" footer view
+ checkbox.setVisibility(View.GONE);
+ text1.setText(R.string.display_more_groups);
+ text2.setVisibility(View.GONE);
+ }
+
+ // Show divider at bottom only for the last child.
+ final View dividerBottom = convertView.findViewById(R.id.adapter_divider_bottom);
+ dividerBottom.setVisibility(isLastChild ? View.VISIBLE : View.GONE);
+
+ return convertView;
+ }
+
+ @Override
+ public Object getChild(int groupPosition, int childPosition) {
+ final AccountDisplay account = mAccounts.get(groupPosition);
+ final boolean validChild = childPosition >= 0
+ && childPosition < account.mSyncedGroups.size()
+ + account.mUnsyncedGroups.size();
+ if (validChild) {
+ return account.getGroup(childPosition);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public long getChildId(int groupPosition, int childPosition) {
+ final GroupDelta child = (GroupDelta)getChild(groupPosition, childPosition);
+ if (child != null) {
+ final Long childId = child.getId();
+ return childId != null ? childId : Long.MIN_VALUE;
+ } else {
+ return Long.MIN_VALUE;
+ }
+ }
+
+ @Override
+ public int getChildrenCount(int groupPosition) {
+ // Count is any synced groups, plus possible footer
+ final AccountDisplay account = mAccounts.get(groupPosition);
+ return account.mSyncedGroups.size() + account.mUnsyncedGroups.size();
+ }
+
+ @Override
+ public Object getGroup(int groupPosition) {
+ return mAccounts.get(groupPosition);
+ }
+
+ @Override
+ public int getGroupCount() {
+ if (mAccounts == null) {
+ return 0;
+ }
+ return mAccounts.size();
+ }
+
+ @Override
+ public long getGroupId(int groupPosition) {
+ return groupPosition;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Override
+ public boolean isChildSelectable(int groupPosition, int childPosition) {
+ return true;
+ }
+ }
+
+ /**
+ * Handle any clicks on {@link ExpandableListAdapter} children, which
+ * usually mean toggling its visible state.
+ */
+ @Override
+ public boolean onChildClick(ExpandableListView parent, View view, int groupPosition,
+ int childPosition, long id) {
+ final CheckBox checkbox = (CheckBox)view.findViewById(android.R.id.checkbox);
+
+ final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
+ final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
+ if (child != null) {
+ checkbox.toggle();
+ child.putVisible(checkbox.isChecked());
+ } else {
+ // Open context menu for bringing back unsynced
+ this.openContextMenu(view);
+ }
+ return true;
+ }
+
+ // TODO: move these definitions to framework constants when we begin
+ // defining this mode through <sync-adapter> tags
+ private static final int SYNC_MODE_UNSUPPORTED = 0;
+ private static final int SYNC_MODE_UNGROUPED = 1;
+ private static final int SYNC_MODE_EVERYTHING = 2;
+
+ protected int getSyncMode(AccountDisplay account) {
+ // TODO: read sync mode through <sync-adapter> definition
+ if (GoogleAccountType.ACCOUNT_TYPE.equals(account.mType) && account.mDataSet == null) {
+ return SYNC_MODE_EVERYTHING;
+ } else {
+ return SYNC_MODE_UNSUPPORTED;
+ }
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View view,
+ ContextMenu.ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, view, menuInfo);
+
+ // Bail if not working with expandable long-press, or if not child
+ if (!(menuInfo instanceof ExpandableListContextMenuInfo)) return;
+
+ final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
+ final int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
+ final int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
+
+ // Skip long-press on expandable parents
+ if (childPosition == -1) return;
+
+ final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
+ final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
+
+ // Ignore when selective syncing unsupported
+ final int syncMode = getSyncMode(account);
+ if (syncMode == SYNC_MODE_UNSUPPORTED) return;
+
+ if (child != null) {
+ showRemoveSync(menu, account, child, syncMode);
+ } else {
+ showAddSync(menu, account, syncMode);
+ }
+ }
+
+ protected void showRemoveSync(ContextMenu menu, final AccountDisplay account,
+ final GroupDelta child, final int syncMode) {
+ final CharSequence title = child.getTitle(this);
+
+ menu.setHeaderTitle(title);
+ menu.add(R.string.menu_sync_remove).setOnMenuItemClickListener(
+ new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ handleRemoveSync(account, child, syncMode, title);
+ return true;
+ }
+ });
+ }
+
+ protected void handleRemoveSync(final AccountDisplay account, final GroupDelta child,
+ final int syncMode, CharSequence title) {
+ final boolean shouldSyncUngrouped = account.mUngrouped.getShouldSync();
+ if (syncMode == SYNC_MODE_EVERYTHING && shouldSyncUngrouped
+ && !child.equals(account.mUngrouped)) {
+ // Warn before removing this group when it would cause ungrouped to stop syncing
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ final CharSequence removeMessage = this.getString(
+ R.string.display_warn_remove_ungrouped, title);
+ builder.setTitle(R.string.menu_sync_remove);
+ builder.setMessage(removeMessage);
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // Mark both this group and ungrouped to stop syncing
+ account.setShouldSync(account.mUngrouped, false);
+ account.setShouldSync(child, false);
+ mAdapter.notifyDataSetChanged();
+ }
+ });
+ builder.show();
+ } else {
+ // Mark this group to not sync
+ account.setShouldSync(child, false);
+ mAdapter.notifyDataSetChanged();
+ }
+ }
+
+ protected void showAddSync(ContextMenu menu, final AccountDisplay account, final int syncMode) {
+ menu.setHeaderTitle(R.string.dialog_sync_add);
+
+ // Create item for each available, unsynced group
+ for (final GroupDelta child : account.mUnsyncedGroups) {
+ if (!child.getShouldSync()) {
+ final CharSequence title = child.getTitle(this);
+ menu.add(title).setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ // Adding specific group for syncing
+ if (child.mUngrouped && syncMode == SYNC_MODE_EVERYTHING) {
+ account.setShouldSync(true);
+ } else {
+ account.setShouldSync(child, true);
+ }
+ mAdapter.notifyDataSetChanged();
+ return true;
+ }
+ });
+ }
+ }
+ }
+
+ private boolean hasUnsavedChanges() {
+ if (mAdapter == null || mAdapter.mAccounts == null) {
+ return false;
+ }
+ if (getCurrentListFilterType() != ContactListFilter.FILTER_TYPE_CUSTOM) {
+ return true;
+ }
+ final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
+ if (diff.isEmpty()) {
+ return false;
+ }
+ return true;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void doSaveAction() {
+ if (mAdapter == null || mAdapter.mAccounts == null) {
+ finish();
+ return;
+ }
+
+ setResult(RESULT_OK);
+
+ final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
+ if (diff.isEmpty()) {
+ finish();
+ return;
+ }
+
+ new UpdateTask(this).execute(diff);
+ }
+
+ /**
+ * Background task that persists changes to {@link Groups#GROUP_VISIBLE},
+ * showing spinner dialog to user while updating.
+ */
+ public static class UpdateTask extends
+ WeakAsyncTask<ArrayList<ContentProviderOperation>, Void, Void, Activity> {
+ private ProgressDialog mProgress;
+
+ public UpdateTask(Activity target) {
+ super(target);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void onPreExecute(Activity target) {
+ final Context context = target;
+
+ mProgress = ProgressDialog.show(
+ context, null, context.getText(R.string.savingDisplayGroups));
+
+ // Before starting this task, start an empty service to protect our
+ // process from being reclaimed by the system.
+ context.startService(new Intent(context, EmptyService.class));
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected Void doInBackground(
+ Activity target, ArrayList<ContentProviderOperation>... params) {
+ final Context context = target;
+ final ContentValues values = new ContentValues();
+ final ContentResolver resolver = context.getContentResolver();
+
+ try {
+ final ArrayList<ContentProviderOperation> diff = params[0];
+ resolver.applyBatch(ContactsContract.AUTHORITY, diff);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Problem saving display groups", e);
+ } catch (OperationApplicationException e) {
+ Log.e(TAG, "Problem saving display groups", e);
+ }
+
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void onPostExecute(Activity target, Void result) {
+ final Context context = target;
+
+ try {
+ mProgress.dismiss();
+ } catch (Exception e) {
+ Log.e(TAG, "Error dismissing progress dialog", e);
+ }
+
+ target.finish();
+
+ // Stop the service that was protecting us
+ context.stopService(new Intent(context, EmptyService.class));
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+
+ final MenuItem menuItem = menu.add(Menu.NONE, R.id.menu_save, Menu.NONE,
+ R.string.menu_custom_filter_save);
+ menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {
+ confirmFinish();
+ return true;
+ } else if (id == R.id.menu_save) {
+ this.doSaveAction();
+ return true;
+ } else {
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onBackPressed() {
+ confirmFinish();
+ }
+
+ private void confirmFinish() {
+ // Prompt the user whether they want to discard there customizations unless
+ // nothing will be changed.
+ if (hasUnsavedChanges()) {
+ new ConfirmNavigationDialogFragment().show(getFragmentManager(),
+ "ConfirmNavigationDialog");
+ } else {
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+ }
+
+ private int getCurrentListFilterType() {
+ return getIntent().getIntExtra(EXTRA_CURRENT_LIST_FILTER_TYPE,
+ ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ }
+
+ public static class ConfirmNavigationDialogFragment
+ extends DialogFragment implements DialogInterface.OnClickListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity(), getTheme())
+ .setMessage(R.string.leave_customize_confirmation_dialog_message)
+ .setNegativeButton(android.R.string.no, null)
+ .setPositiveButton(android.R.string.yes, this)
+ .create();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ if (i == DialogInterface.BUTTON_POSITIVE) {
+ getActivity().setResult(RESULT_CANCELED);
+ getActivity().finish();
+ }
+ }
+ }
+}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index 9ea8a1d65..f07c4a5a5 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -15,62 +15,232 @@
*/
package com.android.contacts.list;
+import android.accounts.Account;
+import android.app.Activity;
+import android.content.ActivityNotFoundException;
+import android.content.ContentResolver;
+import android.content.ContentUris;
import android.content.Context;
import android.content.CursorLoader;
import android.content.Intent;
+import android.content.Loader;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.PorterDuff;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
-import android.provider.ContactsContract.Contacts;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Directory;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.widget.SwipeRefreshLayout;
import android.text.TextUtils;
import android.util.Log;
+import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.widget.Button;
import android.widget.FrameLayout;
-import android.widget.ListView;
+import android.widget.ImageView;
+import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
+import android.widget.Toast;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.Experiments;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-import com.android.contacts.common.list.ProfileAndContactsLoader;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.editor.ContactEditorFragment;
-import com.android.contacts.common.util.AccountFilterUtil;
+import com.android.contacts.activities.ActionBarAdapter;
+import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.interactions.ContactDeletionInteraction;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction;
+import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.SharedPreferenceUtil;
+import com.android.contacts.util.SyncUtil;
+import com.android.contactsbind.FeatureHighlightHelper;
+import com.android.contactsbind.experiments.Flags;
+import com.google.common.util.concurrent.Futures;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.concurrent.Future;
/**
* Fragment containing a contact list used for browsing (as compared to
* picking a contact with one of the PICK intents).
*/
-public class DefaultContactBrowseListFragment extends ContactBrowseListFragment {
- private static final String TAG = DefaultContactBrowseListFragment.class.getSimpleName();
+public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
+ implements EnableGlobalSyncDialogFragment.Listener {
+
+ private static final String TAG = "DefaultListFragment";
+ private static final String ENABLE_DEBUG_OPTIONS_HIDDEN_CODE = "debug debug!";
+ private static final String KEY_DELETION_IN_PROGRESS = "deletionInProgress";
+ private static final String KEY_SEARCH_RESULT_CLICKED = "search_result_clicked";
- private static final int REQUEST_CODE_ACCOUNT_FILTER = 1;
+ private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
private View mSearchHeaderView;
- private View mAccountFilterHeader;
- private FrameLayout mProfileHeaderContainer;
- private View mProfileHeader;
- private Button mProfileMessage;
- private TextView mProfileTitle;
private View mSearchProgress;
+ private View mEmptyAccountView;
+ private View mEmptyHomeView;
+ private View mAccountFilterContainer;
private TextView mSearchProgressText;
- private class FilterHeaderClickListener implements OnClickListener {
+ private SwipeRefreshLayout mSwipeRefreshLayout;
+ private final Handler mHandler = new Handler();
+ private final Runnable mCancelRefresh = new Runnable() {
@Override
- public void onClick(View view) {
- AccountFilterUtil.startAccountFilterActivityForResult(
- DefaultContactBrowseListFragment.this,
- REQUEST_CODE_ACCOUNT_FILTER,
- getFilter());
+ public void run() {
+ if (mSwipeRefreshLayout.isRefreshing()) {
+ mSwipeRefreshLayout.setRefreshing(false);
+ }
}
- }
- private OnClickListener mFilterHeaderClickListener = new FilterHeaderClickListener();
+ };
+
+ private View mAlertContainer;
+ private TextView mAlertText;
+ private ImageView mAlertDismissIcon;
+ private int mReasonSyncOff = SyncUtil.SYNC_SETTING_SYNC_ON;
+
+ private boolean mContactsAvailable;
+ private boolean mEnableDebugMenuOptions;
+ private boolean mIsRecreatedInstance;
+ private boolean mOptionsMenuContactsAvailable;
+
+ private boolean mCanSetActionBar = false;
+
+ /**
+ * If {@link #configureFragment()} is already called. Used to avoid calling it twice
+ * in {@link #onResume()}.
+ * (This initialization only needs to be done once in onResume() when the Activity was just
+ * created from scratch -- i.e. onCreate() was just called)
+ */
+ private boolean mFragmentInitialized;
+
+ private boolean mFromOnNewIntent;
+
+ /**
+ * This is to tell whether we need to restart ContactMultiDeletionInteraction and set listener.
+ * if screen is rotated while deletion dialog is shown.
+ */
+ private boolean mIsDeletionInProgress;
+
+ /**
+ * This is to disable {@link #onOptionsItemSelected} when we trying to stop the
+ * activity/fragment.
+ */
+ private boolean mDisableOptionItemSelected;
+
+ private boolean mSearchResultClicked;
+
+ private ActionBarAdapter mActionBarAdapter;
+ private PeopleActivity mActivity;
+ private ContactsRequest mContactsRequest;
+ private ContactListFilterController mContactListFilterController;
+
+ private Future<List<AccountInfo>> mWritableAccountsFuture;
+
+ private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
+ @Override
+ public void onAction(int action) {
+ switch (action) {
+ case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
+ displayCheckBoxes(true);
+ startSearchOrSelectionMode();
+ break;
+ case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
+ if (!mIsRecreatedInstance) {
+ Logger.logScreenView(mActivity, ScreenEvent.ScreenType.SEARCH);
+ }
+ startSearchOrSelectionMode();
+ break;
+ case ActionBarAdapter.Listener.Action.BEGIN_STOPPING_SEARCH_AND_SELECTION_MODE:
+ mActivity.showFabWithAnimation(/* showFab */ true);
+ break;
+ case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
+ // If queryString is empty, fragment data will not be reloaded,
+ // so hamburger promo should be checked now.
+ // Otherwise, promo should be checked and displayed after reloading, b/30706521.
+ if (TextUtils.isEmpty(getQueryString())) {
+ maybeShowHamburgerFeatureHighlight();
+ }
+ setQueryTextToFragment("");
+ maybeHideCheckBoxes();
+ mActivity.invalidateOptionsMenu();
+ mActivity.showFabWithAnimation(/* showFab */ true);
+
+ // Alert user if sync is off and not dismissed before
+ setSyncOffAlert();
+
+ // Determine whether the account has pullToRefresh feature
+ setSwipeRefreshLayoutEnabledOrNot(getFilter());
+ break;
+ case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
+ final String queryString = mActionBarAdapter.getQueryString();
+ setQueryTextToFragment(queryString);
+ updateDebugOptionsVisibility(
+ ENABLE_DEBUG_OPTIONS_HIDDEN_CODE.equals(queryString));
+ break;
+ default:
+ throw new IllegalStateException("Unknown ActionBarAdapter action: " + action);
+ }
+ }
+
+ private void startSearchOrSelectionMode() {
+ configureContactListFragment();
+ maybeHideCheckBoxes();
+ mActivity.invalidateOptionsMenu();
+ mActivity.showFabWithAnimation(/* showFab */ false);
+
+ final Context context = getContext();
+ if (!SharedPreferenceUtil.getHamburgerPromoTriggerActionHappenedBefore(context)) {
+ SharedPreferenceUtil.setHamburgerPromoTriggerActionHappenedBefore(context);
+ }
+ }
+
+ private void updateDebugOptionsVisibility(boolean visible) {
+ if (mEnableDebugMenuOptions != visible) {
+ mEnableDebugMenuOptions = visible;
+ mActivity.invalidateOptionsMenu();
+ }
+ }
+
+ private void setQueryTextToFragment(String query) {
+ setQueryString(query, true);
+ setVisibleScrollbarEnabled(!isSearchMode());
+ }
+
+ @Override
+ public void onUpButtonPressed() {
+ mActivity.onBackPressed();
+ }
+ };
+
+ private final View.OnClickListener mAddContactListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ AccountFilterUtil.startEditorIntent(getContext(), mActivity.getIntent(), getFilter());
+ }
+ };
public DefaultContactBrowseListFragment() {
setPhotoLoaderEnabled(true);
@@ -79,11 +249,136 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
setQuickContactEnabled(false);
setSectionHeaderDisplayEnabled(true);
setVisibleScrollbarEnabled(true);
+ setDisplayDirectoryHeader(false);
+ setHasOptionsMenu(true);
+ }
+
+ /**
+ * Whether a search result was clicked by the user. Tracked so that we can distinguish
+ * between exiting the search mode after a result was clicked from exiting w/o clicking
+ * any search result.
+ */
+ public boolean wasSearchResultClicked() {
+ return mSearchResultClicked;
+ }
+
+ /**
+ * Resets whether a search result was clicked by the user to false.
+ */
+ public void resetSearchResultClicked() {
+ mSearchResultClicked = false;
}
@Override
public CursorLoader createCursorLoader(Context context) {
- return new ProfileAndContactsLoader(context);
+ return new FavoritesAndContactsLoader(context);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (loader.getId() == Directory.DEFAULT) {
+ bindListHeader(data == null ? 0 : data.getCount());
+ }
+ super.onLoadFinished(loader, data);
+ if (!isSearchMode()) {
+ maybeShowHamburgerFeatureHighlight();
+ }
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.updateOverflowButtonColor();
+ }
+ }
+
+ private void maybeShowHamburgerFeatureHighlight() {
+ if (mActionBarAdapter!= null && !mActionBarAdapter.isSearchMode()
+ && !mActionBarAdapter.isSelectionMode()
+ && !isTalkbackOnAndOnPreLollipopMr1()
+ && SharedPreferenceUtil.getShouldShowHamburgerPromo(getContext())) {
+ if (FeatureHighlightHelper.showHamburgerFeatureHighlight(mActivity)) {
+ SharedPreferenceUtil.setHamburgerPromoDisplayedBefore(getContext());
+ }
+ }
+ }
+
+ // There's a crash if we show feature highlight when Talkback is on, on API 21 and below.
+ // See b/31180524.
+ private boolean isTalkbackOnAndOnPreLollipopMr1(){
+ return ((AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE))
+ .isTouchExplorationEnabled()
+ && !CompatUtils.isLollipopMr1Compatible();
+ }
+
+ private void bindListHeader(int numberOfContacts) {
+ final ContactListFilter filter = getFilter();
+ // If the phone has at least one Google account whose sync status is unsyncable or pending
+ // or active, we have to make mAccountFilterContainer visible.
+ if (!isSearchMode() && numberOfContacts <= 0 && shouldShowEmptyView(filter)) {
+ if (filter != null && filter.isContactsFilterType()) {
+ makeViewVisible(mEmptyHomeView);
+ } else {
+ makeViewVisible(mEmptyAccountView);
+ }
+ return;
+ }
+ makeViewVisible(mAccountFilterContainer);
+ if (isSearchMode()) {
+ hideHeaderAndAddPadding(getContext(), getListView(), mAccountFilterContainer);
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ bindListHeaderCustom(getListView(), mAccountFilterContainer);
+ } else if (filter.filterType != ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
+ filter.accountName, filter.accountType, filter.dataSet);
+ bindListHeader(getContext(), getListView(), mAccountFilterContainer,
+ accountWithDataSet, numberOfContacts);
+ } else {
+ hideHeaderAndAddPadding(getContext(), getListView(), mAccountFilterContainer);
+ }
+ }
+
+ /**
+ * If at least one Google account is unsyncable or its sync status is pending or active, we
+ * should not show empty view even if the number of contacts is 0. We should show sync status
+ * with empty list instead.
+ */
+ private boolean shouldShowEmptyView(ContactListFilter filter) {
+ if (filter == null) {
+ return true;
+ }
+ // TODO(samchen) : Check ContactListFilter.FILTER_TYPE_CUSTOM
+ if (ContactListFilter.FILTER_TYPE_DEFAULT == filter.filterType
+ || ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS == filter.filterType) {
+ final List<AccountInfo> syncableAccounts =
+ AccountTypeManager.getInstance(getContext()).getWritableGoogleAccounts();
+
+ if (syncableAccounts != null && syncableAccounts.size() > 0) {
+ for (AccountInfo info : syncableAccounts) {
+ // Won't be null because Google accounts have a non-null name and type.
+ final Account account = info.getAccount().getAccountOrNull();
+ if (SyncUtil.isSyncStatusPendingOrActive(account)
+ || SyncUtil.isUnsyncableGoogleAccount(account)) {
+ return false;
+ }
+ }
+ }
+ } else if (ContactListFilter.FILTER_TYPE_ACCOUNT == filter.filterType) {
+ final Account account = new Account(filter.accountName, filter.accountType);
+ return !(SyncUtil.isSyncStatusPendingOrActive(account)
+ || SyncUtil.isUnsyncableGoogleAccount(account));
+ }
+ return true;
+ }
+
+ // Show the view that's specified by id and hide the other two.
+ private void makeViewVisible(View view) {
+ mEmptyAccountView.setVisibility(view == mEmptyAccountView ? View.VISIBLE : View.GONE);
+ mEmptyHomeView.setVisibility(view == mEmptyHomeView ? View.VISIBLE : View.GONE);
+ mAccountFilterContainer.setVisibility(
+ view == mAccountFilterContainer ? View.VISIBLE : View.GONE);
+ }
+
+ public void scrollToTop() {
+ if (getListView() != null) {
+ getListView().setSelection(0);
+ }
}
@Override
@@ -92,7 +387,16 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
if (uri == null) {
return;
}
- viewContact(uri, getAdapter().isEnterpriseContact(position));
+ if (getAdapter().isDisplayingCheckBoxes()) {
+ super.onItemClick(position, id);
+ return;
+ } else {
+ if (isSearchMode()) {
+ mSearchResultClicked = true;
+ Logger.logSearchEvent(createSearchStateForSearchResultClick(position));
+ }
+ }
+ viewContact(position, uri, getAdapter().isEnterpriseContact(position));
}
@Override
@@ -106,25 +410,90 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
}
@Override
+ public ContactListFilter getFilter() {
+ return mContactListFilterController.getFilter();
+ }
+
+ @Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- return inflater.inflate(R.layout.contact_list_content, null);
+ final View view = inflater.inflate(R.layout.contact_list_content, null);
+
+ mAccountFilterContainer = view.findViewById(R.id.account_filter_header_container);
+
+ // Add empty main view and account view to list.
+ final FrameLayout contactListLayout = (FrameLayout) view.findViewById(R.id.contact_list);
+ mEmptyAccountView = getEmptyAccountView(inflater);
+ mEmptyHomeView = getEmptyHomeView(inflater);
+ contactListLayout.addView(mEmptyAccountView);
+ contactListLayout.addView(mEmptyHomeView);
+
+ return view;
+ }
+
+ private View getEmptyHomeView(LayoutInflater inflater) {
+ final View emptyHomeView = inflater.inflate(R.layout.empty_home_view, null);
+ // Set image margins.
+ final ImageView image = (ImageView) emptyHomeView.findViewById(R.id.empty_home_image);
+ final LayoutParams params = (LayoutParams) image.getLayoutParams();
+ final int screenHeight = getResources().getDisplayMetrics().heightPixels;
+ final int marginTop = screenHeight / 2 -
+ getResources().getDimensionPixelSize(R.dimen.empty_home_view_image_offset) ;
+ params.setMargins(0, marginTop, 0, 0);
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ image.setLayoutParams(params);
+
+ // Set up add contact button.
+ final Button addContactButton =
+ (Button) emptyHomeView.findViewById(R.id.add_contact_button);
+ addContactButton.setOnClickListener(mAddContactListener);
+ return emptyHomeView;
+ }
+
+ private View getEmptyAccountView(LayoutInflater inflater) {
+ final View emptyAccountView = inflater.inflate(R.layout.empty_account_view, null);
+ // Set image margins.
+ final ImageView image = (ImageView) emptyAccountView.findViewById(R.id.empty_account_image);
+ final LayoutParams params = (LayoutParams) image.getLayoutParams();
+ final int height = getResources().getDisplayMetrics().heightPixels;
+ final int divisor =
+ getResources().getInteger(R.integer.empty_account_view_image_margin_divisor);
+ final int offset =
+ getResources().getDimensionPixelSize(R.dimen.empty_account_view_image_offset);
+ params.setMargins(0, height / divisor + offset, 0, 0);
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ image.setLayoutParams(params);
+
+ // Set up add contact button.
+ final Button addContactButton =
+ (Button) emptyAccountView.findViewById(R.id.add_contact_button);
+ addContactButton.setOnClickListener(mAddContactListener);
+ return emptyAccountView;
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+ mIsRecreatedInstance = (savedState != null);
+ mContactListFilterController = ContactListFilterController.getInstance(getContext());
+ mContactListFilterController.checkFilterValidity(false);
+ // Use FILTER_TYPE_ALL_ACCOUNTS filter if the instance is not a re-created one.
+ // This is useful when user upgrades app while an account filter was
+ // stored in sharedPreference in a previous version of Contacts app.
+ final ContactListFilter filter = mIsRecreatedInstance
+ ? getFilter()
+ : AccountFilterUtil.createContactsFilter(getContext());
+ setContactListFilter(filter);
}
@Override
protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
super.onCreateView(inflater, container);
- mAccountFilterHeader = getView().findViewById(R.id.account_filter_header_container);
- mAccountFilterHeader.setOnClickListener(mFilterHeaderClickListener);
-
- // Create an empty user profile header and hide it for now (it will be visible if the
- // contacts list will have no user profile).
- addEmptyUserProfileHeader(inflater);
- showEmptyUserProfile(false);
+ initSwipeRefreshLayout();
// Putting the header view inside a container will allow us to make
// it invisible later. See checkHeaderViewVisibility()
- FrameLayout headerContainer = new FrameLayout(inflater.getContext());
+ final FrameLayout headerContainer = new FrameLayout(inflater.getContext());
mSearchHeaderView = inflater.inflate(R.layout.search_header, null, false);
headerContainer.addView(mSearchHeaderView);
getListView().addHeaderView(headerContainer, null, false);
@@ -132,6 +501,284 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
mSearchProgress = getView().findViewById(R.id.search_progress);
mSearchProgressText = (TextView) mSearchHeaderView.findViewById(R.id.totalContactsText);
+
+ mAlertContainer = getView().findViewById(R.id.alert_container);
+ mAlertText = (TextView) mAlertContainer.findViewById(R.id.alert_text);
+ mAlertDismissIcon = (ImageView) mAlertContainer.findViewById(R.id.alert_dismiss_icon);
+ mAlertText.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ turnSyncOn();
+ }
+ });
+ mAlertDismissIcon.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ dismiss();
+ }
+ });
+
+ mAlertContainer.setVisibility(View.GONE);
+ }
+
+ private void turnSyncOn() {
+ final ContactListFilter filter = getFilter();
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT
+ && mReasonSyncOff == SyncUtil.SYNC_SETTING_ACCOUNT_SYNC_OFF) {
+ ContentResolver.setSyncAutomatically(
+ new Account(filter.accountName, filter.accountType),
+ ContactsContract.AUTHORITY, true);
+ mAlertContainer.setVisibility(View.GONE);
+ } else {
+ final EnableGlobalSyncDialogFragment dialog = new
+ EnableGlobalSyncDialogFragment();
+ dialog.show(this, filter);
+ }
+ }
+
+ @Override
+ public void onEnableAutoSync(ContactListFilter filter) {
+ // Turn on auto-sync
+ ContentResolver.setMasterSyncAutomatically(true);
+
+ // This should be OK (won't block) because this only happens after a user action
+ final List<AccountInfo> accountInfos = Futures.getUnchecked(mWritableAccountsFuture);
+ // Also enable Contacts sync
+ final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(accountInfos);
+ final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+ if (syncableAccounts != null && syncableAccounts.size() > 0) {
+ for (Account account : syncableAccounts) {
+ ContentResolver.setSyncAutomatically(new Account(account.name, account.type),
+ ContactsContract.AUTHORITY, true);
+ }
+ }
+ mAlertContainer.setVisibility(View.GONE);
+ }
+
+ private void dismiss() {
+ if (mReasonSyncOff == SyncUtil.SYNC_SETTING_GLOBAL_SYNC_OFF) {
+ SharedPreferenceUtil.incNumOfDismissesForAutoSyncOff(getContext());
+ } else if (mReasonSyncOff == SyncUtil.SYNC_SETTING_ACCOUNT_SYNC_OFF) {
+ SharedPreferenceUtil.incNumOfDismissesForAccountSyncOff(
+ getContext(), getFilter().accountName);
+ }
+ mAlertContainer.setVisibility(View.GONE);
+ }
+
+ private void initSwipeRefreshLayout() {
+ mSwipeRefreshLayout = (SwipeRefreshLayout) mView.findViewById(R.id.swipe_refresh);
+ if (mSwipeRefreshLayout == null) {
+ return;
+ }
+
+ mSwipeRefreshLayout.setEnabled(true);
+ // Request sync contacts
+ mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
+ @Override
+ public void onRefresh() {
+ mHandler.removeCallbacks(mCancelRefresh);
+
+ final boolean isNetworkConnected = SyncUtil.isNetworkConnected(getContext());
+ if (!isNetworkConnected) {
+ mSwipeRefreshLayout.setRefreshing(false);
+ ((PeopleActivity)getActivity()).showConnectionErrorMsg();
+ return;
+ }
+
+ syncContacts(getFilter());
+ mHandler.postDelayed(mCancelRefresh, Flags.getInstance()
+ .getInteger(Experiments.PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS));
+ }
+ });
+ mSwipeRefreshLayout.setColorSchemeResources(
+ R.color.swipe_refresh_color1,
+ R.color.swipe_refresh_color2,
+ R.color.swipe_refresh_color3,
+ R.color.swipe_refresh_color4);
+ mSwipeRefreshLayout.setDistanceToTriggerSync(
+ (int) getResources().getDimension(R.dimen.pull_to_refresh_distance));
+ }
+
+ /**
+ * Request sync for the Google accounts (not include Google+ accounts) specified by the given
+ * filter.
+ */
+ private void syncContacts(ContactListFilter filter) {
+ if (filter == null) {
+ return;
+ }
+
+ final Bundle bundle = new Bundle();
+ bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
+ bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+
+ final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(
+ Futures.getUnchecked(mWritableAccountsFuture));
+ final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+ if (syncableAccounts != null && syncableAccounts.size() > 0) {
+ for (Account account : syncableAccounts) {
+ // We can prioritize Contacts sync if sync is not initialized yet.
+ if (!SyncUtil.isSyncStatusPendingOrActive(account)
+ || SyncUtil.isUnsyncableGoogleAccount(account)) {
+ ContentResolver.requestSync(account, ContactsContract.AUTHORITY, bundle);
+ }
+ }
+ }
+ }
+
+ private void setSyncOffAlert() {
+ final ContactListFilter filter = getFilter();
+ final Account account = filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT
+ && filter.isGoogleAccountType()
+ ? new Account(filter.accountName, filter.accountType) : null;
+
+ if (account == null && !filter.isContactsFilterType()) {
+ mAlertContainer.setVisibility(View.GONE);
+ } else {
+ mReasonSyncOff = SyncUtil.calculateReasonSyncOff(getContext(), account);
+ final boolean isAlertVisible =
+ SyncUtil.isAlertVisible(getContext(), account, mReasonSyncOff);
+ setSyncOffMsg(mReasonSyncOff);
+ mAlertContainer.setVisibility(isAlertVisible ? View.VISIBLE : View.GONE);
+ }
+ }
+
+ private void setSyncOffMsg(int reason) {
+ final Resources resources = getResources();
+ switch (reason) {
+ case SyncUtil.SYNC_SETTING_GLOBAL_SYNC_OFF:
+ mAlertText.setText(resources.getString(R.string.auto_sync_off));
+ break;
+ case SyncUtil.SYNC_SETTING_ACCOUNT_SYNC_OFF:
+ mAlertText.setText(resources.getString(R.string.account_sync_off));
+ break;
+ default:
+ }
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ mActivity = (PeopleActivity) getActivity();
+ mActionBarAdapter = new ActionBarAdapter(mActivity, mActionBarListener,
+ mActivity.getSupportActionBar(), mActivity.getToolbar(),
+ R.string.enter_contact_name);
+ mActionBarAdapter.setShowHomeIcon(true);
+ initializeActionBarAdapter(savedInstanceState);
+ if (isSearchMode()) {
+ mActionBarAdapter.setFocusOnSearchView();
+ }
+
+ setCheckBoxListListener(new CheckBoxListListener());
+ setOnContactListActionListener(new ContactBrowserActionListener());
+ if (savedInstanceState != null) {
+ if (savedInstanceState.getBoolean(KEY_DELETION_IN_PROGRESS)) {
+ deleteSelectedContacts();
+ }
+ mSearchResultClicked = savedInstanceState.getBoolean(KEY_SEARCH_RESULT_CLICKED);
+ }
+
+ setDirectorySearchMode();
+ mCanSetActionBar = true;
+ }
+
+ public void initializeActionBarAdapter(Bundle savedInstanceState) {
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.initialize(savedInstanceState, mContactsRequest);
+ }
+ }
+
+ private void configureFragment() {
+ if (mFragmentInitialized && !mFromOnNewIntent) {
+ return;
+ }
+
+ mFragmentInitialized = true;
+
+ if (mFromOnNewIntent || !mIsRecreatedInstance) {
+ mFromOnNewIntent = false;
+ configureFragmentForRequest();
+ }
+
+ configureContactListFragment();
+ }
+
+ private void configureFragmentForRequest() {
+ ContactListFilter filter = null;
+ final int actionCode = mContactsRequest.getActionCode();
+ boolean searchMode = mContactsRequest.isSearchMode();
+ switch (actionCode) {
+ case ContactsRequest.ACTION_ALL_CONTACTS:
+ filter = AccountFilterUtil.createContactsFilter(getContext());
+ break;
+ case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
+ filter = ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY);
+ break;
+
+ case ContactsRequest.ACTION_FREQUENT:
+ case ContactsRequest.ACTION_STREQUENT:
+ case ContactsRequest.ACTION_STARRED:
+ case ContactsRequest.ACTION_VIEW_CONTACT:
+ default:
+ break;
+ }
+
+ if (filter != null) {
+ setContactListFilter(filter);
+ searchMode = false;
+ }
+
+ if (mContactsRequest.getContactUri() != null) {
+ searchMode = false;
+ }
+
+ mActionBarAdapter.setSearchMode(searchMode);
+ configureContactListFragmentForRequest();
+ }
+
+ private void configureContactListFragmentForRequest() {
+ final Uri contactUri = mContactsRequest.getContactUri();
+ if (contactUri != null) {
+ setSelectedContactUri(contactUri);
+ }
+
+ setQueryString(mActionBarAdapter.getQueryString(), true);
+ setVisibleScrollbarEnabled(!isSearchMode());
+ }
+
+ private void setDirectorySearchMode() {
+ if (mContactsRequest != null && mContactsRequest.isDirectorySearchEnabled()) {
+ setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
+ } else {
+ setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ configureFragment();
+ maybeShowHamburgerFeatureHighlight();
+ // Re-register the listener, which may have been cleared when onSaveInstanceState was
+ // called. See also: onSaveInstanceState
+ mActionBarAdapter.setListener(mActionBarListener);
+ mDisableOptionItemSelected = false;
+ maybeHideCheckBoxes();
+
+ mWritableAccountsFuture = AccountTypeManager.getInstance(getContext()).filterAccountsAsync(
+ AccountTypeManager.writableFilter());
+ }
+
+ private void maybeHideCheckBoxes() {
+ if (!mActionBarAdapter.isSelectionMode()) {
+ displayCheckBoxes(false);
+ }
+ }
+
+ public ActionBarAdapter getActionBarAdapter(){
+ return mActionBarAdapter;
}
@Override
@@ -149,8 +796,6 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
}
private void checkHeaderViewVisibility() {
- updateFilterHeaderView();
-
// Hide the search header by default.
if (mSearchHeaderView != null) {
mSearchHeaderView.setVisibility(View.GONE);
@@ -158,102 +803,447 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
}
@Override
- public void setFilter(ContactListFilter filter) {
- super.setFilter(filter);
- updateFilterHeaderView();
+ protected void setListHeader() {
+ if (!isSearchMode()) {
+ return;
+ }
+ ContactListAdapter adapter = getAdapter();
+ if (adapter == null) {
+ return;
+ }
+
+ // In search mode we only display the header if there is nothing found
+ if (TextUtils.isEmpty(getQueryString()) || !adapter.areAllPartitionsEmpty()) {
+ mSearchHeaderView.setVisibility(View.GONE);
+ showSearchProgress(false);
+ } else {
+ mSearchHeaderView.setVisibility(View.VISIBLE);
+ if (adapter.isLoading()) {
+ mSearchProgressText.setText(R.string.search_results_searching);
+ showSearchProgress(true);
+ } else {
+ mSearchProgressText.setText(R.string.listFoundAllContactsZero);
+ mSearchProgressText.sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_VIEW_SELECTED);
+ showSearchProgress(false);
+ }
+ }
+ }
+
+ public SwipeRefreshLayout getSwipeRefreshLayout() {
+ return mSwipeRefreshLayout;
}
- private void updateFilterHeaderView() {
- if (mAccountFilterHeader == null) {
- return; // Before onCreateView -- just ignore it.
+ private final class CheckBoxListListener implements OnCheckBoxListActionListener {
+ @Override
+ public void onStartDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(true);
+ mActivity.invalidateOptionsMenu();
}
- final ContactListFilter filter = getFilter();
- if (filter != null && !isSearchMode()) {
- final boolean shouldShowHeader = AccountFilterUtil.updateAccountFilterTitleForPeople(
- mAccountFilterHeader, filter, false);
- mAccountFilterHeader.setVisibility(shouldShowHeader ? View.VISIBLE : View.GONE);
- } else {
- mAccountFilterHeader.setVisibility(View.GONE);
+
+ @Override
+ public void onSelectedContactIdsChanged() {
+ mActionBarAdapter.setSelectionCount(getSelectedContactIds().size());
+ mActivity.invalidateOptionsMenu();
+ mActionBarAdapter.updateOverflowButtonColor();
+ }
+
+ @Override
+ public void onStopDisplayingCheckBoxes() {
+ mActionBarAdapter.setSelectionMode(false);
}
}
- @Override
- protected void setProfileHeader() {
- mUserProfileExists = getAdapter().hasProfile();
- showEmptyUserProfile(!mUserProfileExists && !isSearchMode());
+ public void setFilterAndUpdateTitle(ContactListFilter filter) {
+ setFilterAndUpdateTitle(filter, true);
+ }
- if (isSearchMode()) {
- ContactListAdapter adapter = getAdapter();
- if (adapter == null) {
- return;
+ private void setFilterAndUpdateTitle(ContactListFilter filter, boolean restoreSelectedUri) {
+ setContactListFilter(filter);
+ updateListFilter(filter, restoreSelectedUri);
+ mActivity.setTitle(AccountFilterUtil.getActionBarTitleForFilter(mActivity, filter));
+
+ // Alert user if sync is off and not dismissed before
+ setSyncOffAlert();
+
+ // Determine whether the account has pullToRefresh feature
+ setSwipeRefreshLayoutEnabledOrNot(filter);
+ }
+
+ private void setSwipeRefreshLayoutEnabledOrNot(ContactListFilter filter) {
+ final SwipeRefreshLayout swipeRefreshLayout = getSwipeRefreshLayout();
+ if (swipeRefreshLayout == null) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Can not load swipeRefreshLayout, swipeRefreshLayout is null");
}
+ return;
+ }
- // In search mode we only display the header if there is nothing found
- if (TextUtils.isEmpty(getQueryString()) || !adapter.areAllPartitionsEmpty()) {
- mSearchHeaderView.setVisibility(View.GONE);
- showSearchProgress(false);
+ swipeRefreshLayout.setRefreshing(false);
+ swipeRefreshLayout.setEnabled(false);
+
+ if (filter != null && !mActionBarAdapter.isSearchMode()
+ && !mActionBarAdapter.isSelectionMode()) {
+ if (filter.isSyncable()
+ || (filter.shouldShowSyncState()
+ && SyncUtil.hasSyncableAccount(AccountTypeManager.getInstance(getContext())))) {
+ swipeRefreshLayout.setEnabled(true);
+ }
+ }
+ }
+
+ private void configureContactListFragment() {
+ // Filter may be changed when activity is in background.
+ setFilterAndUpdateTitle(getFilter());
+ setVerticalScrollbarPosition(getScrollBarPosition());
+ setSelectionVisible(false);
+ mActivity.invalidateOptionsMenu();
+ }
+
+ private int getScrollBarPosition() {
+ final Locale locale = Locale.getDefault();
+ final boolean isRTL =
+ TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL;
+ return isRTL ? View.SCROLLBAR_POSITION_LEFT : View.SCROLLBAR_POSITION_RIGHT;
+ }
+
+ private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
+ ContactBrowserActionListener() {}
+
+ @Override
+ public void onSelectionChange() {
+ }
+
+ @Override
+ public void onViewContactAction(int position, Uri contactLookupUri,
+ boolean isEnterpriseContact) {
+ if (isEnterpriseContact) {
+ // No implicit intent as user may have a different contacts app in work profile.
+ ContactsContract.QuickContact.showQuickContact(getContext(), new Rect(),
+ contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED, null);
} else {
- mSearchHeaderView.setVisibility(View.VISIBLE);
- if (adapter.isLoading()) {
- mSearchProgressText.setText(R.string.search_results_searching);
- showSearchProgress(true);
+ final int previousScreen;
+ if (isSearchMode()) {
+ previousScreen = ScreenEvent.ScreenType.SEARCH;
} else {
- mSearchProgressText.setText(R.string.listFoundAllContactsZero);
- mSearchProgressText.sendAccessibilityEvent(
- AccessibilityEvent.TYPE_VIEW_SELECTED);
- showSearchProgress(false);
+ if (isAllContactsFilter(getFilter())) {
+ if (position < getAdapter().getNumberOfFavorites()) {
+ previousScreen = ScreenEvent.ScreenType.FAVORITES;
+ } else {
+ previousScreen = ScreenEvent.ScreenType.ALL_CONTACTS;
+ }
+ } else {
+ previousScreen = ScreenEvent.ScreenType.LIST_ACCOUNT;
+ }
}
+
+ Logger.logListEvent(ListEvent.ActionType.CLICK,
+ /* listType */ getListTypeIncludingSearch(),
+ /* count */ getAdapter().getCount(),
+ /* clickedIndex */ position, /* numSelected */ 0);
+
+ ImplicitIntentsUtil.startQuickContact(
+ getActivity(), contactLookupUri, previousScreen);
+ }
+ }
+
+ @Override
+ public void onDeleteContactAction(Uri contactUri) {
+ ContactDeletionInteraction.start(mActivity, contactUri, false);
+ }
+
+ @Override
+ public void onFinishAction() {
+ mActivity.onBackPressed();
+ }
+
+ @Override
+ public void onInvalidSelection() {
+ ContactListFilter filter;
+ ContactListFilter currentFilter = getFilter();
+ if (currentFilter != null
+ && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ filter = AccountFilterUtil.createContactsFilter(getContext());
+ setFilterAndUpdateTitle(filter);
+ } else {
+ filter = ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
+ setFilterAndUpdateTitle(filter, /* restoreSelectedUri */ false);
}
- showEmptyUserProfile(false);
+ setContactListFilter(filter);
+ }
+ }
+
+ private boolean isAllContactsFilter(ContactListFilter filter) {
+ return filter != null && filter.isContactsFilterType();
+ }
+
+ public void setContactsAvailable(boolean contactsAvailable) {
+ mContactsAvailable = contactsAvailable;
+ }
+
+ /**
+ * Set filter via ContactListFilterController
+ */
+ private void setContactListFilter(ContactListFilter filter) {
+ mContactListFilterController.setContactListFilter(filter,
+ /* persistent */ isAllContactsFilter(filter));
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ if (!mContactsAvailable || mActivity.isInSecondLevel()) {
+ // If contacts aren't available or this fragment is not visible, hide all menu items.
+ return;
}
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.people_options, menu);
}
@Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_CODE_ACCOUNT_FILTER) {
- if (getActivity() != null) {
- AccountFilterUtil.handleAccountFilterResult(
- ContactListFilterController.getInstance(getActivity()), resultCode, data);
- } else {
- Log.e(TAG, "getActivity() returns null during Fragment#onActivityResult()");
+ public void onPrepareOptionsMenu(Menu menu) {
+ mOptionsMenuContactsAvailable = mContactsAvailable;
+ if (!mOptionsMenuContactsAvailable) {
+ return;
+ }
+
+ final boolean isSearchOrSelectionMode = mActionBarAdapter.isSearchMode()
+ || mActionBarAdapter.isSelectionMode();
+ makeMenuItemVisible(menu, R.id.menu_search, !isSearchOrSelectionMode);
+
+ final boolean showSelectedContactOptions = mActionBarAdapter.isSelectionMode()
+ && getSelectedContactIds().size() != 0;
+ makeMenuItemVisible(menu, R.id.menu_share, showSelectedContactOptions);
+ makeMenuItemVisible(menu, R.id.menu_delete, showSelectedContactOptions);
+ final boolean showLinkContactsOptions = mActionBarAdapter.isSelectionMode()
+ && getSelectedContactIds().size() > 1;
+ makeMenuItemVisible(menu, R.id.menu_join, showLinkContactsOptions);
+
+ // Debug options need to be visible even in search mode.
+ makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions &&
+ hasExportIntentHandler());
+
+ // Light tint the icons for normal mode, dark tint for search or selection mode.
+ for (int i = 0; i < menu.size(); ++i) {
+ final Drawable icon = menu.getItem(i).getIcon();
+ if (icon != null && !isSearchOrSelectionMode) {
+ icon.mutate().setColorFilter(ContextCompat.getColor(getContext(),
+ R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
}
}
}
- private void showEmptyUserProfile(boolean show) {
- // Changing visibility of just the mProfileHeader doesn't do anything unless
- // you change visibility of its children, hence the call to mCounterHeaderView
- // and mProfileTitle
- mProfileHeaderContainer.setVisibility(show ? View.VISIBLE : View.GONE);
- mProfileHeader.setVisibility(show ? View.VISIBLE : View.GONE);
- mProfileTitle.setVisibility(show ? View.VISIBLE : View.GONE);
- mProfileMessage.setVisibility(show ? View.VISIBLE : View.GONE);
+ private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
+ final MenuItem item = menu.findItem(itemId);
+ if (item != null) {
+ item.setVisible(visible);
+ }
+ }
+
+ private boolean hasExportIntentHandler() {
+ final Intent intent = new Intent();
+ intent.setAction("com.android.providers.contacts.DUMP_DATABASE");
+ final List<ResolveInfo> receivers =
+ getContext().getPackageManager().queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ return receivers != null && receivers.size() > 0;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (mDisableOptionItemSelected) {
+ return false;
+ }
+
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {
+ if (mActionBarAdapter.isUpShowing()) {
+ // "UP" icon press -- should be treated as "back".
+ mActivity.onBackPressed();
+ }
+ return true;
+ } else if (id == R.id.menu_search) {
+ if (!mActionBarAdapter.isSelectionMode()) {
+ mActionBarAdapter.setSearchMode(true);
+ }
+ return true;
+ } else if (id == R.id.menu_share) {
+ shareSelectedContacts();
+ return true;
+ } else if (id == R.id.menu_join) {
+ Logger.logListEvent(ListEvent.ActionType.LINK,
+ /* listType */ getListTypeIncludingSearch(),
+ /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+ /* numSelected */ getAdapter().getSelectedContactIds().size());
+ joinSelectedContacts();
+ return true;
+ } else if (id == R.id.menu_delete) {
+ deleteSelectedContacts();
+ return true;
+ } else if (id == R.id.export_database) {
+ final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
}
/**
- * This method creates a pseudo user profile contact. When the returned query doesn't have
- * a profile, this methods creates 2 views that are inserted as headers to the listview:
- * 1. A header view with the "ME" title and the contacts count.
- * 2. A button that prompts the user to create a local profile
+ * Share all contacts that are currently selected. This method is pretty inefficient for
+ * handling large numbers of contacts. I don't expect this to be a problem.
*/
- private void addEmptyUserProfileHeader(LayoutInflater inflater) {
- ListView list = getListView();
- // Add a header with the "ME" name. The view is embedded in a frame view since you cannot
- // change the visibility of a view in a ListView without having a parent view.
- mProfileHeader = inflater.inflate(R.layout.user_profile_header, null, false);
- mProfileTitle = (TextView) mProfileHeader.findViewById(R.id.profile_title);
- mProfileHeaderContainer = new FrameLayout(inflater.getContext());
- mProfileHeaderContainer.addView(mProfileHeader);
- list.addHeaderView(mProfileHeaderContainer, null, false);
-
- // Add a button with a message inviting the user to create a local profile
- mProfileMessage = (Button) mProfileHeader.findViewById(R.id.user_profile_button);
- mProfileMessage.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
- intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, true);
- ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+ private void shareSelectedContacts() {
+ final StringBuilder uriListBuilder = new StringBuilder();
+ for (Long contactId : getSelectedContactIds()) {
+ final Uri contactUri = ContentUris.withAppendedId(
+ ContactsContract.Contacts.CONTENT_URI, contactId);
+ final Uri lookupUri = ContactsContract.Contacts.getLookupUri(
+ getContext().getContentResolver(), contactUri);
+ if (lookupUri == null) {
+ continue;
}
- });
+ final List<String> pathSegments = lookupUri.getPathSegments();
+ if (pathSegments.size() < 2) {
+ continue;
+ }
+ final String lookupKey = pathSegments.get(pathSegments.size() - 2);
+ if (uriListBuilder.length() > 0) {
+ uriListBuilder.append(':');
+ }
+ uriListBuilder.append(Uri.encode(lookupKey));
+ }
+ if (uriListBuilder.length() == 0) {
+ return;
+ }
+ final Uri uri = Uri.withAppendedPath(
+ ContactsContract.Contacts.CONTENT_MULTI_VCARD_URI,
+ Uri.encode(uriListBuilder.toString()));
+ final Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType(ContactsContract.Contacts.CONTENT_VCARD_TYPE);
+ intent.putExtra(Intent.EXTRA_STREAM, uri);
+ try {
+ startActivityForResult(Intent.createChooser(intent, getResources().getQuantityString(
+ R.plurals.title_share_via,/* quantity */ getSelectedContactIds().size()))
+ , ACTIVITY_REQUEST_CODE_SHARE);
+ } catch (final ActivityNotFoundException ex) {
+ Toast.makeText(getContext(), R.string.share_error, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void joinSelectedContacts() {
+ final Context context = getContext();
+ final Intent intent = ContactSaveService.createJoinSeveralContactsIntent(
+ context, getSelectedContactIdsArray());
+ context.startService(intent);
+
+ mActionBarAdapter.setSelectionMode(false);
+ }
+
+ private void deleteSelectedContacts() {
+ final ContactMultiDeletionInteraction multiDeletionInteraction =
+ ContactMultiDeletionInteraction.start(this, getSelectedContactIds());
+ multiDeletionInteraction.setListener(new MultiDeleteListener());
+ mIsDeletionInProgress = true;
+ }
+
+ private final class MultiDeleteListener implements MultiContactDeleteListener {
+ @Override
+ public void onDeletionFinished() {
+ // The parameters count and numSelected are both the number of contacts before deletion.
+ Logger.logListEvent(ListEvent.ActionType.DELETE,
+ /* listType */ getListTypeIncludingSearch(),
+ /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+ /* numSelected */ getSelectedContactIds().size());
+ mActionBarAdapter.setSelectionMode(false);
+ mIsDeletionInProgress = false;
+ }
+ }
+
+ private int getListTypeIncludingSearch() {
+ return isSearchMode() ? ListEvent.ListType.SEARCH_RESULT : getListType();
+ }
+
+ public void setParameters(ContactsRequest contactsRequest, boolean fromOnNewIntent) {
+ mContactsRequest = contactsRequest;
+ mFromOnNewIntent = fromOnNewIntent;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
+ // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
+ // anymore
+ case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
+ if (resultCode == Activity.RESULT_OK) {
+ onPickerResult(data);
+ }
+ case ACTIVITY_REQUEST_CODE_SHARE:
+ Logger.logListEvent(ListEvent.ActionType.SHARE,
+ /* listType */ getListTypeIncludingSearch(),
+ /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
+ /* numSelected */ getAdapter().getSelectedContactIds().size());
+
+// TODO fix or remove multipicker code: ag/54762
+// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
+// // Finish the activity if the sub activity was canceled as back key is used
+// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
+// finish();
+// }
+// break;
+ }
+ }
+
+ public boolean getOptionsMenuContactsAvailable() {
+ return mOptionsMenuContactsAvailable;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ // Clear the listener to make sure we don't get callbacks after onSaveInstanceState,
+ // in order to avoid doing fragment transactions after it.
+ // TODO Figure out a better way to deal with the issue (ag/120686).
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.setListener(null);
+ mActionBarAdapter.onSaveInstanceState(outState);
+ }
+ mDisableOptionItemSelected = true;
+ outState.putBoolean(KEY_DELETION_IN_PROGRESS, mIsDeletionInProgress);
+ outState.putBoolean(KEY_SEARCH_RESULT_CLICKED, mSearchResultClicked);
+ }
+
+ @Override
+ public void onPause() {
+ mOptionsMenuContactsAvailable = false;
+ super.onPause();
+ }
+
+ @Override
+ public void onDestroy() {
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.setListener(null);
+ }
+ super.onDestroy();
+ }
+
+ public boolean onKeyDown(int unicodeChar) {
+ if (mActionBarAdapter != null && mActionBarAdapter.isSelectionMode()) {
+ // Ignore keyboard input when in selection mode.
+ return true;
+ }
+
+ if (mActionBarAdapter != null && !mActionBarAdapter.isSearchMode()) {
+ final String query = new String(new int[]{unicodeChar}, 0, 1);
+ mActionBarAdapter.setSearchMode(true);
+ mActionBarAdapter.setQueryString(query);
+ return true;
+ }
+
+ return false;
+ }
+
+ public boolean canSetActionBar() {
+ return mCanSetActionBar;
}
}
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
new file mode 100644
index 000000000..e50fe4827
--- /dev/null
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.preference.PreferenceManager;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.SearchSnippets;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
+ */
+public class DefaultContactListAdapter extends ContactListAdapter {
+
+ public static final char SNIPPET_START_MATCH = '[';
+ public static final char SNIPPET_END_MATCH = ']';
+
+ // Contacts contacted within the last 3 days (in seconds)
+ private static final long LAST_TIME_USED_3_DAYS_SEC = 3L * 24 * 60 * 60;
+
+ // Contacts contacted within the last 7 days (in seconds)
+ private static final long LAST_TIME_USED_7_DAYS_SEC = 7L * 24 * 60 * 60;
+
+ // Contacts contacted within the last 14 days (in seconds)
+ private static final long LAST_TIME_USED_14_DAYS_SEC = 14L * 24 * 60 * 60;
+
+ // Contacts contacted within the last 30 days (in seconds)
+ private static final long LAST_TIME_USED_30_DAYS_SEC = 30L * 24 * 60 * 60;
+
+ private static final String TIME_SINCE_LAST_USED_SEC =
+ "(strftime('%s', 'now') - " + Contacts.LAST_TIME_CONTACTED + "/1000)";
+
+ private static final String STREQUENT_SORT =
+ "(CASE WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_3_DAYS_SEC +
+ " THEN 0 " +
+ " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_7_DAYS_SEC +
+ " THEN 1 " +
+ " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_14_DAYS_SEC +
+ " THEN 2 " +
+ " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_30_DAYS_SEC +
+ " THEN 3 " +
+ " ELSE 4 END), " +
+ Contacts.TIMES_CONTACTED + " DESC, " +
+ Contacts.STARRED + " DESC";
+
+ public DefaultContactListAdapter(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void configureLoader(CursorLoader loader, long directoryId) {
+ if (loader instanceof FavoritesAndContactsLoader) {
+ ((FavoritesAndContactsLoader) loader).setLoadFavorites(shouldIncludeFavorites());
+ }
+
+ String sortOrder = null;
+ if (isSearchMode()) {
+ String query = getQueryString();
+ if (query == null) query = "";
+ query = query.trim();
+ if (TextUtils.isEmpty(query)) {
+ // Regardless of the directory, we don't want anything returned,
+ // so let's just send a "nothing" query to the local directory.
+ loader.setUri(Contacts.CONTENT_URI);
+ loader.setProjection(getProjection(false));
+ loader.setSelection("0");
+ } else if (isGroupMembersFilter()) {
+ final ContactListFilter filter = getFilter();
+ configureUri(loader, directoryId, filter);
+ // TODO: This is not the normal type to filter URI so we load the non-search
+ // projection. Consider creating a specific group member adapter to make it more
+ // clear.
+ loader.setProjection(getProjection(/* forSearch */ false));
+ loader.setSelection(
+ Contacts.DISPLAY_NAME_PRIMARY + " LIKE ?1 OR " +
+ Contacts.DISPLAY_NAME_ALTERNATIVE + " LIKE ?1");
+ final String[] args = new String[1];
+ args[0] = query + "%";
+ loader.setSelectionArgs(args);
+ } else {
+ final Builder builder = ContactsCompat.getContentUri().buildUpon();
+ appendSearchParameters(builder, query, directoryId);
+ loader.setUri(builder.build());
+ loader.setProjection(getProjection(true));
+ sortOrder = STREQUENT_SORT;
+ }
+ } else {
+ final ContactListFilter filter = getFilter();
+ configureUri(loader, directoryId, filter);
+ if (filter != null
+ && filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+ loader.setProjection(getDataProjectionForContacts(false));
+ } else {
+ loader.setProjection(getProjection(false));
+ }
+ configureSelection(loader, directoryId, filter);
+ }
+
+ if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+ if (sortOrder == null) {
+ sortOrder = Contacts.SORT_KEY_PRIMARY;
+ } else {
+ sortOrder += ", " + Contacts.SORT_KEY_PRIMARY;
+ }
+ } else {
+ if (sortOrder == null) {
+ sortOrder = Contacts.SORT_KEY_ALTERNATIVE;
+ } else {
+ sortOrder += ", " + Contacts.SORT_KEY_ALTERNATIVE;
+ }
+ }
+ loader.setSortOrder(sortOrder);
+ }
+
+ private boolean isGroupMembersFilter() {
+ final ContactListFilter filter = getFilter();
+ return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS;
+ }
+
+ private void appendSearchParameters(Builder builder, String query, long directoryId) {
+ builder.appendPath(query); // Builder will encode the query
+ builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(directoryId));
+ if (directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE) {
+ builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+ String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
+ }
+ builder.appendQueryParameter(SearchSnippets.DEFERRED_SNIPPETING_KEY, "1");
+ }
+
+ protected void configureUri(CursorLoader loader, long directoryId, ContactListFilter filter) {
+ Uri uri = Contacts.CONTENT_URI;
+ if (filter != null) {
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ String lookupKey = getSelectedContactLookupKey();
+ if (lookupKey != null) {
+ uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
+ } else {
+ uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, getSelectedContactId());
+ }
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+ uri = Data.CONTENT_URI;
+ }
+ }
+
+ if (directoryId == Directory.DEFAULT && isSectionHeaderDisplayEnabled()) {
+ uri = ContactListAdapter.buildSectionIndexerUri(uri);
+ }
+
+ if (filter != null
+ && filter.filterType != ContactListFilter.FILTER_TYPE_CUSTOM
+ && filter.filterType != ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+ final Uri.Builder builder = uri.buildUpon();
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT
+ || filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS) {
+ filter.addAccountQueryParameterToUrl(builder);
+ }
+ uri = builder.build();
+ }
+
+ loader.setUri(uri);
+ }
+
+ private void configureSelection(
+ CursorLoader loader, long directoryId, ContactListFilter filter) {
+ if (filter == null) {
+ return;
+ }
+
+ if (directoryId != Directory.DEFAULT) {
+ return;
+ }
+
+ StringBuilder selection = new StringBuilder();
+ List<String> selectionArgs = new ArrayList<String>();
+
+ switch (filter.filterType) {
+ case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
+ // We have already added directory=0 to the URI, which takes care of this
+ // filter
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
+ // We have already added the lookup key to the URI, which takes care of this
+ // filter
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_STARRED: {
+ selection.append(Contacts.STARRED + "!=0");
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+ selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_CUSTOM: {
+ selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+ if (isCustomFilterForPhoneNumbersOnly()) {
+ selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+ }
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+ // We use query parameters for account filter, so no selection to add here.
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_GROUP_MEMBERS: {
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS: {
+ if (filter.accountType != null) {
+ selection.append(ContactsContract.RawContacts.ACCOUNT_TYPE)
+ .append("=?");
+ selectionArgs.add(filter.accountType);
+ if (filter.accountName != null) {
+ selection.append(" AND ").append(ContactsContract.RawContacts.ACCOUNT_NAME)
+ .append(("=?"));
+ selectionArgs.add(filter.accountName);
+ }
+ } else {
+ selection.append(AccountWithDataSet.LOCAL_ACCOUNT_SELECTION);
+ }
+ break;
+ }
+ }
+ loader.setSelection(selection.toString());
+ loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ final ContactListItemView view = (ContactListItemView)itemView;
+
+ view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
+
+ if (isSelectionVisible()) {
+ view.setActivated(isSelectedContact(partition, cursor));
+ }
+
+ bindSectionHeaderAndDivider(view, position, cursor);
+
+ if (isQuickContactEnabled()) {
+ bindQuickContact(view, partition, cursor, ContactQuery.CONTACT_PHOTO_ID,
+ ContactQuery.CONTACT_PHOTO_URI, ContactQuery.CONTACT_ID,
+ ContactQuery.CONTACT_LOOKUP_KEY, ContactQuery.CONTACT_DISPLAY_NAME);
+ } else {
+ if (getDisplayPhotos()) {
+ bindPhoto(view, partition, cursor);
+ }
+ }
+
+ bindNameAndViewId(view, cursor);
+ bindPresenceAndStatusMessage(view, cursor);
+
+ if (isSearchMode()) {
+ bindSearchSnippet(view, cursor);
+ } else {
+ view.setSnippet(null);
+ }
+ }
+
+ private boolean isCustomFilterForPhoneNumbersOnly() {
+ // TODO: this flag should not be stored in shared prefs. It needs to be in the db.
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+ return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
+ ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
+ }
+}
diff --git a/src/com/android/contacts/list/DirectoryListLoader.java b/src/com/android/contacts/list/DirectoryListLoader.java
new file mode 100644
index 000000000..192c744f2
--- /dev/null
+++ b/src/com/android/contacts/list/DirectoryListLoader.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.AsyncTaskLoader;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.DirectoryCompat;
+
+/**
+ * A specialized loader for the list of directories, see {@link Directory}.
+ */
+public class DirectoryListLoader extends AsyncTaskLoader<Cursor> {
+
+ private static final String TAG = "ContactEntryListAdapter";
+
+ public static final int SEARCH_MODE_NONE = 0;
+ public static final int SEARCH_MODE_DEFAULT = 1;
+ public static final int SEARCH_MODE_CONTACT_SHORTCUT = 2;
+ public static final int SEARCH_MODE_DATA_SHORTCUT = 3;
+
+ private static final class DirectoryQuery {
+ public static final String ORDER_BY = Directory._ID;
+
+ public static final String[] PROJECTION = {
+ Directory._ID,
+ Directory.PACKAGE_NAME,
+ Directory.TYPE_RESOURCE_ID,
+ Directory.DISPLAY_NAME,
+ Directory.PHOTO_SUPPORT,
+ };
+
+ public static final int ID = 0;
+ public static final int PACKAGE_NAME = 1;
+ public static final int TYPE_RESOURCE_ID = 2;
+ public static final int DISPLAY_NAME = 3;
+ public static final int PHOTO_SUPPORT = 4;
+
+ public static Uri getDirectoryUri(int mode) {
+ if (mode == SEARCH_MODE_DATA_SHORTCUT || mode == SEARCH_MODE_CONTACT_SHORTCUT) {
+ return Directory.CONTENT_URI;
+ } else {
+ return DirectoryCompat.getContentUri();
+ }
+ }
+ }
+
+ // This is a virtual column created for a MatrixCursor.
+ public static final String DIRECTORY_TYPE = "directoryType";
+
+ private static final String[] RESULT_PROJECTION = {
+ Directory._ID,
+ DIRECTORY_TYPE,
+ Directory.DISPLAY_NAME,
+ Directory.PHOTO_SUPPORT,
+ };
+
+ private final ContentObserver mObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ forceLoad();
+ }
+ };
+
+ private int mDirectorySearchMode;
+ private boolean mLocalInvisibleDirectoryEnabled;
+
+ private MatrixCursor mDefaultDirectoryList;
+
+ public DirectoryListLoader(Context context) {
+ super(context);
+ }
+
+ public void setDirectorySearchMode(int mode) {
+ mDirectorySearchMode = mode;
+ }
+
+ /**
+ * A flag that indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
+ * be included in the results.
+ */
+ public void setLocalInvisibleDirectoryEnabled(boolean flag) {
+ this.mLocalInvisibleDirectoryEnabled = flag;
+ }
+
+ @Override
+ protected void onStartLoading() {
+ getContext().getContentResolver().
+ registerContentObserver(DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
+ false, mObserver);
+ forceLoad();
+ }
+
+ @Override
+ protected void onStopLoading() {
+ getContext().getContentResolver().unregisterContentObserver(mObserver);
+ }
+
+ @Override
+ public Cursor loadInBackground() {
+ if (mDirectorySearchMode == SEARCH_MODE_NONE) {
+ return getDefaultDirectories();
+ }
+
+ MatrixCursor result = new MatrixCursor(RESULT_PROJECTION);
+ Context context = getContext();
+ PackageManager pm = context.getPackageManager();
+ String selection;
+ switch (mDirectorySearchMode) {
+ case SEARCH_MODE_DEFAULT:
+ selection = null;
+ break;
+
+ case SEARCH_MODE_CONTACT_SHORTCUT:
+ selection = Directory.SHORTCUT_SUPPORT + "=" + Directory.SHORTCUT_SUPPORT_FULL;
+ break;
+
+ case SEARCH_MODE_DATA_SHORTCUT:
+ selection = Directory.SHORTCUT_SUPPORT + " IN ("
+ + Directory.SHORTCUT_SUPPORT_FULL + ", "
+ + Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY + ")";
+ break;
+
+ default:
+ throw new RuntimeException(
+ "Unsupported directory search mode: " + mDirectorySearchMode);
+ }
+ Cursor cursor = null;
+ try {
+ cursor = context.getContentResolver().query(
+ DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
+ DirectoryQuery.PROJECTION, selection, null, DirectoryQuery.ORDER_BY);
+
+ if (cursor == null) {
+ return result;
+ }
+
+ while(cursor.moveToNext()) {
+ long directoryId = cursor.getLong(DirectoryQuery.ID);
+ if (!mLocalInvisibleDirectoryEnabled
+ && DirectoryCompat.isInvisibleDirectory(directoryId)) {
+ continue;
+ }
+ String directoryType = null;
+
+ String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
+ int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
+ if (!TextUtils.isEmpty(packageName) && typeResourceId != 0) {
+ try {
+ directoryType = pm.getResourcesForApplication(packageName)
+ .getString(typeResourceId);
+ } catch (Exception e) {
+ Log.e(TAG, "Cannot obtain directory type from package: " + packageName);
+ }
+ }
+ String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
+ int photoSupport = cursor.getInt(DirectoryQuery.PHOTO_SUPPORT);
+ result.addRow(new Object[]{directoryId, directoryType, displayName, photoSupport});
+ }
+ } catch (RuntimeException e) {
+ Log.w(TAG, "Runtime Exception when querying directory");
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return result;
+ }
+
+ private Cursor getDefaultDirectories() {
+ if (mDefaultDirectoryList == null) {
+ mDefaultDirectoryList = new MatrixCursor(RESULT_PROJECTION);
+ mDefaultDirectoryList.addRow(new Object[] {
+ Directory.DEFAULT,
+ getContext().getString(R.string.contactsList),
+ null,
+ null
+ });
+ mDefaultDirectoryList.addRow(new Object[] {
+ Directory.LOCAL_INVISIBLE,
+ getContext().getString(R.string.local_invisible_directory),
+ null,
+ null
+ });
+ }
+ return mDefaultDirectoryList;
+ }
+
+ @Override
+ protected void onReset() {
+ stopLoading();
+ }
+}
diff --git a/src/com/android/contacts/list/DirectoryPartition.java b/src/com/android/contacts/list/DirectoryPartition.java
new file mode 100644
index 000000000..bf0456ba6
--- /dev/null
+++ b/src/com/android/contacts/list/DirectoryPartition.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.provider.ContactsContract.Directory;
+
+import com.android.common.widget.CompositeCursorAdapter;
+
+/**
+ * Model object for a {@link Directory} row.
+ */
+public final class DirectoryPartition extends CompositeCursorAdapter.Partition {
+
+ public static final int STATUS_NOT_LOADED = 0;
+ public static final int STATUS_LOADING = 1;
+ public static final int STATUS_LOADED = 2;
+
+ public static final int RESULT_LIMIT_DEFAULT = -1;
+
+ private long mDirectoryId;
+ private String mContentUri;
+ private String mDirectoryType;
+ private String mDisplayName;
+ private int mStatus;
+ private boolean mPriorityDirectory;
+ private boolean mPhotoSupported;
+ private int mResultLimit = RESULT_LIMIT_DEFAULT;
+ private boolean mDisplayNumber = true;
+
+ private String mLabel;
+
+ public DirectoryPartition(boolean showIfEmpty, boolean hasHeader) {
+ super(showIfEmpty, hasHeader);
+ }
+
+ /**
+ * Directory ID, see {@link Directory}.
+ */
+ public long getDirectoryId() {
+ return mDirectoryId;
+ }
+
+ public void setDirectoryId(long directoryId) {
+ this.mDirectoryId = directoryId;
+ }
+
+ /**
+ * Directory type resolved from {@link Directory#PACKAGE_NAME} and
+ * {@link Directory#TYPE_RESOURCE_ID};
+ */
+ public String getDirectoryType() {
+ return mDirectoryType;
+ }
+
+ public void setDirectoryType(String directoryType) {
+ this.mDirectoryType = directoryType;
+ }
+
+ /**
+ * See {@link Directory#DISPLAY_NAME}.
+ */
+ public String getDisplayName() {
+ return mDisplayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.mDisplayName = displayName;
+ }
+
+ public int getStatus() {
+ return mStatus;
+ }
+
+ public void setStatus(int status) {
+ mStatus = status;
+ }
+
+ public boolean isLoading() {
+ return mStatus == STATUS_NOT_LOADED || mStatus == STATUS_LOADING;
+ }
+
+ /**
+ * Returns true if this directory should be loaded before non-priority directories.
+ */
+ public boolean isPriorityDirectory() {
+ return mPriorityDirectory;
+ }
+
+ public void setPriorityDirectory(boolean priorityDirectory) {
+ mPriorityDirectory = priorityDirectory;
+ }
+
+ /**
+ * Returns true if this directory supports photos.
+ */
+ public boolean isPhotoSupported() {
+ return mPhotoSupported;
+ }
+
+ public void setPhotoSupported(boolean flag) {
+ this.mPhotoSupported = flag;
+ }
+
+ /**
+ * Max number of results for this directory. Defaults to {@link #RESULT_LIMIT_DEFAULT} which
+ * implies using the adapter's
+ * {@link com.android.contacts.list.ContactListAdapter#getDirectoryResultLimit()}
+ */
+ public int getResultLimit() {
+ return mResultLimit;
+ }
+
+ public void setResultLimit(int resultLimit) {
+ mResultLimit = resultLimit;
+ }
+
+ /**
+ * Used by extended directories to specify a custom content URI. Extended directories MUST have
+ * a content URI
+ */
+ public String getContentUri() {
+ return mContentUri;
+ }
+
+ public void setContentUri(String contentUri) {
+ mContentUri = contentUri;
+ }
+
+ /**
+ * A label to display in the header next to the display name.
+ */
+ public String getLabel() {
+ return mLabel;
+ }
+
+ public void setLabel(String label) {
+ mLabel = label;
+ }
+
+ @Override
+ public String toString() {
+ return "DirectoryPartition{" +
+ "mDirectoryId=" + mDirectoryId +
+ ", mContentUri='" + mContentUri + '\'' +
+ ", mDirectoryType='" + mDirectoryType + '\'' +
+ ", mDisplayName='" + mDisplayName + '\'' +
+ ", mStatus=" + mStatus +
+ ", mPriorityDirectory=" + mPriorityDirectory +
+ ", mPhotoSupported=" + mPhotoSupported +
+ ", mResultLimit=" + mResultLimit +
+ ", mLabel='" + mLabel + '\'' +
+ '}';
+ }
+
+ /**
+ * Whether or not to display the phone number in app that have that option - Dialer. If false,
+ * Phone Label should be used instead of Phone Number.
+ */
+ public boolean isDisplayNumber() {
+ return mDisplayNumber;
+ }
+
+ public void setDisplayNumber(boolean displayNumber) {
+ mDisplayNumber = displayNumber;
+ }
+}
diff --git a/src/com/android/contacts/list/EmailAddressListAdapter.java b/src/com/android/contacts/list/EmailAddressListAdapter.java
index d19f960b8..04297a469 100644
--- a/src/com/android/contacts/list/EmailAddressListAdapter.java
+++ b/src/com/android/contacts/list/EmailAddressListAdapter.java
@@ -28,10 +28,8 @@ import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.preference.ContactsPreferences;
/**
* A cursor adapter for the {@link Email#CONTENT_TYPE} content type.
diff --git a/src/com/android/contacts/list/EmailAddressPickerFragment.java b/src/com/android/contacts/list/EmailAddressPickerFragment.java
index f89f74327..7dcc76683 100644
--- a/src/com/android/contacts/list/EmailAddressPickerFragment.java
+++ b/src/com/android/contacts/list/EmailAddressPickerFragment.java
@@ -21,9 +21,6 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.DirectoryListLoader;
/**
* Fragment containing an email list for picking.
diff --git a/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java b/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java
new file mode 100644
index 000000000..08822d10c
--- /dev/null
+++ b/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java
@@ -0,0 +1,84 @@
+/*
+ * 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.list;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import com.android.contacts.R;
+
+/**
+ * Confirmation dialog for turning global auto-sync setting on.
+ */
+public class EnableGlobalSyncDialogFragment extends DialogFragment{
+
+ private static final String ARG_FILTER = "filter";
+ private ContactListFilter mFilter;
+
+ /**
+ * Callbacks for the dialog host.
+ */
+ public interface Listener {
+
+ /**
+ * Invoked after the user has confirmed that they want to turn on sync.
+ *
+ * @param filter the filter of current contacts list.
+ */
+ void onEnableAutoSync(ContactListFilter filter);
+ }
+
+ public static void show(DefaultContactBrowseListFragment fragment, ContactListFilter filter) {
+ final Bundle args = new Bundle();
+ args.putParcelable(ARG_FILTER, filter);
+
+ final EnableGlobalSyncDialogFragment dialog = new
+ EnableGlobalSyncDialogFragment();
+ dialog.setTargetFragment(fragment, 0);
+ dialog.setArguments(args);
+ dialog.show(fragment.getFragmentManager(), "globalSync");
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mFilter = getArguments().getParcelable(ARG_FILTER);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Listener targetListener = (Listener) getTargetFragment();
+ final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.turn_auto_sync_on_dialog_title)
+ .setMessage(R.string.turn_auto_sync_on_dialog_body)
+ .setPositiveButton(R.string.turn_auto_sync_on_dialog_confirm_btn,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (targetListener != null) {
+ targetListener.onEnableAutoSync(mFilter);
+ }
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ builder.setCancelable(false);
+ return builder.create();
+ }
+}
diff --git a/src/com/android/contacts/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
new file mode 100644
index 000000000..54e5f3fdc
--- /dev/null
+++ b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
@@ -0,0 +1,96 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.database.MergeCursor;
+import android.database.sqlite.SQLiteException;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * A loader for use in the default contact list, which will also query for favorite contacts
+ * if configured to do so.
+ */
+public class FavoritesAndContactsLoader extends CursorLoader {
+
+ private boolean mLoadFavorites;
+
+ private String[] mProjection;
+
+
+ public FavoritesAndContactsLoader(Context context) {
+ super(context);
+ }
+
+ /** Whether to load favorites and merge results in before any other results. */
+ public void setLoadFavorites(boolean flag) {
+ mLoadFavorites = flag;
+ }
+
+ public void setProjection(String[] projection) {
+ super.setProjection(projection);
+ mProjection = projection;
+ }
+
+ @Override
+ public Cursor loadInBackground() {
+ List<Cursor> cursors = Lists.newArrayList();
+ if (mLoadFavorites) {
+ cursors.add(loadFavoritesContacts());
+ }
+ final Cursor contactsCursor = loadContacts();
+ cursors.add(contactsCursor);
+ return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
+ @Override
+ public Bundle getExtras() {
+ // Need to get the extras from the contacts cursor.
+ return contactsCursor == null ? new Bundle() : contactsCursor.getExtras();
+ }
+ };
+ }
+
+ private Cursor loadContacts() {
+ // ContactsCursor.loadInBackground() can return null; MergeCursor
+ // correctly handles null cursors.
+ try {
+ return super.loadInBackground();
+
+ } catch (NullPointerException | SQLiteException | SecurityException e) {
+ // Ignore NPEs, SQLiteExceptions and SecurityExceptions thrown by providers
+ }
+ return null;
+ }
+
+ private Cursor loadFavoritesContacts() {
+ final StringBuilder selection = new StringBuilder();
+ selection.append(Contacts.STARRED + "=?");
+ final ContactListFilter filter =
+ ContactListFilterController.getInstance(getContext()).getFilter();
+ if (filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ selection.append(" AND ").append(Contacts.IN_VISIBLE_GROUP + "=1");
+ }
+ return getContext().getContentResolver().query(
+ Contacts.CONTENT_URI, mProjection, selection.toString(), new String[]{"1"},
+ getSortOrder());
+ }
+}
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
new file mode 100644
index 000000000..e94d73b1c
--- /dev/null
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -0,0 +1,319 @@
+/*
+ * 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.list;
+
+import android.app.Activity;
+import android.content.Loader;
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.ContactListAdapter.ContactQuery;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Fragment containing raw contacts for a specified account that are not already in a group.
+ */
+public class GroupMemberPickerFragment extends
+ MultiSelectContactsListFragment<DefaultContactListAdapter> {
+
+ public static final String TAG = "GroupMemberPicker";
+
+ private static final String KEY_ACCOUNT_NAME = "accountName";
+ private static final String KEY_ACCOUNT_TYPE = "accountType";
+ private static final String KEY_ACCOUNT_DATA_SET = "accountDataSet";
+ private static final String KEY_CONTACT_IDS = "contactIds";
+
+ private static final String ARG_ACCOUNT_NAME = "accountName";
+ private static final String ARG_ACCOUNT_TYPE = "accountType";
+ private static final String ARG_ACCOUNT_DATA_SET = "accountDataSet";
+ private static final String ARG_CONTACT_IDS = "contactIds";
+
+ /** Callbacks for host of {@link GroupMemberPickerFragment}. */
+ public interface Listener {
+
+ /** Invoked when a potential group member is selected. */
+ void onGroupMemberClicked(long contactId);
+
+ /** Invoked when user has initiated multiple selection mode. */
+ void onSelectGroupMembers();
+ }
+
+ /** Filters out raw contacts that are already in the group. */
+ private class FilterCursorWrapper extends CursorWrapper {
+
+ private int[] mIndex;
+ private int mCount = 0;
+ private int mPos = 0;
+
+ public FilterCursorWrapper(Cursor cursor) {
+ super(cursor);
+
+ mCount = super.getCount();
+ mIndex = new int[mCount];
+
+ final List<Integer> indicesToFilter = new ArrayList<>();
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "RawContacts CursorWrapper start: " + mCount);
+ }
+
+ final Bundle bundle = cursor.getExtras();
+ final String sections[] = bundle.getStringArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+ final int counts[] = bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+ final ContactsSectionIndexer indexer = (sections == null || counts == null)
+ ? null : new ContactsSectionIndexer(sections, counts);
+
+ for (int i = 0; i < mCount; i++) {
+ super.moveToPosition(i);
+ final String contactId = getString(ContactQuery.CONTACT_ID);
+ if (!mContactIds.contains(contactId)) {
+ mIndex[mPos++] = i;
+ } else {
+ indicesToFilter.add(i);
+ }
+ }
+
+ if (indexer != null && GroupUtil.needTrimming(mCount, counts, indexer.getPositions())) {
+ GroupUtil.updateBundle(bundle, indexer, indicesToFilter, sections, counts);
+ }
+
+ mCount = mPos;
+ mPos = 0;
+ super.moveToFirst();
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "RawContacts CursorWrapper end: " + mCount);
+ }
+ }
+
+ @Override
+ public boolean move(int offset) {
+ return moveToPosition(mPos + offset);
+ }
+
+ @Override
+ public boolean moveToNext() {
+ return moveToPosition(mPos + 1);
+ }
+
+ @Override
+ public boolean moveToPrevious() {
+ return moveToPosition(mPos - 1);
+ }
+
+ @Override
+ public boolean moveToFirst() {
+ return moveToPosition(0);
+ }
+
+ @Override
+ public boolean moveToLast() {
+ return moveToPosition(mCount - 1);
+ }
+
+ @Override
+ public boolean moveToPosition(int position) {
+ if (position >= mCount) {
+ mPos = mCount;
+ return false;
+ } else if (position < 0) {
+ mPos = -1;
+ return false;
+ }
+ mPos = mIndex[position];
+ return super.moveToPosition(mPos);
+ }
+
+ @Override
+ public int getCount() {
+ return mCount;
+ }
+
+ @Override
+ public int getPosition() {
+ return mPos;
+ }
+ }
+
+ private String mAccountName;
+ private String mAccountType;
+ private String mAccountDataSet;
+ private ArrayList<String> mContactIds;
+ private Listener mListener;
+
+ public static GroupMemberPickerFragment newInstance(String accountName, String accountType,
+ String accountDataSet, ArrayList<String> contactIds) {
+ final Bundle args = new Bundle();
+ args.putString(ARG_ACCOUNT_NAME, accountName);
+ args.putString(ARG_ACCOUNT_TYPE, accountType);
+ args.putString(ARG_ACCOUNT_DATA_SET, accountDataSet);
+ args.putStringArrayList(ARG_CONTACT_IDS, contactIds);
+
+ final GroupMemberPickerFragment fragment = new GroupMemberPickerFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ public GroupMemberPickerFragment() {
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(true);
+ setHasOptionsMenu(true);
+ setDisplayDirectoryHeader(false);
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ if (savedState == null) {
+ mAccountName = getArguments().getString(ARG_ACCOUNT_NAME);
+ mAccountType = getArguments().getString(ARG_ACCOUNT_TYPE);
+ mAccountDataSet = getArguments().getString(ARG_ACCOUNT_DATA_SET);
+ mContactIds = getArguments().getStringArrayList(ARG_CONTACT_IDS);
+ } else {
+ mAccountName = savedState.getString(KEY_ACCOUNT_NAME);
+ mAccountType = savedState.getString(KEY_ACCOUNT_TYPE);
+ mAccountDataSet = savedState.getString(KEY_ACCOUNT_DATA_SET);
+ mContactIds = savedState.getStringArrayList(KEY_CONTACT_IDS);
+ }
+ super.onCreate(savedState);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putString(KEY_ACCOUNT_NAME, mAccountName);
+ outState.putString(KEY_ACCOUNT_TYPE, mAccountType);
+ outState.putString(KEY_ACCOUNT_DATA_SET, mAccountDataSet);
+ outState.putStringArrayList(KEY_CONTACT_IDS, mContactIds);
+ }
+
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.contact_list_content, null);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (data != null) {
+ // Wait until contacts are loaded before showing the scrollbar
+ setVisibleScrollbarEnabled(true);
+
+ final FilterCursorWrapper cursorWrapper = new FilterCursorWrapper(data);
+ final View accountFilterContainer = getView().findViewById(
+ R.id.account_filter_header_container);
+ final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(mAccountName,
+ mAccountType, mAccountDataSet);
+ bindListHeader(getContext(), getListView(), accountFilterContainer,
+ accountWithDataSet, cursorWrapper.getCount());
+
+ super.onLoadFinished(loader, cursorWrapper);
+ }
+ }
+
+ @Override
+ protected DefaultContactListAdapter createListAdapter() {
+ final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity());
+ adapter.setFilter(ContactListFilter.createGroupMembersFilter(
+ mAccountType, mAccountName, mAccountDataSet));
+ adapter.setSectionHeaderDisplayEnabled(true);
+ adapter.setDisplayPhotos(true);
+ return adapter;
+ }
+
+ @Override
+ protected void onItemClick(int position, long id) {
+ if (getAdapter().isDisplayingCheckBoxes()) {
+ super.onItemClick(position, id);
+ return;
+ }
+ if (mListener != null) {
+ final long contactId = getAdapter().getContactId(position);
+ if (contactId > 0) {
+ mListener.onGroupMemberClicked(contactId);
+ }
+ }
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
+ super.onCreateOptionsMenu(menu, menuInflater);
+ menuInflater.inflate(R.menu.group_member_picker, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final ContactSelectionActivity activity = getContactSelectionActivity();
+ final boolean hasContacts = mContactIds == null ? false : mContactIds.size() > 0;
+ final boolean isSearchMode = activity == null ? false : activity.isSearchMode();
+ final boolean isSelectionMode = activity == null ? false : activity.isSelectionMode();
+
+ // Added in ContactSelectionActivity but we must account for selection mode
+ setVisible(menu, R.id.menu_search, !isSearchMode && !isSelectionMode);
+ setVisible(menu, R.id.menu_select, hasContacts && !isSearchMode && !isSelectionMode);
+ }
+
+ private ContactSelectionActivity getContactSelectionActivity() {
+ final Activity activity = getActivity();
+ if (activity != null && activity instanceof ContactSelectionActivity) {
+ return (ContactSelectionActivity) activity;
+ }
+ return null;
+ }
+
+ private static void setVisible(Menu menu, int id, boolean visible) {
+ final MenuItem menuItem = menu.findItem(id);
+ if (menuItem != null) {
+ menuItem.setVisible(visible);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ final int id = item.getItemId();
+ if (id == android.R.id.home) {
+ final Activity activity = getActivity();
+ if (activity != null) {
+ activity.onBackPressed();
+ }
+ return true;
+ } else if (id == R.id.menu_select) {
+ if (mListener != null) {
+ mListener.onSelectGroupMembers();
+ }
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/src/com/android/contacts/list/GroupMemberTileAdapter.java b/src/com/android/contacts/list/GroupMemberTileAdapter.java
deleted file mode 100644
index 15e67f1e1..000000000
--- a/src/com/android/contacts/list/GroupMemberTileAdapter.java
+++ /dev/null
@@ -1,85 +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.list;
-
-import android.content.Context;
-import android.database.Cursor;
-
-import com.android.contacts.GroupMemberLoader;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactTileAdapter;
-import com.android.contacts.common.list.ContactTileView;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Tile adapter for groups.
- */
-public class GroupMemberTileAdapter extends ContactTileAdapter {
-
- public GroupMemberTileAdapter(Context context, ContactTileView.Listener listener, int numCols) {
- super(context, listener, numCols, DisplayType.GROUP_MEMBERS);
- }
-
- @Override
- protected void bindColumnIndices() {
- mIdIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_ID;
- mLookupIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_LOOKUP_KEY;
- mPhotoUriIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_PHOTO_URI;
- mNameIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_DISPLAY_NAME_PRIMARY;
- mPresenceIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_PRESENCE_STATUS;
- mStatusIndex = GroupMemberLoader.GroupDetailQuery.CONTACT_STATUS;
- }
-
- @Override
- protected void saveNumFrequentsFromCursor(Cursor cursor) {
- mNumFrequents = 0;
- }
-
- @Override
- public int getItemViewType(int position) {
- return ViewTypes.STARRED;
- }
-
- @Override
- protected int getDividerPosition(Cursor cursor) {
- // No divider
- return -1;
- }
-
- @Override
- public int getCount() {
- if (mContactCursor == null || mContactCursor.isClosed()) {
- return 0;
- }
-
- return getRowCount(mContactCursor.getCount());
- }
-
- @Override
- public ArrayList<ContactEntry> getItem(int position) {
- final ArrayList<ContactEntry> resultList = Lists.newArrayListWithCapacity(mColumnCount);
- int contactIndex = position * mColumnCount;
-
- for (int columnCounter = 0; columnCounter < mColumnCount; columnCounter++) {
- resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
- contactIndex++;
- }
- return resultList;
- }
-}
diff --git a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
index 9822b79b1..43c242800 100644
--- a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
+++ b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
@@ -15,15 +15,13 @@
*/
package com.android.contacts.list;
-import com.android.contacts.R;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
+import com.android.contacts.R;
+
/**
* Equivalent to DefaultContactListAdapter, except with an optional header entry that has the same
* formatting as the other entries in the list.
@@ -66,7 +64,7 @@ public class HeaderEntryContactListAdapter extends DefaultContactListAdapter {
} else {
itemView = (ContactListItemView) convertView;
}
- itemView.setDrawableResource(R.drawable.ic_search_add_contact);
+ itemView.setDrawableResource(R.drawable.quantum_ic_person_add_vd_theme_24);
itemView.setDisplayName(getContext().getResources().getString(
R.string.header_entry_contact_list_adapter_header_title));
return itemView;
diff --git a/src/com/android/contacts/list/IndexerListAdapter.java b/src/com/android/contacts/list/IndexerListAdapter.java
new file mode 100644
index 000000000..969e6a2df
--- /dev/null
+++ b/src/com/android/contacts/list/IndexerListAdapter.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+import android.widget.SectionIndexer;
+
+/**
+ * A list adapter that supports section indexer and a pinned header.
+ */
+public abstract class IndexerListAdapter extends PinnedHeaderListAdapter implements SectionIndexer {
+
+ protected Context mContext;
+ private SectionIndexer mIndexer;
+ private int mIndexedPartition = 0;
+ private boolean mSectionHeaderDisplayEnabled;
+ private View mHeader;
+
+ /**
+ * An item view is displayed differently depending on whether it is placed
+ * at the beginning, middle or end of a section. It also needs to know the
+ * section header when it is at the beginning of a section. This object
+ * captures all this configuration.
+ */
+ public static final class Placement {
+ private int position = ListView.INVALID_POSITION;
+ public boolean firstInSection;
+ public boolean lastInSection;
+ public String sectionHeader;
+
+ public void invalidate() {
+ position = ListView.INVALID_POSITION;
+ }
+ }
+
+ private Placement mPlacementCache = new Placement();
+
+ /**
+ * Constructor.
+ */
+ public IndexerListAdapter(Context context) {
+ super(context);
+ mContext = context;
+ }
+
+ /**
+ * Creates a section header view that will be pinned at the top of the list
+ * as the user scrolls.
+ */
+ protected abstract View createPinnedSectionHeaderView(Context context, ViewGroup parent);
+
+ /**
+ * Sets the title in the pinned header as the user scrolls.
+ */
+ protected abstract void setPinnedSectionTitle(View pinnedHeaderView, String title);
+
+ public boolean isSectionHeaderDisplayEnabled() {
+ return mSectionHeaderDisplayEnabled;
+ }
+
+ public void setSectionHeaderDisplayEnabled(boolean flag) {
+ this.mSectionHeaderDisplayEnabled = flag;
+ }
+
+ public int getIndexedPartition() {
+ return mIndexedPartition;
+ }
+
+ public void setIndexedPartition(int partition) {
+ this.mIndexedPartition = partition;
+ }
+
+ public SectionIndexer getIndexer() {
+ return mIndexer;
+ }
+
+ public void setIndexer(SectionIndexer indexer) {
+ mIndexer = indexer;
+ mPlacementCache.invalidate();
+ }
+
+ public Object[] getSections() {
+ if (mIndexer == null) {
+ return new String[] { " " };
+ } else {
+ return mIndexer.getSections();
+ }
+ }
+
+ /**
+ * @return relative position of the section in the indexed partition
+ */
+ public int getPositionForSection(int sectionIndex) {
+ if (mIndexer == null) {
+ return -1;
+ }
+
+ return mIndexer.getPositionForSection(sectionIndex);
+ }
+
+ /**
+ * @param position relative position in the indexed partition
+ */
+ public int getSectionForPosition(int position) {
+ if (mIndexer == null) {
+ return -1;
+ }
+
+ return mIndexer.getSectionForPosition(position);
+ }
+
+ @Override
+ public int getPinnedHeaderCount() {
+ if (isSectionHeaderDisplayEnabled()) {
+ return super.getPinnedHeaderCount() + 1;
+ } else {
+ return super.getPinnedHeaderCount();
+ }
+ }
+
+ @Override
+ public View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent) {
+ if (isSectionHeaderDisplayEnabled() && viewIndex == getPinnedHeaderCount() - 1) {
+ if (mHeader == null) {
+ mHeader = createPinnedSectionHeaderView(mContext, parent);
+ }
+ return mHeader;
+ } else {
+ return super.getPinnedHeaderView(viewIndex, convertView, parent);
+ }
+ }
+
+ @Override
+ public void configurePinnedHeaders(PinnedHeaderListView listView) {
+ super.configurePinnedHeaders(listView);
+
+ if (!isSectionHeaderDisplayEnabled()) {
+ return;
+ }
+
+ int index = getPinnedHeaderCount() - 1;
+ if (mIndexer == null || getCount() == 0) {
+ listView.setHeaderInvisible(index, false);
+ } else {
+ int listPosition = listView.getPositionAt(listView.getTotalTopPinnedHeaderHeight());
+ int position = listPosition - listView.getHeaderViewsCount();
+
+ int section = -1;
+ int partition = getPartitionForPosition(position);
+ if (partition == mIndexedPartition) {
+ int offset = getOffsetInPartition(position);
+ if (offset != -1) {
+ section = getSectionForPosition(offset);
+ }
+ }
+
+ if (section == -1) {
+ listView.setHeaderInvisible(index, false);
+ } else {
+ View topChild = getViewAtVisiblePosition(listView, listPosition);
+ if (topChild != null) {
+ // Match the pinned header's height to the height of the list item.
+ mHeader.setMinimumHeight(topChild.getMeasuredHeight());
+ }
+ setPinnedSectionTitle(mHeader, (String)mIndexer.getSections()[section]);
+
+ // Compute the item position where the current partition begins
+ int partitionStart = getPositionForPartition(mIndexedPartition);
+ if (hasHeader(mIndexedPartition)) {
+ partitionStart++;
+ }
+
+ // Compute the item position where the next section begins
+ int nextSectionPosition = partitionStart + getPositionForSection(section + 1);
+ boolean isLastInSection = position == nextSectionPosition - 1;
+ listView.setFadingHeader(index, listPosition, isLastInSection);
+ }
+ }
+ }
+
+ /**
+ * Returns the view used for the specified list position assuming it is visible or null if
+ * it isn't.
+ *
+ * <p>This makes some assumptions about the implementation of ListView (child views are the
+ * item views and are ordered in the same way as the adapter items they are displaying)
+ * but they are probably safe given that the API is stable.</p>
+ */
+ private View getViewAtVisiblePosition(ListView list, int position) {
+ final int firstVisiblePosition = list.getFirstVisiblePosition();
+ final int childCount = list.getChildCount();
+ final int index = position - firstVisiblePosition;
+ if (index >= 0 && index < childCount) {
+ // Position is on-screen, use existing view.
+ return list.getChildAt(index);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Computes the item's placement within its section and populates the {@code placement}
+ * object accordingly. Please note that the returned object is volatile and should be
+ * copied if the result needs to be used later.
+ */
+ public Placement getItemPlacementInSection(int position) {
+ if (mPlacementCache.position == position) {
+ return mPlacementCache;
+ }
+
+ mPlacementCache.position = position;
+ if (isSectionHeaderDisplayEnabled()) {
+ int section = getSectionForPosition(position);
+ if (section != -1 && getPositionForSection(section) == position) {
+ mPlacementCache.firstInSection = true;
+ mPlacementCache.sectionHeader = (String)getSections()[section];
+ } else {
+ mPlacementCache.firstInSection = false;
+ mPlacementCache.sectionHeader = null;
+ }
+
+ mPlacementCache.lastInSection = (getPositionForSection(section + 1) - 1 == position);
+ } else {
+ mPlacementCache.firstInSection = false;
+ mPlacementCache.lastInSection = false;
+ mPlacementCache.sectionHeader = null;
+ }
+ return mPlacementCache;
+ }
+}
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index f08fcbbe3..82da6f7a5 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -31,10 +31,7 @@ import android.view.ViewGroup;
import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.preference.ContactsPreferences;
public class JoinContactListAdapter extends ContactListAdapter {
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index 89b02daee..998f593c7 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -32,9 +32,8 @@ import android.view.ViewGroup;
import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListItemView;
import com.android.contacts.list.JoinContactLoader.JoinContactLoaderResult;
+import com.android.contacts.logging.ListEvent;
/**
* Fragment for the Join Contact list.
@@ -85,6 +84,7 @@ public class JoinContactListFragment extends ContactEntryListFragment<JoinContac
final Cursor suggestionsCursor =
((JoinContactLoaderResult) data).suggestionCursor;
onContactListLoaded(suggestionsCursor, data);
+ maybeLogListEvent();
}
break;
}
@@ -101,6 +101,8 @@ public class JoinContactListFragment extends ContactEntryListFragment<JoinContac
setSectionHeaderDisplayEnabled(true);
setVisibleScrollbarEnabled(false);
setQuickContactEnabled(false);
+ setListType(ListEvent.ListType.PICK_JOIN);
+ setLogListEvents(true);
}
public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
@@ -142,7 +144,7 @@ public class JoinContactListFragment extends ContactEntryListFragment<JoinContac
@Override
public JoinContactListAdapter createListAdapter() {
JoinContactListAdapter adapter = new JoinContactListAdapter(getActivity());
- adapter.setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
+ adapter.setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
return adapter;
}
diff --git a/src/com/android/contacts/list/LegacyContactListAdapter.java b/src/com/android/contacts/list/LegacyContactListAdapter.java
index 837991b4e..a2f98dec4 100644
--- a/src/com/android/contacts/list/LegacyContactListAdapter.java
+++ b/src/com/android/contacts/list/LegacyContactListAdapter.java
@@ -24,9 +24,6 @@ import android.provider.Contacts.People;
import android.view.View;
import android.view.ViewGroup;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
/**
* A cursor adapter for the People.CONTENT_TYPE content type.
*/
diff --git a/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java b/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
index b5c96df6d..63df215b1 100644
--- a/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
@@ -26,9 +26,6 @@ import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.view.ViewGroup;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
/**
* A cursor adapter for the Phones.CONTENT_TYPE content type.
*/
diff --git a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
index 5b6e11f51..1402a78e2 100644
--- a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
@@ -19,16 +19,12 @@ package com.android.contacts.list;
import android.net.Uri;
import android.util.Log;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
-
/**
* Version of PhoneNumberPickerFragment used specifically for legacy support.
*/
public class LegacyPhoneNumberPickerFragment extends PhoneNumberPickerFragment {
- private static final String TAG = LegacyPhoneNumberPickerFragment.class.getSimpleName();
+ private static final String TAG = "LegacyPhoneNumberPicker";
@Override
protected boolean getVisibleScrollbarEnabled() {
diff --git a/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java b/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
index 4c598cd74..c3fa57d0b 100644
--- a/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
@@ -26,9 +26,6 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.view.View;
import android.view.ViewGroup;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
/**
* A cursor adapter for the ContactMethods.CONTENT_TYPE content type.
*/
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index 76dd3f352..61e92b820 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -16,19 +16,34 @@
package com.android.contacts.list;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-import com.android.contacts.common.logging.SearchState;
-import com.android.contacts.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
-import com.android.contacts.common.logging.Logger;
-
+import android.content.Context;
import android.database.Cursor;
-import android.net.Uri;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.provider.ContactsContract;
-import android.text.TextUtils;
+import android.support.v4.view.ViewCompat;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
import android.view.accessibility.AccessibilityEvent;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.AbsListView;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.ActionBarAdapter;
+import com.android.contacts.group.GroupMembersFragment;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
+import com.android.contacts.logging.ListEvent.ActionType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.SearchState;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
import java.util.ArrayList;
import java.util.List;
@@ -38,9 +53,13 @@ import java.util.TreeSet;
* Fragment containing a contact list used for browsing contacts and optionally selecting
* multiple contacts via checkboxes.
*/
-public class MultiSelectContactsListFragment extends DefaultContactBrowseListFragment
+public abstract class MultiSelectContactsListFragment<T extends MultiSelectEntryContactListAdapter>
+ extends ContactEntryListFragment<T>
implements SelectedContactsListener {
+ protected boolean mAnimateOnLoad;
+ private static final String TAG = "MultiContactsList";
+
public interface OnCheckBoxListActionListener {
void onStartDisplayingCheckBoxes();
void onSelectedContactIdsChanged();
@@ -49,46 +68,29 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
private static final String EXTRA_KEY_SELECTED_CONTACTS = "selected_contacts";
- private static final String KEY_SEARCH_RESULT_CLICKED = "search_result_clicked";
-
private OnCheckBoxListActionListener mCheckBoxListListener;
- private boolean mSearchResultClicked;
public void setCheckBoxListListener(OnCheckBoxListActionListener checkBoxListListener) {
mCheckBoxListListener = checkBoxListListener;
}
- /**
- * Whether a search result was clicked by the user. Tracked so that we can distinguish
- * between exiting the search mode after a result was clicked from existing w/o clicking
- * any search result.
- */
- public boolean wasSearchResultClicked() {
- return mSearchResultClicked;
- }
-
- /**
- * Resets whether a search result was clicked by the user to false.
- */
- public void resetSearchResultClicked() {
- mSearchResultClicked = false;
+ public void setAnimateOnLoad(boolean shouldAnimate) {
+ mAnimateOnLoad = shouldAnimate;
}
@Override
public void onSelectedContactsChanged() {
- if (mCheckBoxListListener != null) {
- mCheckBoxListListener.onSelectedContactIdsChanged();
- }
+ if (mCheckBoxListListener != null) mCheckBoxListListener.onSelectedContactIdsChanged();
}
@Override
- public void onSelectedContactsChangedViaCheckBox() {
- if (getAdapter().getSelectedContactIds().size() == 0) {
- // Last checkbox has been unchecked. So we should stop displaying checkboxes.
- mCheckBoxListListener.onStopDisplayingCheckBoxes();
- } else {
- onSelectedContactsChanged();
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ super.onCreateView(inflater, container, savedInstanceState);
+ if (savedInstanceState == null && mAnimateOnLoad) {
+ setLayoutAnimation(getListView(), R.anim.slide_and_fade_in_layout_animation);
}
+ return getView();
}
@Override
@@ -98,21 +100,23 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
final TreeSet<Long> selectedContactIds = (TreeSet<Long>)
savedInstanceState.getSerializable(EXTRA_KEY_SELECTED_CONTACTS);
getAdapter().setSelectedContactIds(selectedContactIds);
- if (mCheckBoxListListener != null) {
- mCheckBoxListListener.onSelectedContactIdsChanged();
- }
- mSearchResultClicked = savedInstanceState.getBoolean(KEY_SEARCH_RESULT_CLICKED);
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ if (mCheckBoxListListener != null) {
+ mCheckBoxListListener.onSelectedContactIdsChanged();
}
}
public TreeSet<Long> getSelectedContactIds() {
- final MultiSelectEntryContactListAdapter adapter = getAdapter();
- return adapter.getSelectedContactIds();
+ return getAdapter().getSelectedContactIds();
}
- @Override
- public MultiSelectEntryContactListAdapter getAdapter() {
- return (MultiSelectEntryContactListAdapter) super.getAdapter();
+ public long[] getSelectedContactIdsArray() {
+ return getAdapter().getSelectedContactIdsArray();
}
@Override
@@ -125,13 +129,14 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable(EXTRA_KEY_SELECTED_CONTACTS, getSelectedContactIds());
- outState.putBoolean(KEY_SEARCH_RESULT_CLICKED, mSearchResultClicked);
}
public void displayCheckBoxes(boolean displayCheckBoxes) {
- getAdapter().setDisplayCheckBoxes(displayCheckBoxes);
- if (!displayCheckBoxes) {
- clearCheckBoxes();
+ if (getAdapter() != null) {
+ getAdapter().setDisplayCheckBoxes(displayCheckBoxes);
+ if (!displayCheckBoxes) {
+ clearCheckBoxes();
+ }
}
}
@@ -142,24 +147,23 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
@Override
protected boolean onItemLongClick(int position, long id) {
final int previouslySelectedCount = getAdapter().getSelectedContactIds().size();
- final Uri uri = getAdapter().getContactUri(position);
+ final long contactId = getContactId(position);
final int partition = getAdapter().getPartitionForPosition(position);
- if (uri != null && (partition == ContactsContract.Directory.DEFAULT
- && (position > 0 || !getAdapter().hasProfile()))) {
- final String contactId = uri.getLastPathSegment();
- if (!TextUtils.isEmpty(contactId)) {
- if (mCheckBoxListListener != null) {
- mCheckBoxListListener.onStartDisplayingCheckBoxes();
- }
- getAdapter().toggleSelectionOfContactId(Long.valueOf(contactId));
- // Manually send clicked event if there is a checkbox.
- // See b/24098561. TalkBack will not read it otherwise.
- final int index = position + getListView().getHeaderViewsCount() - getListView()
- .getFirstVisiblePosition();
- if (index >= 0 && index < getListView().getChildCount()) {
- getListView().getChildAt(index).sendAccessibilityEvent(AccessibilityEvent
- .TYPE_VIEW_CLICKED);
- }
+ if (contactId >= 0 && partition == ContactsContract.Directory.DEFAULT) {
+ if (mCheckBoxListListener != null) {
+ mCheckBoxListListener.onStartDisplayingCheckBoxes();
+ }
+ getAdapter().toggleSelectionOfContactId(contactId);
+ Logger.logListEvent(ActionType.SELECT, getListType(),
+ /* count */ getAdapter().getCount(), /* clickedIndex */ position,
+ /* numSelected */ 1);
+ // Manually send clicked event if there is a checkbox.
+ // See b/24098561. TalkBack will not read it otherwise.
+ final int index = position + getListView().getHeaderViewsCount() - getListView()
+ .getFirstVisiblePosition();
+ if (index >= 0 && index < getListView().getChildCount()) {
+ getListView().getChildAt(index).sendAccessibilityEvent(AccessibilityEvent
+ .TYPE_VIEW_CLICKED);
}
}
final int nowSelectedCount = getAdapter().getSelectedContactIds().size();
@@ -173,27 +177,32 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
@Override
protected void onItemClick(int position, long id) {
- final Uri uri = getAdapter().getContactUri(position);
- if (uri == null) {
+ final long contactId = getContactId(position);
+ if (contactId < 0) {
return;
}
if (getAdapter().isDisplayingCheckBoxes()) {
- final String contactId = uri.getLastPathSegment();
- if (!TextUtils.isEmpty(contactId)) {
- getAdapter().toggleSelectionOfContactId(Long.valueOf(contactId));
- }
- } else {
- if (isSearchMode()) {
- mSearchResultClicked = true;
- Logger.logSearchEvent(createSearchStateForSearchResultClick(position));
- }
- super.onItemClick(position, id);
+ getAdapter().toggleSelectionOfContactId(contactId);
}
if (mCheckBoxListListener != null && getAdapter().getSelectedContactIds().size() == 0) {
mCheckBoxListListener.onStopDisplayingCheckBoxes();
}
}
+ private long getContactId(int position) {
+ final int contactIdColumnIndex = getAdapter().getContactColumnIdIndex();
+
+ final Cursor cursor = (Cursor) getAdapter().getItem(position);
+ if (cursor != null) {
+ if (cursor.getColumnCount() > contactIdColumnIndex) {
+ return cursor.getLong(contactIdColumnIndex);
+ }
+ }
+
+ Log.w(TAG, "Failed to get contact ID from cursor column " + contactIdColumnIndex);
+ return -1;
+ }
+
/**
* Returns the state of the search results currently presented to the user.
*/
@@ -261,13 +270,168 @@ public class MultiSelectContactsListFragment extends DefaultContactBrowseListFra
return searchState;
}
+ protected void setLayoutAnimation(final ViewGroup view, int animationId) {
+ if (view == null) {
+ return;
+ }
+ view.setLayoutAnimationListener(new Animation.AnimationListener() {
+ @Override
+ public void onAnimationStart(Animation animation) {
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ view.setLayoutAnimation(null);
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation) {
+ }
+ });
+ view.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(getActivity(), animationId));
+ }
+
@Override
- protected ContactListAdapter createListAdapter() {
- DefaultContactListAdapter adapter = new MultiSelectEntryContactListAdapter(getContext());
- adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
- adapter.setDisplayPhotos(true);
- adapter.setPhotoPosition(
- ContactListItemView.getDefaultPhotoPosition(/* opposite = */ false));
- return adapter;
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ final View accountFilterContainer = getView().findViewById(
+ R.id.account_filter_header_container);
+ if (accountFilterContainer == null) {
+ return;
+ }
+
+ int firstCompletelyVisibleItem = firstVisibleItem;
+ if (view != null && view.getChildAt(0) != null && view.getChildAt(0).getTop() < 0) {
+ firstCompletelyVisibleItem++;
+ }
+
+ if (firstCompletelyVisibleItem == 0) {
+ ViewCompat.setElevation(accountFilterContainer, 0);
+ } else {
+ ViewCompat.setElevation(accountFilterContainer,
+ getResources().getDimension(R.dimen.contact_list_header_elevation));
+ }
+ }
+
+ protected void bindListHeaderCustom(View listView, View accountFilterContainer) {
+ bindListHeaderCommon(listView, accountFilterContainer);
+
+ final TextView accountFilterHeader = (TextView) accountFilterContainer.findViewById(
+ R.id.account_filter_header);
+ accountFilterHeader.setText(R.string.listCustomView);
+ accountFilterHeader.setAllCaps(false);
+
+ final ImageView accountFilterHeaderIcon = (ImageView) accountFilterContainer
+ .findViewById(R.id.account_filter_icon);
+ accountFilterHeaderIcon.setVisibility(View.GONE);
+ }
+
+ /**
+ * Show account icon, count of contacts and account name in the header of the list.
+ */
+ protected void bindListHeader(Context context, View listView, View accountFilterContainer,
+ AccountWithDataSet accountWithDataSet, int memberCount) {
+ if (memberCount < 0) {
+ hideHeaderAndAddPadding(context, listView, accountFilterContainer);
+ return;
+ }
+
+ bindListHeaderCommon(listView, accountFilterContainer);
+
+ final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+ final AccountType accountType = accountTypeManager.getAccountType(
+ accountWithDataSet.type, accountWithDataSet.dataSet);
+
+ // Set text of count of contacts and account name
+ final TextView accountFilterHeader = (TextView) accountFilterContainer.findViewById(
+ R.id.account_filter_header);
+ final String headerText = shouldShowAccountName(accountType)
+ ? String.format(context.getResources().getQuantityString(
+ R.plurals.contacts_count_with_account, memberCount),
+ memberCount, accountWithDataSet.name)
+ : context.getResources().getQuantityString(
+ R.plurals.contacts_count, memberCount, memberCount);
+ accountFilterHeader.setText(headerText);
+ accountFilterHeader.setAllCaps(false);
+
+ // Set icon of the account
+ final Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null;
+ final ImageView accountFilterHeaderIcon = (ImageView) accountFilterContainer
+ .findViewById(R.id.account_filter_icon);
+
+ // If it's a writable Google account, we set icon size as 24dp; otherwise, we set it as
+ // 20dp. And we need to change margin accordingly. This is because the Google icon looks
+ // smaller when the icons are of the same size.
+ if (accountType instanceof GoogleAccountType) {
+ accountFilterHeaderIcon.getLayoutParams().height = getResources()
+ .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size);
+ accountFilterHeaderIcon.getLayoutParams().width = getResources()
+ .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size);
+
+ setMargins(accountFilterHeaderIcon,
+ getResources().getDimensionPixelOffset(
+ R.dimen.contact_browser_list_header_icon_left_margin),
+ getResources().getDimensionPixelOffset(
+ R.dimen.contact_browser_list_header_icon_right_margin));
+ } else {
+ accountFilterHeaderIcon.getLayoutParams().height = getResources()
+ .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size_alt);
+ accountFilterHeaderIcon.getLayoutParams().width = getResources()
+ .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size_alt);
+
+ setMargins(accountFilterHeaderIcon,
+ getResources().getDimensionPixelOffset(
+ R.dimen.contact_browser_list_header_icon_left_margin_alt),
+ getResources().getDimensionPixelOffset(
+ R.dimen.contact_browser_list_header_icon_right_margin_alt));
+ }
+ accountFilterHeaderIcon.requestLayout();
+
+ accountFilterHeaderIcon.setVisibility(View.VISIBLE);
+ accountFilterHeaderIcon.setImageDrawable(icon);
+ }
+
+ private boolean shouldShowAccountName(AccountType accountType) {
+ return (accountType.isGroupMembershipEditable() && this instanceof GroupMembersFragment)
+ || GoogleAccountType.ACCOUNT_TYPE.equals(accountType.accountType);
+ }
+
+ private void setMargins(View v, int l, int r) {
+ if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
+ ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
+ p.setMarginStart(l);
+ p.setMarginEnd(r);
+ v.setLayoutParams(p);
+ v.requestLayout();
+ }
+ }
+
+ private void bindListHeaderCommon(View listView, View accountFilterContainer) {
+ // Show header and remove top padding of the list
+ accountFilterContainer.setVisibility(View.VISIBLE);
+ setListViewPaddingTop(listView, /* paddingTop */ 0);
+ }
+
+ /**
+ * Hide header of list view and add padding to the top of list view.
+ */
+ protected void hideHeaderAndAddPadding(Context context, View listView,
+ View accountFilterContainer) {
+ accountFilterContainer.setVisibility(View.GONE);
+ setListViewPaddingTop(listView,
+ /* paddingTop */ context.getResources().getDimensionPixelSize(
+ R.dimen.contact_browser_list_item_padding_top_or_bottom));
+ }
+
+ private void setListViewPaddingTop(View listView, int paddingTop) {
+ listView.setPadding(listView.getPaddingLeft(), paddingTop, listView.getPaddingRight(),
+ listView.getPaddingBottom());
+ }
+
+ /**
+ * Returns the {@link ActionBarAdapter} object associated with list fragment.
+ */
+ public ActionBarAdapter getActionBarAdapter() {
+ return null;
}
}
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java
new file mode 100644
index 000000000..ff2cbaf32
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java
@@ -0,0 +1,191 @@
+/*
+ * 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.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.preference.ContactsPreferences;
+
+/** Email addresses multi-select cursor adapter. */
+public class MultiSelectEmailAddressesListAdapter extends MultiSelectEntryContactListAdapter {
+
+ protected static class EmailQuery {
+ public static final String[] PROJECTION_PRIMARY = new String[] {
+ Email._ID, // 0
+ Email.TYPE, // 1
+ Email.LABEL, // 2
+ Email.ADDRESS, // 3
+ Email.CONTACT_ID, // 4
+ Email.LOOKUP_KEY, // 5
+ Email.PHOTO_ID, // 6
+ Email.DISPLAY_NAME_PRIMARY, // 7
+ Email.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ public static final String[] PROJECTION_ALTERNATIVE = new String[] {
+ Email._ID, // 0
+ Email.TYPE, // 1
+ Email.LABEL, // 2
+ Email.ADDRESS, // 3
+ Email.CONTACT_ID, // 4
+ Email.LOOKUP_KEY, // 5
+ Email.PHOTO_ID, // 6
+ Email.DISPLAY_NAME_ALTERNATIVE, // 7
+ Email.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ public static final int EMAIL_ID = 0;
+ public static final int EMAIL_TYPE = 1;
+ public static final int EMAIL_LABEL = 2;
+ public static final int EMAIL_ADDRESS = 3;
+ public static final int CONTACT_ID = 4;
+ public static final int LOOKUP_KEY = 5;
+ public static final int PHOTO_ID = 6;
+ public static final int DISPLAY_NAME = 7;
+ public static final int PHOTO_URI = 8;
+ }
+
+ private final CharSequence mUnknownNameText;
+ private long[] mContactIdsFilter = null;
+
+ public MultiSelectEmailAddressesListAdapter(Context context) {
+ super(context, EmailQuery.EMAIL_ID);
+
+ mUnknownNameText = context.getText(android.R.string.unknownName);
+ }
+
+ public void setArguments(Bundle bundle) {
+ mContactIdsFilter = bundle.getLongArray(UiIntentActions.SELECTION_ITEM_LIST);
+ }
+
+ @Override
+ public void configureLoader(CursorLoader loader, long directoryId) {
+ final Builder builder;
+ if (isSearchMode()) {
+ builder = Email.CONTENT_FILTER_URI.buildUpon();
+ final String query = getQueryString();
+ builder.appendPath(TextUtils.isEmpty(query) ? "" : query);
+ } else {
+ builder = Email.CONTENT_URI.buildUpon();
+ if (isSectionHeaderDisplayEnabled()) {
+ builder.appendQueryParameter(Email.EXTRA_ADDRESS_BOOK_INDEX, "true");
+ }
+ }
+ builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(directoryId));
+ loader.setUri(builder.build());
+
+ if (mContactIdsFilter != null) {
+ loader.setSelection(ContactsContract.Data.CONTACT_ID
+ + " IN (" + GroupUtil.convertArrayToString(mContactIdsFilter) + ")");
+ }
+
+ if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ loader.setProjection(EmailQuery.PROJECTION_PRIMARY);
+ } else {
+ loader.setProjection(EmailQuery.PROJECTION_ALTERNATIVE);
+ }
+
+ if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+ loader.setSortOrder(Email.SORT_KEY_PRIMARY);
+ } else {
+ loader.setSortOrder(Email.SORT_KEY_ALTERNATIVE);
+ }
+ }
+
+ @Override
+ public String getContactDisplayName(int position) {
+ return ((Cursor) getItem(position)).getString(EmailQuery.DISPLAY_NAME);
+ }
+
+ /**
+ * Builds a {@link Data#CONTENT_URI} for the current cursor position.
+ */
+ public Uri getDataUri(int position) {
+ final long id = ((Cursor) getItem(position)).getLong(EmailQuery.EMAIL_ID);
+ return ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, id);
+ }
+
+ @Override
+ protected ContactListItemView newView(
+ Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+ final ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+ view.setUnknownNameText(mUnknownNameText);
+ view.setQuickContactEnabled(isQuickContactEnabled());
+ return view;
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ final ContactListItemView view = (ContactListItemView)itemView;
+
+ cursor.moveToPosition(position);
+ boolean isFirstEntry = true;
+ final long currentContactId = cursor.getLong(EmailQuery.CONTACT_ID);
+ if (cursor.moveToPrevious() && !cursor.isBeforeFirst()) {
+ final long previousContactId = cursor.getLong(EmailQuery.CONTACT_ID);
+ if (currentContactId == previousContactId) {
+ isFirstEntry = false;
+ }
+ }
+ cursor.moveToPosition(position);
+
+ bindViewId(view, cursor, EmailQuery.EMAIL_ID);
+ if (isFirstEntry) {
+ bindName(view, cursor);
+ bindPhoto(view, cursor, EmailQuery.PHOTO_ID, EmailQuery.LOOKUP_KEY,
+ EmailQuery.DISPLAY_NAME);
+ } else {
+ unbindName(view);
+ view.removePhotoView(true, false);
+ }
+ bindEmailAddress(view, cursor);
+ }
+
+ protected void unbindName(final ContactListItemView view) {
+ view.hideDisplayName();
+ }
+
+ protected void bindEmailAddress(ContactListItemView view, Cursor cursor) {
+ CharSequence label = null;
+ if (!cursor.isNull(EmailQuery.EMAIL_TYPE)) {
+ final int type = cursor.getInt(EmailQuery.EMAIL_TYPE);
+ final String customLabel = cursor.getString(EmailQuery.EMAIL_LABEL);
+
+ // TODO cache
+ label = Email.getTypeLabel(getContext().getResources(), type, customLabel);
+ }
+ view.setLabel(label);
+ view.showData(cursor, EmailQuery.EMAIL_ADDRESS);
+ }
+
+ protected void bindName(final ContactListItemView view, Cursor cursor) {
+ view.showDisplayName(cursor, EmailQuery.DISPLAY_NAME, getContactNameDisplayOrder());
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
new file mode 100644
index 000000000..6f6a3c7ea
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
@@ -0,0 +1,140 @@
+/*
+ * 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.list;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.logging.ListEvent;
+
+import java.util.List;
+import java.util.TreeSet;
+
+/** Displays a list of emails with check boxes. */
+public class MultiSelectEmailAddressesListFragment
+ extends MultiSelectContactsListFragment<MultiSelectEmailAddressesListAdapter>{
+
+ public MultiSelectEmailAddressesListFragment() {
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(false);
+ setSearchMode(false);
+ setHasOptionsMenu(true);
+ setListType(ListEvent.ListType.PICK_EMAIL);
+ }
+
+ @Override
+ public MultiSelectEmailAddressesListAdapter createListAdapter() {
+ final MultiSelectEmailAddressesListAdapter adapter =
+ new MultiSelectEmailAddressesListAdapter(getActivity());
+ adapter.setArguments(getArguments());
+ return adapter;
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.items_multi_select, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final MenuItem item = menu.findItem(R.id.menu_send);
+ item.setVisible(getAdapter().hasSelectedItems());
+ item.getActionView().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onOptionsItemSelected(item);
+ }
+ });
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ getActivity().finish();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.menu_send) {
+ final String scheme = getActivity().getIntent().getStringExtra(
+ UiIntentActions.SELECTION_SEND_SCHEME);
+ final String title = getActivity().getIntent().getStringExtra(
+ UiIntentActions.SELECTION_SEND_TITLE);
+ final List<String> items = GroupUtil.getSendToDataForIds(
+ getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+ final String list = TextUtils.join(",", items);
+ GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final long[] selectedIds = getActivity().getIntent().getLongArrayExtra(
+ UiIntentActions.SELECTION_DEFAULT_SELECTION);
+ if (selectedIds != null && selectedIds.length != 0) {
+ final TreeSet<Long> selectedIdsTree = new TreeSet<>();
+ for (int i = 0; i < selectedIds.length; i++) {
+ selectedIdsTree.add(selectedIds[i]);
+ }
+ getAdapter().setSelectedContactIds(selectedIdsTree);
+ onSelectedContactsChanged();
+ }
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ displayCheckBoxes(true);
+
+ final long[] itemIds = getActivity().getIntent().getLongArrayExtra(
+ UiIntentActions.SELECTION_ITEM_LIST);
+ final boolean[] selectedFlags = getActivity().getIntent().getBooleanArrayExtra(
+ UiIntentActions.SELECTION_DEFAULT_SELECTION);
+ if (itemIds != null && selectedFlags != null && itemIds.length == selectedFlags.length) {
+ TreeSet<Long> selectedIds = new TreeSet<>();
+ for (int i = 0; i < itemIds.length; i++) {
+ if (selectedFlags[i]) {
+ selectedIds.add(itemIds[i]);
+ }
+ }
+ getAdapter().setSelectedContactIds(selectedIds);
+ onSelectedContactsChanged();
+ }
+ }
+
+ @Override
+ protected boolean onItemLongClick(int position, long id) {
+ return true;
+ }
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(com.android.contacts.R.layout.contact_list_content, null);
+ }
+}
diff --git a/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
index 3ba86db72..a0b4f3cb7 100644
--- a/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
+++ b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
@@ -16,35 +16,62 @@
package com.android.contacts.list;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.view.View;
-import android.view.View.OnClickListener;
import android.widget.CheckBox;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.group.GroupUtil;
+
import java.util.TreeSet;
/**
* An extension of the default contact adapter that adds checkboxes and the ability
* to select multiple contacts.
*/
-public class MultiSelectEntryContactListAdapter extends DefaultContactListAdapter {
+public abstract class MultiSelectEntryContactListAdapter extends ContactEntryListAdapter {
private SelectedContactsListener mSelectedContactsListener;
- private TreeSet<Long> mSelectedContactIds = new TreeSet<Long>();
+ private DeleteContactListener mDeleteContactListener;
+ private TreeSet<Long> mSelectedContactIds = new TreeSet<>();
private boolean mDisplayCheckBoxes;
+ private final int mContactIdColumnIndex;
public interface SelectedContactsListener {
void onSelectedContactsChanged();
- void onSelectedContactsChangedViaCheckBox();
}
- public MultiSelectEntryContactListAdapter(Context context) {
+ public interface DeleteContactListener {
+ void onContactDeleteClicked(int position);
+ }
+
+ /**
+ * @param contactIdColumnIndex the column index of the contact ID in the underlying cursor;
+ * it is passed in so that this adapter can support different kinds of contact
+ * lists (e.g. aggregate contacts or raw contacts).
+ */
+ public MultiSelectEntryContactListAdapter(Context context, int contactIdColumnIndex) {
super(context);
+ mContactIdColumnIndex = contactIdColumnIndex;
+ }
+
+ /**
+ * Returns the column index of the contact ID in the underlying cursor; the contact ID
+ * retrieved using this index is the value that is selected by this adapter (and returned
+ * by {@link #getSelectedContactIds}).
+ */
+ public int getContactColumnIdIndex() {
+ return mContactIdColumnIndex;
+ }
+
+ public DeleteContactListener getDeleteContactListener() {
+ return mDeleteContactListener;
+ }
+
+ public void setDeleteContactListener(DeleteContactListener deleteContactListener) {
+ mDeleteContactListener = deleteContactListener;
}
public void setSelectedContactsListener(SelectedContactsListener listener) {
@@ -58,6 +85,17 @@ public class MultiSelectEntryContactListAdapter extends DefaultContactListAdapte
return mSelectedContactIds;
}
+ public boolean hasSelectedItems() {
+ return mSelectedContactIds.size() > 0;
+ }
+
+ /**
+ * Returns the selected contacts as an array.
+ */
+ public long[] getSelectedContactIdsArray() {
+ return GroupUtil.convertLongSetToLongArray(mSelectedContactIds);
+ }
+
/**
* Update set of selected contacts. This changes which checkboxes are set.
*/
@@ -74,9 +112,6 @@ public class MultiSelectEntryContactListAdapter extends DefaultContactListAdapte
* Not guaranteed to work with all configurations of this adapter.
*/
public void setDisplayCheckBoxes(boolean showCheckBoxes) {
- if (!mDisplayCheckBoxes && showCheckBoxes) {
- setSelectedContactIds(new TreeSet<Long>());
- }
mDisplayCheckBoxes = showCheckBoxes;
notifyDataSetChanged();
if (mSelectedContactsListener != null) {
@@ -107,44 +142,54 @@ public class MultiSelectEntryContactListAdapter extends DefaultContactListAdapte
}
@Override
+ public long getItemId(int position) {
+ Cursor cursor = (Cursor) getItem(position);
+ if (cursor != null) {
+ return cursor.getLong(getContactColumnIdIndex());
+ }
+ return 0;
+ }
+
+ @Override
protected void bindView(View itemView, int partition, Cursor cursor, int position) {
super.bindView(itemView, partition, cursor, position);
final ContactListItemView view = (ContactListItemView) itemView;
- bindCheckBox(view, cursor, position, partition == ContactsContract.Directory.DEFAULT);
+ bindViewId(view, cursor, getContactColumnIdIndex());
+ bindCheckBox(view, cursor, partition == ContactsContract.Directory.DEFAULT);
}
- private void bindCheckBox(ContactListItemView view, Cursor cursor, int position,
- boolean isLocalDirectory) {
- // Disable clicking on the ME profile and all contacts from remote directories
- // when showing check boxes. We do this by telling the view to handle clicking itself.
- view.setClickable((position == 0 && hasProfile() || !isLocalDirectory)
- && mDisplayCheckBoxes);
+ /**
+ * Loads the photo for the photo view.
+ * @param photoIdColumn Index of the photo id column
+ * @param lookUpKeyColumn Index of the lookup key column
+ * @param displayNameColumn Index of the display name column
+ */
+ protected void bindPhoto(final ContactListItemView view, final Cursor cursor,
+ final int photoIdColumn, final int lookUpKeyColumn, final int displayNameColumn) {
+ final long photoId = cursor.isNull(photoIdColumn)
+ ? 0 : cursor.getLong(photoIdColumn);
+ final ContactPhotoManager.DefaultImageRequest imageRequest = photoId == 0
+ ? getDefaultImageRequestFromCursor(cursor, displayNameColumn,
+ lookUpKeyColumn)
+ : null;
+ getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false, getCircularPhotos(),
+ imageRequest);
+ }
+
+ private void bindCheckBox(ContactListItemView view, Cursor cursor, boolean isLocalDirectory) {
+ // Disable clicking on all contacts from remote directories when showing check boxes. We do
+ // this by telling the view to handle clicking itself.
+ view.setClickable(!isLocalDirectory && mDisplayCheckBoxes);
// Only show checkboxes if mDisplayCheckBoxes is enabled. Also, never show the
- // checkbox for the Me profile entry and other directory contacts except local directory.
- if (position == 0 && hasProfile() || !mDisplayCheckBoxes || !isLocalDirectory) {
+ // checkbox for other directory contacts except local directory.
+ if (!mDisplayCheckBoxes || !isLocalDirectory) {
view.hideCheckBox();
return;
}
final CheckBox checkBox = view.getCheckBox();
- final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+ final long contactId = cursor.getLong(mContactIdColumnIndex);
checkBox.setChecked(mSelectedContactIds.contains(contactId));
+ checkBox.setClickable(false);
checkBox.setTag(contactId);
- checkBox.setOnClickListener(mCheckBoxClickListener);
- }
-
- private final OnClickListener mCheckBoxClickListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- final CheckBox checkBox = (CheckBox) v;
- final Long contactId = (Long) checkBox.getTag();
- if (checkBox.isChecked()) {
- mSelectedContactIds.add(contactId);
- } else {
- mSelectedContactIds.remove(contactId);
- }
- if (mSelectedContactsListener != null) {
- mSelectedContactsListener.onSelectedContactsChangedViaCheckBox();
- }
- }
- };
+ }
}
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java
new file mode 100644
index 000000000..30d5429d7
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java
@@ -0,0 +1,191 @@
+/*
+ * 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.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.preference.ContactsPreferences;
+
+/** Phone Numbers multi-select cursor adapter. */
+public class MultiSelectPhoneNumbersListAdapter extends MultiSelectEntryContactListAdapter {
+
+ public static class PhoneQuery {
+ public static final String[] PROJECTION_PRIMARY = new String[] {
+ Phone._ID, // 0
+ Phone.TYPE, // 1
+ Phone.LABEL, // 2
+ Phone.NUMBER, // 3
+ Phone.CONTACT_ID, // 4
+ Phone.LOOKUP_KEY, // 5
+ Phone.PHOTO_ID, // 6
+ Phone.DISPLAY_NAME_PRIMARY, // 7
+ Phone.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ public static final String[] PROJECTION_ALTERNATIVE = new String[] {
+ Phone._ID, // 0
+ Phone.TYPE, // 1
+ Phone.LABEL, // 2
+ Phone.NUMBER, // 3
+ Phone.CONTACT_ID, // 4
+ Phone.LOOKUP_KEY, // 5
+ Phone.PHOTO_ID, // 6
+ Phone.DISPLAY_NAME_ALTERNATIVE, // 7
+ Phone.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ 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 CONTACT_ID = 4;
+ public static final int LOOKUP_KEY = 5;
+ public static final int PHOTO_ID = 6;
+ public static final int DISPLAY_NAME = 7;
+ public static final int PHOTO_URI = 8;
+ }
+
+ private final CharSequence mUnknownNameText;
+ private long[] mContactIdsFilter = null;
+
+ public MultiSelectPhoneNumbersListAdapter(Context context) {
+ super(context, PhoneQuery.PHONE_ID);
+
+ mUnknownNameText = context.getText(android.R.string.unknownName);
+ }
+
+ public void setArguments(Bundle bundle) {
+ mContactIdsFilter = bundle.getLongArray(UiIntentActions.SELECTION_ITEM_LIST);
+ }
+
+ @Override
+ public void configureLoader(CursorLoader loader, long directoryId) {
+ final Builder builder;
+ if (isSearchMode()) {
+ builder = Phone.CONTENT_FILTER_URI.buildUpon();
+ final String query = getQueryString();
+ builder.appendPath(TextUtils.isEmpty(query) ? "" : query);
+ } else {
+ builder = Phone.CONTENT_URI.buildUpon();
+ if (isSectionHeaderDisplayEnabled()) {
+ builder.appendQueryParameter(Phone.EXTRA_ADDRESS_BOOK_INDEX, "true");
+ }
+ }
+ builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(directoryId));
+ loader.setUri(builder.build());
+
+ if (mContactIdsFilter != null) {
+ loader.setSelection(ContactsContract.Data.CONTACT_ID
+ + " IN (" + GroupUtil.convertArrayToString(mContactIdsFilter) + ")");
+ }
+
+ if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
+ } else {
+ loader.setProjection(PhoneQuery.PROJECTION_ALTERNATIVE);
+ }
+
+ if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+ loader.setSortOrder(Phone.SORT_KEY_PRIMARY);
+ } else {
+ loader.setSortOrder(Phone.SORT_KEY_ALTERNATIVE);
+ }
+ }
+
+ @Override
+ public String getContactDisplayName(int position) {
+ return ((Cursor) getItem(position)).getString(PhoneQuery.DISPLAY_NAME);
+ }
+
+ /**
+ * Builds a {@link Data#CONTENT_URI} for the current cursor position.
+ */
+ public Uri getDataUri(int position) {
+ final long id = ((Cursor) getItem(position)).getLong(PhoneQuery.PHONE_ID);
+ return ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, id);
+ }
+
+ @Override
+ protected ContactListItemView newView(
+ Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+ final ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+ view.setUnknownNameText(mUnknownNameText);
+ view.setQuickContactEnabled(isQuickContactEnabled());
+ return view;
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ final ContactListItemView view = (ContactListItemView)itemView;
+
+ cursor.moveToPosition(position);
+ boolean isFirstEntry = true;
+ final long currentContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (cursor.moveToPrevious() && !cursor.isBeforeFirst()) {
+ final long previousContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (currentContactId == previousContactId) {
+ isFirstEntry = false;
+ }
+ }
+ cursor.moveToPosition(position);
+
+ bindViewId(view, cursor, PhoneQuery.PHONE_ID);
+ if (isFirstEntry) {
+ bindName(view, cursor);
+ bindPhoto(view, cursor, PhoneQuery.PHOTO_ID, PhoneQuery.LOOKUP_KEY,
+ PhoneQuery.DISPLAY_NAME);
+ } else {
+ unbindName(view);
+ view.removePhotoView(true, false);
+ }
+ bindPhoneNumber(view, cursor);
+ }
+
+ protected void unbindName(final ContactListItemView view) {
+ view.hideDisplayName();
+ }
+
+ protected void bindPhoneNumber(ContactListItemView view, Cursor cursor) {
+ CharSequence label = null;
+ if (!cursor.isNull(PhoneQuery.PHONE_TYPE)) {
+ final int type = cursor.getInt(PhoneQuery.PHONE_TYPE);
+ final String customLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
+
+ // TODO cache
+ label = Phone.getTypeLabel(getContext().getResources(), type, customLabel);
+ }
+ view.setLabel(label);
+ view.showData(cursor, PhoneQuery.PHONE_NUMBER);
+ }
+
+ protected void bindName(final ContactListItemView view, Cursor cursor) {
+ view.showDisplayName(cursor, PhoneQuery.DISPLAY_NAME, getContactNameDisplayOrder());
+ }
+}
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
new file mode 100644
index 000000000..2b7021e2e
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
@@ -0,0 +1,125 @@
+/*
+ * 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.list;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.logging.ListEvent;
+
+import java.util.List;
+import java.util.TreeSet;
+
+/** Displays a list of phone numbers with check boxes. */
+public class MultiSelectPhoneNumbersListFragment
+ extends MultiSelectContactsListFragment<MultiSelectPhoneNumbersListAdapter> {
+
+ public MultiSelectPhoneNumbersListFragment() {
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(false);
+ setSearchMode(false);
+ setHasOptionsMenu(true);
+ setListType(ListEvent.ListType.PICK_PHONE);
+ }
+
+ @Override
+ public MultiSelectPhoneNumbersListAdapter createListAdapter() {
+ final MultiSelectPhoneNumbersListAdapter adapter =
+ new MultiSelectPhoneNumbersListAdapter(getActivity());
+ adapter.setArguments(getArguments());
+ return adapter;
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, final MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.items_multi_select, menu);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final MenuItem item = menu.findItem(R.id.menu_send);
+ item.setVisible(getAdapter().hasSelectedItems());
+ item.getActionView().setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onOptionsItemSelected(item);
+ }
+ });
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ getActivity().finish();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.menu_send) {
+ final String scheme = getActivity().getIntent().getStringExtra(
+ UiIntentActions.SELECTION_SEND_SCHEME);
+ final String title = getActivity().getIntent().getStringExtra(
+ UiIntentActions.SELECTION_SEND_TITLE);
+ final List<String> items = GroupUtil.getSendToDataForIds(
+ getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+ final String list = TextUtils.join(",", items);
+ GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final long[] selectedIds = getActivity().getIntent().getLongArrayExtra(
+ UiIntentActions.SELECTION_DEFAULT_SELECTION);
+ if (selectedIds != null && selectedIds.length != 0) {
+ final TreeSet<Long> selectedIdsTree = new TreeSet<>();
+ for (int i = 0; i < selectedIds.length; i++) {
+ selectedIdsTree.add(selectedIds[i]);
+ }
+ getAdapter().setSelectedContactIds(selectedIdsTree);
+ onSelectedContactsChanged();
+ }
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ displayCheckBoxes(true);
+ }
+
+ @Override
+ protected boolean onItemLongClick(int position, long id) {
+ return true;
+ }
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(com.android.contacts.R.layout.contact_list_content, null);
+ }
+}
diff --git a/src/com/android/contacts/list/OnContactBrowserActionListener.java b/src/com/android/contacts/list/OnContactBrowserActionListener.java
index 59fc61186..5c046d1e3 100644
--- a/src/com/android/contacts/list/OnContactBrowserActionListener.java
+++ b/src/com/android/contacts/list/OnContactBrowserActionListener.java
@@ -31,9 +31,10 @@ public interface OnContactBrowserActionListener {
/**
* Opens the specified contact for viewing.
*
- * @param contactLookupUri The lookup-uri of the Contact that should be opened
+ * @param position The index of the contact that should be opened
+ * @param contactLookupUri The lookup-uri of the contact that should be opened
*/
- void onViewContactAction(Uri contactLookupUri, boolean isEnterpriseContact);
+ void onViewContactAction(int position, Uri contactLookupUri, boolean isEnterpriseContact);
/**
* Initiates the contact deletion process.
diff --git a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java b/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
deleted file mode 100644
index cc381e470..000000000
--- a/src/com/android/contacts/list/OnContactsUnavailableActionListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 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.list;
-
-/**
- * Action callbacks that can be sent by the "contacts unavailable" fragment.
- */
-public interface OnContactsUnavailableActionListener {
-
- /**
- * Creates a new contact.
- */
- void onCreateNewContactAction();
-
- /**
- * Initiates addition of a contacts account.
- */
- void onAddAccountAction();
-
- /**
- * Initiates contact import from a file.
- */
- void onImportContactsFromFileAction();
-}
diff --git a/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
new file mode 100644
index 000000000..616562c3d
--- /dev/null
+++ b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.app.ActionBar;
+import android.content.Intent;
+import android.net.Uri;
+
+/**
+ * Action callbacks that can be sent by a phone number picker.
+ */
+public interface OnPhoneNumberPickerActionListener {
+ public static final int CALL_INITIATION_UNKNOWN = 0;
+
+ /**
+ * Returns the selected phone number uri to the requester.
+ */
+ void onPickDataUri(Uri dataUri, boolean isVideoCall, int callInitiationType);
+
+ /**
+ * Returns the specified phone number to the requester.
+ * May call the specified phone number, either as an audio or video call.
+ */
+ void onPickPhoneNumber(String phoneNumber, boolean isVideoCall, int callInitiationType);
+
+ /**
+ * Returns the selected number as a shortcut intent.
+ */
+ void onShortcutIntentCreated(Intent intent);
+
+ /**
+ * Called when home menu in {@link ActionBar} is clicked by the user.
+ */
+ void onHomeInActionBarSelected();
+}
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
new file mode 100644
index 000000000..d459d47ce
--- /dev/null
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -0,0 +1,657 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.GeoUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.CallableCompat;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.compat.PhoneCompat;
+import com.android.contacts.extensions.ExtendedPhoneDirectoriesManager;
+import com.android.contacts.extensions.ExtensionsFactory;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.Constants;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A cursor adapter for the {@link Phone#CONTENT_ITEM_TYPE} and
+ * {@link SipAddress#CONTENT_ITEM_TYPE}.
+ *
+ * By default this adapter just handles phone numbers. When {@link #setUseCallableUri(boolean)} is
+ * called with "true", this adapter starts handling SIP addresses too, by using {@link Callable}
+ * API instead of {@link Phone}.
+ */
+public class PhoneNumberListAdapter extends ContactEntryListAdapter {
+
+ private static final String TAG = PhoneNumberListAdapter.class.getSimpleName();
+
+ public interface Listener {
+ void onVideoCallIconClicked(int position);
+ }
+
+ // A list of extended directories to add to the directories from the database
+ private final List<DirectoryPartition> mExtendedDirectories;
+
+ // 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;
+
+ public static class PhoneQuery {
+
+ /**
+ * Optional key used as part of a JSON lookup key to specify an analytics category
+ * associated with the row.
+ */
+ public static final String ANALYTICS_CATEGORY = "analytics_category";
+
+ /**
+ * Optional key used as part of a JSON lookup key to specify an analytics action associated
+ * with the row.
+ */
+ public static final String ANALYTICS_ACTION = "analytics_action";
+
+ /**
+ * Optional key used as part of a JSON lookup key to specify an analytics value associated
+ * with the row.
+ */
+ public static final String ANALYTICS_VALUE = "analytics_value";
+
+ public static final String[] PROJECTION_PRIMARY_INTERNAL = new String[] {
+ Phone._ID, // 0
+ Phone.TYPE, // 1
+ Phone.LABEL, // 2
+ Phone.NUMBER, // 3
+ Phone.CONTACT_ID, // 4
+ Phone.LOOKUP_KEY, // 5
+ Phone.PHOTO_ID, // 6
+ Phone.DISPLAY_NAME_PRIMARY, // 7
+ Phone.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ public static final String[] PROJECTION_PRIMARY;
+
+ static {
+ final List<String> projectionList = Lists.newArrayList(PROJECTION_PRIMARY_INTERNAL);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ projectionList.add(Phone.CARRIER_PRESENCE); // 9
+ }
+ PROJECTION_PRIMARY = projectionList.toArray(new String[projectionList.size()]);
+ }
+
+ public static final String[] PROJECTION_ALTERNATIVE_INTERNAL = new String[] {
+ Phone._ID, // 0
+ Phone.TYPE, // 1
+ Phone.LABEL, // 2
+ Phone.NUMBER, // 3
+ Phone.CONTACT_ID, // 4
+ Phone.LOOKUP_KEY, // 5
+ Phone.PHOTO_ID, // 6
+ Phone.DISPLAY_NAME_ALTERNATIVE, // 7
+ Phone.PHOTO_THUMBNAIL_URI, // 8
+ };
+
+ public static final String[] PROJECTION_ALTERNATIVE;
+
+ static {
+ final List<String> projectionList = Lists.newArrayList(PROJECTION_ALTERNATIVE_INTERNAL);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ projectionList.add(Phone.CARRIER_PRESENCE); // 9
+ }
+ PROJECTION_ALTERNATIVE = projectionList.toArray(new String[projectionList.size()]);
+ }
+
+ 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 CONTACT_ID = 4;
+ public static final int LOOKUP_KEY = 5;
+ public static final int PHOTO_ID = 6;
+ public static final int DISPLAY_NAME = 7;
+ public static final int PHOTO_URI = 8;
+ public static final int CARRIER_PRESENCE = 9;
+ }
+
+ private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE =
+ "length(" + Phone.NUMBER + ") < 1000";
+
+ private final CharSequence mUnknownNameText;
+ private final String mCountryIso;
+
+ private ContactListItemView.PhotoPosition mPhotoPosition;
+
+ private boolean mUseCallableUri;
+
+ private Listener mListener;
+
+ private boolean mIsVideoEnabled;
+ private boolean mIsPresenceEnabled;
+
+ public PhoneNumberListAdapter(Context context) {
+ super(context);
+ setDefaultFilterHeaderText(R.string.list_filter_phones);
+ mUnknownNameText = context.getText(android.R.string.unknownName);
+ mCountryIso = GeoUtil.getCurrentCountryIso(context);
+
+ final ExtendedPhoneDirectoriesManager manager
+ = ExtensionsFactory.getExtendedPhoneDirectoriesManager();
+ if (manager != null) {
+ mExtendedDirectories = manager.getExtendedDirectories(mContext);
+ } else {
+ // Empty list to avoid sticky NPE's
+ mExtendedDirectories = new ArrayList<DirectoryPartition>();
+ }
+
+ int videoCapabilities = CallUtil.getVideoCallingAvailability(context);
+ mIsVideoEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_ENABLED) != 0;
+ mIsPresenceEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_PRESENCE) != 0;
+ }
+
+ protected CharSequence getUnknownNameText() {
+ return mUnknownNameText;
+ }
+
+ @Override
+ public void configureLoader(CursorLoader loader, long directoryId) {
+ String query = getQueryString();
+ if (query == null) {
+ query = "";
+ }
+ if (isExtendedDirectory(directoryId)) {
+ final DirectoryPartition directory = getExtendedDirectoryFromId(directoryId);
+ final String contentUri = directory.getContentUri();
+ if (contentUri == null) {
+ throw new IllegalStateException("Extended directory must have a content URL: "
+ + directory);
+ }
+ final Builder builder = Uri.parse(contentUri).buildUpon();
+ builder.appendPath(query);
+ builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+ String.valueOf(getDirectoryResultLimit(directory)));
+ loader.setUri(builder.build());
+ loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
+ } else {
+ final boolean isRemoteDirectoryQuery
+ = DirectoryCompat.isRemoteDirectoryId(directoryId);
+ final Builder builder;
+ if (isSearchMode()) {
+ final Uri baseUri;
+ if (isRemoteDirectoryQuery) {
+ baseUri = PhoneCompat.getContentFilterUri();
+ } else if (mUseCallableUri) {
+ baseUri = CallableCompat.getContentFilterUri();
+ } else {
+ baseUri = PhoneCompat.getContentFilterUri();
+ }
+ builder = baseUri.buildUpon();
+ builder.appendPath(query); // Builder will encode the query
+ builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(directoryId));
+ if (isRemoteDirectoryQuery) {
+ builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+ String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
+ }
+ } else {
+ Uri baseUri = mUseCallableUri ? Callable.CONTENT_URI : Phone.CONTENT_URI;
+ builder = baseUri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
+ if (isSectionHeaderDisplayEnabled()) {
+ builder.appendQueryParameter(Phone.EXTRA_ADDRESS_BOOK_INDEX, "true");
+ }
+ applyFilter(loader, builder, directoryId, getFilter());
+ }
+
+ // Ignore invalid phone numbers that are too long. These can potentially cause freezes
+ // in the UI and there is no reason to display them.
+ final String prevSelection = loader.getSelection();
+ final String newSelection;
+ if (!TextUtils.isEmpty(prevSelection)) {
+ newSelection = prevSelection + " AND " + IGNORE_NUMBER_TOO_LONG_CLAUSE;
+ } else {
+ newSelection = IGNORE_NUMBER_TOO_LONG_CLAUSE;
+ }
+ loader.setSelection(newSelection);
+
+ // Remove duplicates when it is possible.
+ builder.appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
+ loader.setUri(builder.build());
+
+ // TODO a projection that includes the search snippet
+ if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
+ } else {
+ loader.setProjection(PhoneQuery.PROJECTION_ALTERNATIVE);
+ }
+
+ if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+ loader.setSortOrder(Phone.SORT_KEY_PRIMARY);
+ } else {
+ loader.setSortOrder(Phone.SORT_KEY_ALTERNATIVE);
+ }
+ }
+ }
+
+ protected boolean isExtendedDirectory(long directoryId) {
+ return directoryId >= mFirstExtendedDirectoryId;
+ }
+
+ private DirectoryPartition getExtendedDirectoryFromId(long directoryId) {
+ final int directoryIndex = (int) (directoryId - mFirstExtendedDirectoryId);
+ return mExtendedDirectories.get(directoryIndex);
+ }
+
+ /**
+ * Configure {@code loader} and {@code uriBuilder} according to {@code directoryId} and {@code
+ * filter}.
+ */
+ private void applyFilter(CursorLoader loader, Uri.Builder uriBuilder, long directoryId,
+ ContactListFilter filter) {
+ if (filter == null || directoryId != Directory.DEFAULT) {
+ return;
+ }
+
+ final StringBuilder selection = new StringBuilder();
+ final List<String> selectionArgs = new ArrayList<String>();
+
+ switch (filter.filterType) {
+ case ContactListFilter.FILTER_TYPE_CUSTOM: {
+ selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+ selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+ filter.addAccountQueryParameterToUrl(uriBuilder);
+ break;
+ }
+ case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS:
+ case ContactListFilter.FILTER_TYPE_DEFAULT:
+ break; // No selection needed.
+ case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+ break; // This adapter is always "phone only", so no selection needed either.
+ default:
+ Log.w(TAG, "Unsupported filter type came " +
+ "(type: " + filter.filterType + ", toString: " + filter + ")" +
+ " showing all contacts.");
+ // No selection.
+ break;
+ }
+ loader.setSelection(selection.toString());
+ loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
+ }
+
+ @Override
+ public String getContactDisplayName(int position) {
+ return ((Cursor) getItem(position)).getString(PhoneQuery.DISPLAY_NAME);
+ }
+
+ public String getPhoneNumber(int position) {
+ final Cursor item = (Cursor)getItem(position);
+ return item != null ? item.getString(PhoneQuery.PHONE_NUMBER) : null;
+ }
+
+ /**
+ * Builds a {@link Data#CONTENT_URI} for the given cursor position.
+ *
+ * @return Uri for the data. may be null if the cursor is not ready.
+ */
+ public Uri getDataUri(int position) {
+ final int partitionIndex = getPartitionForPosition(position);
+ final Cursor item = (Cursor)getItem(position);
+ return item != null ? getDataUri(partitionIndex, item) : null;
+ }
+
+ public Uri getDataUri(int partitionIndex, Cursor cursor) {
+ final long directoryId =
+ ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+ if (DirectoryCompat.isRemoteDirectoryId(directoryId)) {
+ return null;
+ } else if (DirectoryCompat.isEnterpriseDirectoryId(directoryId)) {
+ /*
+ * ContentUris.withAppendedId(Data.CONTENT_URI, phoneId), is invalid if
+ * isEnterpriseDirectoryId returns true, because the uri itself will fail since the
+ * ContactsProvider in Android Framework currently doesn't support it. return null until
+ * Android framework has enterprise version of Data.CONTENT_URI
+ */
+ return null;
+ } else {
+ final long phoneId = cursor.getLong(PhoneQuery.PHONE_ID);
+ return ContentUris.withAppendedId(Data.CONTENT_URI, phoneId);
+ }
+ }
+
+ /**
+ * Retrieves the lookup key for the given cursor position.
+ *
+ * @param position The cursor position.
+ * @return The lookup key.
+ */
+ public String getLookupKey(int position) {
+ final Cursor item = (Cursor)getItem(position);
+ return item != null ? item.getString(PhoneQuery.LOOKUP_KEY) : null;
+ }
+
+ @Override
+ protected ContactListItemView newView(
+ Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+ ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+ view.setUnknownNameText(mUnknownNameText);
+ view.setQuickContactEnabled(isQuickContactEnabled());
+ view.setPhotoPosition(mPhotoPosition);
+ return view;
+ }
+
+ protected void setHighlight(ContactListItemView view, Cursor cursor) {
+ view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
+ }
+
+ // Override default, which would return number of phone numbers, so we
+ // instead return number of contacts.
+ @Override
+ protected int getResultCount(Cursor cursor) {
+ if (cursor == null) {
+ return 0;
+ }
+ cursor.moveToPosition(-1);
+ long curContactId = -1;
+ int numContacts = 0;
+ while(cursor.moveToNext()) {
+ final long contactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (contactId != curContactId) {
+ curContactId = contactId;
+ ++numContacts;
+ }
+ }
+ return numContacts;
+ }
+
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ ContactListItemView view = (ContactListItemView)itemView;
+
+ setHighlight(view, cursor);
+
+ // Look at elements before and after this position, checking if contact IDs are same.
+ // If they have one same contact ID, it means they can be grouped.
+ //
+ // In one group, only the first entry will show its photo and its name, and the other
+ // entries in the group show just their data (e.g. phone number, email address).
+ cursor.moveToPosition(position);
+ boolean isFirstEntry = true;
+ boolean showBottomDivider = true;
+ final long currentContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (cursor.moveToPrevious() && !cursor.isBeforeFirst()) {
+ final long previousContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (currentContactId == previousContactId) {
+ isFirstEntry = false;
+ }
+ }
+ cursor.moveToPosition(position);
+ if (cursor.moveToNext() && !cursor.isAfterLast()) {
+ final long nextContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+ if (currentContactId == nextContactId) {
+ // The following entry should be in the same group, which means we don't want a
+ // divider between them.
+ // TODO: we want a different divider than the divider between groups. Just hiding
+ // this divider won't be enough.
+ showBottomDivider = false;
+ }
+ }
+ cursor.moveToPosition(position);
+
+ bindViewId(view, cursor, PhoneQuery.PHONE_ID);
+
+ bindSectionHeaderAndDivider(view, position);
+ if (isFirstEntry) {
+ bindName(view, cursor);
+ if (isQuickContactEnabled()) {
+ bindQuickContact(view, partition, cursor, PhoneQuery.PHOTO_ID,
+ PhoneQuery.PHOTO_URI, PhoneQuery.CONTACT_ID,
+ PhoneQuery.LOOKUP_KEY, PhoneQuery.DISPLAY_NAME);
+ } else {
+ if (getDisplayPhotos()) {
+ bindPhoto(view, partition, cursor);
+ }
+ }
+ } else {
+ unbindName(view);
+
+ view.removePhotoView(true, false);
+ }
+
+ final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
+ bindPhoneNumber(view, cursor, directory.isDisplayNumber(), position);
+ }
+
+ protected void bindPhoneNumber(ContactListItemView view, Cursor cursor, boolean displayNumber,
+ int position) {
+ CharSequence label = null;
+ if (displayNumber && !cursor.isNull(PhoneQuery.PHONE_TYPE)) {
+ final int type = cursor.getInt(PhoneQuery.PHONE_TYPE);
+ final String customLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
+
+ // TODO cache
+ label = Phone.getTypeLabel(getContext().getResources(), type, customLabel);
+ }
+ view.setLabel(label);
+ final String text;
+ if (displayNumber) {
+ text = cursor.getString(PhoneQuery.PHONE_NUMBER);
+ } else {
+ // Display phone label. If that's null, display geocoded location for the number
+ final String phoneLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
+ if (phoneLabel != null) {
+ text = phoneLabel;
+ } else {
+ final String phoneNumber = cursor.getString(PhoneQuery.PHONE_NUMBER);
+ text = GeoUtil.getGeocodedLocationFor(mContext, phoneNumber);
+ }
+ }
+ view.setPhoneNumber(text, mCountryIso);
+
+ if (CompatUtils.isVideoCompatible()) {
+ // Determine if carrier presence indicates the number supports video calling.
+ int carrierPresence = cursor.getInt(PhoneQuery.CARRIER_PRESENCE);
+ boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
+
+ boolean isVideoIconShown = mIsVideoEnabled && (
+ mIsPresenceEnabled && isPresent || !mIsPresenceEnabled);
+ view.setShowVideoCallIcon(isVideoIconShown, mListener, position);
+ }
+ }
+
+ protected void bindSectionHeaderAndDivider(final ContactListItemView view, int position) {
+ if (isSectionHeaderDisplayEnabled()) {
+ Placement placement = getItemPlacementInSection(position);
+ view.setSectionHeader(placement.firstInSection ? placement.sectionHeader : null);
+ } else {
+ view.setSectionHeader(null);
+ }
+ }
+
+ protected void bindName(final ContactListItemView view, Cursor cursor) {
+ view.showDisplayName(cursor, PhoneQuery.DISPLAY_NAME, getContactNameDisplayOrder());
+ // Note: we don't show phonetic names any more (see issue 5265330)
+ }
+
+ protected void unbindName(final ContactListItemView view) {
+ view.hideDisplayName();
+ }
+
+ @Override
+ protected void bindWorkProfileIcon(final ContactListItemView view, int partition) {
+ final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
+ final long directoryId = directory.getDirectoryId();
+ final long userType = ContactsUtils.determineUserType(directoryId, null);
+ // Work directory must not be a extended directory. An extended directory is custom
+ // directory in the app, but not a directory provided by framework. So it can't be
+ // USER_TYPE_WORK.
+ view.setWorkProfileIconEnabled(
+ !isExtendedDirectory(directoryId) && userType == ContactsUtils.USER_TYPE_WORK);
+ }
+
+ protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
+ if (!isPhotoSupported(partitionIndex)) {
+ view.removePhotoView();
+ return;
+ }
+
+ long photoId = 0;
+ if (!cursor.isNull(PhoneQuery.PHOTO_ID)) {
+ photoId = cursor.getLong(PhoneQuery.PHOTO_ID);
+ }
+
+ if (photoId != 0) {
+ getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+ getCircularPhotos(), null);
+ } else {
+ final String photoUriString = cursor.getString(PhoneQuery.PHOTO_URI);
+ final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+
+ DefaultImageRequest request = null;
+ if (photoUri == null) {
+ final String displayName = cursor.getString(PhoneQuery.DISPLAY_NAME);
+ final String lookupKey = cursor.getString(PhoneQuery.LOOKUP_KEY);
+ request = new DefaultImageRequest(displayName, lookupKey, getCircularPhotos());
+ }
+ getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+ getCircularPhotos(), request);
+ }
+ }
+
+ public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+ mPhotoPosition = photoPosition;
+ }
+
+ public ContactListItemView.PhotoPosition getPhotoPosition() {
+ return mPhotoPosition;
+ }
+
+ public void setUseCallableUri(boolean useCallableUri) {
+ mUseCallableUri = useCallableUri;
+ }
+
+ public boolean usesCallableUri() {
+ return mUseCallableUri;
+ }
+
+ /**
+ * Override base implementation to inject extended directories between local & remote
+ * directories. This is done in the following steps:
+ * 1. Call base implementation to add directories from the cursor.
+ * 2. Iterate all base directories and establish the following information:
+ * a. The highest directory id so that we can assign unused id's to the extended directories.
+ * b. The index of the last non-remote directory. This is where we will insert extended
+ * directories.
+ * 3. Iterate the extended directories and for each one, assign an ID and insert it in the
+ * proper location.
+ */
+ @Override
+ public void changeDirectories(Cursor cursor) {
+ super.changeDirectories(cursor);
+ if (getDirectorySearchMode() == DirectoryListLoader.SEARCH_MODE_NONE) {
+ return;
+ }
+ final int numExtendedDirectories = mExtendedDirectories.size();
+ if (getPartitionCount() == cursor.getCount() + numExtendedDirectories) {
+ // already added all directories;
+ return;
+ }
+ //
+ mFirstExtendedDirectoryId = Long.MAX_VALUE;
+ if (numExtendedDirectories > 0) {
+ // The Directory.LOCAL_INVISIBLE is not in the cursor but we can't reuse it's
+ // "special" ID.
+ long maxId = Directory.LOCAL_INVISIBLE;
+ int insertIndex = 0;
+ for (int i = 0, n = getPartitionCount(); i < n; i++) {
+ final DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+ final long id = partition.getDirectoryId();
+ if (id > maxId) {
+ maxId = id;
+ }
+ if (!DirectoryCompat.isRemoteDirectoryId(id)) {
+ // assuming remote directories come after local, we will end up with the index
+ // where we should insert extended directories. This also works if there are no
+ // remote directories at all.
+ insertIndex = i + 1;
+ }
+ }
+ // Extended directories ID's cannot collide with base directories
+ mFirstExtendedDirectoryId = maxId + 1;
+ for (int i = 0; i < numExtendedDirectories; i++) {
+ final long id = mFirstExtendedDirectoryId + i;
+ final DirectoryPartition directory = mExtendedDirectories.get(i);
+ if (getPartitionByDirectoryId(id) == -1) {
+ addPartition(insertIndex, directory);
+ directory.setDirectoryId(id);
+ }
+ }
+ }
+ }
+
+ @Override
+ protected Uri getContactUri(int partitionIndex, Cursor cursor,
+ int contactIdColumn, int lookUpKeyColumn) {
+ final DirectoryPartition directory = (DirectoryPartition) getPartition(partitionIndex);
+ final long directoryId = directory.getDirectoryId();
+ if (!isExtendedDirectory(directoryId)) {
+ return super.getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn);
+ }
+ return Contacts.CONTENT_LOOKUP_URI.buildUpon()
+ .appendPath(Constants.LOOKUP_URI_ENCODED)
+ .appendQueryParameter(Directory.DISPLAY_NAME, directory.getLabel())
+ .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+ String.valueOf(directoryId))
+ .encodedFragment(cursor.getString(lookUpKeyColumn))
+ .build();
+ }
+
+ public Listener getListener() {
+ return mListener;
+ }
+
+ public void setListener(Listener listener) {
+ mListener = listener;
+ }
+}
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
new file mode 100644
index 000000000..cbc8def7d
--- /dev/null
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.ShortcutIntentBuilder;
+import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+
+/**
+ * Fragment containing a phone number list for picking.
+ */
+public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
+ implements OnShortcutIntentCreatedListener, PhoneNumberListAdapter.Listener {
+ private static final String TAG = "PhoneNumberPicker";
+
+ private static final String KEY_SHORTCUT_ACTION = "shortcutAction";
+
+ private OnPhoneNumberPickerActionListener mListener;
+ private String mShortcutAction;
+
+ private ContactListFilter mFilter;
+
+ private static final String KEY_FILTER = "filter";
+
+ /** true if the loader has started at least once. */
+ private boolean mLoaderStarted;
+
+ private boolean mUseCallableUri;
+
+ private ContactListItemView.PhotoPosition mPhotoPosition =
+ ContactListItemView.getDefaultPhotoPosition(false /* normal/non opposite */);
+
+ /**
+ * Handles a click on the video call icon for a row in the list.
+ *
+ * @param position The position in the list where the click ocurred.
+ */
+ @Override
+ public void onVideoCallIconClicked(int position) {
+ callNumber(position, true /* isVideoCall */);
+ }
+
+ public PhoneNumberPickerFragment() {
+ setQuickContactEnabled(false);
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(true);
+ setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
+
+ // Show nothing instead of letting caller Activity show something.
+ setHasOptionsMenu(true);
+ }
+
+ public void setDirectorySearchEnabled(boolean flag) {
+ setDirectorySearchMode(flag ? DirectoryListLoader.SEARCH_MODE_DEFAULT
+ : DirectoryListLoader.SEARCH_MODE_NONE);
+ }
+
+ public void setOnPhoneNumberPickerActionListener(OnPhoneNumberPickerActionListener listener) {
+ this.mListener = listener;
+ }
+
+ public OnPhoneNumberPickerActionListener getOnPhoneNumberPickerListener() {
+ return mListener;
+ }
+
+ @Override
+ protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+ super.onCreateView(inflater, container);
+
+ setVisibleScrollbarEnabled(getVisibleScrollbarEnabled());
+ }
+
+ protected boolean getVisibleScrollbarEnabled() {
+ return true;
+ }
+
+ @Override
+ public void restoreSavedState(Bundle savedState) {
+ super.restoreSavedState(savedState);
+
+ if (savedState == null) {
+ return;
+ }
+
+ mFilter = savedState.getParcelable(KEY_FILTER);
+ mShortcutAction = savedState.getString(KEY_SHORTCUT_ACTION);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putParcelable(KEY_FILTER, mFilter);
+ outState.putString(KEY_SHORTCUT_ACTION, mShortcutAction);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ final int itemId = item.getItemId();
+ if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled()
+ if (mListener != null) {
+ mListener.onHomeInActionBarSelected();
+ }
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ /**
+ * @param shortcutAction either {@link Intent#ACTION_CALL} or
+ * {@link Intent#ACTION_SENDTO} or null.
+ */
+ public void setShortcutAction(String shortcutAction) {
+ this.mShortcutAction = shortcutAction;
+ }
+
+ @Override
+ protected void onItemClick(int position, long id) {
+ callNumber(position, false /* isVideoCall */);
+ }
+
+ /**
+ * Initiates a call to the number at the specified position.
+ *
+ * @param position The position.
+ * @param isVideoCall {@code true} if the call should be initiated as a video call,
+ * {@code false} otherwise.
+ */
+ private void callNumber(int position, boolean isVideoCall) {
+ final Uri phoneUri = getPhoneUri(position);
+
+ if (phoneUri != null) {
+ pickPhoneNumber(phoneUri, isVideoCall);
+ } else {
+ final String number = getPhoneNumber(position);
+ if (!TextUtils.isEmpty(number)) {
+ cacheContactInfo(position);
+ mListener.onPickPhoneNumber(number, isVideoCall,
+ getCallInitiationType(true /* isRemoteDirectory */));
+ } else {
+ Log.w(TAG, "Item at " + position + " was clicked before"
+ + " adapter is ready. Ignoring");
+ }
+ }
+ }
+
+ protected void cacheContactInfo(int position) {
+ // Not implemented. Hook for child classes
+ }
+
+ protected String getPhoneNumber(int position) {
+ final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+ return adapter.getPhoneNumber(position);
+ }
+
+ protected Uri getPhoneUri(int position) {
+ final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+ return adapter.getDataUri(position);
+ }
+
+ protected String getLookupKey(int position) {
+ final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+ return adapter.getLookupKey(position);
+ }
+
+ @Override
+ protected void startLoading() {
+ mLoaderStarted = true;
+ super.startLoading();
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ super.onLoadFinished(loader, data);
+
+ // disable scroll bar if there is no data
+ setVisibleScrollbarEnabled(data != null && !data.isClosed() && data.getCount() > 0);
+ }
+
+ public void setUseCallableUri(boolean useCallableUri) {
+ mUseCallableUri = useCallableUri;
+ }
+
+ public boolean usesCallableUri() {
+ return mUseCallableUri;
+ }
+
+ @Override
+ protected ContactEntryListAdapter createListAdapter() {
+ PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
+ adapter.setDisplayPhotos(true);
+ adapter.setUseCallableUri(mUseCallableUri);
+ return adapter;
+ }
+
+ @Override
+ protected void configureAdapter() {
+ super.configureAdapter();
+
+ final ContactEntryListAdapter adapter = getAdapter();
+ if (adapter == null) {
+ return;
+ }
+
+ if (!isSearchMode() && mFilter != null) {
+ adapter.setFilter(mFilter);
+ }
+
+ setPhotoPosition(adapter);
+ }
+
+ protected void setPhotoPosition(ContactEntryListAdapter adapter) {
+ ((PhoneNumberListAdapter) adapter).setPhotoPosition(mPhotoPosition);
+ }
+
+ @Override
+ protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+ return inflater.inflate(R.layout.contact_list_content, null);
+ }
+
+ public void pickPhoneNumber(Uri uri, boolean isVideoCall) {
+ if (mShortcutAction == null) {
+ mListener.onPickDataUri(uri, isVideoCall,
+ getCallInitiationType(false /* isRemoteDirectory */));
+ } else {
+ startPhoneNumberShortcutIntent(uri, isVideoCall);
+ }
+ }
+
+ protected void startPhoneNumberShortcutIntent(Uri uri, boolean isVideoCall) {
+ ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
+ builder.createPhoneNumberShortcutIntent(uri, mShortcutAction);
+ }
+
+ @Override
+ public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
+ mListener.onShortcutIntentCreated(shortcutIntent);
+ }
+
+ @Override
+ public void onPickerResult(Intent data) {
+ mListener.onPickDataUri(data.getData(), false /* isVideoCall */,
+ getCallInitiationType(false /* isRemoteDirectory */));
+ }
+
+ public void setFilter(ContactListFilter filter) {
+ if ((mFilter == null && filter == null) ||
+ (mFilter != null && mFilter.equals(filter))) {
+ return;
+ }
+
+ mFilter = filter;
+ if (mLoaderStarted) {
+ reloadData();
+ }
+ }
+
+ public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+ mPhotoPosition = photoPosition;
+
+ final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+ if (adapter != null) {
+ adapter.setPhotoPosition(photoPosition);
+ }
+ }
+
+ /**
+ * @param isRemoteDirectory {@code true} if the call was initiated using a contact/phone number
+ * not in the local contacts database
+ */
+ protected int getCallInitiationType(boolean isRemoteDirectory) {
+ return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
+ }
+}
diff --git a/src/com/android/contacts/list/PinnedHeaderListAdapter.java b/src/com/android/contacts/list/PinnedHeaderListAdapter.java
new file mode 100644
index 000000000..6a7642123
--- /dev/null
+++ b/src/com/android/contacts/list/PinnedHeaderListAdapter.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.common.widget.CompositeCursorAdapter;
+
+/**
+ * A subclass of {@link CompositeCursorAdapter} that manages pinned partition headers.
+ */
+public abstract class PinnedHeaderListAdapter extends CompositeCursorAdapter
+ implements PinnedHeaderListView.PinnedHeaderAdapter {
+
+ public static final int PARTITION_HEADER_TYPE = 0;
+
+ private boolean mPinnedPartitionHeadersEnabled;
+ private boolean mHeaderVisibility[];
+
+ public PinnedHeaderListAdapter(Context context) {
+ super(context);
+ }
+
+ public PinnedHeaderListAdapter(Context context, int initialCapacity) {
+ super(context, initialCapacity);
+ }
+
+ public boolean getPinnedPartitionHeadersEnabled() {
+ return mPinnedPartitionHeadersEnabled;
+ }
+
+ public void setPinnedPartitionHeadersEnabled(boolean flag) {
+ this.mPinnedPartitionHeadersEnabled = flag;
+ }
+
+ @Override
+ public int getPinnedHeaderCount() {
+ if (mPinnedPartitionHeadersEnabled) {
+ return getPartitionCount();
+ } else {
+ return 0;
+ }
+ }
+
+ protected boolean isPinnedPartitionHeaderVisible(int partition) {
+ return getPinnedPartitionHeadersEnabled() && hasHeader(partition)
+ && !isPartitionEmpty(partition);
+ }
+
+ /**
+ * The default implementation creates the same type of view as a normal
+ * partition header.
+ */
+ @Override
+ public View getPinnedHeaderView(int partition, View convertView, ViewGroup parent) {
+ if (hasHeader(partition)) {
+ View view = null;
+ if (convertView != null) {
+ Integer headerType = (Integer)convertView.getTag();
+ if (headerType != null && headerType == PARTITION_HEADER_TYPE) {
+ view = convertView;
+ }
+ }
+ if (view == null) {
+ view = newHeaderView(getContext(), partition, null, parent);
+ view.setTag(PARTITION_HEADER_TYPE);
+ view.setFocusable(false);
+ view.setEnabled(false);
+ }
+ bindHeaderView(view, partition, getCursor(partition));
+ view.setLayoutDirection(parent.getLayoutDirection());
+ return view;
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public void configurePinnedHeaders(PinnedHeaderListView listView) {
+ if (!getPinnedPartitionHeadersEnabled()) {
+ return;
+ }
+
+ int size = getPartitionCount();
+
+ // Cache visibility bits, because we will need them several times later on
+ if (mHeaderVisibility == null || mHeaderVisibility.length != size) {
+ mHeaderVisibility = new boolean[size];
+ }
+ for (int i = 0; i < size; i++) {
+ boolean visible = isPinnedPartitionHeaderVisible(i);
+ mHeaderVisibility[i] = visible;
+ if (!visible) {
+ listView.setHeaderInvisible(i, true);
+ }
+ }
+
+ int headerViewsCount = listView.getHeaderViewsCount();
+
+ // Starting at the top, find and pin headers for partitions preceding the visible one(s)
+ int maxTopHeader = -1;
+ int topHeaderHeight = 0;
+ for (int i = 0; i < size; i++) {
+ if (mHeaderVisibility[i]) {
+ int position = listView.getPositionAt(topHeaderHeight) - headerViewsCount;
+ int partition = getPartitionForPosition(position);
+ if (i > partition) {
+ break;
+ }
+
+ listView.setHeaderPinnedAtTop(i, topHeaderHeight, false);
+ topHeaderHeight += listView.getPinnedHeaderHeight(i);
+ maxTopHeader = i;
+ }
+ }
+
+ // Starting at the bottom, find and pin headers for partitions following the visible one(s)
+ int maxBottomHeader = size;
+ int bottomHeaderHeight = 0;
+ int listHeight = listView.getHeight();
+ for (int i = size; --i > maxTopHeader;) {
+ if (mHeaderVisibility[i]) {
+ int position = listView.getPositionAt(listHeight - bottomHeaderHeight)
+ - headerViewsCount;
+ if (position < 0) {
+ break;
+ }
+
+ int partition = getPartitionForPosition(position - 1);
+ if (partition == -1 || i <= partition) {
+ break;
+ }
+
+ int height = listView.getPinnedHeaderHeight(i);
+ bottomHeaderHeight += height;
+
+ listView.setHeaderPinnedAtBottom(i, listHeight - bottomHeaderHeight, false);
+ maxBottomHeader = i;
+ }
+ }
+
+ // Headers in between the top-pinned and bottom-pinned should be hidden
+ for (int i = maxTopHeader + 1; i < maxBottomHeader; i++) {
+ if (mHeaderVisibility[i]) {
+ listView.setHeaderInvisible(i, isPartitionEmpty(i));
+ }
+ }
+ }
+
+ @Override
+ public int getScrollPositionForHeader(int viewIndex) {
+ return getPositionForPartition(viewIndex);
+ }
+}
diff --git a/src/com/android/contacts/list/PinnedHeaderListView.java b/src/com/android/contacts/list/PinnedHeaderListView.java
new file mode 100644
index 000000000..01895c7cf
--- /dev/null
+++ b/src/com/android/contacts/list/PinnedHeaderListView.java
@@ -0,0 +1,581 @@
+/*
+ * Copyright (C) 2010 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.list;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ListAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.util.ViewUtil;
+
+/**
+ * A ListView that maintains a header pinned at the top of the list. The
+ * pinned header can be pushed up and dissolved as needed.
+ */
+public class PinnedHeaderListView extends AutoScrollListView
+ implements OnScrollListener, OnItemSelectedListener {
+
+ /**
+ * Adapter interface. The list adapter must implement this interface.
+ */
+ public interface PinnedHeaderAdapter {
+
+ /**
+ * Returns the overall number of pinned headers, visible or not.
+ */
+ int getPinnedHeaderCount();
+
+ /**
+ * Creates or updates the pinned header view.
+ */
+ View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent);
+
+ /**
+ * Configures the pinned headers to match the visible list items. The
+ * adapter should call {@link PinnedHeaderListView#setHeaderPinnedAtTop},
+ * {@link PinnedHeaderListView#setHeaderPinnedAtBottom},
+ * {@link PinnedHeaderListView#setFadingHeader} or
+ * {@link PinnedHeaderListView#setHeaderInvisible}, for each header that
+ * needs to change its position or visibility.
+ */
+ void configurePinnedHeaders(PinnedHeaderListView listView);
+
+ /**
+ * Returns the list position to scroll to if the pinned header is touched.
+ * Return -1 if the list does not need to be scrolled.
+ */
+ int getScrollPositionForHeader(int viewIndex);
+ }
+
+ private static final int MAX_ALPHA = 255;
+ private static final int TOP = 0;
+ private static final int BOTTOM = 1;
+ private static final int FADING = 2;
+
+ private static final int DEFAULT_ANIMATION_DURATION = 20;
+
+ private static final int DEFAULT_SMOOTH_SCROLL_DURATION = 100;
+
+ private static final class PinnedHeader {
+ View view;
+ boolean visible;
+ int y;
+ int height;
+ int alpha;
+ int state;
+
+ boolean animating;
+ boolean targetVisible;
+ int sourceY;
+ int targetY;
+ long targetTime;
+ }
+
+ private PinnedHeaderAdapter mAdapter;
+ private int mSize;
+ private PinnedHeader[] mHeaders;
+ private RectF mBounds = new RectF();
+ private OnScrollListener mOnScrollListener;
+ private OnItemSelectedListener mOnItemSelectedListener;
+ private int mScrollState;
+
+ private boolean mScrollToSectionOnHeaderTouch = false;
+ private boolean mHeaderTouched = false;
+
+ private int mAnimationDuration = DEFAULT_ANIMATION_DURATION;
+ private boolean mAnimating;
+ private long mAnimationTargetTime;
+ private int mHeaderPaddingStart;
+ private int mHeaderWidth;
+
+ public PinnedHeaderListView(Context context) {
+ this(context, null, android.R.attr.listViewStyle);
+ }
+
+ public PinnedHeaderListView(Context context, AttributeSet attrs) {
+ this(context, attrs, android.R.attr.listViewStyle);
+ }
+
+ public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ super.setOnScrollListener(this);
+ super.setOnItemSelectedListener(this);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+ mHeaderPaddingStart = getPaddingStart();
+ mHeaderWidth = r - l - mHeaderPaddingStart - getPaddingEnd();
+ }
+
+ @Override
+ public void setAdapter(ListAdapter adapter) {
+ mAdapter = (PinnedHeaderAdapter)adapter;
+ super.setAdapter(adapter);
+ }
+
+ @Override
+ public void setOnScrollListener(OnScrollListener onScrollListener) {
+ mOnScrollListener = onScrollListener;
+ super.setOnScrollListener(this);
+ }
+
+ @Override
+ public void setOnItemSelectedListener(OnItemSelectedListener listener) {
+ mOnItemSelectedListener = listener;
+ super.setOnItemSelectedListener(this);
+ }
+
+ public void setScrollToSectionOnHeaderTouch(boolean value) {
+ mScrollToSectionOnHeaderTouch = value;
+ }
+
+ @Override
+ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ if (mAdapter != null) {
+ int count = mAdapter.getPinnedHeaderCount();
+ if (count != mSize) {
+ mSize = count;
+ if (mHeaders == null) {
+ mHeaders = new PinnedHeader[mSize];
+ } else if (mHeaders.length < mSize) {
+ PinnedHeader[] headers = mHeaders;
+ mHeaders = new PinnedHeader[mSize];
+ System.arraycopy(headers, 0, mHeaders, 0, headers.length);
+ }
+ }
+
+ for (int i = 0; i < mSize; i++) {
+ if (mHeaders[i] == null) {
+ mHeaders[i] = new PinnedHeader();
+ }
+ mHeaders[i].view = mAdapter.getPinnedHeaderView(i, mHeaders[i].view, this);
+ }
+
+ mAnimationTargetTime = System.currentTimeMillis() + mAnimationDuration;
+ mAdapter.configurePinnedHeaders(this);
+ invalidateIfAnimating();
+ }
+ if (mOnScrollListener != null) {
+ mOnScrollListener.onScroll(this, firstVisibleItem, visibleItemCount, totalItemCount);
+ }
+ }
+
+ @Override
+ protected float getTopFadingEdgeStrength() {
+ // Disable vertical fading at the top when the pinned header is present
+ return mSize > 0 ? 0 : super.getTopFadingEdgeStrength();
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {
+ mScrollState = scrollState;
+ if (mOnScrollListener != null) {
+ mOnScrollListener.onScrollStateChanged(this, scrollState);
+ }
+ }
+
+ /**
+ * Ensures that the selected item is positioned below the top-pinned headers
+ * and above the bottom-pinned ones.
+ */
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ int height = getHeight();
+
+ int windowTop = 0;
+ int windowBottom = height;
+
+ for (int i = 0; i < mSize; i++) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible) {
+ if (header.state == TOP) {
+ windowTop = header.y + header.height;
+ } else if (header.state == BOTTOM) {
+ windowBottom = header.y;
+ break;
+ }
+ }
+ }
+
+ View selectedView = getSelectedView();
+ if (selectedView != null) {
+ if (selectedView.getTop() < windowTop) {
+ setSelectionFromTop(position, windowTop);
+ } else if (selectedView.getBottom() > windowBottom) {
+ setSelectionFromTop(position, windowBottom - selectedView.getHeight());
+ }
+ }
+
+ if (mOnItemSelectedListener != null) {
+ mOnItemSelectedListener.onItemSelected(parent, view, position, id);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ if (mOnItemSelectedListener != null) {
+ mOnItemSelectedListener.onNothingSelected(parent);
+ }
+ }
+
+ public int getPinnedHeaderHeight(int viewIndex) {
+ ensurePinnedHeaderLayout(viewIndex);
+ return mHeaders[viewIndex].view.getHeight();
+ }
+
+ /**
+ * Set header to be pinned at the top.
+ *
+ * @param viewIndex index of the header view
+ * @param y is position of the header in pixels.
+ * @param animate true if the transition to the new coordinate should be animated
+ */
+ public void setHeaderPinnedAtTop(int viewIndex, int y, boolean animate) {
+ ensurePinnedHeaderLayout(viewIndex);
+ PinnedHeader header = mHeaders[viewIndex];
+ header.visible = true;
+ header.y = y;
+ header.state = TOP;
+
+ // TODO perhaps we should animate at the top as well
+ header.animating = false;
+ }
+
+ /**
+ * Set header to be pinned at the bottom.
+ *
+ * @param viewIndex index of the header view
+ * @param y is position of the header in pixels.
+ * @param animate true if the transition to the new coordinate should be animated
+ */
+ public void setHeaderPinnedAtBottom(int viewIndex, int y, boolean animate) {
+ ensurePinnedHeaderLayout(viewIndex);
+ PinnedHeader header = mHeaders[viewIndex];
+ header.state = BOTTOM;
+ if (header.animating) {
+ header.targetTime = mAnimationTargetTime;
+ header.sourceY = header.y;
+ header.targetY = y;
+ } else if (animate && (header.y != y || !header.visible)) {
+ if (header.visible) {
+ header.sourceY = header.y;
+ } else {
+ header.visible = true;
+ header.sourceY = y + header.height;
+ }
+ header.animating = true;
+ header.targetVisible = true;
+ header.targetTime = mAnimationTargetTime;
+ header.targetY = y;
+ } else {
+ header.visible = true;
+ header.y = y;
+ }
+ }
+
+ /**
+ * Set header to be pinned at the top of the first visible item.
+ *
+ * @param viewIndex index of the header view
+ * @param position is position of the header in pixels.
+ */
+ public void setFadingHeader(int viewIndex, int position, boolean fade) {
+ ensurePinnedHeaderLayout(viewIndex);
+
+ View child = getChildAt(position - getFirstVisiblePosition());
+ if (child == null) return;
+
+ PinnedHeader header = mHeaders[viewIndex];
+ // Hide header when it's a star.
+ // TODO: try showing the view even when it's a star;
+ // if we have to hide the star view, then try hiding it in some higher layer.
+ header.visible = !((TextView) header.view).getText().toString().isEmpty();
+ header.state = FADING;
+ header.alpha = MAX_ALPHA;
+ header.animating = false;
+
+ int top = getTotalTopPinnedHeaderHeight();
+ header.y = top;
+ if (fade) {
+ int bottom = child.getBottom() - top;
+ int headerHeight = header.height;
+ if (bottom < headerHeight) {
+ int portion = bottom - headerHeight;
+ header.alpha = MAX_ALPHA * (headerHeight + portion) / headerHeight;
+ header.y = top + portion;
+ }
+ }
+ }
+
+ /**
+ * Makes header invisible.
+ *
+ * @param viewIndex index of the header view
+ * @param animate true if the transition to the new coordinate should be animated
+ */
+ public void setHeaderInvisible(int viewIndex, boolean animate) {
+ PinnedHeader header = mHeaders[viewIndex];
+ if (header.visible && (animate || header.animating) && header.state == BOTTOM) {
+ header.sourceY = header.y;
+ if (!header.animating) {
+ header.visible = true;
+ header.targetY = getBottom() + header.height;
+ }
+ header.animating = true;
+ header.targetTime = mAnimationTargetTime;
+ header.targetVisible = false;
+ } else {
+ header.visible = false;
+ }
+ }
+
+ private void ensurePinnedHeaderLayout(int viewIndex) {
+ View view = mHeaders[viewIndex].view;
+ if (view.isLayoutRequested()) {
+ ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
+ int widthSpec;
+ int heightSpec;
+
+ if (layoutParams != null && layoutParams.width > 0) {
+ widthSpec = View.MeasureSpec
+ .makeMeasureSpec(layoutParams.width, View.MeasureSpec.EXACTLY);
+ } else {
+ widthSpec = View.MeasureSpec
+ .makeMeasureSpec(mHeaderWidth, View.MeasureSpec.EXACTLY);
+ }
+
+ if (layoutParams != null && layoutParams.height > 0) {
+ heightSpec = View.MeasureSpec
+ .makeMeasureSpec(layoutParams.height, View.MeasureSpec.EXACTLY);
+ } else {
+ heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+ }
+ view.measure(widthSpec, heightSpec);
+ int height = view.getMeasuredHeight();
+ mHeaders[viewIndex].height = height;
+ view.layout(0, 0, view.getMeasuredWidth(), height);
+ }
+ }
+
+ /**
+ * Returns the sum of heights of headers pinned to the top.
+ */
+ public int getTotalTopPinnedHeaderHeight() {
+ for (int i = mSize; --i >= 0;) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible && header.state == TOP) {
+ return header.y + header.height;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * Returns the list item position at the specified y coordinate.
+ */
+ public int getPositionAt(int y) {
+ do {
+ int position = pointToPosition(getPaddingLeft() + 1, y);
+ if (position != -1) {
+ return position;
+ }
+ // If position == -1, we must have hit a separator. Let's examine
+ // a nearby pixel
+ y--;
+ } while (y > 0);
+ return 0;
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ mHeaderTouched = false;
+ if (super.onInterceptTouchEvent(ev)) {
+ return true;
+ }
+
+ if (mScrollState == SCROLL_STATE_IDLE) {
+ final int y = (int)ev.getY();
+ final int x = (int)ev.getX();
+ for (int i = mSize; --i >= 0;) {
+ PinnedHeader header = mHeaders[i];
+ final int padding = ViewUtil.isViewLayoutRtl(this) ?
+ getWidth() - mHeaderPaddingStart - header.view.getWidth() :
+ mHeaderPaddingStart;
+ if (header.visible && header.y <= y && header.y + header.height > y &&
+ x >= padding && padding + header.view.getWidth() >= x) {
+ mHeaderTouched = true;
+ if (mScrollToSectionOnHeaderTouch &&
+ ev.getAction() == MotionEvent.ACTION_DOWN) {
+ return smoothScrollToPartition(i);
+ } else {
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (mHeaderTouched) {
+ if (ev.getAction() == MotionEvent.ACTION_UP) {
+ mHeaderTouched = false;
+ }
+ return true;
+ }
+ return super.onTouchEvent(ev);
+ }
+
+ private boolean smoothScrollToPartition(int partition) {
+ if (mAdapter == null) {
+ return false;
+ }
+ final int position = mAdapter.getScrollPositionForHeader(partition);
+ if (position == -1) {
+ return false;
+ }
+
+ int offset = 0;
+ for (int i = 0; i < partition; i++) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible) {
+ offset += header.height;
+ }
+ }
+ smoothScrollToPositionFromTop(position + getHeaderViewsCount(), offset,
+ DEFAULT_SMOOTH_SCROLL_DURATION);
+ return true;
+ }
+
+ private void invalidateIfAnimating() {
+ mAnimating = false;
+ for (int i = 0; i < mSize; i++) {
+ if (mHeaders[i].animating) {
+ mAnimating = true;
+ invalidate();
+ return;
+ }
+ }
+ }
+
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ long currentTime = mAnimating ? System.currentTimeMillis() : 0;
+
+ int top = 0;
+ int right = 0;
+ int bottom = getBottom();
+ boolean hasVisibleHeaders = false;
+ for (int i = 0; i < mSize; i++) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible) {
+ hasVisibleHeaders = true;
+ if (header.state == BOTTOM && header.y < bottom) {
+ bottom = header.y;
+ } else if (header.state == TOP || header.state == FADING) {
+ int newTop = header.y + header.height;
+ if (newTop > top) {
+ top = newTop;
+ }
+ }
+ }
+ }
+
+ if (hasVisibleHeaders) {
+ canvas.save();
+ }
+
+ super.dispatchDraw(canvas);
+
+ if (hasVisibleHeaders) {
+ canvas.restore();
+
+ // If the first item is visible and if it has a positive top that is greater than the
+ // first header's assigned y-value, use that for the first header's y value. This way,
+ // the header inherits any padding applied to the list view.
+ if (mSize > 0 && getFirstVisiblePosition() == 0) {
+ View firstChild = getChildAt(0);
+ PinnedHeader firstHeader = mHeaders[0];
+
+ if (firstHeader != null) {
+ int firstHeaderTop = firstChild != null ? firstChild.getTop() : 0;
+ firstHeader.y = Math.max(firstHeader.y, firstHeaderTop);
+ }
+ }
+
+ // First draw top headers, then the bottom ones to handle the Z axis correctly
+ for (int i = mSize; --i >= 0;) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible && (header.state == TOP || header.state == FADING)) {
+ drawHeader(canvas, header, currentTime);
+ }
+ }
+
+ for (int i = 0; i < mSize; i++) {
+ PinnedHeader header = mHeaders[i];
+ if (header.visible && header.state == BOTTOM) {
+ drawHeader(canvas, header, currentTime);
+ }
+ }
+ }
+
+ invalidateIfAnimating();
+ }
+
+ private void drawHeader(Canvas canvas, PinnedHeader header, long currentTime) {
+ if (header.animating) {
+ int timeLeft = (int)(header.targetTime - currentTime);
+ if (timeLeft <= 0) {
+ header.y = header.targetY;
+ header.visible = header.targetVisible;
+ header.animating = false;
+ } else {
+ header.y = header.targetY + (header.sourceY - header.targetY) * timeLeft
+ / mAnimationDuration;
+ }
+ }
+ if (header.visible) {
+ View view = header.view;
+ int saveCount = canvas.save();
+ int translateX = ViewUtil.isViewLayoutRtl(this) ?
+ getWidth() - mHeaderPaddingStart - view.getWidth() :
+ mHeaderPaddingStart;
+ canvas.translate(translateX, header.y);
+ if (header.state == FADING) {
+ mBounds.set(0, 0, view.getWidth(), view.getHeight());
+ canvas.saveLayerAlpha(mBounds, header.alpha, Canvas.ALL_SAVE_FLAG);
+ }
+ view.draw(canvas);
+ canvas.restoreToCount(saveCount);
+ }
+ }
+}
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 951a933fa..c0c23530d 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -27,10 +27,8 @@ import android.provider.ContactsContract.Data;
import android.view.View;
import android.view.ViewGroup;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.preference.ContactsPreferences;
/**
* A cursor adapter for the {@link StructuredPostal#CONTENT_TYPE} content type.
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index c64e17337..c2aacee40 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -21,9 +21,6 @@ import android.view.View;
import android.view.ViewGroup;
import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.DirectoryListLoader;
/**
* Fragment containing a postal address list for picking.
diff --git a/src/com/android/contacts/list/ProviderStatusWatcher.java b/src/com/android/contacts/list/ProviderStatusWatcher.java
index 51f776bfc..64dc29820 100644
--- a/src/com/android/contacts/list/ProviderStatusWatcher.java
+++ b/src/com/android/contacts/list/ProviderStatusWatcher.java
@@ -15,7 +15,6 @@
*/
package com.android.contacts.list;
-import android.content.ContentValues;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
@@ -26,6 +25,7 @@ import android.provider.ContactsContract.ProviderStatus;
import android.util.Log;
import com.android.contacts.compat.ProviderStatusCompat;
+import com.android.contactsbind.FeedbackHelper;
import com.google.common.collect.Lists;
@@ -231,6 +231,10 @@ public class ProviderStatusWatcher extends ContentObserver {
}
}
return false;
+ } catch (SecurityException e) {
+ FeedbackHelper.sendFeedback(mContext, TAG,
+ "Security exception when querying provider status", e);
+ return false;
} finally {
synchronized (mSignal) {
mSignal.notifyAll();
diff --git a/src/com/android/contacts/list/UiIntentActions.java b/src/com/android/contacts/list/UiIntentActions.java
index 55396357e..b2157fb33 100644
--- a/src/com/android/contacts/list/UiIntentActions.java
+++ b/src/com/android/contacts/list/UiIntentActions.java
@@ -29,17 +29,77 @@ public class UiIntentActions {
"com.android.contacts.action.LIST_DEFAULT";
/**
+ * The action for contacts list tab.
+ */
+ public static final String LIST_CONTACTS =
+ "com.android.contacts.action.LIST_CONTACTS";
+
+ /**
+ * The action for selecting multiple items (email, phone) from a list.
+ */
+ public static final String ACTION_SELECT_ITEMS =
+ "com.android.contacts.action.ACTION_SELECT_ITEMS";
+
+ /**
* The action for the contacts list tab.
*/
public static final String LIST_GROUP_ACTION =
"com.android.contacts.action.LIST_GROUP";
/**
+ * The send scheme for multi email/phone picker fragment
+ */
+ public static final String SELECTION_SEND_SCHEME =
+ "com.android.contacts.extra.SELECTION_SEND_SCHEME";
+
+ /**
+ * The send title for multi email/phone picker fragment
+ */
+ public static final String SELECTION_SEND_TITLE =
+ "com.android.contacts.extra.SELECTION_SEND_TITLE";
+
+ /**
+ * The item ids for multi select picker fragment/adapter
+ */
+ public static final String SELECTION_ITEM_LIST =
+ "com.android.contacts.extra.SELECTION_ITEM_LIST";
+
+ /**
+ * The default selection flags for the multi select picker fragment/adapter
+ */
+ public static final String SELECTION_DEFAULT_SELECTION =
+ "com.android.contacts.extra.SELECTION_DEFAULT_SELECTION";
+
+ /**
* When in LIST_GROUP_ACTION mode, this is the group to display.
*/
public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
/**
+ * The account name used to filter potential new group members.
+ */
+ public static final String GROUP_ACCOUNT_NAME =
+ "com.android.contacts.extra.GROUP_ACCOUNT_NAME";
+
+ /**
+ * The account type used to filter potential new group members.
+ */
+ public static final String GROUP_ACCOUNT_TYPE =
+ "com.android.contacts.extra.GROUP_ACCOUNT_TYPE";
+
+ /**
+ * The account data set used to filter potential new group members.
+ */
+ public static final String GROUP_ACCOUNT_DATA_SET =
+ "com.android.contacts.extra.GROUP_ACCOUNT_DATA_SET";
+
+ /**
+ * The contact IDs for existing group members.
+ */
+ public static final String GROUP_CONTACT_IDS =
+ "com.android.contacts.extra.GROUP_CONTACT_IDS";
+
+ /**
* The action for the all contacts list tab.
*/
public static final String LIST_ALL_CONTACTS_ACTION =
@@ -99,4 +159,7 @@ public class UiIntentActions {
*/
public static final String TARGET_CONTACT_ID_EXTRA_KEY
= "com.android.contacts.action.CONTACT_ID";
+
+ public static final String TARGET_CONTACT_IDS_EXTRA_KEY
+ = "com.android.contacts.action.CONTACT_IDS";
} \ No newline at end of file
diff --git a/src/com/android/contacts/location/CountryDetector.java b/src/com/android/contacts/location/CountryDetector.java
new file mode 100644
index 000000000..9d08fc0ab
--- /dev/null
+++ b/src/com/android/contacts/location/CountryDetector.java
@@ -0,0 +1,126 @@
+package com.android.contacts.location;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+
+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:
+ * <ul>
+ * <li>Mobile network</li>
+ * <li>SIM's country</li>
+ * <li>User's default locale</li>
+ * </ul>
+ *
+ * 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
+ */
+public class CountryDetector {
+ private static final String TAG = "CountryDetector";
+
+ private static CountryDetector sInstance;
+
+ private final Context mContext;
+ private final LocaleProvider mLocaleProvider;
+ private final TelephonyManager mTelephonyManager;
+
+ // 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 final String DEFAULT_COUNTRY_ISO = "US";
+
+ /**
+ * 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();
+ }
+ }
+
+ private CountryDetector(Context context) {
+ this (context, (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
+ new LocaleProvider());
+ }
+
+ private CountryDetector(Context context, TelephonyManager telephonyManager,
+ LocaleProvider localeProvider) {
+ mTelephonyManager = telephonyManager;
+ mLocaleProvider = localeProvider;
+ mContext = context;
+ }
+
+ /**
+ * Factory method for {@link CountryDetector} that allows the caller to provide mock objects.
+ */
+ public CountryDetector getInstanceForTest(Context context, TelephonyManager telephonyManager,
+ LocaleProvider localeProvider) {
+ return new CountryDetector(context, telephonyManager, localeProvider);
+ }
+
+ /**
+ * Returns the instance of the country detector. {@link #initialize(Context)} must have been
+ * called previously.
+ *
+ * @return the initialized country detector.
+ */
+ public synchronized static CountryDetector getInstance(Context context) {
+ if (sInstance == null) {
+ sInstance = new CountryDetector(context.getApplicationContext());
+ }
+ return sInstance;
+ }
+
+ public String getCurrentCountryIso() {
+ String result = null;
+ if (isNetworkCountryCodeAvailable()) {
+ result = getNetworkBasedCountryIso();
+ }
+ 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 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.
+ return mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM;
+ }
+}
diff --git a/src/com/android/contacts/logging/EditorEvent.java b/src/com/android/contacts/logging/EditorEvent.java
new file mode 100644
index 000000000..48308ac60
--- /dev/null
+++ b/src/com/android/contacts/logging/EditorEvent.java
@@ -0,0 +1,40 @@
+/*
+ * 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.logging;
+
+import com.google.common.base.MoreObjects;
+
+public class EditorEvent {
+
+ /** The editor event type that is logged. */
+ public int eventType;
+
+ /** The number of raw contacts shown in the raw contacts picker. */
+ public int numberRawContacts;
+
+ public static final class EventType {
+ public static final int UNKNOWN = 0;
+ public static final int SHOW_RAW_CONTACT_PICKER = 1;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("eventType", eventType)
+ .add("numberRawContacts", numberRawContacts)
+ .toString();
+ }
+}
diff --git a/src/com/android/contacts/logging/ListEvent.java b/src/com/android/contacts/logging/ListEvent.java
new file mode 100644
index 000000000..50da98f28
--- /dev/null
+++ b/src/com/android/contacts/logging/ListEvent.java
@@ -0,0 +1,94 @@
+/*
+ * 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.logging;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes how user view and use a list
+ */
+public final class ListEvent {
+
+ /** The type of action taken by the user. **/
+ public int actionType;
+
+ /** The type of list the user is viewing. **/
+ public int listType;
+
+ /** The number of contacts in the list. **/
+ public int count;
+
+ /** The index of contact clicked by user. **/
+ public int clickedIndex = -1;
+
+ /** The number of contact selected when user takes an action (link, delete, share, etc). **/
+ public int numSelected;
+
+ // Should match ContactsExtension.ListEvent.ActionType values in
+ // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+ public static final class ActionType {
+ public static final int UNKNOWN = 0;
+ public static final int LOAD = 1;
+ public static final int CLICK = 2;
+ public static final int SELECT = 3;
+ public static final int SHARE = 4;
+ public static final int DELETE = 5;
+ public static final int LINK = 6;
+ public static final int REMOVE_LABEL = 7;
+
+ private ActionType() {
+ }
+ }
+
+ // Should match ContactsExtension.ListEvent.ListType values in
+ // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+ public static final class ListType {
+ public static final int UNKNOWN_LIST = 0;
+ public static final int ALL_CONTACTS = 1;
+ public static final int ACCOUNT = 2;
+ public static final int GROUP = 3;
+ public static final int SEARCH_RESULT = 4;
+ public static final int DEVICE = 5;
+ public static final int CUSTOM = 6;
+ public static final int STARRED = 7;
+ public static final int PHONE_NUMBERS = 8;
+ public static final int SINGLE_CONTACT = 9;
+ public static final int PICK_CONTACT = 10;
+ public static final int PICK_CONTACT_FOR_SHORTCUT = 11;
+ public static final int PICK_PHONE = 12;
+ public static final int PICK_EMAIL = 13;
+ public static final int PICK_POSTAL = 14;
+ public static final int PICK_JOIN = 15;
+ public static final int PICK_GROUP_MEMBERS = 16;
+
+ private ListType() {
+ }
+ }
+
+ public ListEvent() {
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("actionType", actionType)
+ .add("listType", listType)
+ .add("count", count)
+ .add("clickedIndex", clickedIndex)
+ .add("numSelected", numSelected)
+ .toString();
+ }
+}
diff --git a/src/com/android/contacts/logging/Logger.java b/src/com/android/contacts/logging/Logger.java
new file mode 100644
index 000000000..366c19b13
--- /dev/null
+++ b/src/com/android/contacts/logging/Logger.java
@@ -0,0 +1,114 @@
+/*
+ * 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.logging;
+
+import android.app.Activity;
+
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contactsbind.ObjectFactory;
+
+/**
+ * Logs analytics events.
+ */
+public abstract class Logger {
+ public static final String TAG = "Logger";
+
+ private static Logger getInstance() {
+ return ObjectFactory.getLogger();
+ }
+
+ /**
+ * Logs an event indicating that a screen was displayed.
+ *
+ * @param screenType integer identifier of the displayed screen
+ * @param activity Parent activity of the displayed screen.
+ */
+ public static void logScreenView(Activity activity, int screenType) {
+ logScreenView(activity, screenType, ScreenType.UNKNOWN);
+ }
+
+ /**
+ * @param previousScreenType integer identifier of the displayed screen the user came from.
+ */
+ public static void logScreenView(Activity activity, int screenType, int previousScreenType) {
+ final Logger logger = getInstance();
+ if (logger != null) {
+ logger.logScreenViewImpl(screenType, previousScreenType);
+ }
+ }
+
+ /**
+ * Logs the results of a user search for a particular contact.
+ */
+ public static void logSearchEvent(SearchState searchState) {
+ final Logger logger = getInstance();
+ if (logger != null) {
+ logger.logSearchEventImpl(searchState);
+ }
+ }
+
+ /**
+ * Logs how users view and use a contacts list. See {@link ListEvent} for definition of
+ * parameters.
+ */
+ public static void logListEvent(int actionType, int listType, int count, int clickedIndex,
+ int numSelected) {
+ final ListEvent event = new ListEvent();
+ event.actionType = actionType;
+ event.listType = listType;
+ event.count = count;
+ event.clickedIndex = clickedIndex;
+ event.numSelected = numSelected;
+
+ final Logger logger = getInstance();
+ if (logger != null) {
+ logger.logListEventImpl(event);
+ }
+ }
+
+ /**
+ * Logs an event on QuickContact. See {@link QuickContactEvent} for definition of parameters.
+ */
+ public static void logQuickContactEvent(String referrer, int contactType, int cardType,
+ int actionType, String thirdPartyAction) {
+ final Logger logger = getInstance();
+ if (logger != null) {
+ final QuickContactEvent event = new QuickContactEvent();
+ event.referrer = referrer == null ? "Unknown" : referrer;
+ event.contactType = contactType;
+ event.cardType = cardType;
+ event.actionType = actionType;
+ event.thirdPartyAction = thirdPartyAction == null ? "" : thirdPartyAction;
+ logger.logQuickContactEventImpl(event);
+ }
+ }
+
+ public static void logEditorEvent(int eventType, int numberRawContacts) {
+ final Logger logger = getInstance();
+ if (logger != null) {
+ final EditorEvent event = new EditorEvent();
+ event.eventType = eventType;
+ event.numberRawContacts = numberRawContacts;
+ logger.logEditorEventImpl(event);
+ }
+ }
+
+ public abstract void logScreenViewImpl(int screenType, int previousScreenType);
+ public abstract void logSearchEventImpl(SearchState searchState);
+ public abstract void logListEventImpl(ListEvent event);
+ public abstract void logQuickContactEventImpl(QuickContactEvent event);
+ public abstract void logEditorEventImpl(EditorEvent event);
+}
diff --git a/src/com/android/contacts/logging/QuickContactEvent.java b/src/com/android/contacts/logging/QuickContactEvent.java
new file mode 100644
index 000000000..05d7308d1
--- /dev/null
+++ b/src/com/android/contacts/logging/QuickContactEvent.java
@@ -0,0 +1,89 @@
+/*
+ * 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.logging;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes how user views and takes action in Quick contact
+ */
+public final class QuickContactEvent {
+
+ /** The package name that QuickContact is launched from. **/
+ public String referrer;
+
+ /** The type of the contact displayed in QuickContact. **/
+ public int contactType;
+
+ /** The type of the card displayed in QuickContact. **/
+ public int cardType;
+
+ /** The type of the user action in QuickContact. **/
+ public int actionType;
+
+ /** The third party action that a user takes. **/
+ public String thirdPartyAction;
+
+ // Should match ContactsExtension.QuickContactEvent values in
+ // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+ public static final class ContactType {
+ public static final int UNKNOWN_TYPE = 0;
+ public static final int EDITABLE = 1;
+ public static final int INVISIBLE_AND_ADDABLE = 2;
+ public static final int DIRECTORY = 3;
+ }
+
+ public static final class CardType {
+ public static final int UNKNOWN_CARD = 0;
+ public static final int NO_CONTACT = 1;
+ public static final int CONTACT = 2;
+ public static final int RECENT = 3;
+ public static final int ABOUT = 4;
+ public static final int PERMISSION = 5;
+ }
+
+ public static final class ActionType {
+ public static final int UNKNOWN_ACTION = 0;
+ public static final int START = 1;
+ public static final int STAR = 2;
+ public static final int UNSTAR = 3;
+ public static final int EDIT = 4;
+ public static final int ADD = 5;
+ public static final int REMOVE = 6;
+ public static final int SHARE = 7;
+ public static final int SHORTCUT = 8;
+ public static final int HELP = 9;
+ public static final int CALL = 10;
+ public static final int SMS = 11;
+ public static final int VIDEOCALL = 12;
+ public static final int EMAIL = 13;
+ public static final int SIPCALL = 14;
+ public static final int ADDRESS = 15;
+ public static final int DIRECTIONS = 16;
+ public static final int THIRD_PARTY = 17;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("referrer", referrer)
+ .add("contactType", contactType)
+ .add("cardType", cardType)
+ .add("actionType", actionType)
+ .add("thirdPartyAction", thirdPartyAction)
+ .toString();
+ }
+}
diff --git a/src/com/android/contacts/logging/ScreenEvent.java b/src/com/android/contacts/logging/ScreenEvent.java
new file mode 100644
index 000000000..bdea66ddb
--- /dev/null
+++ b/src/com/android/contacts/logging/ScreenEvent.java
@@ -0,0 +1,38 @@
+/*
+ * 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.logging;
+
+/**
+ * Stores constants identifying individual screens/dialogs/fragments in the application, and also
+ * provides a mapping of integer id -> screen name mappings for analytics purposes.
+ */
+public class ScreenEvent {
+
+ // Should match ContactsExtension.ScreenEvent.ScreenType values in
+ // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+ public static class ScreenType {
+ public static final int UNKNOWN = 0;
+ public static final int SEARCH = 1;
+ public static final int SEARCH_EXIT = 2;
+ public static final int FAVORITES = 3;
+ public static final int ALL_CONTACTS = 4;
+ public static final int QUICK_CONTACT = 5;
+ public static final int EDITOR = 6;
+ public static final int LIST_ACCOUNT = 8;
+ public static final int LIST_GROUP = 9;
+ public static final int ME_CONTACT = 10;
+ }
+}
diff --git a/src/com/android/contacts/logging/SearchState.java b/src/com/android/contacts/logging/SearchState.java
new file mode 100644
index 000000000..8b1872dff
--- /dev/null
+++ b/src/com/android/contacts/logging/SearchState.java
@@ -0,0 +1,109 @@
+/*
+ * 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.logging;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes the results of a user search for a particular contact.
+ */
+public final class SearchState implements Parcelable {
+
+ /** The length of the query string input by the user. */
+ public int queryLength;
+
+ /** The number of partitions (groups of results) presented to the user. */
+ public int numPartitions;
+
+ /** The total number of results (across all partitions) presented to the user. */
+ public int numResults;
+
+ /** The number of results presented to the user in the partition that was selected. */
+ public int numResultsInSelectedPartition = -1;
+
+ /** The zero-based index of the partition in which the clicked query result resides. */
+ public int selectedPartition = -1;
+
+ /** The index of the clicked query result within its partition. */
+ public int selectedIndexInPartition = -1;
+
+ /**
+ * The zero-based index of the clicked query result among all results displayed to the user
+ * (across partitions).
+ */
+ public int selectedIndex = -1;
+
+ public static final Creator<SearchState> CREATOR = new Creator<SearchState>() {
+ @Override
+ public SearchState createFromParcel(Parcel in) {
+ return new SearchState(in);
+ }
+
+ @Override
+ public SearchState[] newArray(int size) {
+ return new SearchState[size];
+ }
+ };
+
+ public SearchState() {
+ }
+
+ protected SearchState(Parcel source) {
+ readFromParcel(source);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("queryLength", queryLength)
+ .add("numPartitions", numPartitions)
+ .add("numResults", numResults)
+ .add("numResultsInSelectedPartition", numResultsInSelectedPartition)
+ .add("selectedPartition", selectedPartition)
+ .add("selectedIndexInPartition", selectedIndexInPartition)
+ .add("selectedIndex", selectedIndex)
+ .toString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(queryLength);
+ dest.writeInt(numPartitions);
+ dest.writeInt(numResults);
+ dest.writeInt(numResultsInSelectedPartition);
+ dest.writeInt(selectedPartition);
+ dest.writeInt(selectedIndexInPartition);
+ dest.writeInt(selectedIndex);
+ }
+
+ private void readFromParcel(Parcel source) {
+ queryLength = source.readInt();
+ numPartitions = source.readInt();
+ numResults = source.readInt();
+ numResultsInSelectedPartition = source.readInt();
+ selectedPartition = source.readInt();
+ selectedIndexInPartition = source.readInt();
+ selectedIndex = source.readInt();
+ }
+}
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
new file mode 100644
index 000000000..b442e4f34
--- /dev/null
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -0,0 +1,710 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.OnAccountsUpdateListener;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.SyncStatusObserver;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.ContactsContract;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.R;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeProvider;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.FallbackAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contactsbind.experiments.Flags;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executor;
+
+import javax.annotation.Nullable;
+
+/**
+ * Singleton holder for all parsed {@link AccountType} available on the
+ * system, typically filled through {@link PackageManager} queries.
+ */
+public abstract class AccountTypeManager {
+ static final String TAG = "AccountTypeManager";
+
+ private static final Object mInitializationLock = new Object();
+ private static AccountTypeManager mAccountTypeManager;
+
+ public static final String BROADCAST_ACCOUNTS_CHANGED = AccountTypeManager.class.getName() +
+ ".AccountsChanged";
+
+ public enum AccountFilter implements Predicate<AccountInfo> {
+ ALL {
+ @Override
+ public boolean apply(@Nullable AccountInfo input) {
+ return input != null;
+ }
+ },
+ CONTACTS_WRITABLE {
+ @Override
+ public boolean apply(@Nullable AccountInfo input) {
+ return input != null && input.getType().areContactsWritable();
+ }
+ },
+ GROUPS_WRITABLE {
+ @Override
+ public boolean apply(@Nullable AccountInfo input) {
+ return input != null && input.getType().isGroupMembershipEditable();
+ }
+ };
+ }
+
+ /**
+ * Requests the singleton instance of {@link AccountTypeManager} with data bound from
+ * the available authenticators. This method can safely be called from the UI thread.
+ */
+ public static AccountTypeManager getInstance(Context context) {
+ if (!hasRequiredPermissions(context)) {
+ // Hopefully any component that depends on the values returned by this class
+ // will be restarted if the permissions change.
+ return EMPTY;
+ }
+ synchronized (mInitializationLock) {
+ if (mAccountTypeManager == null) {
+ context = context.getApplicationContext();
+ mAccountTypeManager = new AccountTypeManagerImpl(context);
+ }
+ }
+ return mAccountTypeManager;
+ }
+
+ /**
+ * Set the instance of account type manager. This is only for and should only be used by unit
+ * tests. While having this method is not ideal, it's simpler than the alternative of
+ * holding this as a service in the ContactsApplication context class.
+ *
+ * @param mockManager The mock AccountTypeManager.
+ */
+ public static void setInstanceForTest(AccountTypeManager mockManager) {
+ synchronized (mInitializationLock) {
+ mAccountTypeManager = mockManager;
+ }
+ }
+
+ private static final AccountTypeManager EMPTY = new AccountTypeManager() {
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+ return Futures.immediateFuture(Collections.<AccountInfo>emptyList());
+ }
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+ Predicate<AccountInfo> filter) {
+ return Futures.immediateFuture(Collections.<AccountInfo>emptyList());
+ }
+
+ @Override
+ public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+ return null;
+ }
+
+ @Override
+ public Account getDefaultGoogleAccount() {
+ return null;
+ }
+
+ @Override
+ public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+ return null;
+ }
+ };
+
+ /**
+ * Returns the list of all accounts (if contactWritableOnly is false) or just the list of
+ * contact writable accounts (if contactWritableOnly is true).
+ *
+ * <p>TODO(mhagerott) delete this method. It's left in place to prevent build breakages when
+ * this change is automerged. Usages of this method in downstream branches should be
+ * replaced with an asynchronous account loading pattern</p>
+ */
+ public List<AccountWithDataSet> getAccounts(boolean contactWritableOnly) {
+ return contactWritableOnly
+ ? blockForWritableAccounts()
+ : AccountInfo.extractAccounts(Futures.getUnchecked(getAccountsAsync()));
+ }
+
+ /**
+ * Returns all contact writable accounts
+ *
+ * <p>In general this method should be avoided. It exists to support some legacy usages of
+ * accounts in infrequently used features where refactoring to asynchronous loading is
+ * not justified. The chance that this will actually block is pretty low if the app has been
+ * launched previously</p>
+ */
+ public List<AccountWithDataSet> blockForWritableAccounts() {
+ return AccountInfo.extractAccounts(
+ Futures.getUnchecked(filterAccountsAsync(AccountFilter.CONTACTS_WRITABLE)));
+ }
+
+ /**
+ * Loads accounts in background and returns future that will complete with list of all accounts
+ */
+ public abstract ListenableFuture<List<AccountInfo>> getAccountsAsync();
+
+ /**
+ * Loads accounts and applies the fitler returning only for which the predicate is true
+ */
+ public abstract ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+ Predicate<AccountInfo> filter);
+
+ public abstract AccountInfo getAccountInfoForAccount(AccountWithDataSet account);
+
+ /**
+ * Returns the default google account.
+ */
+ public abstract Account getDefaultGoogleAccount();
+
+ /**
+ * Returns the Google Accounts.
+ *
+ * <p>This method exists in addition to filterAccountsByTypeAsync because it should be safe
+ * to call synchronously.
+ * </p>
+ */
+ public List<AccountInfo> getWritableGoogleAccounts() {
+ // This implementation may block and should be overridden by the Impl class
+ return Futures.getUnchecked(filterAccountsAsync(new Predicate<AccountInfo>() {
+ @Override
+ public boolean apply(@Nullable AccountInfo input) {
+ return input.getType().areContactsWritable() &&
+ GoogleAccountType.ACCOUNT_TYPE.equals(input.getType().accountType);
+ }
+ }));
+ }
+
+ /**
+ * Returns true if there are real accounts (not "local" account) in the list of accounts.
+ */
+ public boolean hasNonLocalAccount() {
+ final List<AccountWithDataSet> allAccounts =
+ AccountInfo.extractAccounts(Futures.getUnchecked(getAccountsAsync()));
+ if (allAccounts == null || allAccounts.size() == 0) {
+ return false;
+ }
+ if (allAccounts.size() > 1) {
+ return true;
+ }
+ return !allAccounts.get(0).isNullAccount();
+ }
+
+ static Account getDefaultGoogleAccount(AccountManager accountManager,
+ SharedPreferences prefs, String defaultAccountKey) {
+ // Get all the google accounts on the device
+ final Account[] accounts = accountManager.getAccountsByType(
+ GoogleAccountType.ACCOUNT_TYPE);
+ if (accounts == null || accounts.length == 0) {
+ return null;
+ }
+
+ // Get the default account from preferences
+ final String defaultAccount = prefs.getString(defaultAccountKey, null);
+ final AccountWithDataSet accountWithDataSet = defaultAccount == null ? null :
+ AccountWithDataSet.unstringify(defaultAccount);
+
+ // Look for an account matching the one from preferences
+ if (accountWithDataSet != null) {
+ for (int i = 0; i < accounts.length; i++) {
+ if (TextUtils.equals(accountWithDataSet.name, accounts[i].name)
+ && TextUtils.equals(accountWithDataSet.type, accounts[i].type)) {
+ return accounts[i];
+ }
+ }
+ }
+
+ // Just return the first one
+ return accounts[0];
+ }
+
+ public abstract AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet);
+
+ public final AccountType getAccountType(String accountType, String dataSet) {
+ return getAccountType(AccountTypeWithDataSet.get(accountType, dataSet));
+ }
+
+ public final AccountType getAccountTypeForAccount(AccountWithDataSet account) {
+ if (account != null) {
+ return getAccountType(account.getAccountTypeWithDataSet());
+ }
+ return getAccountType(null, null);
+ }
+
+ /**
+ * Find the best {@link DataKind} matching the requested
+ * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
+ * If no direct match found, we try searching {@link FallbackAccountType}.
+ */
+ public DataKind getKindOrFallback(AccountType type, String mimeType) {
+ return type == null ? null : type.getKindForMimetype(mimeType);
+ }
+
+ /**
+ * Returns whether the specified account still exists
+ */
+ public boolean exists(AccountWithDataSet account) {
+ final List<AccountWithDataSet> accounts =
+ AccountInfo.extractAccounts(Futures.getUnchecked(getAccountsAsync()));
+ return accounts.contains(account);
+ }
+
+ /**
+ * Returns whether the specified account is writable
+ *
+ * <p>This checks that the account still exists and that
+ * {@link AccountType#areContactsWritable()} is true</p>
+ */
+ public boolean isWritable(AccountWithDataSet account) {
+ return exists(account) && getAccountInfoForAccount(account).getType().areContactsWritable();
+ }
+
+ public boolean hasGoogleAccount() {
+ return getDefaultGoogleAccount() != null;
+ }
+
+ private static boolean hasRequiredPermissions(Context context) {
+ final boolean canGetAccounts = ContextCompat.checkSelfPermission(context,
+ android.Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED;
+ final boolean canReadContacts = ContextCompat.checkSelfPermission(context,
+ android.Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED;
+ return canGetAccounts && canReadContacts;
+ }
+
+ public static Predicate<AccountInfo> writableFilter() {
+ return AccountFilter.CONTACTS_WRITABLE;
+ }
+
+ public static Predicate<AccountInfo> groupWritableFilter() {
+ return AccountFilter.GROUPS_WRITABLE;
+ }
+}
+
+class AccountTypeManagerImpl extends AccountTypeManager
+ implements OnAccountsUpdateListener, SyncStatusObserver {
+
+ private final Context mContext;
+ private final AccountManager mAccountManager;
+ private final DeviceLocalAccountLocator mLocalAccountLocator;
+ private final Executor mMainThreadExecutor;
+ private final ListeningExecutorService mExecutor;
+ private AccountTypeProvider mTypeProvider;
+
+ private final AccountType mFallbackAccountType;
+
+ private ListenableFuture<List<AccountWithDataSet>> mLocalAccountsFuture;
+ private ListenableFuture<AccountTypeProvider> mAccountTypesFuture;
+
+ private List<AccountWithDataSet> mLocalAccounts = new ArrayList<>();
+ private List<AccountWithDataSet> mAccountManagerAccounts = new ArrayList<>();
+
+ private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
+
+ private final Function<AccountTypeProvider, List<AccountWithDataSet>> mAccountsExtractor =
+ new Function<AccountTypeProvider, List<AccountWithDataSet>>() {
+ @Nullable
+ @Override
+ public List<AccountWithDataSet> apply(@Nullable AccountTypeProvider typeProvider) {
+ return getAccountsWithDataSets(mAccountManager.getAccounts(), typeProvider);
+ }
+ };
+
+
+ private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Don't use reloadAccountTypesIfNeeded when packages change in case a contacts.xml
+ // was updated.
+ reloadAccountTypes();
+ }
+ };
+
+ /**
+ * Internal constructor that only performs initial parsing.
+ */
+ public AccountTypeManagerImpl(Context context) {
+ mContext = context;
+ mLocalAccountLocator = DeviceLocalAccountLocator.create(context);
+ mTypeProvider = new AccountTypeProvider(context);
+ mFallbackAccountType = new FallbackAccountType(context);
+
+ mAccountManager = AccountManager.get(mContext);
+
+ mExecutor = ContactsExecutors.getDefaultThreadPoolExecutor();
+ mMainThreadExecutor = ContactsExecutors.newHandlerExecutor(mMainThreadHandler);
+
+ // Request updates when packages or accounts change
+ IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addDataScheme("package");
+ mContext.registerReceiver(mBroadcastReceiver, filter);
+ IntentFilter sdFilter = new IntentFilter();
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+ sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+ mContext.registerReceiver(mBroadcastReceiver, sdFilter);
+
+ // Request updates when locale is changed so that the order of each field will
+ // be able to be changed on the locale change.
+ filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+ mContext.registerReceiver(mBroadcastReceiver, filter);
+
+ mAccountManager.addOnAccountsUpdatedListener(this, mMainThreadHandler, false);
+
+ ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this);
+
+ if (Flags.getInstance().getBoolean(Experiments.CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+ // Observe changes to RAW_CONTACTS so that we will update the list of "Device" accounts
+ // if a new device contact is added.
+ mContext.getContentResolver().registerContentObserver(
+ ContactsContract.RawContacts.CONTENT_URI, /* notifyDescendents */ true,
+ new ContentObserver(mMainThreadHandler) {
+ @Override
+ public boolean deliverSelfNotifications() {
+ return true;
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ reloadLocalAccounts();
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ reloadLocalAccounts();
+ }
+ });
+ }
+ loadAccountTypes();
+ }
+
+ @Override
+ public void onStatusChanged(int which) {
+ reloadAccountTypesIfNeeded();
+ }
+
+ /* This notification will arrive on the UI thread */
+ public void onAccountsUpdated(Account[] accounts) {
+ reloadLocalAccounts();
+ maybeNotifyAccountsUpdated(mAccountManagerAccounts,
+ getAccountsWithDataSets(accounts, mTypeProvider));
+ }
+
+ private void maybeNotifyAccountsUpdated(List<AccountWithDataSet> current,
+ List<AccountWithDataSet> update) {
+ if (Objects.equal(current, update)) {
+ return;
+ }
+ current.clear();
+ current.addAll(update);
+ notifyAccountsChanged();
+ }
+
+ private void notifyAccountsChanged() {
+ ContactListFilterController.getInstance(mContext).checkFilterValidity(true);
+ LocalBroadcastManager.getInstance(mContext).sendBroadcast(
+ new Intent(BROADCAST_ACCOUNTS_CHANGED));
+ }
+
+ private synchronized void startLoadingIfNeeded() {
+ if (mTypeProvider == null && mAccountTypesFuture == null) {
+ reloadAccountTypesIfNeeded();
+ }
+ if (mLocalAccountsFuture == null) {
+ reloadLocalAccounts();
+ }
+ }
+
+ private synchronized void loadAccountTypes() {
+ mTypeProvider = new AccountTypeProvider(mContext);
+
+ mAccountTypesFuture = mExecutor.submit(new Callable<AccountTypeProvider>() {
+ @Override
+ public AccountTypeProvider call() throws Exception {
+ // This will request the AccountType for each Account forcing them to be loaded
+ getAccountsWithDataSets(mAccountManager.getAccounts(), mTypeProvider);
+ return mTypeProvider;
+ }
+ });
+ }
+
+ private FutureCallback<List<AccountWithDataSet>> newAccountsUpdatedCallback(
+ final List<AccountWithDataSet> currentAccounts) {
+ return new FutureCallback<List<AccountWithDataSet>>() {
+ @Override
+ public void onSuccess(List<AccountWithDataSet> result) {
+ maybeNotifyAccountsUpdated(currentAccounts, result);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ }
+ };
+ }
+
+ private synchronized void reloadAccountTypesIfNeeded() {
+ if (mTypeProvider == null || mTypeProvider.shouldUpdate(
+ mAccountManager.getAuthenticatorTypes(), ContentResolver.getSyncAdapterTypes())) {
+ reloadAccountTypes();
+ }
+ }
+
+ private synchronized void reloadAccountTypes() {
+ loadAccountTypes();
+ Futures.addCallback(
+ Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+ newAccountsUpdatedCallback(mAccountManagerAccounts),
+ mMainThreadExecutor);
+ }
+
+ private synchronized void loadLocalAccounts() {
+ mLocalAccountsFuture = mExecutor.submit(new Callable<List<AccountWithDataSet>>() {
+ @Override
+ public List<AccountWithDataSet> call() throws Exception {
+ return mLocalAccountLocator.getDeviceLocalAccounts();
+ }
+ });
+ }
+
+ private synchronized void reloadLocalAccounts() {
+ loadLocalAccounts();
+ Futures.addCallback(mLocalAccountsFuture, newAccountsUpdatedCallback(mLocalAccounts),
+ mMainThreadExecutor);
+ }
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+ return getAllAccountsAsyncInternal();
+ }
+
+ private synchronized ListenableFuture<List<AccountInfo>> getAllAccountsAsyncInternal() {
+ startLoadingIfNeeded();
+ final AccountTypeProvider typeProvider = mTypeProvider;
+ final ListenableFuture<List<List<AccountWithDataSet>>> all =
+ Futures.nonCancellationPropagating(
+ Futures.successfulAsList(
+ Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+ mLocalAccountsFuture));
+
+ return Futures.transform(all, new Function<List<List<AccountWithDataSet>>,
+ List<AccountInfo>>() {
+ @Nullable
+ @Override
+ public List<AccountInfo> apply(@Nullable List<List<AccountWithDataSet>> input) {
+ // input.get(0) contains accounts from AccountManager
+ // input.get(1) contains device local accounts
+ Preconditions.checkArgument(input.size() == 2,
+ "List should have exactly 2 elements");
+
+ final List<AccountInfo> result = new ArrayList<>();
+ for (AccountWithDataSet account : input.get(0)) {
+ result.add(
+ typeProvider.getTypeForAccount(account).wrapAccount(mContext, account));
+ }
+
+ for (AccountWithDataSet account : input.get(1)) {
+ result.add(
+ typeProvider.getTypeForAccount(account).wrapAccount(mContext, account));
+ }
+ AccountInfo.sortAccounts(null, result);
+ return result;
+ }
+ });
+ }
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+ final Predicate<AccountInfo> filter) {
+ return Futures.transform(getAllAccountsAsyncInternal(), new Function<List<AccountInfo>,
+ List<AccountInfo>>() {
+ @Override
+ public List<AccountInfo> apply(List<AccountInfo> input) {
+ return new ArrayList<>(Collections2.filter(input, filter));
+ }
+ }, mExecutor);
+ }
+
+ @Override
+ public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+ if (account == null) {
+ return null;
+ }
+ AccountType type = mTypeProvider.getTypeForAccount(account);
+ if (type == null) {
+ type = mFallbackAccountType;
+ }
+ return type.wrapAccount(mContext, account);
+ }
+
+ private List<AccountWithDataSet> getAccountsWithDataSets(Account[] accounts,
+ AccountTypeProvider typeProvider) {
+ List<AccountWithDataSet> result = new ArrayList<>();
+ for (Account account : accounts) {
+ final List<AccountType> types = typeProvider.getAccountTypes(account.type);
+ for (AccountType type : types) {
+ result.add(new AccountWithDataSet(
+ account.name, account.type, type.dataSet));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns the default google account specified in preferences, the first google account
+ * if it is not specified in preferences or is no longer on the device, and null otherwise.
+ */
+ @Override
+ public Account getDefaultGoogleAccount() {
+ final SharedPreferences sharedPreferences =
+ mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
+ final String defaultAccountKey =
+ mContext.getResources().getString(R.string.contact_editor_default_account_key);
+ return getDefaultGoogleAccount(mAccountManager, sharedPreferences, defaultAccountKey);
+ }
+
+ @Override
+ public List<AccountInfo> getWritableGoogleAccounts() {
+ final Account[] googleAccounts =
+ mAccountManager.getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
+ final List<AccountInfo> result = new ArrayList<>();
+ for (Account account : googleAccounts) {
+ final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
+ account.name, account.type, null);
+ final AccountType type = mTypeProvider.getTypeForAccount(accountWithDataSet);
+
+ // Accounts with a dataSet (e.g. Google plus accounts) are not writable.
+ result.add(type.wrapAccount(mContext, accountWithDataSet));
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if there are real accounts (not "local" account) in the list of accounts.
+ *
+ * <p>This is overriden for performance since the default implementation blocks until all
+ * accounts are loaded
+ * </p>
+ */
+ @Override
+ public boolean hasNonLocalAccount() {
+ final Account[] accounts = mAccountManager.getAccounts();
+ if (accounts == null) {
+ return false;
+ }
+ for (Account account : accounts) {
+ if (mTypeProvider.supportsContactsSyncing(account.type)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Find the best {@link DataKind} matching the requested
+ * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
+ * If no direct match found, we try searching {@link FallbackAccountType}.
+ */
+ @Override
+ public DataKind getKindOrFallback(AccountType type, String mimeType) {
+ DataKind kind = null;
+
+ // Try finding account type and kind matching request
+ if (type != null) {
+ kind = type.getKindForMimetype(mimeType);
+ }
+
+ if (kind == null) {
+ // Nothing found, so try fallback as last resort
+ kind = mFallbackAccountType.getKindForMimetype(mimeType);
+ }
+
+ if (kind == null) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Unknown type=" + type + ", mime=" + mimeType);
+ }
+ }
+
+ return kind;
+ }
+
+ /**
+ * Returns whether the account still exists on the device
+ *
+ * <p>This is overridden for performance. The default implementation loads all accounts then
+ * searches through them for specified. This implementation will only load the types for the
+ * specified AccountType (it may still require blocking on IO in some cases but it shouldn't
+ * be as bad as blocking for all accounts).
+ * </p>
+ */
+ @Override
+ public boolean exists(AccountWithDataSet account) {
+ final Account[] accounts = mAccountManager.getAccountsByType(account.type);
+ for (Account existingAccount : accounts) {
+ if (existingAccount.name.equals(account.name)) {
+ return mTypeProvider.getTypeForAccount(account) != null;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return {@link AccountType} for the given account type and data set.
+ */
+ @Override
+ public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+ final AccountType type = mTypeProvider.getType(
+ accountTypeWithDataSet.accountType, accountTypeWithDataSet.dataSet);
+ return type != null ? type : mFallbackAccountType;
+ }
+}
diff --git a/src/com/android/contacts/model/BuilderWrapper.java b/src/com/android/contacts/model/BuilderWrapper.java
new file mode 100644
index 000000000..4a96c36ae
--- /dev/null
+++ b/src/com/android/contacts/model/BuilderWrapper.java
@@ -0,0 +1,52 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation.Builder;
+
+/**
+ * This class is created for the purpose of compatibility and make the type of
+ * ContentProviderOperation available on pre-M SDKs. Since ContentProviderOperation is
+ * usually created by Builder and we don’t have access to the type via Builder, so we need to
+ * create a wrapper class for Builder first and include type. Then we could use the builder and
+ * the type in this class to create a wrapper of ContentProviderOperation.
+ */
+public class BuilderWrapper {
+ private Builder mBuilder;
+ private int mType;
+
+ public BuilderWrapper(Builder builder, int type) {
+ mBuilder = builder;
+ mType = type;
+ }
+
+ public int getType() {
+ return mType;
+ }
+
+ public void setType(int mType) {
+ this.mType = mType;
+ }
+
+ public Builder getBuilder() {
+ return mBuilder;
+ }
+
+ public void setBuilder(Builder mBuilder) {
+ this.mBuilder = mBuilder;
+ }
+}
diff --git a/src/com/android/contacts/model/CPOWrapper.java b/src/com/android/contacts/model/CPOWrapper.java
new file mode 100644
index 000000000..12e00ddc0
--- /dev/null
+++ b/src/com/android/contacts/model/CPOWrapper.java
@@ -0,0 +1,49 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+
+/**
+ * This class is created for the purpose of compatibility and make the type of
+ * ContentProviderOperation available on pre-M SDKs.
+ */
+public class CPOWrapper {
+ private ContentProviderOperation mOperation;
+ private int mType;
+
+ public CPOWrapper(ContentProviderOperation builder, int type) {
+ mOperation = builder;
+ mType = type;
+ }
+
+ public int getType() {
+ return mType;
+ }
+
+ public void setType(int type) {
+ this.mType = type;
+ }
+
+ public ContentProviderOperation getOperation() {
+ return mOperation;
+ }
+
+ public void setOperation(ContentProviderOperation operation) {
+ this.mOperation = operation;
+ }
+}
diff --git a/src/com/android/contacts/model/Contact.java b/src/com/android/contacts/model/Contact.java
new file mode 100644
index 000000000..82661236d
--- /dev/null
+++ b/src/com/android/contacts/model/Contact.java
@@ -0,0 +1,496 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.DisplayNameSources;
+
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.SimAccountType;
+import com.android.contacts.util.DataStatus;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.ArrayList;
+
+/**
+ * A Contact represents a single person or logical entity as perceived by the user. The information
+ * about a contact can come from multiple data sources, which are each represented by a RawContact
+ * object. Thus, a Contact is associated with a collection of RawContact objects.
+ *
+ * The aggregation of raw contacts into a single contact is performed automatically, and it is
+ * also possible for users to manually split and join raw contacts into various contacts.
+ *
+ * Only the {@link ContactLoader} class can create a Contact object with various flags to allow
+ * partial loading of contact data. Thus, an instance of this class should be treated as
+ * a read-only object.
+ */
+public class Contact {
+ private enum Status {
+ /** Contact is successfully loaded */
+ LOADED,
+ /** There was an error loading the contact */
+ ERROR,
+ /** Contact is not found */
+ NOT_FOUND,
+ }
+
+ private final Uri mRequestedUri;
+ private final Uri mLookupUri;
+ private final Uri mUri;
+ private final long mDirectoryId;
+ private final String mLookupKey;
+ private final long mId;
+ private final long mNameRawContactId;
+ private final int mDisplayNameSource;
+ private final long mPhotoId;
+ private final String mPhotoUri;
+ private final String mDisplayName;
+ private final String mAltDisplayName;
+ private final String mPhoneticName;
+ private final boolean mStarred;
+ private final Integer mPresence;
+ private ImmutableList<RawContact> mRawContacts;
+ private ImmutableMap<Long,DataStatus> mStatuses;
+
+ private String mDirectoryDisplayName;
+ private String mDirectoryType;
+ private String mDirectoryAccountType;
+ private String mDirectoryAccountName;
+ private int mDirectoryExportSupport;
+
+ private ImmutableList<GroupMetaData> mGroups;
+
+ private byte[] mPhotoBinaryData;
+ /**
+ * Small version of the contact photo loaded from a blob instead of from a file. If a large
+ * contact photo is not available yet, then this has the same value as mPhotoBinaryData.
+ */
+ private byte[] mThumbnailPhotoBinaryData;
+ private final boolean mSendToVoicemail;
+ private final String mCustomRingtone;
+ private final boolean mIsUserProfile;
+
+ private final Contact.Status mStatus;
+ private final Exception mException;
+
+ /**
+ * Constructor for special results, namely "no contact found" and "error".
+ */
+ private Contact(Uri requestedUri, Contact.Status status, Exception exception) {
+ if (status == Status.ERROR && exception == null) {
+ throw new IllegalArgumentException("ERROR result must have exception");
+ }
+ mStatus = status;
+ mException = exception;
+ mRequestedUri = requestedUri;
+ mLookupUri = null;
+ mUri = null;
+ mDirectoryId = -1;
+ mLookupKey = null;
+ mId = -1;
+ mRawContacts = null;
+ mStatuses = null;
+ mNameRawContactId = -1;
+ mDisplayNameSource = DisplayNameSources.UNDEFINED;
+ mPhotoId = -1;
+ mPhotoUri = null;
+ mDisplayName = null;
+ mAltDisplayName = null;
+ mPhoneticName = null;
+ mStarred = false;
+ mPresence = null;
+ mSendToVoicemail = false;
+ mCustomRingtone = null;
+ mIsUserProfile = false;
+ }
+
+ public static Contact forError(Uri requestedUri, Exception exception) {
+ return new Contact(requestedUri, Status.ERROR, exception);
+ }
+
+ public static Contact forNotFound(Uri requestedUri) {
+ return new Contact(requestedUri, Status.NOT_FOUND, null);
+ }
+
+ /**
+ * Constructor to call when contact was found
+ */
+ public Contact(Uri requestedUri, Uri uri, Uri lookupUri, long directoryId, String lookupKey,
+ long id, long nameRawContactId, int displayNameSource, long photoId,
+ String photoUri, String displayName, String altDisplayName, String phoneticName,
+ boolean starred, Integer presence, boolean sendToVoicemail, String customRingtone,
+ boolean isUserProfile) {
+ mStatus = Status.LOADED;
+ mException = null;
+ mRequestedUri = requestedUri;
+ mLookupUri = lookupUri;
+ mUri = uri;
+ mDirectoryId = directoryId;
+ mLookupKey = lookupKey;
+ mId = id;
+ mRawContacts = null;
+ mStatuses = null;
+ mNameRawContactId = nameRawContactId;
+ mDisplayNameSource = displayNameSource;
+ mPhotoId = photoId;
+ mPhotoUri = photoUri;
+ mDisplayName = displayName;
+ mAltDisplayName = altDisplayName;
+ mPhoneticName = phoneticName;
+ mStarred = starred;
+ mPresence = presence;
+ mSendToVoicemail = sendToVoicemail;
+ mCustomRingtone = customRingtone;
+ mIsUserProfile = isUserProfile;
+ }
+
+ public Contact(Uri requestedUri, Contact from) {
+ mRequestedUri = requestedUri;
+
+ mStatus = from.mStatus;
+ mException = from.mException;
+ mLookupUri = from.mLookupUri;
+ mUri = from.mUri;
+ mDirectoryId = from.mDirectoryId;
+ mLookupKey = from.mLookupKey;
+ mId = from.mId;
+ mNameRawContactId = from.mNameRawContactId;
+ mDisplayNameSource = from.mDisplayNameSource;
+ mPhotoId = from.mPhotoId;
+ mPhotoUri = from.mPhotoUri;
+ mDisplayName = from.mDisplayName;
+ mAltDisplayName = from.mAltDisplayName;
+ mPhoneticName = from.mPhoneticName;
+ mStarred = from.mStarred;
+ mPresence = from.mPresence;
+ mRawContacts = from.mRawContacts;
+ mStatuses = from.mStatuses;
+
+ mDirectoryDisplayName = from.mDirectoryDisplayName;
+ mDirectoryType = from.mDirectoryType;
+ mDirectoryAccountType = from.mDirectoryAccountType;
+ mDirectoryAccountName = from.mDirectoryAccountName;
+ mDirectoryExportSupport = from.mDirectoryExportSupport;
+
+ mGroups = from.mGroups;
+
+ mPhotoBinaryData = from.mPhotoBinaryData;
+ mSendToVoicemail = from.mSendToVoicemail;
+ mCustomRingtone = from.mCustomRingtone;
+ mIsUserProfile = from.mIsUserProfile;
+ }
+
+ /**
+ * @param exportSupport See {@link Directory#EXPORT_SUPPORT}.
+ */
+ public void setDirectoryMetaData(String displayName, String directoryType,
+ String accountType, String accountName, int exportSupport) {
+ mDirectoryDisplayName = displayName;
+ mDirectoryType = directoryType;
+ mDirectoryAccountType = accountType;
+ mDirectoryAccountName = accountName;
+ mDirectoryExportSupport = exportSupport;
+ }
+
+ /* package */ void setPhotoBinaryData(byte[] photoBinaryData) {
+ mPhotoBinaryData = photoBinaryData;
+ }
+
+ /* package */ void setThumbnailPhotoBinaryData(byte[] photoBinaryData) {
+ mThumbnailPhotoBinaryData = photoBinaryData;
+ }
+
+ /**
+ * Returns the URI for the contact that contains both the lookup key and the ID. This is
+ * the best URI to reference a contact.
+ * For directory contacts, this is the same a the URI as returned by {@link #getUri()}
+ */
+ public Uri getLookupUri() {
+ return mLookupUri;
+ }
+
+ public String getLookupKey() {
+ return mLookupKey;
+ }
+
+ /**
+ * Returns the contact Uri that was passed to the provider to make the query. This is
+ * the same as the requested Uri, unless the requested Uri doesn't specify a Contact:
+ * If it either references a Raw-Contact or a Person (a pre-Eclair style Uri), this Uri will
+ * always reference the full aggregate contact.
+ */
+ public Uri getUri() {
+ return mUri;
+ }
+
+ /**
+ * Returns the URI for which this {@link ContactLoader) was initially requested.
+ */
+ public Uri getRequestedUri() {
+ return mRequestedUri;
+ }
+
+ /**
+ * Instantiate a new RawContactDeltaList for this contact.
+ */
+ public RawContactDeltaList createRawContactDeltaList() {
+ return RawContactDeltaList.fromIterator(getRawContacts().iterator());
+ }
+
+ /**
+ * Returns the contact ID.
+ */
+ @VisibleForTesting
+ public long getId() {
+ return mId;
+ }
+
+ /**
+ * @return true when an exception happened during loading, in which case
+ * {@link #getException} returns the actual exception object.
+ * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
+ * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
+ * and vice versa.
+ */
+ public boolean isError() {
+ return mStatus == Status.ERROR;
+ }
+
+ public Exception getException() {
+ return mException;
+ }
+
+ /**
+ * @return true when the specified contact is not found.
+ * Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
+ * {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
+ * and vice versa.
+ */
+ public boolean isNotFound() {
+ return mStatus == Status.NOT_FOUND;
+ }
+
+ /**
+ * @return true if the specified contact is successfully loaded.
+ * i.e. neither {@link #isError()} nor {@link #isNotFound()}.
+ */
+ public boolean isLoaded() {
+ return mStatus == Status.LOADED;
+ }
+
+ public long getNameRawContactId() {
+ return mNameRawContactId;
+ }
+
+ public int getDisplayNameSource() {
+ return mDisplayNameSource;
+ }
+
+ /**
+ * Used by various classes to determine whether or not this contact should be displayed as
+ * a business rather than a person.
+ */
+ public boolean isDisplayNameFromOrganization() {
+ return DisplayNameSources.ORGANIZATION == mDisplayNameSource;
+ }
+
+ public long getPhotoId() {
+ return mPhotoId;
+ }
+
+ public String getPhotoUri() {
+ return mPhotoUri;
+ }
+
+ public String getDisplayName() {
+ return mDisplayName;
+ }
+
+ public String getAltDisplayName() {
+ return mAltDisplayName;
+ }
+
+ public String getPhoneticName() {
+ return mPhoneticName;
+ }
+
+ public boolean getStarred() {
+ return mStarred;
+ }
+
+ public Integer getPresence() {
+ return mPresence;
+ }
+
+ public ImmutableList<RawContact> getRawContacts() {
+ return mRawContacts;
+ }
+
+ public ImmutableMap<Long, DataStatus> getStatuses() {
+ return mStatuses;
+ }
+
+ public long getDirectoryId() {
+ return mDirectoryId;
+ }
+
+ public boolean isDirectoryEntry() {
+ return mDirectoryId != -1 && mDirectoryId != Directory.DEFAULT
+ && mDirectoryId != Directory.LOCAL_INVISIBLE;
+ }
+
+ /**
+ * @return true if this is a contact (not group, etc.) with at least one
+ * writable raw-contact, and false otherwise.
+ */
+ public boolean isWritableContact(final Context context) {
+ return getFirstWritableRawContactId(context) != -1;
+ }
+
+ /**
+ * Return the ID of the first raw-contact in the contact data that belongs to a
+ * contact-writable account, or -1 if no such entity exists.
+ */
+ public long getFirstWritableRawContactId(final Context context) {
+ // Directory entries are non-writable
+ if (isDirectoryEntry()) return -1;
+
+ // Iterate through raw-contacts; if we find a writable on, return its ID.
+ for (RawContact rawContact : getRawContacts()) {
+ AccountType accountType = rawContact.getAccountType(context);
+ if (accountType != null && accountType.areContactsWritable()) {
+ return rawContact.getId();
+ }
+ }
+ // No writable raw-contact was found.
+ return -1;
+ }
+
+ public int getDirectoryExportSupport() {
+ return mDirectoryExportSupport;
+ }
+
+ public String getDirectoryDisplayName() {
+ return mDirectoryDisplayName;
+ }
+
+ public String getDirectoryType() {
+ return mDirectoryType;
+ }
+
+ public String getDirectoryAccountType() {
+ return mDirectoryAccountType;
+ }
+
+ public String getDirectoryAccountName() {
+ return mDirectoryAccountName;
+ }
+
+ public byte[] getPhotoBinaryData() {
+ return mPhotoBinaryData;
+ }
+
+ public byte[] getThumbnailPhotoBinaryData() {
+ return mThumbnailPhotoBinaryData;
+ }
+
+ public ArrayList<ContentValues> getContentValues() {
+ if (mRawContacts.size() != 1) {
+ throw new IllegalStateException(
+ "Cannot extract content values from an aggregated contact");
+ }
+
+ RawContact rawContact = mRawContacts.get(0);
+ ArrayList<ContentValues> result = rawContact.getContentValues();
+
+ // If the photo was loaded using the URI, create an entry for the photo
+ // binary data.
+ if (mPhotoId == 0 && mPhotoBinaryData != null) {
+ ContentValues photo = new ContentValues();
+ photo.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
+ photo.put(Photo.PHOTO, mPhotoBinaryData);
+ result.add(photo);
+ }
+
+ return result;
+ }
+
+ /**
+ * This can return non-null group meta-data only if the {@link ContactLoader} was configured to
+ * load group metadata in its constructor.
+ * @return
+ */
+ public ImmutableList<GroupMetaData> getGroupMetaData() {
+ return mGroups;
+ }
+
+ public boolean isSendToVoicemail() {
+ return mSendToVoicemail;
+ }
+
+ public String getCustomRingtone() {
+ return mCustomRingtone;
+ }
+
+ public boolean isUserProfile() {
+ return mIsUserProfile;
+ }
+
+ public boolean isMultipleRawContacts() {
+ return mRawContacts.size() > 1;
+ }
+
+ /**
+ * @return true if all the raw contacts are from SIM accounts, and false otherwise.
+ */
+ public boolean areAllRawContactsSimAccounts(final Context context) {
+ if (getRawContacts() == null) return false;
+
+ for (RawContact rawContact : getRawContacts()) {
+ final AccountType accountType = rawContact.getAccountType(context);
+ if (!(accountType instanceof SimAccountType)) return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey +
+ ",uri=" + mUri + ",status=" + mStatus + "}";
+ }
+
+ /* package */ void setRawContacts(ImmutableList<RawContact> rawContacts) {
+ mRawContacts = rawContacts;
+ }
+
+ /* package */ void setStatuses(ImmutableMap<Long, DataStatus> statuses) {
+ mStatuses = statuses;
+ }
+
+ /* package */ void setGroupMetaData(ImmutableList<GroupMetaData> groups) {
+ mGroups = groups;
+ }
+}
diff --git a/src/com/android/contacts/model/ContactLoader.java b/src/com/android/contacts/model/ContactLoader.java
new file mode 100644
index 000000000..acb821203
--- /dev/null
+++ b/src/com/android/contacts/model/ContactLoader.java
@@ -0,0 +1,960 @@
+/*
+ * Copyright (C) 2010 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.model;
+
+import android.content.AsyncTaskLoader;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.GeoUtil;
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.PhotoDataItem;
+import com.android.contacts.util.Constants;
+import com.android.contacts.util.ContactLoaderUtils;
+import com.android.contacts.util.DataStatus;
+import com.android.contacts.util.UriUtils;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * Loads a single Contact and all it constituent RawContacts.
+ */
+public class ContactLoader extends AsyncTaskLoader<Contact> {
+
+ private static final String TAG = ContactLoader.class.getSimpleName();
+
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+ /** A short-lived cache that can be set by {@link #cacheResult()} */
+ private static Contact sCachedResult = null;
+
+ private final Uri mRequestedUri;
+ private Uri mLookupUri;
+ private boolean mLoadGroupMetaData;
+ private boolean mPostViewNotification;
+ private boolean mComputeFormattedPhoneNumber;
+ private Contact mContact;
+ private ForceLoadContentObserver mObserver;
+ private final Set<Long> mNotifiedRawContactIds = Sets.newHashSet();
+
+ public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification) {
+ this(context, lookupUri, false, postViewNotification, false);
+ }
+
+ public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification,
+ boolean loadGroupMetaData) {
+ this(context, lookupUri, loadGroupMetaData, postViewNotification, false);
+ }
+
+ public ContactLoader(Context context, Uri lookupUri, boolean loadGroupMetaData,
+ boolean postViewNotification, boolean computeFormattedPhoneNumber) {
+ super(context);
+ mLookupUri = lookupUri;
+ mRequestedUri = lookupUri;
+ mLoadGroupMetaData = loadGroupMetaData;
+ mPostViewNotification = postViewNotification;
+ mComputeFormattedPhoneNumber = computeFormattedPhoneNumber;
+ }
+
+ /**
+ * Projection used for the query that loads all data for the entire contact (except for
+ * social stream items).
+ */
+ private static class ContactQuery {
+ static final String[] COLUMNS_INTERNAL = new String[] {
+ Contacts.NAME_RAW_CONTACT_ID,
+ Contacts.DISPLAY_NAME_SOURCE,
+ Contacts.LOOKUP_KEY,
+ Contacts.DISPLAY_NAME,
+ Contacts.DISPLAY_NAME_ALTERNATIVE,
+ Contacts.PHONETIC_NAME,
+ Contacts.PHOTO_ID,
+ Contacts.STARRED,
+ Contacts.CONTACT_PRESENCE,
+ Contacts.CONTACT_STATUS,
+ Contacts.CONTACT_STATUS_TIMESTAMP,
+ Contacts.CONTACT_STATUS_RES_PACKAGE,
+ Contacts.CONTACT_STATUS_LABEL,
+ Contacts.Entity.CONTACT_ID,
+ Contacts.Entity.RAW_CONTACT_ID,
+
+ RawContacts.ACCOUNT_NAME,
+ RawContacts.ACCOUNT_TYPE,
+ RawContacts.DATA_SET,
+ RawContacts.DIRTY,
+ RawContacts.VERSION,
+ RawContacts.SOURCE_ID,
+ RawContacts.SYNC1,
+ RawContacts.SYNC2,
+ RawContacts.SYNC3,
+ RawContacts.SYNC4,
+ RawContacts.DELETED,
+
+ Contacts.Entity.DATA_ID,
+ Data.DATA1,
+ Data.DATA2,
+ Data.DATA3,
+ Data.DATA4,
+ Data.DATA5,
+ Data.DATA6,
+ Data.DATA7,
+ Data.DATA8,
+ Data.DATA9,
+ Data.DATA10,
+ Data.DATA11,
+ Data.DATA12,
+ Data.DATA13,
+ Data.DATA14,
+ Data.DATA15,
+ Data.SYNC1,
+ Data.SYNC2,
+ Data.SYNC3,
+ Data.SYNC4,
+ Data.DATA_VERSION,
+ Data.IS_PRIMARY,
+ Data.IS_SUPER_PRIMARY,
+ Data.MIMETYPE,
+
+ GroupMembership.GROUP_SOURCE_ID,
+
+ Data.PRESENCE,
+ Data.CHAT_CAPABILITY,
+ Data.STATUS,
+ Data.STATUS_RES_PACKAGE,
+ Data.STATUS_ICON,
+ Data.STATUS_LABEL,
+ Data.STATUS_TIMESTAMP,
+
+ Contacts.PHOTO_URI,
+ Contacts.SEND_TO_VOICEMAIL,
+ Contacts.CUSTOM_RINGTONE,
+ Contacts.IS_USER_PROFILE,
+
+ Data.TIMES_USED,
+ Data.LAST_TIME_USED
+ };
+
+ static final String[] COLUMNS;
+
+ static {
+ List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ projectionList.add(Data.CARRIER_PRESENCE);
+ }
+ COLUMNS = projectionList.toArray(new String[projectionList.size()]);
+ }
+
+ public static final int NAME_RAW_CONTACT_ID = 0;
+ public static final int DISPLAY_NAME_SOURCE = 1;
+ public static final int LOOKUP_KEY = 2;
+ public static final int DISPLAY_NAME = 3;
+ public static final int ALT_DISPLAY_NAME = 4;
+ public static final int PHONETIC_NAME = 5;
+ public static final int PHOTO_ID = 6;
+ public static final int STARRED = 7;
+ public static final int CONTACT_PRESENCE = 8;
+ public static final int CONTACT_STATUS = 9;
+ public static final int CONTACT_STATUS_TIMESTAMP = 10;
+ public static final int CONTACT_STATUS_RES_PACKAGE = 11;
+ public static final int CONTACT_STATUS_LABEL = 12;
+ public static final int CONTACT_ID = 13;
+ public static final int RAW_CONTACT_ID = 14;
+
+ public static final int ACCOUNT_NAME = 15;
+ public static final int ACCOUNT_TYPE = 16;
+ public static final int DATA_SET = 17;
+ public static final int DIRTY = 18;
+ public static final int VERSION = 19;
+ public static final int SOURCE_ID = 20;
+ public static final int SYNC1 = 21;
+ public static final int SYNC2 = 22;
+ public static final int SYNC3 = 23;
+ public static final int SYNC4 = 24;
+ public static final int DELETED = 25;
+
+ public static final int DATA_ID = 26;
+ public static final int DATA1 = 27;
+ public static final int DATA2 = 28;
+ public static final int DATA3 = 29;
+ public static final int DATA4 = 30;
+ public static final int DATA5 = 31;
+ public static final int DATA6 = 32;
+ public static final int DATA7 = 33;
+ public static final int DATA8 = 34;
+ public static final int DATA9 = 35;
+ public static final int DATA10 = 36;
+ public static final int DATA11 = 37;
+ public static final int DATA12 = 38;
+ public static final int DATA13 = 39;
+ public static final int DATA14 = 40;
+ public static final int DATA15 = 41;
+ public static final int DATA_SYNC1 = 42;
+ public static final int DATA_SYNC2 = 43;
+ public static final int DATA_SYNC3 = 44;
+ public static final int DATA_SYNC4 = 45;
+ public static final int DATA_VERSION = 46;
+ public static final int IS_PRIMARY = 47;
+ public static final int IS_SUPERPRIMARY = 48;
+ public static final int MIMETYPE = 49;
+
+ public static final int GROUP_SOURCE_ID = 50;
+
+ public static final int PRESENCE = 51;
+ public static final int CHAT_CAPABILITY = 52;
+ public static final int STATUS = 53;
+ public static final int STATUS_RES_PACKAGE = 54;
+ public static final int STATUS_ICON = 55;
+ public static final int STATUS_LABEL = 56;
+ public static final int STATUS_TIMESTAMP = 57;
+
+ public static final int PHOTO_URI = 58;
+ public static final int SEND_TO_VOICEMAIL = 59;
+ public static final int CUSTOM_RINGTONE = 60;
+ public static final int IS_USER_PROFILE = 61;
+
+ public static final int TIMES_USED = 62;
+ public static final int LAST_TIME_USED = 63;
+ public static final int CARRIER_PRESENCE = 64;
+ }
+
+ /**
+ * Projection used for the query that loads all data for the entire contact.
+ */
+ private static class DirectoryQuery {
+ static final String[] COLUMNS = new String[] {
+ Directory.DISPLAY_NAME,
+ Directory.PACKAGE_NAME,
+ Directory.TYPE_RESOURCE_ID,
+ Directory.ACCOUNT_TYPE,
+ Directory.ACCOUNT_NAME,
+ Directory.EXPORT_SUPPORT,
+ };
+
+ public static final int DISPLAY_NAME = 0;
+ public static final int PACKAGE_NAME = 1;
+ public static final int TYPE_RESOURCE_ID = 2;
+ public static final int ACCOUNT_TYPE = 3;
+ public static final int ACCOUNT_NAME = 4;
+ public static final int EXPORT_SUPPORT = 5;
+ }
+
+ public void setNewLookup(Uri lookupUri) {
+ mLookupUri = lookupUri;
+ mContact = null;
+ }
+
+ @Override
+ public Contact loadInBackground() {
+ try {
+ final ContentResolver resolver = getContext().getContentResolver();
+ final Uri uriCurrentFormat = ContactLoaderUtils.ensureIsContactUri(
+ resolver, mLookupUri);
+ final Contact cachedResult = sCachedResult;
+ sCachedResult = null;
+ // Is this the same Uri as what we had before already? In that case, reuse that result
+ final Contact result;
+ final boolean resultIsCached;
+ if (cachedResult != null &&
+ UriUtils.areEqual(cachedResult.getLookupUri(), mLookupUri)) {
+ // We are using a cached result from earlier. Below, we should make sure
+ // we are not doing any more network or disc accesses
+ result = new Contact(mRequestedUri, cachedResult);
+ resultIsCached = true;
+ } else {
+ if (uriCurrentFormat.getLastPathSegment().equals(Constants.LOOKUP_URI_ENCODED)) {
+ result = loadEncodedContactEntity(uriCurrentFormat, mLookupUri);
+ } else {
+ result = loadContactEntity(resolver, uriCurrentFormat);
+ }
+ resultIsCached = false;
+ }
+ if (result.isLoaded()) {
+ if (result.isDirectoryEntry()) {
+ if (!resultIsCached) {
+ loadDirectoryMetaData(result);
+ }
+ } else if (mLoadGroupMetaData) {
+ if (result.getGroupMetaData() == null) {
+ loadGroupMetaData(result);
+ }
+ }
+ if (mComputeFormattedPhoneNumber) {
+ computeFormattedPhoneNumbers(result);
+ }
+ if (!resultIsCached) loadPhotoBinaryData(result);
+
+ }
+ return result;
+ } catch (Exception e) {
+ Log.e(TAG, "Error loading the contact: " + mLookupUri, e);
+ return Contact.forError(mRequestedUri, e);
+ }
+ }
+
+ /**
+ * Parses a {@link Contact} stored as a JSON string in a lookup URI.
+ *
+ * @param lookupUri The contact information to parse .
+ * @return The parsed {@code Contact} information.
+ * @throws JSONException
+ */
+ public static Contact parseEncodedContactEntity(Uri lookupUri) {
+ try {
+ return loadEncodedContactEntity(lookupUri, lookupUri);
+ } catch (JSONException je) {
+ return null;
+ }
+ }
+
+ private static Contact loadEncodedContactEntity(Uri uri, Uri lookupUri) throws JSONException {
+ final String jsonString = uri.getEncodedFragment();
+ final JSONObject json = new JSONObject(jsonString);
+
+ final long directoryId =
+ Long.valueOf(uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY));
+
+ final String displayName = json.optString(Contacts.DISPLAY_NAME);
+ final String altDisplayName = json.optString(
+ Contacts.DISPLAY_NAME_ALTERNATIVE, displayName);
+ final int displayNameSource = json.getInt(Contacts.DISPLAY_NAME_SOURCE);
+ final String photoUri = json.optString(Contacts.PHOTO_URI, null);
+ final Contact contact = new Contact(
+ uri, uri,
+ lookupUri,
+ directoryId,
+ null /* lookupKey */,
+ -1 /* id */,
+ -1 /* nameRawContactId */,
+ displayNameSource,
+ 0 /* photoId */,
+ photoUri,
+ displayName,
+ altDisplayName,
+ null /* phoneticName */,
+ false /* starred */,
+ null /* presence */,
+ false /* sendToVoicemail */,
+ null /* customRingtone */,
+ false /* isUserProfile */);
+
+ contact.setStatuses(new ImmutableMap.Builder<Long, DataStatus>().build());
+
+ final String accountName = json.optString(RawContacts.ACCOUNT_NAME, null);
+ final String directoryName = uri.getQueryParameter(Directory.DISPLAY_NAME);
+ if (accountName != null) {
+ final String accountType = json.getString(RawContacts.ACCOUNT_TYPE);
+ contact.setDirectoryMetaData(directoryName, null, accountName, accountType,
+ json.optInt(Directory.EXPORT_SUPPORT,
+ Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY));
+ } else {
+ contact.setDirectoryMetaData(directoryName, null, null, null,
+ json.optInt(Directory.EXPORT_SUPPORT, Directory.EXPORT_SUPPORT_ANY_ACCOUNT));
+ }
+
+ final ContentValues values = new ContentValues();
+ values.put(Data._ID, -1);
+ values.put(Data.CONTACT_ID, -1);
+ final RawContact rawContact = new RawContact(values);
+
+ final JSONObject items = json.getJSONObject(Contacts.CONTENT_ITEM_TYPE);
+ final Iterator keys = items.keys();
+ while (keys.hasNext()) {
+ final String mimetype = (String) keys.next();
+
+ // Could be single object or array.
+ final JSONObject obj = items.optJSONObject(mimetype);
+ if (obj == null) {
+ final JSONArray array = items.getJSONArray(mimetype);
+ for (int i = 0; i < array.length(); i++) {
+ final JSONObject item = array.getJSONObject(i);
+ processOneRecord(rawContact, item, mimetype);
+ }
+ } else {
+ processOneRecord(rawContact, obj, mimetype);
+ }
+ }
+
+ contact.setRawContacts(new ImmutableList.Builder<RawContact>()
+ .add(rawContact)
+ .build());
+ return contact;
+ }
+
+ private static void processOneRecord(RawContact rawContact, JSONObject item, String mimetype)
+ throws JSONException {
+ final ContentValues itemValues = new ContentValues();
+ itemValues.put(Data.MIMETYPE, mimetype);
+ itemValues.put(Data._ID, -1);
+
+ final Iterator iterator = item.keys();
+ while (iterator.hasNext()) {
+ String name = (String) iterator.next();
+ final Object o = item.get(name);
+ if (o instanceof String) {
+ itemValues.put(name, (String) o);
+ } else if (o instanceof Integer) {
+ itemValues.put(name, (Integer) o);
+ }
+ }
+ rawContact.addDataItemValues(itemValues);
+ }
+
+ private Contact loadContactEntity(ContentResolver resolver, Uri contactUri) {
+ Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY);
+ Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null,
+ Contacts.Entity.RAW_CONTACT_ID);
+ if (cursor == null) {
+ Log.e(TAG, "No cursor returned in loadContactEntity");
+ return Contact.forNotFound(mRequestedUri);
+ }
+
+ try {
+ if (!cursor.moveToFirst()) {
+ cursor.close();
+ return Contact.forNotFound(mRequestedUri);
+ }
+
+ // Create the loaded contact starting with the header data.
+ Contact contact = loadContactHeaderData(cursor, contactUri);
+
+ // Fill in the raw contacts, which is wrapped in an Entity and any
+ // status data. Initially, result has empty entities and statuses.
+ long currentRawContactId = -1;
+ RawContact rawContact = null;
+ ImmutableList.Builder<RawContact> rawContactsBuilder =
+ new ImmutableList.Builder<RawContact>();
+ ImmutableMap.Builder<Long, DataStatus> statusesBuilder =
+ new ImmutableMap.Builder<Long, DataStatus>();
+ do {
+ long rawContactId = cursor.getLong(ContactQuery.RAW_CONTACT_ID);
+ if (rawContactId != currentRawContactId) {
+ // First time to see this raw contact id, so create a new entity, and
+ // add it to the result's entities.
+ currentRawContactId = rawContactId;
+ rawContact = new RawContact(loadRawContactValues(cursor));
+ rawContactsBuilder.add(rawContact);
+ }
+ if (!cursor.isNull(ContactQuery.DATA_ID)) {
+ ContentValues data = loadDataValues(cursor);
+ rawContact.addDataItemValues(data);
+
+ if (!cursor.isNull(ContactQuery.PRESENCE)
+ || !cursor.isNull(ContactQuery.STATUS)) {
+ final DataStatus status = new DataStatus(cursor);
+ final long dataId = cursor.getLong(ContactQuery.DATA_ID);
+ statusesBuilder.put(dataId, status);
+ }
+ }
+ } while (cursor.moveToNext());
+
+ contact.setRawContacts(rawContactsBuilder.build());
+ contact.setStatuses(statusesBuilder.build());
+
+ return contact;
+ } finally {
+ cursor.close();
+ }
+ }
+
+ /**
+ * Looks for the photo data item in entities. If found, a thumbnail will be stored. A larger
+ * photo will also be stored if available.
+ */
+ private void loadPhotoBinaryData(Contact contactData) {
+ loadThumbnailBinaryData(contactData);
+
+ // Try to load the large photo from a file using the photo URI.
+ String photoUri = contactData.getPhotoUri();
+ if (photoUri != null) {
+ try {
+ final InputStream inputStream;
+ final AssetFileDescriptor fd;
+ final Uri uri = Uri.parse(photoUri);
+ final String scheme = uri.getScheme();
+ if ("http".equals(scheme) || "https".equals(scheme)) {
+ // Support HTTP urls that might come from extended directories
+ inputStream = new URL(photoUri).openStream();
+ fd = null;
+ } else {
+ fd = getContext().getContentResolver().openAssetFileDescriptor(uri, "r");
+ inputStream = fd.createInputStream();
+ }
+ byte[] buffer = new byte[16 * 1024];
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ int size;
+ while ((size = inputStream.read(buffer)) != -1) {
+ baos.write(buffer, 0, size);
+ }
+ contactData.setPhotoBinaryData(baos.toByteArray());
+ } finally {
+ inputStream.close();
+ if (fd != null) {
+ fd.close();
+ }
+ }
+ return;
+ } catch (IOException ioe) {
+ // Just fall back to the case below.
+ }
+ }
+
+ // If we couldn't load from a file, fall back to the data blob.
+ contactData.setPhotoBinaryData(contactData.getThumbnailPhotoBinaryData());
+ }
+
+ private void loadThumbnailBinaryData(Contact contactData) {
+ final long photoId = contactData.getPhotoId();
+ if (photoId <= 0) {
+ // No photo ID
+ return;
+ }
+
+ for (RawContact rawContact : contactData.getRawContacts()) {
+ for (DataItem dataItem : rawContact.getDataItems()) {
+ if (dataItem.getId() == photoId) {
+ if (!(dataItem instanceof PhotoDataItem)) {
+ break;
+ }
+
+ final PhotoDataItem photo = (PhotoDataItem) dataItem;
+ contactData.setThumbnailPhotoBinaryData(photo.getPhoto());
+ break;
+ }
+ }
+ }
+ }
+
+ /**
+ * Extracts Contact level columns from the cursor.
+ */
+ private Contact loadContactHeaderData(final Cursor cursor, Uri contactUri) {
+ final String directoryParameter =
+ contactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+ final long directoryId = directoryParameter == null
+ ? Directory.DEFAULT
+ : Long.parseLong(directoryParameter);
+ final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+ final String lookupKey = cursor.getString(ContactQuery.LOOKUP_KEY);
+ final long nameRawContactId = cursor.getLong(ContactQuery.NAME_RAW_CONTACT_ID);
+ final int displayNameSource = cursor.getInt(ContactQuery.DISPLAY_NAME_SOURCE);
+ final String displayName = cursor.getString(ContactQuery.DISPLAY_NAME);
+ final String altDisplayName = cursor.getString(ContactQuery.ALT_DISPLAY_NAME);
+ final String phoneticName = cursor.getString(ContactQuery.PHONETIC_NAME);
+ final long photoId = cursor.getLong(ContactQuery.PHOTO_ID);
+ final String photoUri = cursor.getString(ContactQuery.PHOTO_URI);
+ final boolean starred = cursor.getInt(ContactQuery.STARRED) != 0;
+ final Integer presence = cursor.isNull(ContactQuery.CONTACT_PRESENCE)
+ ? null
+ : cursor.getInt(ContactQuery.CONTACT_PRESENCE);
+ final boolean sendToVoicemail = cursor.getInt(ContactQuery.SEND_TO_VOICEMAIL) == 1;
+ final String customRingtone = cursor.getString(ContactQuery.CUSTOM_RINGTONE);
+ final boolean isUserProfile = cursor.getInt(ContactQuery.IS_USER_PROFILE) == 1;
+
+ Uri lookupUri;
+ if (directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE) {
+ lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), contactId);
+ } else {
+ lookupUri = contactUri;
+ }
+
+ return new Contact(mRequestedUri, contactUri, lookupUri, directoryId, lookupKey,
+ contactId, nameRawContactId, displayNameSource, photoId, photoUri, displayName,
+ altDisplayName, phoneticName, starred, presence, sendToVoicemail,
+ customRingtone, isUserProfile);
+ }
+
+ /**
+ * Extracts RawContact level columns from the cursor.
+ */
+ private ContentValues loadRawContactValues(Cursor cursor) {
+ ContentValues cv = new ContentValues();
+
+ cv.put(RawContacts._ID, cursor.getLong(ContactQuery.RAW_CONTACT_ID));
+
+ cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_NAME);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_TYPE);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SET);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DIRTY);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.VERSION);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.SOURCE_ID);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC1);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC2);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC3);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC4);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DELETED);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.CONTACT_ID);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.STARRED);
+
+ return cv;
+ }
+
+ /**
+ * Extracts Data level columns from the cursor.
+ */
+ private ContentValues loadDataValues(Cursor cursor) {
+ ContentValues cv = new ContentValues();
+
+ cv.put(Data._ID, cursor.getLong(ContactQuery.DATA_ID));
+
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA1);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA2);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA3);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA4);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA5);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA6);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA7);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA8);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA9);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA10);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA11);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA12);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA13);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA14);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA15);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC1);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC2);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC3);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC4);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_VERSION);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.IS_PRIMARY);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.IS_SUPERPRIMARY);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.MIMETYPE);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.GROUP_SOURCE_ID);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.CHAT_CAPABILITY);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED);
+ cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE);
+ }
+
+ return cv;
+ }
+
+ private void cursorColumnToContentValues(
+ Cursor cursor, ContentValues values, int index) {
+ switch (cursor.getType(index)) {
+ case Cursor.FIELD_TYPE_NULL:
+ // don't put anything in the content values
+ break;
+ case Cursor.FIELD_TYPE_INTEGER:
+ values.put(ContactQuery.COLUMNS[index], cursor.getLong(index));
+ break;
+ case Cursor.FIELD_TYPE_STRING:
+ values.put(ContactQuery.COLUMNS[index], cursor.getString(index));
+ break;
+ case Cursor.FIELD_TYPE_BLOB:
+ values.put(ContactQuery.COLUMNS[index], cursor.getBlob(index));
+ break;
+ default:
+ throw new IllegalStateException("Invalid or unhandled data type");
+ }
+ }
+
+ private void loadDirectoryMetaData(Contact result) {
+ long directoryId = result.getDirectoryId();
+
+ Cursor cursor = getContext().getContentResolver().query(
+ ContentUris.withAppendedId(Directory.CONTENT_URI, directoryId),
+ DirectoryQuery.COLUMNS, null, null, null);
+ if (cursor == null) {
+ return;
+ }
+ try {
+ if (cursor.moveToFirst()) {
+ final String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
+ final String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
+ final int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
+ final String accountType = cursor.getString(DirectoryQuery.ACCOUNT_TYPE);
+ final String accountName = cursor.getString(DirectoryQuery.ACCOUNT_NAME);
+ final int exportSupport = cursor.getInt(DirectoryQuery.EXPORT_SUPPORT);
+ String directoryType = null;
+ if (!TextUtils.isEmpty(packageName)) {
+ PackageManager pm = getContext().getPackageManager();
+ try {
+ Resources resources = pm.getResourcesForApplication(packageName);
+ directoryType = resources.getString(typeResourceId);
+ } catch (NameNotFoundException e) {
+ Log.w(TAG, "Contact directory resource not found: "
+ + packageName + "." + typeResourceId);
+ }
+ }
+
+ result.setDirectoryMetaData(
+ displayName, directoryType, accountType, accountName, exportSupport);
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+
+ static private class AccountKey {
+ private final String mAccountName;
+ private final String mAccountType;
+ private final String mDataSet;
+
+ public AccountKey(String accountName, String accountType, String dataSet) {
+ mAccountName = accountName;
+ mAccountType = accountType;
+ mDataSet = dataSet;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mAccountName, mAccountType, mDataSet);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof AccountKey)) {
+ return false;
+ }
+ final AccountKey other = (AccountKey) obj;
+ return Objects.equals(mAccountName, other.mAccountName)
+ && Objects.equals(mAccountType, other.mAccountType)
+ && Objects.equals(mDataSet, other.mDataSet);
+ }
+ }
+
+ /**
+ * Loads groups meta-data for all groups associated with all constituent raw contacts'
+ * accounts.
+ */
+ private void loadGroupMetaData(Contact result) {
+ StringBuilder selection = new StringBuilder();
+ ArrayList<String> selectionArgs = new ArrayList<String>();
+ final HashSet<AccountKey> accountsSeen = new HashSet<>();
+ for (RawContact rawContact : result.getRawContacts()) {
+ final String accountName = rawContact.getAccountName();
+ final String accountType = rawContact.getAccountTypeString();
+ final String dataSet = rawContact.getDataSet();
+ final AccountKey accountKey = new AccountKey(accountName, accountType, dataSet);
+ if (accountName != null && accountType != null &&
+ !accountsSeen.contains(accountKey)) {
+ accountsSeen.add(accountKey);
+ if (selection.length() != 0) {
+ selection.append(" OR ");
+ }
+ selection.append(
+ "(" + Groups.ACCOUNT_NAME + "=? AND " + Groups.ACCOUNT_TYPE + "=?");
+ selectionArgs.add(accountName);
+ selectionArgs.add(accountType);
+
+ selection.append(" AND " + Groups.DELETED + "=0");
+
+ if (dataSet != null) {
+ selection.append(" AND " + Groups.DATA_SET + "=?");
+ selectionArgs.add(dataSet);
+ } else {
+ selection.append(" AND " + Groups.DATA_SET + " IS NULL");
+ }
+ selection.append(")");
+ }
+ }
+ final ImmutableList.Builder<GroupMetaData> groupListBuilder = new ImmutableList.Builder<>();
+ final Cursor cursor = getContext().getContentResolver().query(Groups.CONTENT_URI,
+ GroupMetaDataLoader.COLUMNS, selection.toString(),
+ selectionArgs.toArray(new String[0]), null);
+ if (cursor != null) {
+ try {
+ while (cursor.moveToNext()) {
+ groupListBuilder.add(new GroupMetaData(getContext(), cursor));
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ result.setGroupMetaData(groupListBuilder.build());
+ }
+
+ /**
+ * Iterates over all data items that represent phone numbers are tries to calculate a formatted
+ * number. This function can safely be called several times as no unformatted data is
+ * overwritten
+ */
+ private void computeFormattedPhoneNumbers(Contact contactData) {
+ final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
+ final ImmutableList<RawContact> rawContacts = contactData.getRawContacts();
+ final int rawContactCount = rawContacts.size();
+ for (int rawContactIndex = 0; rawContactIndex < rawContactCount; rawContactIndex++) {
+ final RawContact rawContact = rawContacts.get(rawContactIndex);
+ final List<DataItem> dataItems = rawContact.getDataItems();
+ final int dataCount = dataItems.size();
+ for (int dataIndex = 0; dataIndex < dataCount; dataIndex++) {
+ final DataItem dataItem = dataItems.get(dataIndex);
+ if (dataItem instanceof PhoneDataItem) {
+ final PhoneDataItem phoneDataItem = (PhoneDataItem) dataItem;
+ phoneDataItem.computeFormattedPhoneNumber(countryIso);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void deliverResult(Contact result) {
+ unregisterObserver();
+
+ // The creator isn't interested in any further updates
+ if (isReset() || result == null) {
+ return;
+ }
+
+ mContact = result;
+
+ if (result.isLoaded()) {
+ mLookupUri = result.getLookupUri();
+
+ if (!result.isDirectoryEntry()) {
+ Log.i(TAG, "Registering content observer for " + mLookupUri);
+ if (mObserver == null) {
+ mObserver = new ForceLoadContentObserver();
+ }
+ getContext().getContentResolver().registerContentObserver(
+ mLookupUri, true, mObserver);
+ }
+
+ if (mPostViewNotification) {
+ // inform the source of the data that this contact is being looked at
+ postViewNotificationToSyncAdapter();
+ }
+ }
+
+ super.deliverResult(mContact);
+ }
+
+ /**
+ * Posts a message to the contributing sync adapters that have opted-in, notifying them
+ * that the contact has just been loaded
+ */
+ private void postViewNotificationToSyncAdapter() {
+ Context context = getContext();
+ for (RawContact rawContact : mContact.getRawContacts()) {
+ final long rawContactId = rawContact.getId();
+ if (mNotifiedRawContactIds.contains(rawContactId)) {
+ continue; // Already notified for this raw contact.
+ }
+ mNotifiedRawContactIds.add(rawContactId);
+ final AccountType accountType = rawContact.getAccountType(context);
+ final String serviceName = accountType.getViewContactNotifyServiceClassName();
+ final String servicePackageName = accountType.getViewContactNotifyServicePackageName();
+ if (!TextUtils.isEmpty(serviceName) && !TextUtils.isEmpty(servicePackageName)) {
+ final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
+ final Intent intent = new Intent();
+ intent.setClassName(servicePackageName, serviceName);
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE);
+ try {
+ context.startService(intent);
+ } catch (Exception e) {
+ Log.e(TAG, "Error sending message to source-app", e);
+ }
+ }
+ }
+ }
+
+ private void unregisterObserver() {
+ if (mObserver != null) {
+ getContext().getContentResolver().unregisterContentObserver(mObserver);
+ mObserver = null;
+ }
+ }
+
+ public Uri getLookupUri() {
+ return mLookupUri;
+ }
+
+ @Override
+ protected void onStartLoading() {
+ if (mContact != null) {
+ deliverResult(mContact);
+ }
+
+ if (takeContentChanged() || mContact == null) {
+ forceLoad();
+ }
+ }
+
+ @Override
+ protected void onStopLoading() {
+ cancelLoad();
+ }
+
+ @Override
+ protected void onReset() {
+ super.onReset();
+ cancelLoad();
+ unregisterObserver();
+ mContact = null;
+ }
+
+ /**
+ * Caches the result, which is useful when we switch from activity to activity, using the same
+ * contact. If the next load is for a different contact, the cached result will be dropped
+ */
+ public void cacheResult() {
+ if (mContact == null || !mContact.isLoaded()) {
+ sCachedResult = null;
+ } else {
+ sCachedResult = mContact;
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java b/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java
new file mode 100644
index 000000000..307577de5
--- /dev/null
+++ b/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java
@@ -0,0 +1,139 @@
+/*
+ * 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.model;
+
+import android.accounts.AccountManager;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Attempts to create accounts for "Device" contacts by querying
+ * CP2 for records with {@link android.provider.ContactsContract.RawContacts#ACCOUNT_TYPE} columns
+ * that do not exist for any account returned by {@link AccountManager#getAccounts()}
+ *
+ * This class should be used from a background thread since it does DB queries
+ */
+public class Cp2DeviceLocalAccountLocator extends DeviceLocalAccountLocator {
+
+ // Note this class is assuming ACCOUNT_NAME and ACCOUNT_TYPE have same values in
+ // RawContacts, Groups, and Settings. This assumption simplifies the code somewhat and it
+ // is true right now and unlikely to ever change.
+ @VisibleForTesting
+ static String[] PROJECTION = new String[] {
+ ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE,
+ ContactsContract.RawContacts.DATA_SET
+ };
+
+ private static final int COL_NAME = 0;
+ private static final int COL_TYPE = 1;
+ private static final int COL_DATA_SET = 2;
+
+ private final ContentResolver mResolver;
+ private final DeviceLocalAccountTypeFactory mAccountTypeFactory;
+
+ private final String mSelection;
+ private final String[] mSelectionArgs;
+
+ public Cp2DeviceLocalAccountLocator(ContentResolver contentResolver,
+ DeviceLocalAccountTypeFactory factory,
+ Set<String> knownAccountTypes) {
+ mResolver = contentResolver;
+ mAccountTypeFactory = factory;
+
+ mSelection = getSelection(knownAccountTypes);
+ mSelectionArgs = getSelectionArgs(knownAccountTypes);
+ }
+
+ @Override
+ public List<AccountWithDataSet> getDeviceLocalAccounts() {
+
+ final Set<AccountWithDataSet> localAccounts = new HashSet<>();
+
+ // Many device accounts have default groups associated with them.
+ addAccountsFromQuery(ContactsContract.Groups.CONTENT_URI, localAccounts);
+ addAccountsFromQuery(ContactsContract.Settings.CONTENT_URI, localAccounts);
+ addAccountsFromQuery(ContactsContract.RawContacts.CONTENT_URI, localAccounts);
+
+ return new ArrayList<>(localAccounts);
+ }
+
+ private void addAccountsFromQuery(Uri uri, Set<AccountWithDataSet> accounts) {
+ final Cursor cursor = mResolver.query(uri, PROJECTION, mSelection, mSelectionArgs, null);
+
+ if (cursor == null) return;
+
+ try {
+ addAccountsFromCursor(cursor, accounts);
+ } finally {
+ cursor.close();
+ }
+ }
+
+ private void addAccountsFromCursor(Cursor cursor, Set<AccountWithDataSet> accounts) {
+ while (cursor.moveToNext()) {
+ final String name = cursor.getString(COL_NAME);
+ final String type = cursor.getString(COL_TYPE);
+ final String dataSet = cursor.getString(COL_DATA_SET);
+
+ if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+ mAccountTypeFactory, type)) {
+ accounts.add(new AccountWithDataSet(name, type, dataSet));
+ }
+ }
+ }
+
+ @VisibleForTesting
+ public String getSelection() {
+ return mSelection;
+ }
+
+ @VisibleForTesting
+ public String[] getSelectionArgs() {
+ return mSelectionArgs;
+ }
+
+ private static String getSelection(Set<String> knownAccountTypes) {
+ final StringBuilder sb = new StringBuilder()
+ .append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" IS NULL");
+ if (knownAccountTypes.isEmpty()) {
+ return sb.toString();
+ }
+ sb.append(" OR ").append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" NOT IN (");
+ for (String ignored : knownAccountTypes) {
+ sb.append("?,");
+ }
+ // Remove trailing ','
+ sb.deleteCharAt(sb.length() - 1).append(')');
+ return sb.toString();
+ }
+
+ private static String[] getSelectionArgs(Set<String> knownAccountTypes) {
+ if (knownAccountTypes.isEmpty()) return null;
+
+ return knownAccountTypes.toArray(new String[knownAccountTypes.size()]);
+ }
+}
diff --git a/src/com/android/contacts/model/DeviceLocalAccountLocator.java b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
new file mode 100644
index 000000000..4281de978
--- /dev/null
+++ b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
@@ -0,0 +1,105 @@
+/*
+ * 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.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.Context;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Attempts to detect accounts for device contacts
+ */
+public abstract class DeviceLocalAccountLocator {
+
+ /**
+ * Returns a list of device local accounts
+ */
+ public abstract List<AccountWithDataSet> getDeviceLocalAccounts();
+
+ // This works on Nexus and AOSP because the local device account is the null account but most
+ // OEMs have a special account name and type for their device account.
+ public static final DeviceLocalAccountLocator NULL_ONLY = new DeviceLocalAccountLocator() {
+ @Override
+ public List<AccountWithDataSet> getDeviceLocalAccounts() {
+ return Collections.singletonList(AccountWithDataSet.getNullAccount());
+ }
+ };
+
+ public static DeviceLocalAccountLocator create(Context context,
+ Set<String> knownAccountTypes) {
+ if (Flags.getInstance().getBoolean(Experiments.CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+ return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
+ ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownAccountTypes);
+ }
+ return NULL_ONLY;
+ }
+
+ public static DeviceLocalAccountLocator create(Context context) {
+ final AccountManager accountManager =
+ (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
+ final Set<String> knownTypes = new HashSet<>();
+ for (Account account : accountManager.getAccounts()) {
+ knownTypes.add(account.type);
+ }
+ if (Flags.getInstance().getBoolean(Experiments.CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+ return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
+ ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownTypes);
+ } else {
+ return new NexusDeviceAccountLocator(accountManager);
+ }
+ }
+
+ /**
+ * On Nexus the "device" account uses "null" values for the account name and type columns
+ *
+ * <p>However, the focus sync adapter automatically migrates contacts from this null
+ * account to a Google account if one exists. Hence, the device account should be returned
+ * only when there is no Google Account added
+ * </p>
+ */
+ public static class NexusDeviceAccountLocator extends DeviceLocalAccountLocator {
+
+ private final AccountManager mAccountManager;
+
+ public NexusDeviceAccountLocator(AccountManager accountManager) {
+ mAccountManager = accountManager;
+ }
+
+ @Override
+ public List<AccountWithDataSet> getDeviceLocalAccounts() {
+ @SuppressWarnings("MissingPermission")
+ final Account[] accounts = mAccountManager
+ .getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
+
+ if (accounts.length > 0) {
+ return Collections.emptyList();
+ } else {
+ return Collections.singletonList(AccountWithDataSet.getNullAccount());
+ }
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/RawContact.java b/src/com/android/contacts/model/RawContact.java
new file mode 100644
index 000000000..0059fece5
--- /dev/null
+++ b/src/com/android/contacts/model/RawContact.java
@@ -0,0 +1,368 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Entity;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.DataItem;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * RawContact represents a single raw contact in the raw contacts database.
+ * It has specialized getters/setters for raw contact
+ * items, and also contains a collection of DataItem objects. A RawContact contains the information
+ * from a single account.
+ *
+ * This allows RawContact objects to be thought of as a class with raw contact
+ * fields (like account type, name, data set, sync state, etc.) and a list of
+ * DataItem objects that represent contact information elements (like phone
+ * numbers, email, address, etc.).
+ */
+final public class RawContact implements Parcelable {
+
+ private AccountTypeManager mAccountTypeManager;
+ private final ContentValues mValues;
+ private final ArrayList<NamedDataItem> mDataItems;
+
+ final public static class NamedDataItem implements Parcelable {
+ public final Uri mUri;
+
+ // This use to be a DataItem. DataItem creation is now delayed until the point of request
+ // since there is no benefit to storing them here due to the multiple inheritance.
+ // Eventually instanceof still has to be used anyways to determine which sub-class of
+ // DataItem it is. And having parent DataItem's here makes it very difficult to serialize or
+ // parcelable.
+ //
+ // Instead of having a common DataItem super class, we should refactor this to be a generic
+ // Object where the object is a concrete class that no longer relies on ContentValues.
+ // (this will also make the classes easier to use).
+ // Since instanceof is used later anyways, having a list of Objects won't hurt and is no
+ // worse than having a DataItem.
+ public final ContentValues mContentValues;
+
+ public NamedDataItem(Uri uri, ContentValues values) {
+ this.mUri = uri;
+ this.mContentValues = values;
+ }
+
+ public NamedDataItem(Parcel parcel) {
+ this.mUri = parcel.readParcelable(Uri.class.getClassLoader());
+ this.mContentValues = parcel.readParcelable(ContentValues.class.getClassLoader());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeParcelable(mUri, i);
+ parcel.writeParcelable(mContentValues, i);
+ }
+
+ public static final Parcelable.Creator<NamedDataItem> CREATOR
+ = new Parcelable.Creator<NamedDataItem>() {
+
+ @Override
+ public NamedDataItem createFromParcel(Parcel parcel) {
+ return new NamedDataItem(parcel);
+ }
+
+ @Override
+ public NamedDataItem[] newArray(int i) {
+ return new NamedDataItem[i];
+ }
+ };
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(mUri, mContentValues);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+
+ final NamedDataItem other = (NamedDataItem) obj;
+ return Objects.equal(mUri, other.mUri) &&
+ Objects.equal(mContentValues, other.mContentValues);
+ }
+ }
+
+ public static RawContact createFrom(Entity entity) {
+ final ContentValues values = entity.getEntityValues();
+ final ArrayList<Entity.NamedContentValues> subValues = entity.getSubValues();
+
+ RawContact rawContact = new RawContact(values);
+ for (Entity.NamedContentValues subValue : subValues) {
+ rawContact.addNamedDataItemValues(subValue.uri, subValue.values);
+ }
+ return rawContact;
+ }
+
+ /**
+ * A RawContact object can be created with or without a context.
+ */
+ public RawContact() {
+ this(new ContentValues());
+ }
+
+ public RawContact(ContentValues values) {
+ mValues = values;
+ mDataItems = new ArrayList<NamedDataItem>();
+ }
+
+ /**
+ * Constructor for the parcelable.
+ *
+ * @param parcel The parcel to de-serialize from.
+ */
+ private RawContact(Parcel parcel) {
+ mValues = parcel.readParcelable(ContentValues.class.getClassLoader());
+ mDataItems = Lists.newArrayList();
+ parcel.readTypedList(mDataItems, NamedDataItem.CREATOR);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeParcelable(mValues, i);
+ parcel.writeTypedList(mDataItems);
+ }
+
+ /**
+ * Create for building the parcelable.
+ */
+ public static final Parcelable.Creator<RawContact> CREATOR
+ = new Parcelable.Creator<RawContact>() {
+
+ @Override
+ public RawContact createFromParcel(Parcel parcel) {
+ return new RawContact(parcel);
+ }
+
+ @Override
+ public RawContact[] newArray(int i) {
+ return new RawContact[i];
+ }
+ };
+
+ public AccountTypeManager getAccountTypeManager(Context context) {
+ if (mAccountTypeManager == null) {
+ mAccountTypeManager = AccountTypeManager.getInstance(context);
+ }
+ return mAccountTypeManager;
+ }
+
+ public ContentValues getValues() {
+ return mValues;
+ }
+
+ /**
+ * Returns the id of the raw contact.
+ */
+ public Long getId() {
+ return getValues().getAsLong(RawContacts._ID);
+ }
+
+ /**
+ * Returns the account name of the raw contact.
+ */
+ public String getAccountName() {
+ return getValues().getAsString(RawContacts.ACCOUNT_NAME);
+ }
+
+ /**
+ * Returns the account type of the raw contact.
+ */
+ public String getAccountTypeString() {
+ return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+ }
+
+ /**
+ * Returns the data set of the raw contact.
+ */
+ public String getDataSet() {
+ return getValues().getAsString(RawContacts.DATA_SET);
+ }
+
+ public boolean isDirty() {
+ return getValues().getAsBoolean(RawContacts.DIRTY);
+ }
+
+ public String getSourceId() {
+ return getValues().getAsString(RawContacts.SOURCE_ID);
+ }
+
+ public String getSync1() {
+ return getValues().getAsString(RawContacts.SYNC1);
+ }
+
+ public String getSync2() {
+ return getValues().getAsString(RawContacts.SYNC2);
+ }
+
+ public String getSync3() {
+ return getValues().getAsString(RawContacts.SYNC3);
+ }
+
+ public String getSync4() {
+ return getValues().getAsString(RawContacts.SYNC4);
+ }
+
+ public boolean isDeleted() {
+ return getValues().getAsBoolean(RawContacts.DELETED);
+ }
+
+ public long getContactId() {
+ return getValues().getAsLong(Contacts.Entity.CONTACT_ID);
+ }
+
+ public boolean isStarred() {
+ return getValues().getAsBoolean(Contacts.STARRED);
+ }
+
+ public AccountType getAccountType(Context context) {
+ return getAccountTypeManager(context).getAccountType(getAccountTypeString(), getDataSet());
+ }
+
+ /**
+ * Sets the account name, account type, and data set strings.
+ * Valid combinations for account-name, account-type, data-set
+ * 1) null, null, null (local account)
+ * 2) non-null, non-null, null (valid account without data-set)
+ * 3) non-null, non-null, non-null (valid account with data-set)
+ */
+ private void setAccount(String accountName, String accountType, String dataSet) {
+ final ContentValues values = getValues();
+ if (accountName == null) {
+ if (accountType == null && dataSet == null) {
+ // This is a local account
+ values.putNull(RawContacts.ACCOUNT_NAME);
+ values.putNull(RawContacts.ACCOUNT_TYPE);
+ values.putNull(RawContacts.DATA_SET);
+ return;
+ }
+ } else {
+ if (accountType != null) {
+ // This is a valid account, either with or without a dataSet.
+ values.put(RawContacts.ACCOUNT_NAME, accountName);
+ values.put(RawContacts.ACCOUNT_TYPE, accountType);
+ if (dataSet == null) {
+ values.putNull(RawContacts.DATA_SET);
+ } else {
+ values.put(RawContacts.DATA_SET, dataSet);
+ }
+ return;
+ }
+ }
+ throw new IllegalArgumentException(
+ "Not a valid combination of account name, type, and data set.");
+ }
+
+ public void setAccount(AccountWithDataSet accountWithDataSet) {
+ if (accountWithDataSet != null) {
+ setAccount(accountWithDataSet.name, accountWithDataSet.type,
+ accountWithDataSet.dataSet);
+ } else {
+ setAccount(null, null, null);
+ }
+ }
+
+ public void setAccountToLocal() {
+ setAccount(null, null, null);
+ }
+
+ /**
+ * Creates and inserts a DataItem object that wraps the content values, and returns it.
+ */
+ public void addDataItemValues(ContentValues values) {
+ addNamedDataItemValues(Data.CONTENT_URI, values);
+ }
+
+ public NamedDataItem addNamedDataItemValues(Uri uri, ContentValues values) {
+ final NamedDataItem namedItem = new NamedDataItem(uri, values);
+ mDataItems.add(namedItem);
+ return namedItem;
+ }
+
+ public ArrayList<ContentValues> getContentValues() {
+ final ArrayList<ContentValues> list = Lists.newArrayListWithCapacity(mDataItems.size());
+ for (NamedDataItem dataItem : mDataItems) {
+ if (Data.CONTENT_URI.equals(dataItem.mUri)) {
+ list.add(dataItem.mContentValues);
+ }
+ }
+ return list;
+ }
+
+ public List<DataItem> getDataItems() {
+ final ArrayList<DataItem> list = Lists.newArrayListWithCapacity(mDataItems.size());
+ for (NamedDataItem dataItem : mDataItems) {
+ if (Data.CONTENT_URI.equals(dataItem.mUri)) {
+ list.add(DataItem.createFrom(dataItem.mContentValues));
+ }
+ }
+ return list;
+ }
+
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("RawContact: ").append(mValues);
+ for (RawContact.NamedDataItem namedDataItem : mDataItems) {
+ sb.append("\n ").append(namedDataItem.mUri);
+ sb.append("\n -> ").append(namedDataItem.mContentValues);
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(mValues, mDataItems);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+
+ RawContact other = (RawContact) obj;
+ return Objects.equal(mValues, other.mValues) &&
+ Objects.equal(mDataItems, other.mDataItems);
+ }
+}
diff --git a/src/com/android/contacts/model/RawContactDelta.java b/src/com/android/contacts/model/RawContactDelta.java
new file mode 100644
index 000000000..6ee31ba03
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactDelta.java
@@ -0,0 +1,660 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Profile;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Contains a {@link RawContact} and records any modifications separately so the
+ * original {@link RawContact} can be swapped out with a newer version and the
+ * changes still cleanly applied.
+ * <p>
+ * One benefit of this approach is that we can build changes entirely on an
+ * empty {@link RawContact}, which then becomes an insert {@link RawContacts} case.
+ * <p>
+ * When applying modifications over an {@link RawContact}, we try finding the
+ * original {@link Data#_ID} rows where the modifications took place. If those
+ * rows are missing from the new {@link RawContact}, we know the original data must
+ * be deleted, but to preserve the user modifications we treat as an insert.
+ */
+public class RawContactDelta implements Parcelable {
+ // TODO: optimize by using contentvalues pool, since we allocate so many of them
+
+ private static final String TAG = "EntityDelta";
+ private static final boolean DEBUG = false;
+
+ /**
+ * Direct values from {@link Entity#getEntityValues()}.
+ */
+ private ValuesDelta mValues;
+
+ /**
+ * URI used for contacts queries, by default it is set to query raw contacts.
+ * It can be set to query the profile's raw contact(s).
+ */
+ private Uri mContactsQueryUri = RawContacts.CONTENT_URI;
+
+ /**
+ * Internal map of children values from {@link Entity#getSubValues()}, which
+ * we store here sorted into {@link Data#MIMETYPE} bins.
+ */
+ private final HashMap<String, ArrayList<ValuesDelta>> mEntries = Maps.newHashMap();
+
+ public RawContactDelta() {
+ }
+
+ public RawContactDelta(ValuesDelta values) {
+ mValues = values;
+ }
+
+ /**
+ * Build an {@link RawContactDelta} using the given {@link RawContact} as a
+ * starting point; the "before" snapshot.
+ */
+ public static RawContactDelta fromBefore(RawContact before) {
+ final RawContactDelta rawContactDelta = new RawContactDelta();
+ rawContactDelta.mValues = ValuesDelta.fromBefore(before.getValues());
+ rawContactDelta.mValues.setIdColumn(RawContacts._ID);
+ for (final ContentValues values : before.getContentValues()) {
+ rawContactDelta.addEntry(ValuesDelta.fromBefore(values));
+ }
+ return rawContactDelta;
+ }
+
+ /**
+ * Merge the "after" values from the given {@link RawContactDelta} onto the
+ * "before" state represented by this {@link RawContactDelta}, discarding any
+ * existing "after" states. This is typically used when re-parenting changes
+ * onto an updated {@link Entity}.
+ */
+ public static RawContactDelta mergeAfter(RawContactDelta local, RawContactDelta remote) {
+ // Bail early if trying to merge delete with missing local
+ final ValuesDelta remoteValues = remote.mValues;
+ if (local == null && (remoteValues.isDelete() || remoteValues.isTransient())) return null;
+
+ // Create local version if none exists yet
+ if (local == null) local = new RawContactDelta();
+
+ if (DEBUG) {
+ final Long localVersion = (local.mValues == null) ? null : local.mValues
+ .getAsLong(RawContacts.VERSION);
+ final Long remoteVersion = remote.mValues.getAsLong(RawContacts.VERSION);
+ Log.d(TAG, "Re-parenting from original version " + remoteVersion + " to "
+ + localVersion);
+ }
+
+ // Create values if needed, and merge "after" changes
+ local.mValues = ValuesDelta.mergeAfter(local.mValues, remote.mValues);
+
+ // Find matching local entry for each remote values, or create
+ for (ArrayList<ValuesDelta> mimeEntries : remote.mEntries.values()) {
+ for (ValuesDelta remoteEntry : mimeEntries) {
+ final Long childId = remoteEntry.getId();
+
+ // Find or create local match and merge
+ final ValuesDelta localEntry = local.getEntry(childId);
+ final ValuesDelta merged = ValuesDelta.mergeAfter(localEntry, remoteEntry);
+
+ if (localEntry == null && merged != null) {
+ // No local entry before, so insert
+ local.addEntry(merged);
+ }
+ }
+ }
+
+ return local;
+ }
+
+ public ValuesDelta getValues() {
+ return mValues;
+ }
+
+ public boolean isContactInsert() {
+ return mValues.isInsert();
+ }
+
+ /**
+ * Get the {@link ValuesDelta} child marked as {@link Data#IS_PRIMARY},
+ * which may return null when no entry exists.
+ */
+ public ValuesDelta getPrimaryEntry(String mimeType) {
+ final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
+ if (mimeEntries == null) return null;
+
+ for (ValuesDelta entry : mimeEntries) {
+ if (entry.isPrimary()) {
+ return entry;
+ }
+ }
+
+ // When no direct primary, return something
+ return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
+ }
+
+ /**
+ * calls {@link #getSuperPrimaryEntry(String, boolean)} with true
+ * @see #getSuperPrimaryEntry(String, boolean)
+ */
+ public ValuesDelta getSuperPrimaryEntry(String mimeType) {
+ return getSuperPrimaryEntry(mimeType, true);
+ }
+
+ /**
+ * Returns the super-primary entry for the given mime type
+ * @param forceSelection if true, will try to return some value even if a super-primary
+ * doesn't exist (may be a primary, or just a random item
+ * @return
+ */
+ public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection) {
+ final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
+ if (mimeEntries == null) return null;
+
+ ValuesDelta primary = null;
+ for (ValuesDelta entry : mimeEntries) {
+ if (entry.isSuperPrimary()) {
+ return entry;
+ } else if (entry.isPrimary()) {
+ primary = entry;
+ }
+ }
+
+ if (!forceSelection) {
+ return null;
+ }
+
+ // When no direct super primary, return something
+ if (primary != null) {
+ return primary;
+ }
+ return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
+ }
+
+ /**
+ * Return the AccountType that this raw-contact belongs to.
+ */
+ public AccountType getRawContactAccountType(Context context) {
+ ContentValues entityValues = getValues().getCompleteValues();
+ String type = entityValues.getAsString(RawContacts.ACCOUNT_TYPE);
+ String dataSet = entityValues.getAsString(RawContacts.DATA_SET);
+ return AccountTypeManager.getInstance(context).getAccountType(type, dataSet);
+ }
+
+ public Long getRawContactId() {
+ return getValues().getAsLong(RawContacts._ID);
+ }
+
+ public String getAccountName() {
+ return getValues().getAsString(RawContacts.ACCOUNT_NAME);
+ }
+
+ public String getAccountType() {
+ return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+ }
+
+ public String getDataSet() {
+ return getValues().getAsString(RawContacts.DATA_SET);
+ }
+
+ public AccountType getAccountType(AccountTypeManager manager) {
+ return manager.getAccountType(getAccountType(), getDataSet());
+ }
+
+ public AccountWithDataSet getAccountWithDataSet() {
+ return new AccountWithDataSet(getAccountName(), getAccountType(), getDataSet());
+ }
+
+ public boolean isVisible() {
+ return getValues().isVisible();
+ }
+
+ /**
+ * Return the list of child {@link ValuesDelta} from our optimized map,
+ * creating the list if requested.
+ */
+ private ArrayList<ValuesDelta> getMimeEntries(String mimeType, boolean lazyCreate) {
+ ArrayList<ValuesDelta> mimeEntries = mEntries.get(mimeType);
+ if (mimeEntries == null && lazyCreate) {
+ mimeEntries = Lists.newArrayList();
+ mEntries.put(mimeType, mimeEntries);
+ }
+ return mimeEntries;
+ }
+
+ public ArrayList<ValuesDelta> getMimeEntries(String mimeType) {
+ return getMimeEntries(mimeType, false);
+ }
+
+ public int getMimeEntriesCount(String mimeType, boolean onlyVisible) {
+ final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType);
+ if (mimeEntries == null) return 0;
+
+ int count = 0;
+ for (ValuesDelta child : mimeEntries) {
+ // Skip deleted items when requesting only visible
+ if (onlyVisible && !child.isVisible()) continue;
+ count++;
+ }
+ return count;
+ }
+
+ public boolean hasMimeEntries(String mimeType) {
+ return mEntries.containsKey(mimeType);
+ }
+
+ public ValuesDelta addEntry(ValuesDelta entry) {
+ final String mimeType = entry.getMimetype();
+ getMimeEntries(mimeType, true).add(entry);
+ return entry;
+ }
+
+ public ArrayList<ContentValues> getContentValues() {
+ ArrayList<ContentValues> values = Lists.newArrayList();
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta entry : mimeEntries) {
+ if (!entry.isDelete()) {
+ values.add(entry.getCompleteValues());
+ }
+ }
+ }
+ return values;
+ }
+
+ /**
+ * Find entry with the given {@link BaseColumns#_ID} value.
+ */
+ public ValuesDelta getEntry(Long childId) {
+ if (childId == null) {
+ // Requesting an "insert" entry, which has no "before"
+ return null;
+ }
+
+ // Search all children for requested entry
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta entry : mimeEntries) {
+ if (childId.equals(entry.getId())) {
+ return entry;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Return the total number of {@link ValuesDelta} contained.
+ */
+ public int getEntryCount(boolean onlyVisible) {
+ int count = 0;
+ for (String mimeType : mEntries.keySet()) {
+ count += getMimeEntriesCount(mimeType, onlyVisible);
+ }
+ return count;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof RawContactDelta) {
+ final RawContactDelta other = (RawContactDelta)object;
+
+ // Equality failed if parent values different
+ if (!other.mValues.equals(mValues)) return false;
+
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ // Equality failed if any children unmatched
+ if (!other.containsEntry(child)) return false;
+ }
+ }
+
+ // Passed all tests, so equal
+ return true;
+ }
+ return false;
+ }
+
+ private boolean containsEntry(ValuesDelta entry) {
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ // Contained if we find any child that matches
+ if (child.equals(entry)) return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Mark this entire object deleted, including any {@link ValuesDelta}.
+ */
+ public void markDeleted() {
+ this.mValues.markDeleted();
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ child.markDeleted();
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("\n(");
+ builder.append("Uri=");
+ builder.append(mContactsQueryUri);
+ builder.append(", Values=");
+ builder.append(mValues != null ? mValues.toString() : "null");
+ builder.append(", Entries={");
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ builder.append("\n\t");
+ child.toString(builder);
+ }
+ }
+ builder.append("\n})\n");
+ return builder.toString();
+ }
+
+ /**
+ * Consider building the given {@link ContentProviderOperation.Builder} and
+ * appending it to the given list, which only happens if builder is valid.
+ */
+ private void possibleAdd(ArrayList<ContentProviderOperation> diff,
+ ContentProviderOperation.Builder builder) {
+ if (builder != null) {
+ diff.add(builder.build());
+ }
+ }
+
+ /**
+ * For compatibility purpose, this method is copied from {@link #possibleAdd} and takes
+ * BuilderWrapper and an ArrayList of CPOWrapper as parameters.
+ */
+ private void possibleAddWrapper(ArrayList<CPOWrapper> diff, BuilderWrapper bw) {
+ if (bw != null && bw.getBuilder() != null) {
+ diff.add(new CPOWrapper(bw.getBuilder().build(), bw.getType()));
+ }
+ }
+
+ /**
+ * Build a list of {@link ContentProviderOperation} that will assert any
+ * "before" state hasn't changed. This is maintained separately so that all
+ * asserts can take place before any updates occur.
+ */
+ public void buildAssert(ArrayList<ContentProviderOperation> buildInto) {
+ final Builder builder = buildAssertHelper();
+ if (builder != null) {
+ buildInto.add(builder.build());
+ }
+ }
+
+ /**
+ * For compatibility purpose, this method is copied from {@link #buildAssert} and takes an
+ * ArrayList of CPOWrapper as parameter.
+ */
+ public void buildAssertWrapper(ArrayList<CPOWrapper> buildInto) {
+ final Builder builder = buildAssertHelper();
+ if (builder != null) {
+ buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_ASSERT));
+ }
+ }
+
+ private Builder buildAssertHelper() {
+ final boolean isContactInsert = mValues.isInsert();
+ ContentProviderOperation.Builder builder = null;
+ if (!isContactInsert) {
+ // Assert version is consistent while persisting changes
+ final Long beforeId = mValues.getId();
+ final Long beforeVersion = mValues.getAsLong(RawContacts.VERSION);
+ if (beforeId == null || beforeVersion == null) return builder;
+ builder = ContentProviderOperation.newAssertQuery(mContactsQueryUri);
+ builder.withSelection(RawContacts._ID + "=" + beforeId, null);
+ builder.withValue(RawContacts.VERSION, beforeVersion);
+ }
+ return builder;
+ }
+
+ /**
+ * Build a list of {@link ContentProviderOperation} that will transform the
+ * current "before" {@link Entity} state into the modified state which this
+ * {@link RawContactDelta} represents.
+ */
+ public void buildDiff(ArrayList<ContentProviderOperation> buildInto) {
+ final int firstIndex = buildInto.size();
+
+ final boolean isContactInsert = mValues.isInsert();
+ final boolean isContactDelete = mValues.isDelete();
+ final boolean isContactUpdate = !isContactInsert && !isContactDelete;
+
+ final Long beforeId = mValues.getId();
+
+ Builder builder;
+
+ if (isContactInsert) {
+ // TODO: for now simply disabling aggregation when a new contact is
+ // created on the phone. In the future, will show aggregation suggestions
+ // after saving the contact.
+ mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+ }
+
+ // Build possible operation at Contact level
+ builder = mValues.buildDiff(mContactsQueryUri);
+ possibleAdd(buildInto, builder);
+
+ // Build operations for all children
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ // Ignore children if parent was deleted
+ if (isContactDelete) continue;
+
+ // Use the profile data URI if the contact is the profile.
+ if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
+ builder = child.buildDiff(Uri.withAppendedPath(Profile.CONTENT_URI,
+ RawContacts.Data.CONTENT_DIRECTORY));
+ } else {
+ builder = child.buildDiff(Data.CONTENT_URI);
+ }
+
+ if (child.isInsert()) {
+ if (isContactInsert) {
+ // Parent is brand new insert, so back-reference _id
+ builder.withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
+ } else {
+ // Inserting under existing, so fill with known _id
+ builder.withValue(Data.RAW_CONTACT_ID, beforeId);
+ }
+ } else if (isContactInsert && builder != null) {
+ // Child must be insert when Contact insert
+ throw new IllegalArgumentException("When parent insert, child must be also");
+ }
+ possibleAdd(buildInto, builder);
+ }
+ }
+
+ final boolean addedOperations = buildInto.size() > firstIndex;
+ if (addedOperations && isContactUpdate) {
+ // Suspend aggregation while persisting updates
+ builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
+ buildInto.add(firstIndex, builder.build());
+
+ // Restore aggregation mode as last operation
+ builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
+ buildInto.add(builder.build());
+ } else if (isContactInsert) {
+ // Restore aggregation mode as last operation
+ builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+ builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
+ builder.withSelection(RawContacts._ID + "=?", new String[1]);
+ builder.withSelectionBackReference(0, firstIndex);
+ buildInto.add(builder.build());
+ }
+ }
+
+ /**
+ * For compatibility purpose, this method is copied from {@link #buildDiff} and takes an
+ * ArrayList of CPOWrapper as parameter.
+ */
+ public void buildDiffWrapper(ArrayList<CPOWrapper> buildInto) {
+ final int firstIndex = buildInto.size();
+
+ final boolean isContactInsert = mValues.isInsert();
+ final boolean isContactDelete = mValues.isDelete();
+ final boolean isContactUpdate = !isContactInsert && !isContactDelete;
+
+ final Long beforeId = mValues.getId();
+
+ if (isContactInsert) {
+ // TODO: for now simply disabling aggregation when a new contact is
+ // created on the phone. In the future, will show aggregation suggestions
+ // after saving the contact.
+ mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+ }
+
+ // Build possible operation at Contact level
+ BuilderWrapper bw = mValues.buildDiffWrapper(mContactsQueryUri);
+ possibleAddWrapper(buildInto, bw);
+
+ // Build operations for all children
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ // Ignore children if parent was deleted
+ if (isContactDelete) continue;
+
+ // Use the profile data URI if the contact is the profile.
+ if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
+ bw = child.buildDiffWrapper(Uri.withAppendedPath(Profile.CONTENT_URI,
+ RawContacts.Data.CONTENT_DIRECTORY));
+ } else {
+ bw = child.buildDiffWrapper(Data.CONTENT_URI);
+ }
+
+ if (child.isInsert()) {
+ if (isContactInsert) {
+ // Parent is brand new insert, so back-reference _id
+ bw.getBuilder().withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
+ } else {
+ // Inserting under existing, so fill with known _id
+ bw.getBuilder().withValue(Data.RAW_CONTACT_ID, beforeId);
+ }
+ } else if (isContactInsert && bw != null && bw.getBuilder() != null) {
+ // Child must be insert when Contact insert
+ throw new IllegalArgumentException("When parent insert, child must be also");
+ }
+ possibleAddWrapper(buildInto, bw);
+ }
+ }
+
+ final boolean addedOperations = buildInto.size() > firstIndex;
+ if (addedOperations && isContactUpdate) {
+ // Suspend aggregation while persisting updates
+ Builder builder =
+ buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
+ buildInto.add(firstIndex, new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+
+ // Restore aggregation mode as last operation
+ builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
+ buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+ } else if (isContactInsert) {
+ // Restore aggregation mode as last operation
+ Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+ builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
+ builder.withSelection(RawContacts._ID + "=?", new String[1]);
+ builder.withSelectionBackReference(0, firstIndex);
+ buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+ }
+ }
+
+ /**
+ * Build a {@link ContentProviderOperation} that changes
+ * {@link RawContacts#AGGREGATION_MODE} to the given value.
+ */
+ protected Builder buildSetAggregationMode(Long beforeId, int mode) {
+ Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+ builder.withValue(RawContacts.AGGREGATION_MODE, mode);
+ builder.withSelection(RawContacts._ID + "=" + beforeId, null);
+ return builder;
+ }
+
+ /** {@inheritDoc} */
+ public int describeContents() {
+ // Nothing special about this parcel
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public void writeToParcel(Parcel dest, int flags) {
+ final int size = this.getEntryCount(false);
+ dest.writeInt(size);
+ dest.writeParcelable(mValues, flags);
+ dest.writeParcelable(mContactsQueryUri, flags);
+ for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+ for (ValuesDelta child : mimeEntries) {
+ dest.writeParcelable(child, flags);
+ }
+ }
+ }
+
+ public void readFromParcel(Parcel source) {
+ final ClassLoader loader = getClass().getClassLoader();
+ final int size = source.readInt();
+ mValues = source.<ValuesDelta> readParcelable(loader);
+ mContactsQueryUri = source.<Uri> readParcelable(loader);
+ for (int i = 0; i < size; i++) {
+ final ValuesDelta child = source.<ValuesDelta> readParcelable(loader);
+ this.addEntry(child);
+ }
+ }
+
+ /**
+ * Used to set the query URI to the profile URI to store profiles.
+ */
+ public void setProfileQueryUri() {
+ mContactsQueryUri = Profile.CONTENT_RAW_CONTACTS_URI;
+ }
+
+ public static final Parcelable.Creator<RawContactDelta> CREATOR =
+ new Parcelable.Creator<RawContactDelta>() {
+ public RawContactDelta createFromParcel(Parcel in) {
+ final RawContactDelta state = new RawContactDelta();
+ state.readFromParcel(in);
+ return state;
+ }
+
+ public RawContactDelta[] newArray(int size) {
+ return new RawContactDelta[size];
+ }
+ };
+
+}
diff --git a/src/com/android/contacts/model/RawContactDeltaList.java b/src/com/android/contacts/model/RawContactDeltaList.java
new file mode 100644
index 000000000..2fe475a9e
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactDeltaList.java
@@ -0,0 +1,463 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Entity;
+import android.content.EntityIterator;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+/**
+ * Container for multiple {@link RawContactDelta} objects, usually when editing
+ * together as an entire aggregate. Provides convenience methods for parceling
+ * and applying another {@link RawContactDeltaList} over it.
+ */
+public class RawContactDeltaList extends ArrayList<RawContactDelta> implements Parcelable {
+ private static final String TAG = RawContactDeltaList.class.getSimpleName();
+ private static final boolean VERBOSE_LOGGING = Log.isLoggable(TAG, Log.VERBOSE);
+
+ private boolean mSplitRawContacts;
+ private long[] mJoinWithRawContactIds;
+
+ public RawContactDeltaList() {
+ }
+
+ /**
+ * Create an {@link RawContactDeltaList} based on {@link Contacts} specified by the
+ * given query parameters. This closes the {@link EntityIterator} when
+ * finished, so it doesn't subscribe to updates.
+ */
+ public static RawContactDeltaList fromQuery(Uri entityUri, ContentResolver resolver,
+ String selection, String[] selectionArgs, String sortOrder) {
+ final EntityIterator iterator = RawContacts.newEntityIterator(
+ resolver.query(entityUri, null, selection, selectionArgs, sortOrder));
+ try {
+ return fromIterator(iterator);
+ } finally {
+ iterator.close();
+ }
+ }
+
+ /**
+ * Create an {@link RawContactDeltaList} that contains the entities of the Iterator as before
+ * values. This function can be passed an iterator of Entity objects or an iterator of
+ * RawContact objects.
+ */
+ public static RawContactDeltaList fromIterator(Iterator<?> iterator) {
+ final RawContactDeltaList state = new RawContactDeltaList();
+ state.addAll(iterator);
+ return state;
+ }
+
+ public void addAll(Iterator<?> iterator) {
+ // Perform background query to pull contact details
+ while (iterator.hasNext()) {
+ // Read all contacts into local deltas to prepare for edits
+ Object nextObject = iterator.next();
+ final RawContact before = nextObject instanceof Entity
+ ? RawContact.createFrom((Entity) nextObject)
+ : (RawContact) nextObject;
+ final RawContactDelta rawContactDelta = RawContactDelta.fromBefore(before);
+ add(rawContactDelta);
+ }
+ }
+
+ /**
+ * Merge the "after" values from the given {@link RawContactDeltaList}, discarding any
+ * previous "after" states. This is typically used when re-parenting user
+ * edits onto an updated {@link RawContactDeltaList}.
+ */
+ public static RawContactDeltaList mergeAfter(RawContactDeltaList local,
+ RawContactDeltaList remote) {
+ if (local == null) local = new RawContactDeltaList();
+
+ // For each entity in the remote set, try matching over existing
+ for (RawContactDelta remoteEntity : remote) {
+ final Long rawContactId = remoteEntity.getValues().getId();
+
+ // Find or create local match and merge
+ final RawContactDelta localEntity = local.getByRawContactId(rawContactId);
+ final RawContactDelta merged = RawContactDelta.mergeAfter(localEntity, remoteEntity);
+
+ if (localEntity == null && merged != null) {
+ // No local entry before, so insert
+ local.add(merged);
+ }
+ }
+
+ return local;
+ }
+
+ /**
+ * Build a list of {@link CPOWrapper} that will transform all
+ * the "before" {@link Entity} states into the modified state which all
+ * {@link RawContactDelta} objects represent. This method specifically creates
+ * any {@link AggregationExceptions} rules needed to groups edits together.
+ */
+ public ArrayList<CPOWrapper> buildDiffWrapper() {
+ if (VERBOSE_LOGGING) {
+ Log.v(TAG, "buildDiffWrapper: list=" + toString());
+ }
+ final ArrayList<CPOWrapper> diffWrapper = Lists.newArrayList();
+
+ final long rawContactId = this.findRawContactId();
+ int firstInsertRow = -1;
+
+ // First pass enforces versions remain consistent
+ for (RawContactDelta delta : this) {
+ delta.buildAssertWrapper(diffWrapper);
+ }
+
+ final int assertMark = diffWrapper.size();
+ int backRefs[] = new int[size()];
+
+ int rawContactIndex = 0;
+
+ // Second pass builds actual operations
+ for (RawContactDelta delta : this) {
+ final int firstBatch = diffWrapper.size();
+ final boolean isInsert = delta.isContactInsert();
+ backRefs[rawContactIndex++] = isInsert ? firstBatch : -1;
+
+ delta.buildDiffWrapper(diffWrapper);
+
+ // If the user chose to join with some other existing raw contact(s) at save time,
+ // add aggregation exceptions for all those raw contacts.
+ if (mJoinWithRawContactIds != null) {
+ for (Long joinedRawContactId : mJoinWithRawContactIds) {
+ final Builder builder = beginKeepTogether();
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, joinedRawContactId);
+ if (rawContactId != -1) {
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
+ } else {
+ builder.withValueBackReference(
+ AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+ }
+ diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+ }
+ }
+
+ // Only create rules for inserts
+ if (!isInsert) continue;
+
+ // If we are going to split all contacts, there is no point in first combining them
+ if (mSplitRawContacts) continue;
+
+ if (rawContactId != -1) {
+ // Has existing contact, so bind to it strongly
+ final Builder builder = beginKeepTogether();
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
+ builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+ diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+
+ } else if (firstInsertRow == -1) {
+ // First insert case, so record row
+ firstInsertRow = firstBatch;
+
+ } else {
+ // Additional insert case, so point at first insert
+ final Builder builder = beginKeepTogether();
+ builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1,
+ firstInsertRow);
+ builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+ diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+ }
+ }
+
+ if (mSplitRawContacts) {
+ buildSplitContactDiffWrapper(diffWrapper, backRefs);
+ }
+
+ // No real changes if only left with asserts
+ if (diffWrapper.size() == assertMark) {
+ diffWrapper.clear();
+ }
+ if (VERBOSE_LOGGING) {
+ Log.v(TAG, "buildDiff: ops=" + diffToStringWrapper(diffWrapper));
+ }
+ return diffWrapper;
+ }
+
+ private static String diffToString(ArrayList<ContentProviderOperation> ops) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("[\n");
+ for (ContentProviderOperation op : ops) {
+ sb.append(op.toString());
+ sb.append(",\n");
+ }
+ sb.append("]\n");
+ return sb.toString();
+ }
+
+ /**
+ * For compatibility purpose.
+ */
+ private static String diffToStringWrapper(ArrayList<CPOWrapper> cpoWrappers) {
+ ArrayList<ContentProviderOperation> ops = Lists.newArrayList();
+ for (CPOWrapper cpoWrapper : cpoWrappers) {
+ ops.add(cpoWrapper.getOperation());
+ }
+ return diffToString(ops);
+ }
+
+ /**
+ * Start building a {@link ContentProviderOperation} that will keep two
+ * {@link RawContacts} together.
+ */
+ protected Builder beginKeepTogether() {
+ final Builder builder = ContentProviderOperation
+ .newUpdate(AggregationExceptions.CONTENT_URI);
+ builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
+ return builder;
+ }
+
+ /**
+ * Builds {@link AggregationExceptions} to split all constituent raw contacts into
+ * separate contacts.
+ */
+ private void buildSplitContactDiffWrapper(final ArrayList<CPOWrapper> diff, int[] backRefs) {
+ final int count = size();
+ for (int i = 0; i < count; i++) {
+ for (int j = 0; j < count; j++) {
+ if (i == j) {
+ continue;
+ }
+ final Builder builder = buildSplitContactDiffHelper(i, j, backRefs);
+ if (builder != null) {
+ diff.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+ }
+ }
+ }
+ }
+
+ private Builder buildSplitContactDiffHelper(int index1, int index2, int[] backRefs) {
+ final Builder builder =
+ ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
+ builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_SEPARATE);
+
+ Long rawContactId1 = get(index1).getValues().getAsLong(RawContacts._ID);
+ int backRef1 = backRefs[index1];
+ if (rawContactId1 != null && rawContactId1 >= 0) {
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
+ } else if (backRef1 >= 0) {
+ builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, backRef1);
+ } else {
+ return null;
+ }
+
+ Long rawContactId2 = get(index2).getValues().getAsLong(RawContacts._ID);
+ int backRef2 = backRefs[index2];
+ if (rawContactId2 != null && rawContactId2 >= 0) {
+ builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
+ } else if (backRef2 >= 0) {
+ builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, backRef2);
+ } else {
+ return null;
+ }
+ return builder;
+ }
+
+ /**
+ * Search all contained {@link RawContactDelta} for the first one with an
+ * existing {@link RawContacts#_ID} value. Usually used when creating
+ * {@link AggregationExceptions} during an update.
+ */
+ public long findRawContactId() {
+ for (RawContactDelta delta : this) {
+ final Long rawContactId = delta.getValues().getAsLong(RawContacts._ID);
+ if (rawContactId != null && rawContactId >= 0) {
+ return rawContactId;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Find {@link RawContacts#_ID} of the requested {@link RawContactDelta}.
+ */
+ public Long getRawContactId(int index) {
+ if (index >= 0 && index < this.size()) {
+ final RawContactDelta delta = this.get(index);
+ final ValuesDelta values = delta.getValues();
+ if (values.isVisible()) {
+ return values.getAsLong(RawContacts._ID);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Find the raw-contact (an {@link RawContactDelta}) with the specified ID.
+ */
+ public RawContactDelta getByRawContactId(Long rawContactId) {
+ final int index = this.indexOfRawContactId(rawContactId);
+ return (index == -1) ? null : this.get(index);
+ }
+
+ /**
+ * Find index of given {@link RawContacts#_ID} when present.
+ */
+ public int indexOfRawContactId(Long rawContactId) {
+ if (rawContactId == null) return -1;
+ final int size = this.size();
+ for (int i = 0; i < size; i++) {
+ final Long currentId = getRawContactId(i);
+ if (rawContactId.equals(currentId)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Return the index of the first RawContactDelta corresponding to a writable raw-contact, or -1.
+ * */
+ public int indexOfFirstWritableRawContact(Context context) {
+ // Find the first writable entity.
+ int entityIndex = 0;
+ for (RawContactDelta delta : this) {
+ if (delta.getRawContactAccountType(context).areContactsWritable()) return entityIndex;
+ entityIndex++;
+ }
+ return -1;
+ }
+
+ /** Return the first RawContactDelta corresponding to a writable raw-contact, or null. */
+ public RawContactDelta getFirstWritableRawContact(Context context) {
+ final int index = indexOfFirstWritableRawContact(context);
+ return (index == -1) ? null : get(index);
+ }
+
+ public ValuesDelta getSuperPrimaryEntry(final String mimeType) {
+ ValuesDelta primary = null;
+ ValuesDelta randomEntry = null;
+ for (RawContactDelta delta : this) {
+ final ArrayList<ValuesDelta> mimeEntries = delta.getMimeEntries(mimeType);
+ if (mimeEntries == null) return null;
+
+ for (ValuesDelta entry : mimeEntries) {
+ if (entry.isSuperPrimary()) {
+ return entry;
+ } else if (primary == null && entry.isPrimary()) {
+ primary = entry;
+ } else if (randomEntry == null) {
+ randomEntry = entry;
+ }
+ }
+ }
+ // When no direct super primary, return something
+ if (primary != null) {
+ return primary;
+ }
+ return randomEntry;
+ }
+
+ /**
+ * Sets a flag that will split ("explode") the raw_contacts into seperate contacts
+ */
+ public void markRawContactsForSplitting() {
+ mSplitRawContacts = true;
+ }
+
+ public boolean isMarkedForSplitting() {
+ return mSplitRawContacts;
+ }
+
+ public void setJoinWithRawContacts(long[] rawContactIds) {
+ mJoinWithRawContactIds = rawContactIds;
+ }
+
+ public boolean isMarkedForJoining() {
+ return mJoinWithRawContactIds != null && mJoinWithRawContactIds.length > 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public int describeContents() {
+ // Nothing special about this parcel
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ final int size = this.size();
+ dest.writeInt(size);
+ for (RawContactDelta delta : this) {
+ dest.writeParcelable(delta, flags);
+ }
+ dest.writeLongArray(mJoinWithRawContactIds);
+ dest.writeInt(mSplitRawContacts ? 1 : 0);
+ }
+
+ @SuppressWarnings("unchecked")
+ public void readFromParcel(Parcel source) {
+ final ClassLoader loader = getClass().getClassLoader();
+ final int size = source.readInt();
+ for (int i = 0; i < size; i++) {
+ this.add(source.<RawContactDelta> readParcelable(loader));
+ }
+ mJoinWithRawContactIds = source.createLongArray();
+ mSplitRawContacts = source.readInt() != 0;
+ }
+
+ public static final Parcelable.Creator<RawContactDeltaList> CREATOR =
+ new Parcelable.Creator<RawContactDeltaList>() {
+ @Override
+ public RawContactDeltaList createFromParcel(Parcel in) {
+ final RawContactDeltaList state = new RawContactDeltaList();
+ state.readFromParcel(in);
+ return state;
+ }
+
+ @Override
+ public RawContactDeltaList[] newArray(int size) {
+ return new RawContactDeltaList[size];
+ }
+ };
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("(");
+ sb.append("Split=");
+ sb.append(mSplitRawContacts);
+ sb.append(", Join=[");
+ sb.append(Arrays.toString(mJoinWithRawContactIds));
+ sb.append("], Values=");
+ sb.append(super.toString());
+ sb.append(")");
+ return sb.toString();
+ }
+}
diff --git a/src/com/android/contacts/model/RawContactModifier.java b/src/com/android/contacts/model/RawContactModifier.java
new file mode 100644
index 000000000..789bd10f5
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactModifier.java
@@ -0,0 +1,1356 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Intents;
+import android.provider.ContactsContract.Intents.Insert;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.AccountType.EventEditType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.DateUtils;
+import com.android.contacts.util.NameConverter;
+
+import java.text.ParsePosition;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Helper methods for modifying an {@link RawContactDelta}, such as inserting
+ * new rows, or enforcing {@link AccountType}.
+ */
+public class RawContactModifier {
+ private static final String TAG = RawContactModifier.class.getSimpleName();
+
+ /** Set to true in order to view logs on entity operations */
+ private static final boolean DEBUG = false;
+
+ /**
+ * For the given {@link RawContactDelta}, determine if the given
+ * {@link DataKind} could be inserted under specific
+ * {@link AccountType}.
+ */
+ public static boolean canInsert(RawContactDelta state, DataKind kind) {
+ // Insert possible when have valid types and under overall maximum
+ final int visibleCount = state.getMimeEntriesCount(kind.mimeType, true);
+ final boolean validTypes = hasValidTypes(state, kind);
+ final boolean validOverall = (kind.typeOverallMax == -1)
+ || (visibleCount < kind.typeOverallMax);
+ return (validTypes && validOverall);
+ }
+
+ public static boolean hasValidTypes(RawContactDelta state, DataKind kind) {
+ if (RawContactModifier.hasEditTypes(kind)) {
+ return (getValidTypes(state, kind, null, true, null, true).size() > 0);
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Ensure that at least one of the given {@link DataKind} exists in the
+ * given {@link RawContactDelta} state, and try creating one if none exist.
+ * @return The child (either newly created or the first existing one), or null if the
+ * account doesn't support this {@link DataKind}.
+ */
+ public static ValuesDelta ensureKindExists(
+ RawContactDelta state, AccountType accountType, String mimeType) {
+ final DataKind kind = accountType.getKindForMimetype(mimeType);
+ final boolean hasChild = state.getMimeEntriesCount(mimeType, true) > 0;
+
+ if (kind != null) {
+ if (hasChild) {
+ // Return the first entry.
+ return state.getMimeEntries(mimeType).get(0);
+ } else {
+ // Create child when none exists and valid kind
+ final ValuesDelta child = insertChild(state, kind);
+ if (kind.mimeType.equals(Photo.CONTENT_ITEM_TYPE)) {
+ child.setFromTemplate(true);
+ }
+ return child;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * For the given {@link RawContactDelta} and {@link DataKind}, return the
+ * list possible {@link EditType} options available based on
+ * {@link AccountType}.
+ *
+ * @param forceInclude Always include this {@link EditType} in the returned
+ * list, even when an otherwise-invalid choice. This is useful
+ * when showing a dialog that includes the current type.
+ * @param includeSecondary If true, include any valid types marked as
+ * {@link EditType#secondary}.
+ * @param typeCount When provided, will be used for the frequency count of
+ * each {@link EditType}, otherwise built using
+ * {@link #getTypeFrequencies(RawContactDelta, DataKind)}.
+ * @param checkOverall If true, check if the overall number of types is under limit.
+ */
+ public static ArrayList<EditType> getValidTypes(RawContactDelta state, DataKind kind,
+ EditType forceInclude, boolean includeSecondary, SparseIntArray typeCount,
+ boolean checkOverall) {
+ final ArrayList<EditType> validTypes = new ArrayList<EditType>();
+
+ // Bail early if no types provided
+ if (!hasEditTypes(kind)) return validTypes;
+
+ if (typeCount == null) {
+ // Build frequency counts if not provided
+ typeCount = getTypeFrequencies(state, kind);
+ }
+
+ // Build list of valid types
+ boolean validOverall = true;
+ if (checkOverall) {
+ final int overallCount = typeCount.get(FREQUENCY_TOTAL);
+ validOverall = (kind.typeOverallMax == -1 ? true
+ : overallCount < kind.typeOverallMax);
+ }
+
+ for (EditType type : kind.typeList) {
+ final boolean validSpecific = (type.specificMax == -1 ? true : typeCount
+ .get(type.rawValue) < type.specificMax);
+ final boolean validSecondary = (includeSecondary ? true : !type.secondary);
+ final boolean forcedInclude = type.equals(forceInclude);
+ if (forcedInclude || (validOverall && validSpecific && validSecondary)) {
+ // Type is valid when no limit, under limit, or forced include
+ validTypes.add(type);
+ }
+ }
+
+ return validTypes;
+ }
+
+ private static final int FREQUENCY_TOTAL = Integer.MIN_VALUE;
+
+ /**
+ * Count up the frequency that each {@link EditType} appears in the given
+ * {@link RawContactDelta}. The returned {@link SparseIntArray} maps from
+ * {@link EditType#rawValue} to counts, with the total overall count stored
+ * as {@link #FREQUENCY_TOTAL}.
+ */
+ private static SparseIntArray getTypeFrequencies(RawContactDelta state, DataKind kind) {
+ final SparseIntArray typeCount = new SparseIntArray();
+
+ // Find all entries for this kind, bailing early if none found
+ final List<ValuesDelta> mimeEntries = state.getMimeEntries(kind.mimeType);
+ if (mimeEntries == null) return typeCount;
+
+ int totalCount = 0;
+ for (ValuesDelta entry : mimeEntries) {
+ // Only count visible entries
+ if (!entry.isVisible()) continue;
+ totalCount++;
+
+ final EditType type = getCurrentType(entry, kind);
+ if (type != null) {
+ final int count = typeCount.get(type.rawValue);
+ typeCount.put(type.rawValue, count + 1);
+ }
+ }
+ typeCount.put(FREQUENCY_TOTAL, totalCount);
+ return typeCount;
+ }
+
+ /**
+ * Check if the given {@link DataKind} has multiple types that should be
+ * displayed for users to pick.
+ */
+ public static boolean hasEditTypes(DataKind kind) {
+ return kind != null && kind.typeList != null && kind.typeList.size() > 0;
+ }
+
+ /**
+ * Find the {@link EditType} that describes the given
+ * {@link ValuesDelta} row, assuming the given {@link DataKind} dictates
+ * the possible types.
+ */
+ public static EditType getCurrentType(ValuesDelta entry, DataKind kind) {
+ final Long rawValue = entry.getAsLong(kind.typeColumn);
+ if (rawValue == null) return null;
+ return getType(kind, rawValue.intValue());
+ }
+
+ /**
+ * Find the {@link EditType} that describes the given {@link ContentValues} row,
+ * assuming the given {@link DataKind} dictates the possible types.
+ */
+ public static EditType getCurrentType(ContentValues entry, DataKind kind) {
+ if (kind.typeColumn == null) return null;
+ final Integer rawValue = entry.getAsInteger(kind.typeColumn);
+ if (rawValue == null) return null;
+ return getType(kind, rawValue);
+ }
+
+ /**
+ * Find the {@link EditType} that describes the given {@link Cursor} row,
+ * assuming the given {@link DataKind} dictates the possible types.
+ */
+ public static EditType getCurrentType(Cursor cursor, DataKind kind) {
+ if (kind.typeColumn == null) return null;
+ final int index = cursor.getColumnIndex(kind.typeColumn);
+ if (index == -1) return null;
+ final int rawValue = cursor.getInt(index);
+ return getType(kind, rawValue);
+ }
+
+ /**
+ * Find the {@link EditType} with the given {@link EditType#rawValue}.
+ */
+ public static EditType getType(DataKind kind, int rawValue) {
+ for (EditType type : kind.typeList) {
+ if (type.rawValue == rawValue) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Return the precedence for the the given {@link EditType#rawValue}, where
+ * lower numbers are higher precedence.
+ */
+ public static int getTypePrecedence(DataKind kind, int rawValue) {
+ for (int i = 0; i < kind.typeList.size(); i++) {
+ final EditType type = kind.typeList.get(i);
+ if (type.rawValue == rawValue) {
+ return i;
+ }
+ }
+ return Integer.MAX_VALUE;
+ }
+
+ /**
+ * Find the best {@link EditType} for a potential insert. The "best" is the
+ * first primary type that doesn't already exist. When all valid types
+ * exist, we pick the last valid option.
+ */
+ public static EditType getBestValidType(RawContactDelta state, DataKind kind,
+ boolean includeSecondary, int exactValue) {
+ // Shortcut when no types
+ if (kind == null || kind.typeColumn == null) return null;
+
+ // Find type counts and valid primary types, bail if none
+ final SparseIntArray typeCount = getTypeFrequencies(state, kind);
+ final ArrayList<EditType> validTypes = getValidTypes(state, kind, null, includeSecondary,
+ typeCount, /*checkOverall=*/ true);
+ if (validTypes.size() == 0) return null;
+
+ // Keep track of the last valid type
+ final EditType lastType = validTypes.get(validTypes.size() - 1);
+
+ // Remove any types that already exist
+ Iterator<EditType> iterator = validTypes.iterator();
+ while (iterator.hasNext()) {
+ final EditType type = iterator.next();
+ final int count = typeCount.get(type.rawValue);
+
+ if (exactValue == type.rawValue) {
+ // Found exact value match
+ return type;
+ }
+
+ if (count > 0) {
+ // Type already appears, so don't consider
+ iterator.remove();
+ }
+ }
+
+ // Use the best remaining, otherwise the last valid
+ if (validTypes.size() > 0) {
+ return validTypes.get(0);
+ } else {
+ return lastType;
+ }
+ }
+
+ /**
+ * Insert a new child of kind {@link DataKind} into the given
+ * {@link RawContactDelta}. Tries using the best {@link EditType} found using
+ * {@link #getBestValidType(RawContactDelta, DataKind, boolean, int)}.
+ */
+ public static ValuesDelta insertChild(RawContactDelta state, DataKind kind) {
+ // Bail early if invalid kind
+ if (kind == null) return null;
+ // First try finding a valid primary
+ EditType bestType = getBestValidType(state, kind, false, Integer.MIN_VALUE);
+ if (bestType == null) {
+ // No valid primary found, so expand search to secondary
+ bestType = getBestValidType(state, kind, true, Integer.MIN_VALUE);
+ }
+ return insertChild(state, kind, bestType);
+ }
+
+ /**
+ * Insert a new child of kind {@link DataKind} into the given
+ * {@link RawContactDelta}, marked with the given {@link EditType}.
+ */
+ public static ValuesDelta insertChild(RawContactDelta state, DataKind kind, EditType type) {
+ // Bail early if invalid kind
+ if (kind == null) return null;
+ final ContentValues after = new ContentValues();
+
+ // Our parent CONTACT_ID is provided later
+ after.put(Data.MIMETYPE, kind.mimeType);
+
+ // Fill-in with any requested default values
+ if (kind.defaultValues != null) {
+ after.putAll(kind.defaultValues);
+ }
+
+ if (kind.typeColumn != null && type != null) {
+ // Set type, if provided
+ after.put(kind.typeColumn, type.rawValue);
+ }
+
+ final ValuesDelta child = ValuesDelta.fromAfter(after);
+ state.addEntry(child);
+ return child;
+ }
+
+ /**
+ * Processing to trim any empty {@link ValuesDelta} and {@link RawContactDelta}
+ * from the given {@link RawContactDeltaList}, assuming the given {@link AccountTypeManager}
+ * dictates the structure for various fields. This method ignores rows not
+ * described by the {@link AccountType}.
+ */
+ public static void trimEmpty(RawContactDeltaList set, AccountTypeManager accountTypes) {
+ for (RawContactDelta state : set) {
+ ValuesDelta values = state.getValues();
+ final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
+ final String dataSet = values.getAsString(RawContacts.DATA_SET);
+ final AccountType type = accountTypes.getAccountType(accountType, dataSet);
+ trimEmpty(state, type);
+ }
+ }
+
+ public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes) {
+ return hasChanges(set, accountTypes, /* excludedMimeTypes =*/ null);
+ }
+
+ public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes,
+ Set<String> excludedMimeTypes) {
+ if (set.isMarkedForSplitting() || set.isMarkedForJoining()) {
+ return true;
+ }
+
+ for (RawContactDelta state : set) {
+ ValuesDelta values = state.getValues();
+ final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
+ final String dataSet = values.getAsString(RawContacts.DATA_SET);
+ final AccountType type = accountTypes.getAccountType(accountType, dataSet);
+ if (hasChanges(state, type, excludedMimeTypes)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Processing to trim any empty {@link ValuesDelta} rows from the given
+ * {@link RawContactDelta}, assuming the given {@link AccountType} dictates
+ * the structure for various fields. This method ignores rows not described
+ * by the {@link AccountType}.
+ */
+ public static void trimEmpty(RawContactDelta state, AccountType accountType) {
+ boolean hasValues = false;
+
+ // Walk through entries for each well-known kind
+ for (DataKind kind : accountType.getSortedDataKinds()) {
+ final String mimeType = kind.mimeType;
+ final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+ if (entries == null) continue;
+
+ for (ValuesDelta entry : entries) {
+ // Skip any values that haven't been touched
+ final boolean touched = entry.isInsert() || entry.isUpdate();
+ if (!touched) {
+ hasValues = true;
+ continue;
+ }
+
+ // Test and remove this row if empty and it isn't a photo from google
+ final boolean isGoogleAccount = TextUtils.equals(GoogleAccountType.ACCOUNT_TYPE,
+ state.getValues().getAsString(RawContacts.ACCOUNT_TYPE));
+ final boolean isPhoto = TextUtils.equals(Photo.CONTENT_ITEM_TYPE, kind.mimeType);
+ final boolean isGooglePhoto = isPhoto && isGoogleAccount;
+
+ if (RawContactModifier.isEmpty(entry, kind) && !isGooglePhoto) {
+ if (DEBUG) {
+ Log.v(TAG, "Trimming: " + entry.toString());
+ }
+ entry.markDeleted();
+ } else if (!entry.isFromTemplate()) {
+ hasValues = true;
+ }
+ }
+ }
+ if (!hasValues) {
+ // Trim overall entity if no children exist
+ state.markDeleted();
+ }
+ }
+
+ private static boolean hasChanges(RawContactDelta state, AccountType accountType,
+ Set<String> excludedMimeTypes) {
+ for (DataKind kind : accountType.getSortedDataKinds()) {
+ final String mimeType = kind.mimeType;
+ if (excludedMimeTypes != null && excludedMimeTypes.contains(mimeType)) continue;
+ final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+ if (entries == null) continue;
+
+ for (ValuesDelta entry : entries) {
+ // An empty Insert must be ignored, because it won't save anything (an example
+ // is an empty name that stays empty)
+ final boolean isRealInsert = entry.isInsert() && !isEmpty(entry, kind);
+ if (isRealInsert || entry.isUpdate() || entry.isDelete()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Test if the given {@link ValuesDelta} would be considered "empty" in
+ * terms of {@link DataKind#fieldList}.
+ */
+ public static boolean isEmpty(ValuesDelta values, DataKind kind) {
+ if (Photo.CONTENT_ITEM_TYPE.equals(kind.mimeType)) {
+ return values.isInsert() && values.getAsByteArray(Photo.PHOTO) == null;
+ }
+
+ // No defined fields mean this row is always empty
+ if (kind.fieldList == null) return true;
+
+ for (EditField field : kind.fieldList) {
+ // If any field has values, we're not empty
+ final String value = values.getAsString(field.column);
+ if (ContactsUtils.isGraphic(value)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Compares corresponding fields in values1 and values2. Only the fields
+ * declared by the DataKind are taken into consideration.
+ */
+ protected static boolean areEqual(ValuesDelta values1, ContentValues values2, DataKind kind) {
+ if (kind.fieldList == null) return false;
+
+ for (EditField field : kind.fieldList) {
+ final String value1 = values1.getAsString(field.column);
+ final String value2 = values2.getAsString(field.column);
+ if (!TextUtils.equals(value1, value2)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Parse the given {@link Bundle} into the given {@link RawContactDelta} state,
+ * assuming the extras defined through {@link Intents}.
+ */
+ public static void parseExtras(Context context, AccountType accountType, RawContactDelta state,
+ Bundle extras) {
+ if (extras == null || extras.size() == 0) {
+ // Bail early if no useful data
+ return;
+ }
+
+ parseStructuredNameExtra(context, accountType, state, extras);
+ parseStructuredPostalExtra(accountType, state, extras);
+
+ {
+ // Phone
+ final DataKind kind = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ parseExtras(state, kind, extras, Insert.PHONE_TYPE, Insert.PHONE, Phone.NUMBER);
+ parseExtras(state, kind, extras, Insert.SECONDARY_PHONE_TYPE, Insert.SECONDARY_PHONE,
+ Phone.NUMBER);
+ parseExtras(state, kind, extras, Insert.TERTIARY_PHONE_TYPE, Insert.TERTIARY_PHONE,
+ Phone.NUMBER);
+ }
+
+ {
+ // Email
+ final DataKind kind = accountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+ parseExtras(state, kind, extras, Insert.EMAIL_TYPE, Insert.EMAIL, Email.DATA);
+ parseExtras(state, kind, extras, Insert.SECONDARY_EMAIL_TYPE, Insert.SECONDARY_EMAIL,
+ Email.DATA);
+ parseExtras(state, kind, extras, Insert.TERTIARY_EMAIL_TYPE, Insert.TERTIARY_EMAIL,
+ Email.DATA);
+ }
+
+ {
+ // Im
+ final DataKind kind = accountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+ fixupLegacyImType(extras);
+ parseExtras(state, kind, extras, Insert.IM_PROTOCOL, Insert.IM_HANDLE, Im.DATA);
+ }
+
+ // Organization
+ final boolean hasOrg = extras.containsKey(Insert.COMPANY)
+ || extras.containsKey(Insert.JOB_TITLE);
+ final DataKind kindOrg = accountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+ if (hasOrg && RawContactModifier.canInsert(state, kindOrg)) {
+ final ValuesDelta child = RawContactModifier.insertChild(state, kindOrg);
+
+ final String company = extras.getString(Insert.COMPANY);
+ if (ContactsUtils.isGraphic(company)) {
+ child.put(Organization.COMPANY, company);
+ }
+
+ final String title = extras.getString(Insert.JOB_TITLE);
+ if (ContactsUtils.isGraphic(title)) {
+ child.put(Organization.TITLE, title);
+ }
+ }
+
+ // Notes
+ final boolean hasNotes = extras.containsKey(Insert.NOTES);
+ final DataKind kindNotes = accountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
+ if (hasNotes && RawContactModifier.canInsert(state, kindNotes)) {
+ final ValuesDelta child = RawContactModifier.insertChild(state, kindNotes);
+
+ final String notes = extras.getString(Insert.NOTES);
+ if (ContactsUtils.isGraphic(notes)) {
+ child.put(Note.NOTE, notes);
+ }
+ }
+
+ // Arbitrary additional data
+ ArrayList<ContentValues> values = extras.getParcelableArrayList(Insert.DATA);
+ if (values != null) {
+ parseValues(state, accountType, values);
+ }
+ }
+
+ private static void parseStructuredNameExtra(
+ Context context, AccountType accountType, RawContactDelta state, Bundle extras) {
+ // StructuredName
+ RawContactModifier.ensureKindExists(state, accountType, StructuredName.CONTENT_ITEM_TYPE);
+ final ValuesDelta child = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+
+ final String name = extras.getString(Insert.NAME);
+ if (ContactsUtils.isGraphic(name)) {
+ final DataKind kind = accountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+ boolean supportsDisplayName = false;
+ if (kind.fieldList != null) {
+ for (EditField field : kind.fieldList) {
+ if (StructuredName.DISPLAY_NAME.equals(field.column)) {
+ supportsDisplayName = true;
+ break;
+ }
+ }
+ }
+
+ if (supportsDisplayName) {
+ child.put(StructuredName.DISPLAY_NAME, name);
+ } else {
+ Uri uri = ContactsContract.AUTHORITY_URI.buildUpon()
+ .appendPath("complete_name")
+ .appendQueryParameter(StructuredName.DISPLAY_NAME, name)
+ .build();
+ Cursor cursor = context.getContentResolver().query(uri,
+ new String[]{
+ StructuredName.PREFIX,
+ StructuredName.GIVEN_NAME,
+ StructuredName.MIDDLE_NAME,
+ StructuredName.FAMILY_NAME,
+ StructuredName.SUFFIX,
+ }, null, null, null);
+
+ if (cursor != null) {
+ try {
+ if (cursor.moveToFirst()) {
+ child.put(StructuredName.PREFIX, cursor.getString(0));
+ child.put(StructuredName.GIVEN_NAME, cursor.getString(1));
+ child.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
+ child.put(StructuredName.FAMILY_NAME, cursor.getString(3));
+ child.put(StructuredName.SUFFIX, cursor.getString(4));
+ }
+ } finally {
+ cursor.close();
+ }
+ }
+ }
+ }
+
+ final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
+ if (ContactsUtils.isGraphic(phoneticName)) {
+ StructuredNameDataItem dataItem = NameConverter.parsePhoneticName(phoneticName, null);
+ child.put(StructuredName.PHONETIC_FAMILY_NAME, dataItem.getPhoneticFamilyName());
+ child.put(StructuredName.PHONETIC_MIDDLE_NAME, dataItem.getPhoneticMiddleName());
+ child.put(StructuredName.PHONETIC_GIVEN_NAME, dataItem.getPhoneticGivenName());
+ }
+ }
+
+ private static void parseStructuredPostalExtra(
+ AccountType accountType, RawContactDelta state, Bundle extras) {
+ // StructuredPostal
+ final DataKind kind = accountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+ final ValuesDelta child = parseExtras(state, kind, extras, Insert.POSTAL_TYPE,
+ Insert.POSTAL, StructuredPostal.FORMATTED_ADDRESS);
+ String address = child == null ? null
+ : child.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+ if (!TextUtils.isEmpty(address)) {
+ boolean supportsFormatted = false;
+ if (kind.fieldList != null) {
+ for (EditField field : kind.fieldList) {
+ if (StructuredPostal.FORMATTED_ADDRESS.equals(field.column)) {
+ supportsFormatted = true;
+ break;
+ }
+ }
+ }
+
+ if (!supportsFormatted) {
+ child.put(StructuredPostal.STREET, address);
+ child.putNull(StructuredPostal.FORMATTED_ADDRESS);
+ }
+ }
+ }
+
+ private static void parseValues(
+ RawContactDelta state, AccountType accountType,
+ ArrayList<ContentValues> dataValueList) {
+ for (ContentValues values : dataValueList) {
+ String mimeType = values.getAsString(Data.MIMETYPE);
+ if (TextUtils.isEmpty(mimeType)) {
+ Log.e(TAG, "Mimetype is required. Ignoring: " + values);
+ continue;
+ }
+
+ // Won't override the contact name
+ if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ continue;
+ } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ values.remove(PhoneDataItem.KEY_FORMATTED_PHONE_NUMBER);
+ final Integer type = values.getAsInteger(Phone.TYPE);
+ // If the provided phone number provides a custom phone type but not a label,
+ // replace it with mobile (by default) to avoid the "Enter custom label" from
+ // popping up immediately upon entering the ContactEditorFragment
+ if (type != null && type == Phone.TYPE_CUSTOM &&
+ TextUtils.isEmpty(values.getAsString(Phone.LABEL))) {
+ values.put(Phone.TYPE, Phone.TYPE_MOBILE);
+ }
+ }
+
+ DataKind kind = accountType.getKindForMimetype(mimeType);
+ if (kind == null) {
+ Log.e(TAG, "Mimetype not supported for account type "
+ + accountType.getAccountTypeAndDataSet() + ". Ignoring: " + values);
+ continue;
+ }
+
+ ValuesDelta entry = ValuesDelta.fromAfter(values);
+ if (isEmpty(entry, kind)) {
+ continue;
+ }
+
+ ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+
+ if ((kind.typeOverallMax != 1) || GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ // Check for duplicates
+ boolean addEntry = true;
+ int count = 0;
+ if (entries != null && entries.size() > 0) {
+ for (ValuesDelta delta : entries) {
+ if (!delta.isDelete()) {
+ if (areEqual(delta, values, kind)) {
+ addEntry = false;
+ break;
+ }
+ count++;
+ }
+ }
+ }
+
+ if (kind.typeOverallMax != -1 && count >= kind.typeOverallMax) {
+ Log.e(TAG, "Mimetype allows at most " + kind.typeOverallMax
+ + " entries. Ignoring: " + values);
+ addEntry = false;
+ }
+
+ if (addEntry) {
+ addEntry = adjustType(entry, entries, kind);
+ }
+
+ if (addEntry) {
+ state.addEntry(entry);
+ }
+ } else {
+ // Non-list entries should not be overridden
+ boolean addEntry = true;
+ if (entries != null && entries.size() > 0) {
+ for (ValuesDelta delta : entries) {
+ if (!delta.isDelete() && !isEmpty(delta, kind)) {
+ addEntry = false;
+ break;
+ }
+ }
+ if (addEntry) {
+ for (ValuesDelta delta : entries) {
+ delta.markDeleted();
+ }
+ }
+ }
+
+ if (addEntry) {
+ addEntry = adjustType(entry, entries, kind);
+ }
+
+ if (addEntry) {
+ state.addEntry(entry);
+ } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)){
+ // Note is most likely to contain large amounts of text
+ // that we don't want to drop on the ground.
+ for (ValuesDelta delta : entries) {
+ if (!isEmpty(delta, kind)) {
+ delta.put(Note.NOTE, delta.getAsString(Note.NOTE) + "\n"
+ + values.getAsString(Note.NOTE));
+ break;
+ }
+ }
+ } else {
+ Log.e(TAG, "Will not override mimetype " + mimeType + ". Ignoring: "
+ + values);
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks if the data kind allows addition of another entry (e.g. Exchange only
+ * supports two "work" phone numbers). If not, tries to switch to one of the
+ * unused types. If successful, returns true.
+ */
+ private static boolean adjustType(
+ ValuesDelta entry, ArrayList<ValuesDelta> entries, DataKind kind) {
+ if (kind.typeColumn == null || kind.typeList == null || kind.typeList.size() == 0) {
+ return true;
+ }
+
+ Integer typeInteger = entry.getAsInteger(kind.typeColumn);
+ int type = typeInteger != null ? typeInteger : kind.typeList.get(0).rawValue;
+
+ if (isTypeAllowed(type, entries, kind)) {
+ entry.put(kind.typeColumn, type);
+ return true;
+ }
+
+ // Specified type is not allowed - choose the first available type that is allowed
+ int size = kind.typeList.size();
+ for (int i = 0; i < size; i++) {
+ EditType editType = kind.typeList.get(i);
+ if (isTypeAllowed(editType.rawValue, entries, kind)) {
+ entry.put(kind.typeColumn, editType.rawValue);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks if a new entry of the specified type can be added to the raw
+ * contact. For example, Exchange only supports two "work" phone numbers, so
+ * addition of a third would not be allowed.
+ */
+ private static boolean isTypeAllowed(int type, ArrayList<ValuesDelta> entries, DataKind kind) {
+ int max = 0;
+ int size = kind.typeList.size();
+ for (int i = 0; i < size; i++) {
+ EditType editType = kind.typeList.get(i);
+ if (editType.rawValue == type) {
+ max = editType.specificMax;
+ break;
+ }
+ }
+
+ if (max == 0) {
+ // This type is not allowed at all
+ return false;
+ }
+
+ if (max == -1) {
+ // Unlimited instances of this type are allowed
+ return true;
+ }
+
+ return getEntryCountByType(entries, kind.typeColumn, type) < max;
+ }
+
+ /**
+ * Counts occurrences of the specified type in the supplied entry list.
+ *
+ * @return The count of occurrences of the type in the entry list. 0 if entries is
+ * {@literal null}
+ */
+ private static int getEntryCountByType(ArrayList<ValuesDelta> entries, String typeColumn,
+ int type) {
+ int count = 0;
+ if (entries != null) {
+ for (ValuesDelta entry : entries) {
+ Integer typeInteger = entry.getAsInteger(typeColumn);
+ if (typeInteger != null && typeInteger == type) {
+ count++;
+ }
+ }
+ }
+ return count;
+ }
+
+ /**
+ * Attempt to parse legacy {@link Insert#IM_PROTOCOL} values, replacing them
+ * with updated values.
+ */
+ @SuppressWarnings("deprecation")
+ private static void fixupLegacyImType(Bundle bundle) {
+ final String encodedString = bundle.getString(Insert.IM_PROTOCOL);
+ if (encodedString == null) return;
+
+ try {
+ final Object protocol = android.provider.Contacts.ContactMethods
+ .decodeImProtocol(encodedString);
+ if (protocol instanceof Integer) {
+ bundle.putInt(Insert.IM_PROTOCOL, (Integer)protocol);
+ } else {
+ bundle.putString(Insert.IM_PROTOCOL, (String)protocol);
+ }
+ } catch (IllegalArgumentException e) {
+ // Ignore exception when legacy parser fails
+ }
+ }
+
+ /**
+ * Parse a specific entry from the given {@link Bundle} and insert into the
+ * given {@link RawContactDelta}. Silently skips the insert when missing value
+ * or no valid {@link EditType} found.
+ *
+ * @param typeExtra {@link Bundle} key that holds the incoming
+ * {@link EditType#rawValue} value.
+ * @param valueExtra {@link Bundle} key that holds the incoming value.
+ * @param valueColumn Column to write value into {@link ValuesDelta}.
+ */
+ public static ValuesDelta parseExtras(RawContactDelta state, DataKind kind, Bundle extras,
+ String typeExtra, String valueExtra, String valueColumn) {
+ final CharSequence value = extras.getCharSequence(valueExtra);
+
+ // Bail early if account type doesn't handle this MIME type
+ if (kind == null) return null;
+
+ // Bail when can't insert type, or value missing
+ final boolean canInsert = RawContactModifier.canInsert(state, kind);
+ final boolean validValue = (value != null && TextUtils.isGraphic(value));
+ if (!validValue || !canInsert) return null;
+
+ // Find exact type when requested, otherwise best available type
+ final boolean hasType = extras.containsKey(typeExtra);
+ final int typeValue = extras.getInt(typeExtra, hasType ? BaseTypes.TYPE_CUSTOM
+ : Integer.MIN_VALUE);
+ final EditType editType = RawContactModifier.getBestValidType(state, kind, true, typeValue);
+
+ // Create data row and fill with value
+ final ValuesDelta child = RawContactModifier.insertChild(state, kind, editType);
+ child.put(valueColumn, value.toString());
+
+ if (editType != null && editType.customColumn != null) {
+ // Write down label when custom type picked
+ final String customType = extras.getString(typeExtra);
+ child.put(editType.customColumn, customType);
+ }
+
+ return child;
+ }
+
+ /**
+ * Generic mime types with type support (e.g. TYPE_HOME).
+ * Here, "type support" means if the data kind has CommonColumns#TYPE or not. Data kinds which
+ * have their own migrate methods aren't listed here.
+ */
+ private static final Set<String> sGenericMimeTypesWithTypeSupport = new HashSet<String>(
+ Arrays.asList(Phone.CONTENT_ITEM_TYPE,
+ Email.CONTENT_ITEM_TYPE,
+ Im.CONTENT_ITEM_TYPE,
+ Nickname.CONTENT_ITEM_TYPE,
+ Website.CONTENT_ITEM_TYPE,
+ Relation.CONTENT_ITEM_TYPE,
+ SipAddress.CONTENT_ITEM_TYPE));
+ private static final Set<String> sGenericMimeTypesWithoutTypeSupport = new HashSet<String>(
+ Arrays.asList(Organization.CONTENT_ITEM_TYPE,
+ Note.CONTENT_ITEM_TYPE,
+ Photo.CONTENT_ITEM_TYPE,
+ GroupMembership.CONTENT_ITEM_TYPE));
+ // CommonColumns.TYPE cannot be accessed as it is protected interface, so use
+ // Phone.TYPE instead.
+ private static final String COLUMN_FOR_TYPE = Phone.TYPE;
+ private static final String COLUMN_FOR_LABEL = Phone.LABEL;
+ private static final int TYPE_CUSTOM = Phone.TYPE_CUSTOM;
+
+ /**
+ * Migrates old RawContactDelta to newly created one with a new restriction supplied from
+ * newAccountType.
+ *
+ * This is only for account switch during account creation (which must be insert operation).
+ */
+ public static void migrateStateForNewContact(Context context,
+ RawContactDelta oldState, RawContactDelta newState,
+ AccountType oldAccountType, AccountType newAccountType) {
+ if (newAccountType == oldAccountType) {
+ // Just copying all data in oldState isn't enough, but we can still rely on a lot of
+ // shortcuts.
+ for (DataKind kind : newAccountType.getSortedDataKinds()) {
+ final String mimeType = kind.mimeType;
+ // The fields with short/long form capability must be treated properly.
+ if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ migrateStructuredName(context, oldState, newState, kind);
+ } else {
+ List<ValuesDelta> entryList = oldState.getMimeEntries(mimeType);
+ if (entryList != null && !entryList.isEmpty()) {
+ for (ValuesDelta entry : entryList) {
+ ContentValues values = entry.getAfter();
+ if (values != null) {
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ }
+ }
+ }
+ }
+ }
+ } else {
+ // Migrate data supported by the new account type.
+ // All the other data inside oldState are silently dropped.
+ for (DataKind kind : newAccountType.getSortedDataKinds()) {
+ if (!kind.editable) continue;
+ final String mimeType = kind.mimeType;
+ if (DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType) ||
+ DataKind.PSEUDO_MIME_TYPE_NAME.equals(mimeType)) {
+ // Ignore pseudo data.
+ continue;
+ } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ migrateStructuredName(context, oldState, newState, kind);
+ } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ migratePostal(oldState, newState, kind);
+ } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ migrateEvent(oldState, newState, kind, null /* default Year */);
+ } else if (sGenericMimeTypesWithoutTypeSupport.contains(mimeType)) {
+ migrateGenericWithoutTypeColumn(oldState, newState, kind);
+ } else if (sGenericMimeTypesWithTypeSupport.contains(mimeType)) {
+ migrateGenericWithTypeColumn(oldState, newState, kind);
+ } else {
+ throw new IllegalStateException("Unexpected editable mime-type: " + mimeType);
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks {@link DataKind#isList} and {@link DataKind#typeOverallMax}, and restricts
+ * the number of entries (ValuesDelta) inside newState.
+ */
+ private static ArrayList<ValuesDelta> ensureEntryMaxSize(RawContactDelta newState,
+ DataKind kind, ArrayList<ValuesDelta> mimeEntries) {
+ if (mimeEntries == null) {
+ return null;
+ }
+
+ final int typeOverallMax = kind.typeOverallMax;
+ if (typeOverallMax >= 0 && (mimeEntries.size() > typeOverallMax)) {
+ ArrayList<ValuesDelta> newMimeEntries = new ArrayList<ValuesDelta>(typeOverallMax);
+ for (int i = 0; i < typeOverallMax; i++) {
+ newMimeEntries.add(mimeEntries.get(i));
+ }
+ mimeEntries = newMimeEntries;
+ }
+ return mimeEntries;
+ }
+
+ /** @hide Public only for testing. */
+ public static void migrateStructuredName(
+ Context context, RawContactDelta oldState, RawContactDelta newState,
+ DataKind newDataKind) {
+ final ContentValues values =
+ oldState.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE).getAfter();
+ if (values == null) {
+ return;
+ }
+
+ boolean supportPhoneticFamilyName = false;
+ boolean supportPhoneticMiddleName = false;
+ boolean supportPhoneticGivenName = false;
+ for (EditField editField : newDataKind.fieldList) {
+ if (StructuredName.PHONETIC_FAMILY_NAME.equals(editField.column)) {
+ supportPhoneticFamilyName = true;
+ }
+ if (StructuredName.PHONETIC_MIDDLE_NAME.equals(editField.column)) {
+ supportPhoneticMiddleName = true;
+ }
+ if (StructuredName.PHONETIC_GIVEN_NAME.equals(editField.column)) {
+ supportPhoneticGivenName = true;
+ }
+ }
+
+ if (!supportPhoneticFamilyName) {
+ values.remove(StructuredName.PHONETIC_FAMILY_NAME);
+ }
+ if (!supportPhoneticMiddleName) {
+ values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
+ }
+ if (!supportPhoneticGivenName) {
+ values.remove(StructuredName.PHONETIC_GIVEN_NAME);
+ }
+
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ }
+
+ /** @hide Public only for testing. */
+ public static void migratePostal(RawContactDelta oldState, RawContactDelta newState,
+ DataKind newDataKind) {
+ final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+ oldState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
+ if (mimeEntries == null || mimeEntries.isEmpty()) {
+ return;
+ }
+
+ boolean supportFormattedAddress = false;
+ boolean supportStreet = false;
+ final String firstColumn = newDataKind.fieldList.get(0).column;
+ for (EditField editField : newDataKind.fieldList) {
+ if (StructuredPostal.FORMATTED_ADDRESS.equals(editField.column)) {
+ supportFormattedAddress = true;
+ }
+ if (StructuredPostal.STREET.equals(editField.column)) {
+ supportStreet = true;
+ }
+ }
+
+ final Set<Integer> supportedTypes = new HashSet<Integer>();
+ if (newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
+ for (EditType editType : newDataKind.typeList) {
+ supportedTypes.add(editType.rawValue);
+ }
+ }
+
+ for (ValuesDelta entry : mimeEntries) {
+ final ContentValues values = entry.getAfter();
+ if (values == null) {
+ continue;
+ }
+ final Integer oldType = values.getAsInteger(StructuredPostal.TYPE);
+ if (!supportedTypes.contains(oldType)) {
+ int defaultType;
+ if (newDataKind.defaultValues != null) {
+ defaultType = newDataKind.defaultValues.getAsInteger(StructuredPostal.TYPE);
+ } else {
+ defaultType = newDataKind.typeList.get(0).rawValue;
+ }
+ values.put(StructuredPostal.TYPE, defaultType);
+ if (oldType != null && oldType == StructuredPostal.TYPE_CUSTOM) {
+ values.remove(StructuredPostal.LABEL);
+ }
+ }
+
+ final String formattedAddress = values.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+ if (!TextUtils.isEmpty(formattedAddress)) {
+ if (!supportFormattedAddress) {
+ // Old data has a formatted address, while the new account doesn't allow it.
+ values.remove(StructuredPostal.FORMATTED_ADDRESS);
+
+ // Unlike StructuredName we don't have logic to split it, so first
+ // try to use street field and. If the new account doesn't have one,
+ // then select first one anyway.
+ if (supportStreet) {
+ values.put(StructuredPostal.STREET, formattedAddress);
+ } else {
+ values.put(firstColumn, formattedAddress);
+ }
+ }
+ } else {
+ if (supportFormattedAddress) {
+ // Old data does not have formatted address, while the new account requires it.
+ // Unlike StructuredName we don't have logic to join multiple address values.
+ // Use poor join heuristics for now.
+ String[] structuredData;
+ final boolean useJapaneseOrder =
+ Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+ if (useJapaneseOrder) {
+ structuredData = new String[] {
+ values.getAsString(StructuredPostal.COUNTRY),
+ values.getAsString(StructuredPostal.POSTCODE),
+ values.getAsString(StructuredPostal.REGION),
+ values.getAsString(StructuredPostal.CITY),
+ values.getAsString(StructuredPostal.NEIGHBORHOOD),
+ values.getAsString(StructuredPostal.STREET),
+ values.getAsString(StructuredPostal.POBOX) };
+ } else {
+ structuredData = new String[] {
+ values.getAsString(StructuredPostal.POBOX),
+ values.getAsString(StructuredPostal.STREET),
+ values.getAsString(StructuredPostal.NEIGHBORHOOD),
+ values.getAsString(StructuredPostal.CITY),
+ values.getAsString(StructuredPostal.REGION),
+ values.getAsString(StructuredPostal.POSTCODE),
+ values.getAsString(StructuredPostal.COUNTRY) };
+ }
+ final StringBuilder builder = new StringBuilder();
+ for (String elem : structuredData) {
+ if (!TextUtils.isEmpty(elem)) {
+ builder.append(elem + "\n");
+ }
+ }
+ values.put(StructuredPostal.FORMATTED_ADDRESS, builder.toString());
+
+ values.remove(StructuredPostal.POBOX);
+ values.remove(StructuredPostal.STREET);
+ values.remove(StructuredPostal.NEIGHBORHOOD);
+ values.remove(StructuredPostal.CITY);
+ values.remove(StructuredPostal.REGION);
+ values.remove(StructuredPostal.POSTCODE);
+ values.remove(StructuredPostal.COUNTRY);
+ }
+ }
+
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ }
+ }
+
+ /** @hide Public only for testing. */
+ public static void migrateEvent(RawContactDelta oldState, RawContactDelta newState,
+ DataKind newDataKind, Integer defaultYear) {
+ final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+ oldState.getMimeEntries(Event.CONTENT_ITEM_TYPE));
+ if (mimeEntries == null || mimeEntries.isEmpty()) {
+ return;
+ }
+
+ final SparseArray<EventEditType> allowedTypes = new SparseArray<EventEditType>();
+ for (EditType editType : newDataKind.typeList) {
+ allowedTypes.put(editType.rawValue, (EventEditType) editType);
+ }
+ for (ValuesDelta entry : mimeEntries) {
+ final ContentValues values = entry.getAfter();
+ if (values == null) {
+ continue;
+ }
+ final String dateString = values.getAsString(Event.START_DATE);
+ final Integer type = values.getAsInteger(Event.TYPE);
+ if (type != null && (allowedTypes.indexOfKey(type) >= 0)
+ && !TextUtils.isEmpty(dateString)) {
+ EventEditType suitableType = allowedTypes.get(type);
+
+ final ParsePosition position = new ParsePosition(0);
+ boolean yearOptional = false;
+ Date date = CommonDateUtils.DATE_AND_TIME_FORMAT.parse(dateString, position);
+ if (date == null) {
+ yearOptional = true;
+ date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(dateString, position);
+ }
+ if (date != null) {
+ if (yearOptional && !suitableType.isYearOptional()) {
+ // The new EditType doesn't allow optional year. Supply default.
+ final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE,
+ Locale.US);
+ if (defaultYear == null) {
+ defaultYear = calendar.get(Calendar.YEAR);
+ }
+ calendar.setTime(date);
+ final int month = calendar.get(Calendar.MONTH);
+ final int day = calendar.get(Calendar.DAY_OF_MONTH);
+ // Exchange requires 8:00 for birthdays
+ calendar.set(defaultYear, month, day,
+ CommonDateUtils.DEFAULT_HOUR, 0, 0);
+ values.put(Event.START_DATE,
+ CommonDateUtils.FULL_DATE_FORMAT.format(calendar.getTime()));
+ }
+ }
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ } else {
+ // Just drop it.
+ }
+ }
+ }
+
+ /** @hide Public only for testing. */
+ public static void migrateGenericWithoutTypeColumn(
+ RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
+ final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+ oldState.getMimeEntries(newDataKind.mimeType));
+ if (mimeEntries == null || mimeEntries.isEmpty()) {
+ return;
+ }
+
+ for (ValuesDelta entry : mimeEntries) {
+ ContentValues values = entry.getAfter();
+ if (values != null) {
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ }
+ }
+ }
+
+ /** @hide Public only for testing. */
+ public static void migrateGenericWithTypeColumn(
+ RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
+ final ArrayList<ValuesDelta> mimeEntries = oldState.getMimeEntries(newDataKind.mimeType);
+ if (mimeEntries == null || mimeEntries.isEmpty()) {
+ return;
+ }
+
+ // Note that type specified with the old account may be invalid with the new account, while
+ // we want to preserve its data as much as possible. e.g. if a user typed a phone number
+ // with a type which is valid with an old account but not with a new account, the user
+ // probably wants to have the number with default type, rather than seeing complete data
+ // loss.
+ //
+ // Specifically, this method works as follows:
+ // 1. detect defaultType
+ // 2. prepare constants & variables for iteration
+ // 3. iterate over mimeEntries:
+ // 3.1 stop iteration if total number of mimeEntries reached typeOverallMax specified in
+ // DataKind
+ // 3.2 replace unallowed types with defaultType
+ // 3.3 check if the number of entries is below specificMax specified in AccountType
+
+ // Here, defaultType can be supplied in two ways
+ // - via kind.defaultValues
+ // - via kind.typeList.get(0).rawValue
+ Integer defaultType = null;
+ if (newDataKind.defaultValues != null) {
+ defaultType = newDataKind.defaultValues.getAsInteger(COLUMN_FOR_TYPE);
+ }
+ final Set<Integer> allowedTypes = new HashSet<Integer>();
+ // key: type, value: the number of entries allowed for the type (specificMax)
+ final SparseIntArray typeSpecificMaxMap = new SparseIntArray();
+ if (defaultType != null) {
+ allowedTypes.add(defaultType);
+ typeSpecificMaxMap.put(defaultType, -1);
+ }
+ // Note: typeList may be used in different purposes when defaultValues are specified.
+ // Especially in IM, typeList contains available protocols (e.g. PROTOCOL_GOOGLE_TALK)
+ // instead of "types" which we want to treate here (e.g. TYPE_HOME). So we don't add
+ // anything other than defaultType into allowedTypes and typeSpecificMapMax.
+ if (!Im.CONTENT_ITEM_TYPE.equals(newDataKind.mimeType) &&
+ newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
+ for (EditType editType : newDataKind.typeList) {
+ allowedTypes.add(editType.rawValue);
+ typeSpecificMaxMap.put(editType.rawValue, editType.specificMax);
+ }
+ if (defaultType == null) {
+ defaultType = newDataKind.typeList.get(0).rawValue;
+ }
+ }
+
+ if (defaultType == null) {
+ Log.w(TAG, "Default type isn't available for mimetype " + newDataKind.mimeType);
+ }
+
+ final int typeOverallMax = newDataKind.typeOverallMax;
+
+ // key: type, value: the number of current entries.
+ final SparseIntArray currentEntryCount = new SparseIntArray();
+ int totalCount = 0;
+
+ for (ValuesDelta entry : mimeEntries) {
+ if (typeOverallMax != -1 && totalCount >= typeOverallMax) {
+ break;
+ }
+
+ final ContentValues values = entry.getAfter();
+ if (values == null) {
+ continue;
+ }
+
+ final Integer oldType = entry.getAsInteger(COLUMN_FOR_TYPE);
+ final Integer typeForNewAccount;
+ if (!allowedTypes.contains(oldType)) {
+ // The new account doesn't support the type.
+ if (defaultType != null) {
+ typeForNewAccount = defaultType.intValue();
+ values.put(COLUMN_FOR_TYPE, defaultType.intValue());
+ if (oldType != null && oldType == TYPE_CUSTOM) {
+ values.remove(COLUMN_FOR_LABEL);
+ }
+ } else {
+ typeForNewAccount = null;
+ values.remove(COLUMN_FOR_TYPE);
+ }
+ } else {
+ typeForNewAccount = oldType;
+ }
+ if (typeForNewAccount != null) {
+ final int specificMax = typeSpecificMaxMap.get(typeForNewAccount, 0);
+ if (specificMax >= 0) {
+ final int currentCount = currentEntryCount.get(typeForNewAccount, 0);
+ if (currentCount >= specificMax) {
+ continue;
+ }
+ currentEntryCount.put(typeForNewAccount, currentCount + 1);
+ }
+ }
+ newState.addEntry(ValuesDelta.fromAfter(values));
+ totalCount++;
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/SimCard.java b/src/com/android/contacts/model/SimCard.java
new file mode 100644
index 000000000..2105ac702
--- /dev/null
+++ b/src/com/android/contacts/model/SimCard.java
@@ -0,0 +1,257 @@
+/*
+ * 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.model;
+
+import android.os.Build;
+import android.support.annotation.RequiresApi;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+
+/**
+ * Holds data for a SIM card in the device.
+ */
+public class SimCard {
+
+ private static final String TAG = "SimCard";
+
+ public static final int NO_SUBSCRIPTION_ID = -1;
+
+ // This state is created from the info we get from the system
+ private final String mSimId;
+ private final int mSubscriptionId;
+ private final CharSequence mCarrierName;
+ private final CharSequence mDisplayName;
+ private final String mPhoneNumber;
+ private final String mCountryCode;
+
+ // This is our own state that we associate with SIM cards. Currently these are only used
+ // in the GoogleContacts app.
+ // Note: these are logically immutable but are not final to reduce required constructor
+ // parameters
+ private boolean mDismissed = false;
+ private boolean mImported = false;
+
+ private List<SimContact> mContacts;
+
+ public SimCard(SimCard other) {
+ mSimId = other.mSimId;
+ mSubscriptionId = other.mSubscriptionId;
+ mCarrierName = other.mCarrierName;
+ mDisplayName = other.mDisplayName;
+ mPhoneNumber = other.mPhoneNumber;
+ mCountryCode = other.mCountryCode;
+ mDismissed = other.mDismissed;
+ mImported = other.mImported;
+ if (other.mContacts != null) {
+ mContacts = new ArrayList<>(other.mContacts);
+ }
+ }
+
+ public SimCard(String simId, int subscriptionId, CharSequence carrierName,
+ CharSequence displayName, String phoneNumber, String countryCode) {
+ mSimId = simId;
+ mSubscriptionId = subscriptionId;
+ mCarrierName = carrierName;
+ mDisplayName = displayName;
+ mPhoneNumber = phoneNumber;
+ mCountryCode = countryCode != null ? countryCode.toUpperCase(Locale.US) : null;
+ }
+
+ public SimCard(String simId, CharSequence carrierName,
+ CharSequence displayName, String phoneNumber, String countryCode) {
+ this(simId, NO_SUBSCRIPTION_ID, carrierName, displayName, phoneNumber, countryCode);
+ }
+
+ public String getSimId() {
+ return mSimId;
+ }
+
+ public int getSubscriptionId() {
+ return mSubscriptionId;
+ }
+
+ public boolean hasValidSubscriptionId() {
+ return mSubscriptionId != NO_SUBSCRIPTION_ID;
+ }
+
+ public CharSequence getDisplayName() {
+ return mDisplayName;
+ }
+
+ public String getPhone() {
+ return mPhoneNumber;
+ }
+
+ public CharSequence getFormattedPhone() {
+ if (mPhoneNumber == null) {
+ return null;
+ }
+ return PhoneNumberUtils.formatNumber(mPhoneNumber, mCountryCode);
+ }
+
+ public boolean hasPhone() {
+ return mPhoneNumber != null;
+ }
+
+ public String getCountryCode() {
+ return mCountryCode;
+ }
+
+ /**
+ * Returns whether the contacts for this SIM card have been initialized.
+ */
+ public boolean areContactsAvailable() {
+ return mContacts != null;
+ }
+
+ /**
+ * Returns whether this SIM card has any SIM contacts.
+ *
+ * A precondition of this method is that the contacts have been initialized.
+ */
+ public boolean hasContacts() {
+ if (mContacts == null) {
+ throw new IllegalStateException("Contacts not loaded.");
+ }
+ return !mContacts.isEmpty();
+ }
+
+ /**
+ * Returns the number of contacts stored on this SIM card.
+ *
+ * A precondition of this method is that the contacts have been initialized.
+ */
+ public int getContactCount() {
+ if (mContacts == null) {
+ throw new IllegalStateException("Contacts not loaded.");
+ }
+ return mContacts.size();
+ }
+
+ public boolean isDismissed() {
+ return mDismissed;
+ }
+
+ public boolean isImported() {
+ return mImported;
+ }
+
+ public boolean isImportable() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "isImportable: isDismissed? " + isDismissed() +
+ " isImported? " + isImported() + " contacts=" + mContacts);
+ }
+ return !isDismissed() && !isImported() && hasContacts();
+ }
+
+ /**
+ * Returns the contacts for this SIM card or null if the contacts have not been initialized.
+ */
+ public List<SimContact> getContacts() {
+ return mContacts;
+ }
+
+ public SimCard withImportAndDismissStates(boolean imported, boolean dismissed) {
+ SimCard copy = new SimCard(this);
+ copy.mImported = imported;
+ copy.mDismissed = dismissed;
+ return copy;
+ }
+
+ public SimCard withImportedState(boolean imported) {
+ return withImportAndDismissStates(imported, mDismissed);
+ }
+
+ public SimCard withDismissedState(boolean dismissed) {
+ return withImportAndDismissStates(mImported, dismissed);
+ }
+
+ public SimCard withContacts(List<SimContact> contacts) {
+ final SimCard copy = new SimCard(this);
+ copy.mContacts = contacts;
+ return copy;
+ }
+
+ public SimCard withContacts(SimContact... contacts) {
+ final SimCard copy = new SimCard(this);
+ copy.mContacts = Arrays.asList(contacts);
+ return copy;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ SimCard simCard = (SimCard) o;
+
+ return mSubscriptionId == simCard.mSubscriptionId && mDismissed == simCard.mDismissed &&
+ mImported == simCard.mImported && Objects.equals(mSimId, simCard.mSimId) &&
+ Objects.equals(mPhoneNumber, simCard.mPhoneNumber) &&
+ Objects.equals(mCountryCode, simCard.mCountryCode);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = Objects.hash(mSimId, mPhoneNumber, mCountryCode);
+ result = 31 * result + mSubscriptionId;
+ result = 31 * result + (mDismissed ? 1 : 0);
+ result = 31 * result + (mImported ? 1 : 0);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "SimCard{" +
+ "mSimId='" + mSimId + '\'' +
+ ", mSubscriptionId=" + mSubscriptionId +
+ ", mCarrierName=" + mCarrierName +
+ ", mDisplayName=" + mDisplayName +
+ ", mPhoneNumber='" + mPhoneNumber + '\'' +
+ ", mCountryCode='" + mCountryCode + '\'' +
+ ", mDismissed=" + mDismissed +
+ ", mImported=" + mImported +
+ ", mContacts=" + mContacts +
+ '}';
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public static SimCard create(SubscriptionInfo info) {
+ return new SimCard(info.getIccId(), info.getSubscriptionId(),
+ info.getCarrierName(), info.getDisplayName(), info.getNumber(),
+ info.getCountryIso());
+ }
+
+ public static SimCard create(TelephonyManager telephony, String displayLabel) {
+ if (telephony.getSimState() == TelephonyManager.SIM_STATE_READY) {
+ return new SimCard(telephony.getSimSerialNumber(),
+ telephony.getSimOperatorName(), displayLabel, telephony.getLine1Number(),
+ telephony.getSimCountryIso());
+ } else {
+ // This should never happen but in case it does just fallback to an "empty" instance
+ return new SimCard(/* SIM id */ "", /* operator name */ null, displayLabel,
+ /* phone number */ "", /* Country code */ null);
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/SimContact.java b/src/com/android/contacts/model/SimContact.java
new file mode 100644
index 000000000..7babe27ca
--- /dev/null
+++ b/src/com/android/contacts/model/SimContact.java
@@ -0,0 +1,260 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Ordering;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds data for contacts loaded from the SIM card.
+ */
+public class SimContact implements Parcelable {
+ private final long mId;
+ private final String mName;
+ private final String mPhone;
+ private final String[] mEmails;
+
+ public SimContact(long id, String name, String phone) {
+ this(id, name, phone, null);
+ }
+
+ public SimContact(long id, String name, String phone, String[] emails) {
+ mId = id;
+ mName = name;
+ mPhone = phone == null ? "" : phone.trim();
+ mEmails = emails;
+ }
+
+ public SimContact(SimContact other) {
+ this(other.mId, other.mName, other.mPhone, other.mEmails);
+ }
+
+ public long getId() {
+ return mId;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public String getPhone() {
+ return mPhone;
+ }
+
+ public String[] getEmails() {
+ return mEmails;
+ }
+
+ public void appendCreateContactOperations(List<ContentProviderOperation> ops,
+ AccountWithDataSet targetAccount) {
+ // There is nothing to save so skip it.
+ if (!hasName() && !hasPhone() && !hasEmails()) return;
+
+ final int rawContactOpIndex = ops.size();
+ ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
+ .withYieldAllowed(true)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, targetAccount.name)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, targetAccount.type)
+ .withValue(ContactsContract.RawContacts.DATA_SET, targetAccount.dataSet)
+ .build());
+ if (mName != null) {
+ ops.add(createInsertOp(rawContactOpIndex, StructuredName.CONTENT_ITEM_TYPE,
+ StructuredName.DISPLAY_NAME, mName));
+ }
+ if (!mPhone.isEmpty()) {
+ ops.add(createInsertOp(rawContactOpIndex, Phone.CONTENT_ITEM_TYPE,
+ Phone.NUMBER, mPhone));
+ }
+ if (mEmails != null) {
+ for (String email : mEmails) {
+ ops.add(createInsertOp(rawContactOpIndex, Email.CONTENT_ITEM_TYPE,
+ Email.ADDRESS, email));
+ }
+ }
+ }
+
+ private ContentProviderOperation createInsertOp(int rawContactOpIndex, String mimeType,
+ String column, String value) {
+ return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactOpIndex)
+ .withValue(ContactsContract.Data.MIMETYPE, mimeType)
+ .withValue(column, value)
+ .build();
+ }
+
+ public void appendAsContactRow(MatrixCursor cursor) {
+ cursor.newRow().add(ContactsContract.Contacts._ID, mId)
+ .add(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, mName)
+ .add(ContactsContract.Contacts.LOOKUP_KEY, getLookupKey());
+ }
+
+ public boolean hasName() {
+ return !TextUtils.isEmpty(mName);
+ }
+
+ public boolean hasPhone() {
+ return !mPhone.isEmpty();
+ }
+
+ public boolean hasEmails() {
+ return mEmails != null && mEmails.length > 0;
+ }
+
+ /**
+ * Generate a "fake" lookup key. This is needed because
+ * {@link ContactPhotoManager} will only generate a letter avatar
+ * if the contact has a lookup key.
+ */
+ private String getLookupKey() {
+ if (mName != null) {
+ return "sim-n-" + Uri.encode(mName);
+ } else if (mPhone != null) {
+ return "sim-p-" + Uri.encode(mPhone);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "SimContact{" +
+ "mId=" + mId +
+ ", mName='" + mName + '\'' +
+ ", mPhone='" + mPhone + '\'' +
+ ", mEmails=" + Arrays.toString(mEmails) +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ final SimContact that = (SimContact) o;
+
+ return mId == that.mId && Objects.equals(mName, that.mName) &&
+ Objects.equals(mPhone, that.mPhone) && Arrays.equals(mEmails, that.mEmails);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (mId ^ (mId >>> 32));
+ result = 31 * result + (mName != null ? mName.hashCode() : 0);
+ result = 31 * result + (mPhone != null ? mPhone.hashCode() : 0);
+ result = 31 * result + Arrays.hashCode(mEmails);
+ return result;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(mId);
+ dest.writeString(mName);
+ dest.writeString(mPhone);
+ dest.writeStringArray(mEmails);
+ }
+
+ public static final Creator<SimContact> CREATOR = new Creator<SimContact>() {
+ @Override
+ public SimContact createFromParcel(Parcel source) {
+ final long id = source.readLong();
+ final String name = source.readString();
+ final String phone = source.readString();
+ final String[] emails = source.createStringArray();
+ return new SimContact(id, name, phone, emails);
+ }
+
+ @Override
+ public SimContact[] newArray(int size) {
+ return new SimContact[size];
+ }
+ };
+
+ /**
+ * Convert a collection of SIM contacts to a Cursor matching a query from
+ * {@link android.provider.ContactsContract.Contacts#CONTENT_URI} with the provided projection.
+ *
+ * This allows a collection of SIM contacts to be displayed using the existing adapters for
+ * contacts.
+ */
+ public static final MatrixCursor convertToContactsCursor(Collection<SimContact> contacts,
+ String[] projection) {
+ final MatrixCursor result = new MatrixCursor(projection);
+ for (SimContact contact : contacts) {
+ contact.appendAsContactRow(result);
+ }
+ return result;
+ }
+
+ /**
+ * Returns the index of a contact with a matching name and phone
+ * @param contacts list to search. Should be sorted using
+ * {@link SimContact#compareByPhoneThenName()}
+ * @param phone the phone to search for
+ * @param name the name to search for
+ */
+ public static int findByPhoneAndName(List<SimContact> contacts, String phone, String name) {
+ return Collections.binarySearch(contacts, new SimContact(-1, name, phone, null),
+ compareByPhoneThenName());
+ }
+
+ public static final Comparator<SimContact> compareByPhoneThenName() {
+ return new Comparator<SimContact>() {
+ @Override
+ public int compare(SimContact lhs, SimContact rhs) {
+ return ComparisonChain.start()
+ .compare(lhs.mPhone, rhs.mPhone)
+ .compare(lhs.mName, rhs.mName, Ordering.<String>natural().nullsFirst())
+ .result();
+ }
+ };
+ }
+
+ public static final Comparator<SimContact> compareById() {
+ return new Comparator<SimContact>() {
+ @Override
+ public int compare(SimContact lhs, SimContact rhs) {
+ // We assume ids are unique.
+ return Long.compare(lhs.mId, rhs.mId);
+ }
+ };
+ }
+}
diff --git a/src/com/android/contacts/model/ValuesDelta.java b/src/com/android/contacts/model/ValuesDelta.java
new file mode 100644
index 000000000..120c205c9
--- /dev/null
+++ b/src/com/android/contacts/model/ValuesDelta.java
@@ -0,0 +1,599 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Sets;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Type of {@link android.content.ContentValues} that maintains both an original state and a
+ * modified version of that state. This allows us to build insert, update,
+ * or delete operations based on a "before" {@link Entity} snapshot.
+ */
+public class ValuesDelta implements Parcelable {
+ protected ContentValues mBefore;
+ protected ContentValues mAfter;
+ protected String mIdColumn = BaseColumns._ID;
+ private boolean mFromTemplate;
+
+ /**
+ * Next value to assign to {@link #mIdColumn} when building an insert
+ * operation through {@link #fromAfter(android.content.ContentValues)}. This is used so
+ * we can concretely reference this {@link ValuesDelta} before it has
+ * been persisted.
+ */
+ protected static int sNextInsertId = -1;
+
+ protected ValuesDelta() {
+ }
+
+ /**
+ * Create {@link ValuesDelta}, using the given object as the
+ * "before" state, usually from an {@link Entity}.
+ */
+ public static ValuesDelta fromBefore(ContentValues before) {
+ final ValuesDelta entry = new ValuesDelta();
+ entry.mBefore = before;
+ entry.mAfter = new ContentValues();
+ return entry;
+ }
+
+ /**
+ * Create {@link ValuesDelta}, using the given object as the "after"
+ * state, usually when we are inserting a row instead of updating.
+ */
+ public static ValuesDelta fromAfter(ContentValues after) {
+ final ValuesDelta entry = new ValuesDelta();
+ entry.mBefore = null;
+ entry.mAfter = after;
+
+ // Assign temporary id which is dropped before insert.
+ entry.mAfter.put(entry.mIdColumn, sNextInsertId--);
+ return entry;
+ }
+
+ public ContentValues getAfter() {
+ return mAfter;
+ }
+
+ public ContentValues getBefore() {
+ return mBefore;
+ }
+
+ public boolean containsKey(String key) {
+ return ((mAfter != null && mAfter.containsKey(key)) ||
+ (mBefore != null && mBefore.containsKey(key)));
+ }
+
+ public String getAsString(String key) {
+ if (mAfter != null && mAfter.containsKey(key)) {
+ return mAfter.getAsString(key);
+ } else if (mBefore != null && mBefore.containsKey(key)) {
+ return mBefore.getAsString(key);
+ } else {
+ return null;
+ }
+ }
+
+ public byte[] getAsByteArray(String key) {
+ if (mAfter != null && mAfter.containsKey(key)) {
+ return mAfter.getAsByteArray(key);
+ } else if (mBefore != null && mBefore.containsKey(key)) {
+ return mBefore.getAsByteArray(key);
+ } else {
+ return null;
+ }
+ }
+
+ public Long getAsLong(String key) {
+ if (mAfter != null && mAfter.containsKey(key)) {
+ return mAfter.getAsLong(key);
+ } else if (mBefore != null && mBefore.containsKey(key)) {
+ return mBefore.getAsLong(key);
+ } else {
+ return null;
+ }
+ }
+
+ public Integer getAsInteger(String key) {
+ return getAsInteger(key, null);
+ }
+
+ public Integer getAsInteger(String key, Integer defaultValue) {
+ if (mAfter != null && mAfter.containsKey(key)) {
+ return mAfter.getAsInteger(key);
+ } else if (mBefore != null && mBefore.containsKey(key)) {
+ return mBefore.getAsInteger(key);
+ } else {
+ return defaultValue;
+ }
+ }
+
+ public boolean isChanged(String key) {
+ if (mAfter == null || !mAfter.containsKey(key)) {
+ return false;
+ }
+
+ Object newValue = mAfter.get(key);
+ Object oldValue = mBefore.get(key);
+
+ if (oldValue == null) {
+ return newValue != null;
+ }
+
+ return !oldValue.equals(newValue);
+ }
+
+ public String getMimetype() {
+ return getAsString(ContactsContract.Data.MIMETYPE);
+ }
+
+ public Long getId() {
+ return getAsLong(mIdColumn);
+ }
+
+ public void setIdColumn(String idColumn) {
+ mIdColumn = idColumn;
+ }
+
+ public boolean isPrimary() {
+ final Long isPrimary = getAsLong(ContactsContract.Data.IS_PRIMARY);
+ return isPrimary == null ? false : isPrimary != 0;
+ }
+
+ public void setFromTemplate(boolean isFromTemplate) {
+ mFromTemplate = isFromTemplate;
+ }
+
+ public boolean isFromTemplate() {
+ return mFromTemplate;
+ }
+
+ public boolean isSuperPrimary() {
+ final Long isSuperPrimary = getAsLong(ContactsContract.Data.IS_SUPER_PRIMARY);
+ return isSuperPrimary == null ? false : isSuperPrimary != 0;
+ }
+
+ public boolean beforeExists() {
+ return (mBefore != null && mBefore.containsKey(mIdColumn));
+ }
+
+ /**
+ * When "after" is present, then visible
+ */
+ public boolean isVisible() {
+ return (mAfter != null);
+ }
+
+ /**
+ * When "after" is wiped, action is "delete"
+ */
+ public boolean isDelete() {
+ return beforeExists() && (mAfter == null);
+ }
+
+ /**
+ * When no "before" or "after", is transient
+ */
+ public boolean isTransient() {
+ return (mBefore == null) && (mAfter == null);
+ }
+
+ /**
+ * When "after" has some changes, action is "update"
+ */
+ public boolean isUpdate() {
+ if (!beforeExists() || mAfter == null || mAfter.size() == 0) {
+ return false;
+ }
+ for (String key : mAfter.keySet()) {
+ Object newValue = mAfter.get(key);
+ Object oldValue = mBefore.get(key);
+ if (oldValue == null) {
+ if (newValue != null) {
+ return true;
+ }
+ } else if (!oldValue.equals(newValue)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * When "after" has no changes, action is no-op
+ */
+ public boolean isNoop() {
+ return beforeExists() && (mAfter != null && mAfter.size() == 0);
+ }
+
+ /**
+ * When no "before" id, and has "after", action is "insert"
+ */
+ public boolean isInsert() {
+ return !beforeExists() && (mAfter != null);
+ }
+
+ public void markDeleted() {
+ mAfter = null;
+ }
+
+ /**
+ * Ensure that our internal structure is ready for storing updates.
+ */
+ private void ensureUpdate() {
+ if (mAfter == null) {
+ mAfter = new ContentValues();
+ }
+ }
+
+ public void put(String key, String value) {
+ ensureUpdate();
+ mAfter.put(key, value);
+ }
+
+ public void put(String key, byte[] value) {
+ ensureUpdate();
+ mAfter.put(key, value);
+ }
+
+ public void put(String key, int value) {
+ ensureUpdate();
+ mAfter.put(key, value);
+ }
+
+ public void put(String key, long value) {
+ ensureUpdate();
+ mAfter.put(key, value);
+ }
+
+ public void putNull(String key) {
+ ensureUpdate();
+ mAfter.putNull(key);
+ }
+
+ public void copyStringFrom(ValuesDelta from, String key) {
+ ensureUpdate();
+ if (containsKey(key) || from.containsKey(key)) {
+ put(key, from.getAsString(key));
+ }
+ }
+
+ /**
+ * Return set of all keys defined through this object.
+ */
+ public Set<String> keySet() {
+ final HashSet<String> keys = Sets.newHashSet();
+
+ if (mBefore != null) {
+ for (Map.Entry<String, Object> entry : mBefore.valueSet()) {
+ keys.add(entry.getKey());
+ }
+ }
+
+ if (mAfter != null) {
+ for (Map.Entry<String, Object> entry : mAfter.valueSet()) {
+ keys.add(entry.getKey());
+ }
+ }
+
+ return keys;
+ }
+
+ /**
+ * Return complete set of "before" and "after" values mixed together,
+ * giving full state regardless of edits.
+ */
+ public ContentValues getCompleteValues() {
+ final ContentValues values = new ContentValues();
+ if (mBefore != null) {
+ values.putAll(mBefore);
+ }
+ if (mAfter != null) {
+ values.putAll(mAfter);
+ }
+ if (values.containsKey(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID)) {
+ // Clear to avoid double-definitions, and prefer rows
+ values.remove(ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID);
+ }
+
+ return values;
+ }
+
+ /**
+ * Merge the "after" values from the given {@link ValuesDelta},
+ * discarding any existing "after" state. This is typically used when
+ * re-parenting changes onto an updated {@link Entity}.
+ */
+ public static ValuesDelta mergeAfter(ValuesDelta local, ValuesDelta remote) {
+ // Bail early if trying to merge delete with missing local
+ if (local == null && (remote.isDelete() || remote.isTransient())) return null;
+
+ // Create local version if none exists yet
+ if (local == null) local = new ValuesDelta();
+
+ if (!local.beforeExists()) {
+ // Any "before" record is missing, so take all values as "insert"
+ local.mAfter = remote.getCompleteValues();
+ } else {
+ // Existing "update" with only "after" values
+ local.mAfter = remote.mAfter;
+ }
+
+ return local;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof ValuesDelta) {
+ // Only exactly equal with both are identical subsets
+ final ValuesDelta other = (ValuesDelta)object;
+ return this.subsetEquals(other) && other.subsetEquals(this);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ toString(builder);
+ return builder.toString();
+ }
+
+ /**
+ * Helper for building string representation, leveraging the given
+ * {@link StringBuilder} to minimize allocations.
+ */
+ public void toString(StringBuilder builder) {
+ builder.append("{ ");
+ builder.append("IdColumn=");
+ builder.append(mIdColumn);
+ builder.append(", FromTemplate=");
+ builder.append(mFromTemplate);
+ builder.append(", ");
+ for (String key : this.keySet()) {
+ builder.append(key);
+ builder.append("=");
+ builder.append(this.getAsString(key));
+ builder.append(", ");
+ }
+ builder.append("}");
+ }
+
+ /**
+ * Check if the given {@link ValuesDelta} is both a subset of this
+ * object, and any defined keys have equal values.
+ */
+ public boolean subsetEquals(ValuesDelta other) {
+ for (String key : this.keySet()) {
+ final String ourValue = this.getAsString(key);
+ final String theirValue = other.getAsString(key);
+ if (ourValue == null) {
+ // If they have value when we're null, no match
+ if (theirValue != null) return false;
+ } else {
+ // If both values defined and aren't equal, no match
+ if (!ourValue.equals(theirValue)) return false;
+ }
+ }
+ // All values compared and matched
+ return true;
+ }
+
+ /**
+ * Build a {@link android.content.ContentProviderOperation} that will transform our
+ * "before" state into our "after" state, using insert, update, or
+ * delete as needed.
+ */
+ public ContentProviderOperation.Builder buildDiff(Uri targetUri) {
+ return buildDiffHelper(targetUri);
+ }
+
+ /**
+ * For compatibility purpose.
+ */
+ public BuilderWrapper buildDiffWrapper(Uri targetUri) {
+ final ContentProviderOperation.Builder builder = buildDiffHelper(targetUri);
+ BuilderWrapper bw = null;
+ if (isInsert()) {
+ bw = new BuilderWrapper(builder, CompatUtils.TYPE_INSERT);
+ } else if (isDelete()) {
+ bw = new BuilderWrapper(builder, CompatUtils.TYPE_DELETE);
+ } else if (isUpdate()) {
+ bw = new BuilderWrapper(builder, CompatUtils.TYPE_UPDATE);
+ }
+ return bw;
+ }
+
+ private ContentProviderOperation.Builder buildDiffHelper(Uri targetUri) {
+ ContentProviderOperation.Builder builder = null;
+ if (isInsert()) {
+ // Changed values are "insert" back-referenced to Contact
+ mAfter.remove(mIdColumn);
+ builder = ContentProviderOperation.newInsert(targetUri);
+ builder.withValues(mAfter);
+ } else if (isDelete()) {
+ // When marked for deletion and "before" exists, then "delete"
+ builder = ContentProviderOperation.newDelete(targetUri);
+ builder.withSelection(mIdColumn + "=" + getId(), null);
+ } else if (isUpdate()) {
+ // When has changes and "before" exists, then "update"
+ builder = ContentProviderOperation.newUpdate(targetUri);
+ builder.withSelection(mIdColumn + "=" + getId(), null);
+ builder.withValues(mAfter);
+ }
+ return builder;
+ }
+
+ /** {@inheritDoc} */
+ public int describeContents() {
+ // Nothing special about this parcel
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(mBefore, flags);
+ dest.writeParcelable(mAfter, flags);
+ dest.writeString(mIdColumn);
+ }
+
+ public void readFromParcel(Parcel source) {
+ final ClassLoader loader = getClass().getClassLoader();
+ mBefore = source.<ContentValues> readParcelable(loader);
+ mAfter = source.<ContentValues> readParcelable(loader);
+ mIdColumn = source.readString();
+ }
+
+ public static final Creator<ValuesDelta> CREATOR = new Creator<ValuesDelta>() {
+ public ValuesDelta createFromParcel(Parcel in) {
+ final ValuesDelta values = new ValuesDelta();
+ values.readFromParcel(in);
+ return values;
+ }
+
+ public ValuesDelta[] newArray(int size) {
+ return new ValuesDelta[size];
+ }
+ };
+
+ public void setGroupRowId(long groupId) {
+ put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId);
+ }
+
+ public Long getGroupRowId() {
+ return getAsLong(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
+ }
+
+ public void setPhoto(byte[] value) {
+ put(ContactsContract.CommonDataKinds.Photo.PHOTO, value);
+ }
+
+ public byte[] getPhoto() {
+ return getAsByteArray(ContactsContract.CommonDataKinds.Photo.PHOTO);
+ }
+
+ public void setSuperPrimary(boolean val) {
+ if (val) {
+ put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
+ } else {
+ put(ContactsContract.Data.IS_SUPER_PRIMARY, 0);
+ }
+ }
+
+ public void setPhoneticFamilyName(String value) {
+ put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, value);
+ }
+
+ public void setPhoneticMiddleName(String value) {
+ put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME, value);
+ }
+
+ public void setPhoneticGivenName(String value) {
+ put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME, value);
+ }
+
+ public String getPhoneticFamilyName() {
+ return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
+ }
+
+ public String getPhoneticMiddleName() {
+ return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
+ }
+
+ public String getPhoneticGivenName() {
+ return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
+ }
+
+ public String getDisplayName() {
+ return getAsString(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+ }
+
+ public void setDisplayName(String name) {
+ if (name == null) {
+ putNull(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+ } else {
+ put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
+ }
+ }
+
+ public void copyStructuredNameFieldsFrom(ValuesDelta name) {
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PREFIX);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
+
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
+
+ copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FULL_NAME_STYLE);
+ copyStringFrom(name, ContactsContract.Data.DATA11);
+ }
+
+ public String getPhoneNumber() {
+ return getAsString(ContactsContract.CommonDataKinds.Phone.NUMBER);
+ }
+
+ public String getPhoneNormalizedNumber() {
+ return getAsString(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
+ }
+
+ public boolean hasPhoneType() {
+ return getPhoneType() != null;
+ }
+
+ public Integer getPhoneType() {
+ return getAsInteger(ContactsContract.CommonDataKinds.Phone.TYPE);
+ }
+
+ public String getPhoneLabel() {
+ return getAsString(ContactsContract.CommonDataKinds.Phone.LABEL);
+ }
+
+ public String getEmailData() {
+ return getAsString(ContactsContract.CommonDataKinds.Email.DATA);
+ }
+
+ public boolean hasEmailType() {
+ return getEmailType() != null;
+ }
+
+ public Integer getEmailType() {
+ return getAsInteger(ContactsContract.CommonDataKinds.Email.TYPE);
+ }
+
+ public String getEmailLabel() {
+ return getAsString(ContactsContract.CommonDataKinds.Email.LABEL);
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountComparator.java b/src/com/android/contacts/model/account/AccountComparator.java
new file mode 100644
index 000000000..70ccf494f
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountComparator.java
@@ -0,0 +1,71 @@
+/*
+ * 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.model.account;
+
+import com.google.common.base.Objects;
+
+import java.util.Comparator;
+
+/**
+ * Orders accounts for display such that the default account is first
+ */
+public class AccountComparator implements Comparator<AccountWithDataSet> {
+ private AccountWithDataSet mDefaultAccount;
+
+ public AccountComparator(AccountWithDataSet defaultAccount) {
+ mDefaultAccount = defaultAccount;
+ }
+
+ @Override
+ public int compare(AccountWithDataSet a, AccountWithDataSet b) {
+ if (Objects.equal(a.name, b.name) && Objects.equal(a.type, b.type)
+ && Objects.equal(a.dataSet, b.dataSet)) {
+ return 0;
+ } else if (b.name == null || b.type == null) {
+ return -1;
+ } else if (a.name == null || a.type == null) {
+ return 1;
+ } else if (isWritableGoogleAccount(a) && a.equals(mDefaultAccount)) {
+ return -1;
+ } else if (isWritableGoogleAccount(b) && b.equals(mDefaultAccount)) {
+ return 1;
+ } else if (isWritableGoogleAccount(a) && !isWritableGoogleAccount(b)) {
+ return -1;
+ } else if (isWritableGoogleAccount(b) && !isWritableGoogleAccount(a)) {
+ return 1;
+ } else {
+ int diff = a.name.compareToIgnoreCase(b.name);
+ if (diff != 0) {
+ return diff;
+ }
+ diff = a.type.compareToIgnoreCase(b.type);
+ if (diff != 0) {
+ return diff;
+ }
+
+ // Accounts without data sets get sorted before those that have them.
+ if (a.dataSet != null) {
+ return b.dataSet == null ? 1 : a.dataSet.compareToIgnoreCase(b.dataSet);
+ } else {
+ return -1;
+ }
+ }
+ }
+
+ private static boolean isWritableGoogleAccount(AccountWithDataSet account) {
+ return GoogleAccountType.ACCOUNT_TYPE.equals(account.type) && account.dataSet == null;
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountDisplayInfo.java b/src/com/android/contacts/model/account/AccountDisplayInfo.java
new file mode 100644
index 000000000..fe0c57086
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountDisplayInfo.java
@@ -0,0 +1,100 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.StringRes;
+import android.text.TextUtils;
+
+/**
+ * Wrapper around AccountWithDataSet that contains user-friendly labels and an icon.
+ *
+ * The raw values for name and type in AccountWithDataSet are not always (or even usually)
+ * appropriate for direct display to the user.
+ */
+public class AccountDisplayInfo {
+ private final AccountWithDataSet mSource;
+
+ private final CharSequence mName;
+ private final CharSequence mType;
+ private final Drawable mIcon;
+
+ private final boolean mIsDeviceAccount;
+
+ public AccountDisplayInfo(AccountWithDataSet account, CharSequence name, CharSequence type,
+ Drawable icon, boolean isDeviceAccount) {
+ mSource = account;
+ mName = name;
+ mType = type;
+ mIcon = icon;
+ mIsDeviceAccount = isDeviceAccount;
+ }
+
+ public AccountWithDataSet getSource() {
+ return mSource;
+ }
+
+ public CharSequence getNameLabel() {
+ return mName;
+ }
+
+ public CharSequence getTypeLabel() {
+ return mType;
+ }
+
+ public Drawable getIcon() {
+ return mIcon;
+ }
+
+ public boolean hasGoogleAccountType() {
+ return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type);
+ }
+
+ public boolean isGoogleAccount() {
+ return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type) && mSource.dataSet == null;
+ }
+
+ public boolean isDeviceAccount() {
+ return mIsDeviceAccount;
+ }
+
+ public boolean hasDistinctName() {
+ return !TextUtils.equals(mName, mType);
+ }
+
+ public AccountDisplayInfo withName(CharSequence name) {
+ return withNameAndType(name, mType);
+ }
+
+ public AccountDisplayInfo withType(CharSequence type) {
+ return withNameAndType(mName, type);
+ }
+
+ public AccountDisplayInfo withNameAndType(CharSequence name, CharSequence type) {
+ return new AccountDisplayInfo(mSource, name, type, mIcon, mIsDeviceAccount);
+ }
+
+ public AccountDisplayInfo formatted(Context context, @StringRes int nameFormat,
+ @StringRes int typeFormat) {
+ return new AccountDisplayInfo(mSource, context.getString(nameFormat, mName),
+ context.getString(typeFormat, mType), mIcon, mIsDeviceAccount);
+ }
+
+ public AccountDisplayInfo withFormattedName(Context context, @StringRes int nameFormat) {
+ return withName(context.getString(nameFormat, mName));
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java b/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java
new file mode 100644
index 000000000..ac1ad357c
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java
@@ -0,0 +1,110 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+import com.android.contactsbind.ObjectFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Provides methods to get AccountDisplayInfo instances for available accounts.
+ *
+ * For most accounts the account name will be used for the label but device accounts and
+ * SIM accounts have friendly names associated with them unless there is more than one of these
+ * types of accounts present in the list.
+ */
+public class AccountDisplayInfoFactory {
+
+ private final Context mContext;
+ private final AccountTypeManager mAccountTypeManager;
+
+ private final DeviceLocalAccountTypeFactory mDeviceAccountTypeFactory;
+
+ private final int mDeviceAccountCount;
+ private final int mSimAccountCount;
+
+ public AccountDisplayInfoFactory(Context context, List<AccountWithDataSet> accounts) {
+ this(context, AccountTypeManager.getInstance(context),
+ ObjectFactory.getDeviceLocalAccountTypeFactory(context), accounts);
+ }
+
+ public AccountDisplayInfoFactory(Context context, AccountTypeManager accountTypeManager,
+ DeviceLocalAccountTypeFactory deviceAccountTypeFactory,
+ List<AccountWithDataSet> accounts) {
+ mContext = context;
+ mAccountTypeManager = accountTypeManager;
+ mDeviceAccountTypeFactory = deviceAccountTypeFactory;
+
+ mSimAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_SIM, accounts);
+ mDeviceAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_DEVICE, accounts);
+ }
+
+ public AccountDisplayInfo getAccountDisplayInfo(AccountWithDataSet account) {
+ final AccountType type = mAccountTypeManager.getAccountTypeForAccount(account);
+ final CharSequence name = shouldUseTypeLabelForName(account)
+ ? type.getDisplayLabel(mContext)
+ : account.name;
+ return new AccountDisplayInfo(account, name, type.getDisplayLabel(mContext),
+ type.getDisplayIcon(mContext),
+ DeviceLocalAccountTypeFactory.Util.isLocalAccountType(mDeviceAccountTypeFactory,
+ type.accountType));
+ }
+
+ public AccountDisplayInfo getAccountDisplayInfoFor(ContactListFilter filter) {
+ return getAccountDisplayInfo(filter.toAccountWithDataSet());
+ }
+
+ public AccountDisplayInfo getAccountDisplayInfoFor(RawContactDelta delta) {
+ final AccountWithDataSet account = new AccountWithDataSet(delta.getAccountName(),
+ delta.getAccountType(), delta.getDataSet());
+ return getAccountDisplayInfo(account);
+ }
+
+ public static AccountDisplayInfoFactory fromListFilters(Context context,
+ List<ContactListFilter> filters) {
+ final List<AccountWithDataSet> accounts = new ArrayList<>(filters.size());
+ for (ContactListFilter filter : filters) {
+ accounts.add(filter.toAccountWithDataSet());
+ }
+ return new AccountDisplayInfoFactory(context, accounts);
+ }
+
+ private boolean shouldUseTypeLabelForName(AccountWithDataSet account) {
+ final int type = mDeviceAccountTypeFactory.classifyAccount(account.type);
+ return (type == DeviceLocalAccountTypeFactory.TYPE_SIM && mSimAccountCount == 1)
+ || (type == DeviceLocalAccountTypeFactory.TYPE_DEVICE && mDeviceAccountCount == 1)
+ || account.name == null;
+
+ }
+
+ private int countOfType(@DeviceLocalAccountTypeFactory.LocalAccountType int type,
+ List<AccountWithDataSet> accounts) {
+ int count = 0;
+ for (AccountWithDataSet account : accounts) {
+ if (mDeviceAccountTypeFactory.classifyAccount(account.type) == type) {
+ count++;
+ }
+ }
+ return count;
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountInfo.java b/src/com/android/contacts/model/account/AccountInfo.java
new file mode 100644
index 000000000..b07204e09
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountInfo.java
@@ -0,0 +1,156 @@
+/*
+ * 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.model.account;
+
+import android.graphics.drawable.Drawable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds an {@link AccountWithDataSet} and the corresponding {@link AccountType} for an account.
+ */
+public class AccountInfo {
+
+ private final AccountDisplayInfo mDisplayInfo;
+ private final AccountType mType;
+
+ public AccountInfo(AccountDisplayInfo displayInfo, AccountType type) {
+ this.mDisplayInfo = displayInfo;
+ this.mType = type;
+ }
+
+ public AccountType getType() {
+ return mType;
+ }
+
+ public AccountWithDataSet getAccount() {
+ return mDisplayInfo.getSource();
+ }
+
+ /**
+ * Returns the displayable account name label for the account
+ */
+ public CharSequence getNameLabel() {
+ return mDisplayInfo.getNameLabel();
+ }
+
+ /**
+ * Returns the displayable account type label for the account
+ */
+ public CharSequence getTypeLabel() {
+ return mDisplayInfo.getTypeLabel();
+ }
+
+ /**
+ * Returns the icon for the account type
+ */
+ public Drawable getIcon() {
+ return mDisplayInfo.getIcon();
+ }
+
+ public boolean hasDistinctName() {
+ return mDisplayInfo.hasDistinctName();
+ }
+
+ public boolean isDeviceAccount() {
+ return mDisplayInfo.isDeviceAccount();
+ }
+
+ public boolean hasGoogleAccountType() {
+ return mDisplayInfo.hasGoogleAccountType();
+ }
+
+ public boolean sameAccount(AccountInfo other) {
+ return sameAccount(other.getAccount());
+ }
+
+ public boolean sameAccount(AccountWithDataSet other) {
+ return Objects.equals(getAccount(), other);
+ }
+
+ /**
+ * Returns whether accounts contains an account that is the same as account
+ *
+ * <p>This does not use equality rather checks whether the source account ({@link #getAccount()}
+ * is the same</p>
+ */
+ public static boolean contains(List<AccountInfo> accounts, AccountInfo account) {
+ return contains(accounts, account.getAccount());
+ }
+
+ /**
+ * Returns whether accounts contains an account that is the same as account
+ *
+ * <p>This does not use equality rather checks whether the source account ({@link #getAccount()}
+ * is the same</p>
+ */
+ public static boolean contains(List<AccountInfo> accounts, AccountWithDataSet account) {
+ return getAccount(accounts, account) != null;
+ }
+
+ /**
+ * Returns the AccountInfo from the list that has the specified account as it's source account
+ */
+ public static AccountInfo getAccount(List<AccountInfo> accounts, AccountWithDataSet account) {
+ Preconditions.checkNotNull(accounts);
+
+ for (AccountInfo info : accounts) {
+ if (info.sameAccount(account)) {
+ return info;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sorts the accounts using the same ordering as {@link AccountComparator}
+ */
+ public static void sortAccounts(AccountWithDataSet defaultAccount, List<AccountInfo> accounts) {
+ Collections.sort(accounts, sourceComparator(defaultAccount));
+ }
+
+ /**
+ * Gets a list of the AccountWithDataSet for accounts
+ */
+ public static List<AccountWithDataSet> extractAccounts(List<AccountInfo> accounts) {
+ return Lists.transform(accounts, ACCOUNT_EXTRACTOR);
+ }
+
+ private static Comparator<AccountInfo> sourceComparator(AccountWithDataSet defaultAccount) {
+ final AccountComparator accountComparator = new AccountComparator(defaultAccount);
+ return new Comparator<AccountInfo>() {
+ @Override
+ public int compare(AccountInfo o1, AccountInfo o2) {
+ return accountComparator.compare(o1.getAccount(), o2.getAccount());
+ }
+ };
+ }
+
+ public static final Function<AccountInfo, AccountWithDataSet> ACCOUNT_EXTRACTOR =
+ new Function<AccountInfo, AccountWithDataSet>() {
+ @Override
+ public AccountWithDataSet apply(AccountInfo from) {
+ return from.getAccount();
+ }
+ };
+}
diff --git a/src/com/android/contacts/model/account/AccountType.java b/src/com/android/contacts/model/account/AccountType.java
new file mode 100644
index 000000000..bddfc0992
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountType.java
@@ -0,0 +1,529 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContacts;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.base.Preconditions;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Internal structure that represents constraints and styles for a specific data
+ * source, such as the various data types they support, including details on how
+ * those types should be rendered and edited.
+ * <p>
+ * In the future this may be inflated from XML defined by a data source.
+ */
+public abstract class AccountType {
+ private static final String TAG = "AccountType";
+
+ /**
+ * The {@link RawContacts#ACCOUNT_TYPE} these constraints apply to.
+ */
+ public String accountType = null;
+
+ /**
+ * The {@link RawContacts#DATA_SET} these constraints apply to.
+ */
+ public String dataSet = null;
+
+ /**
+ * Package that resources should be loaded from. Will be null for embedded types, in which
+ * case resources are stored in this package itself.
+ *
+ * TODO Clean up {@link #resourcePackageName}, {@link #syncAdapterPackageName} and
+ * {@link #getViewContactNotifyServicePackageName()}.
+ *
+ * There's the following invariants:
+ * - {@link #syncAdapterPackageName} is always set to the actual sync adapter package name.
+ * - {@link #resourcePackageName} too is set to the same value, unless {@link #isEmbedded()},
+ * in which case it'll be null.
+ * There's an unfortunate exception of {@link FallbackAccountType}. Even though it
+ * {@link #isEmbedded()}, but we set non-null to {@link #resourcePackageName} for unit tests.
+ */
+ public String resourcePackageName;
+ /**
+ * The package name for the authenticator (for the embedded types, i.e. Google and Exchange)
+ * or the sync adapter (for external type, including extensions).
+ */
+ public String syncAdapterPackageName;
+
+ public int titleRes;
+ public int iconRes;
+
+ /**
+ * Set of {@link DataKind} supported by this source.
+ */
+ private ArrayList<DataKind> mKinds = Lists.newArrayList();
+
+ /**
+ * Lookup map of {@link #mKinds} on {@link DataKind#mimeType}.
+ */
+ private HashMap<String, DataKind> mMimeKinds = Maps.newHashMap();
+
+ protected boolean mIsInitialized;
+
+ protected static class DefinitionException extends Exception {
+ public DefinitionException(String message) {
+ super(message);
+ }
+
+ public DefinitionException(String message, Exception inner) {
+ super(message, inner);
+ }
+ }
+
+ /**
+ * Whether this account type was able to be fully initialized. This may be false if
+ * (for example) the package name associated with the account type could not be found.
+ */
+ public final boolean isInitialized() {
+ return mIsInitialized;
+ }
+
+ /**
+ * @return Whether this type is an "embedded" type. i.e. any of {@link FallbackAccountType},
+ * {@link GoogleAccountType} or {@link ExternalAccountType}.
+ *
+ * If an embedded type cannot be initialized (i.e. if {@link #isInitialized()} returns
+ * {@code false}) it's considered critical, and the application will crash. On the other
+ * hand if it's not an embedded type, we just skip loading the type.
+ */
+ public boolean isEmbedded() {
+ return true;
+ }
+
+ public boolean isExtension() {
+ return false;
+ }
+
+ /**
+ * @return True if contacts can be created and edited using this app. If false,
+ * there could still be an external editor as provided by
+ * {@link #getEditContactActivityClassName()} or {@link #getCreateContactActivityClassName()}
+ */
+ public abstract boolean areContactsWritable();
+
+ /**
+ * Returns an optional custom invite contact activity.
+ *
+ * Only makes sense for non-embedded account types.
+ * The activity class should reside in the sync adapter package as determined by
+ * {@link #syncAdapterPackageName}.
+ */
+ public String getInviteContactActivityClassName() {
+ return null;
+ }
+
+ /**
+ * Returns an optional service that can be launched whenever a contact is being looked at.
+ * This allows the sync adapter to provide more up-to-date information.
+ *
+ * The service class should reside in the sync adapter package as determined by
+ * {@link #getViewContactNotifyServicePackageName()}.
+ */
+ public String getViewContactNotifyServiceClassName() {
+ return null;
+ }
+
+ /**
+ * TODO This is way too hacky should be removed.
+ *
+ * This is introduced for {@link GoogleAccountType} where {@link #syncAdapterPackageName}
+ * is the authenticator package name but the notification service is in the sync adapter
+ * package. See {@link #resourcePackageName} -- we should clean up those.
+ */
+ public String getViewContactNotifyServicePackageName() {
+ return syncAdapterPackageName;
+ }
+
+ /** Returns an optional Activity string that can be used to view the group. */
+ public String getViewGroupActivity() {
+ return null;
+ }
+
+ public CharSequence getDisplayLabel(Context context) {
+ // Note this resource is defined in the sync adapter package, not resourcePackageName.
+ return getResourceText(context, syncAdapterPackageName, titleRes, accountType);
+ }
+
+ /**
+ * Creates an {@link AccountInfo} for the specified account with the same type
+ *
+ * <p>The {@link AccountWithDataSet#type} must match {@link #accountType} of this instance</p>
+ */
+ public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+ Preconditions.checkArgument(Objects.equal(account.type, accountType),
+ "Account types must match: account.type=%s but accountType=%s",
+ account.type, accountType);
+
+ return new AccountInfo(
+ new AccountDisplayInfo(account, account.name,
+ getDisplayLabel(context), getDisplayIcon(context), false), this);
+ }
+
+ /**
+ * @return resource ID for the "invite contact" action label, or -1 if not defined.
+ */
+ protected int getInviteContactActionResId() {
+ return -1;
+ }
+
+ /**
+ * @return resource ID for the "view group" label, or -1 if not defined.
+ */
+ protected int getViewGroupLabelResId() {
+ return -1;
+ }
+
+ /**
+ * Returns {@link AccountTypeWithDataSet} for this type.
+ */
+ public AccountTypeWithDataSet getAccountTypeAndDataSet() {
+ return AccountTypeWithDataSet.get(accountType, dataSet);
+ }
+
+ /**
+ * Returns a list of additional package names that should be inspected as additional
+ * external account types. This allows for a primary account type to indicate other packages
+ * that may not be sync adapters but which still provide contact data, perhaps under a
+ * separate data set within the account.
+ */
+ public List<String> getExtensionPackageNames() {
+ return new ArrayList<String>();
+ }
+
+ /**
+ * Returns an optional custom label for the "invite contact" action, which will be shown on
+ * the contact card. (If not defined, returns null.)
+ */
+ public CharSequence getInviteContactActionLabel(Context context) {
+ // Note this resource is defined in the sync adapter package, not resourcePackageName.
+ return getResourceText(context, syncAdapterPackageName, getInviteContactActionResId(), "");
+ }
+
+ /**
+ * Returns a label for the "view group" action. If not defined, this falls back to our
+ * own "View Updates" string
+ */
+ public CharSequence getViewGroupLabel(Context context) {
+ // Note this resource is defined in the sync adapter package, not resourcePackageName.
+ final CharSequence customTitle =
+ getResourceText(context, syncAdapterPackageName, getViewGroupLabelResId(), null);
+
+ return customTitle == null
+ ? context.getText(R.string.view_updates_from_group)
+ : customTitle;
+ }
+
+ /**
+ * Return a string resource loaded from the given package (or the current package
+ * if {@code packageName} is null), unless {@code resId} is -1, in which case it returns
+ * {@code defaultValue}.
+ *
+ * (The behavior is undefined if the resource or package doesn't exist.)
+ */
+ @VisibleForTesting
+ static CharSequence getResourceText(Context context, String packageName, int resId,
+ String defaultValue) {
+ if (resId != -1 && packageName != null) {
+ final PackageManager pm = context.getPackageManager();
+ return pm.getText(packageName, resId, null);
+ } else if (resId != -1) {
+ return context.getText(resId);
+ } else {
+ return defaultValue;
+ }
+ }
+
+ public Drawable getDisplayIcon(Context context) {
+ return getDisplayIcon(context, titleRes, iconRes, syncAdapterPackageName);
+ }
+
+ public static Drawable getDisplayIcon(Context context, int titleRes, int iconRes,
+ String syncAdapterPackageName) {
+ if (titleRes != -1 && syncAdapterPackageName != null) {
+ final PackageManager pm = context.getPackageManager();
+ return pm.getDrawable(syncAdapterPackageName, iconRes, null);
+ } else if (titleRes != -1) {
+ return context.getResources().getDrawable(iconRes);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Whether or not groups created under this account type have editable membership lists.
+ */
+ abstract public boolean isGroupMembershipEditable();
+
+ /**
+ * {@link Comparator} to sort by {@link DataKind#weight}.
+ */
+ private static Comparator<DataKind> sWeightComparator = new Comparator<DataKind>() {
+ @Override
+ public int compare(DataKind object1, DataKind object2) {
+ return object1.weight - object2.weight;
+ }
+ };
+
+ /**
+ * Return list of {@link DataKind} supported, sorted by
+ * {@link DataKind#weight}.
+ */
+ public ArrayList<DataKind> getSortedDataKinds() {
+ // TODO: optimize by marking if already sorted
+ Collections.sort(mKinds, sWeightComparator);
+ return mKinds;
+ }
+
+ /**
+ * Find the {@link DataKind} for a specific MIME-type, if it's handled by
+ * this data source.
+ */
+ public DataKind getKindForMimetype(String mimeType) {
+ return this.mMimeKinds.get(mimeType);
+ }
+
+ public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+ accountType = authenticator.type;
+ titleRes = authenticator.labelId;
+ iconRes = authenticator.iconId;
+ }
+
+ /**
+ * Add given {@link DataKind} to list of those provided by this source.
+ */
+ public DataKind addKind(DataKind kind) throws DefinitionException {
+ if (kind.mimeType == null) {
+ throw new DefinitionException("null is not a valid mime type");
+ }
+ if (mMimeKinds.get(kind.mimeType) != null) {
+ throw new DefinitionException(
+ "mime type '" + kind.mimeType + "' is already registered");
+ }
+
+ kind.resourcePackageName = this.resourcePackageName;
+ this.mKinds.add(kind);
+ this.mMimeKinds.put(kind.mimeType, kind);
+ return kind;
+ }
+
+ /**
+ * Description of a specific "type" or "label" of a {@link DataKind} row,
+ * such as {@link Phone#TYPE_WORK}. Includes constraints on total number of
+ * rows a {@link Contacts} may have of this type, and details on how
+ * user-defined labels are stored.
+ */
+ public static class EditType {
+ public int rawValue;
+ public int labelRes;
+ public boolean secondary;
+ /**
+ * The number of entries allowed for the type. -1 if not specified.
+ * @see DataKind#typeOverallMax
+ */
+ public int specificMax;
+ public String customColumn;
+
+ public EditType(int rawValue, int labelRes) {
+ this.rawValue = rawValue;
+ this.labelRes = labelRes;
+ this.specificMax = -1;
+ }
+
+ public EditType setSecondary(boolean secondary) {
+ this.secondary = secondary;
+ return this;
+ }
+
+ public EditType setSpecificMax(int specificMax) {
+ this.specificMax = specificMax;
+ return this;
+ }
+
+ public EditType setCustomColumn(String customColumn) {
+ this.customColumn = customColumn;
+ return this;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (object instanceof EditType) {
+ final EditType other = (EditType)object;
+ return other.rawValue == rawValue;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return rawValue;
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()
+ + " rawValue=" + rawValue
+ + " labelRes=" + labelRes
+ + " secondary=" + secondary
+ + " specificMax=" + specificMax
+ + " customColumn=" + customColumn;
+ }
+ }
+
+ public static class EventEditType extends EditType {
+ private boolean mYearOptional;
+
+ public EventEditType(int rawValue, int labelRes) {
+ super(rawValue, labelRes);
+ }
+
+ public boolean isYearOptional() {
+ return mYearOptional;
+ }
+
+ public EventEditType setYearOptional(boolean yearOptional) {
+ mYearOptional = yearOptional;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " mYearOptional=" + mYearOptional;
+ }
+ }
+
+ /**
+ * Description of a user-editable field on a {@link DataKind} row, such as
+ * {@link Phone#NUMBER}. Includes flags to apply to an {@link EditText}, and
+ * the column where this field is stored.
+ */
+ public static final class EditField {
+ public String column;
+ public int titleRes;
+ public int inputType;
+ public int minLines;
+ public boolean optional;
+ public boolean shortForm;
+ public boolean longForm;
+
+ public EditField(String column, int titleRes) {
+ this.column = column;
+ this.titleRes = titleRes;
+ }
+
+ public EditField(String column, int titleRes, int inputType) {
+ this(column, titleRes);
+ this.inputType = inputType;
+ }
+
+ public EditField setOptional(boolean optional) {
+ this.optional = optional;
+ return this;
+ }
+
+ public EditField setShortForm(boolean shortForm) {
+ this.shortForm = shortForm;
+ return this;
+ }
+
+ public EditField setLongForm(boolean longForm) {
+ this.longForm = longForm;
+ return this;
+ }
+
+ public EditField setMinLines(int minLines) {
+ this.minLines = minLines;
+ return this;
+ }
+
+ public boolean isMultiLine() {
+ return (inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) != 0;
+ }
+
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName() + ":"
+ + " column=" + column
+ + " titleRes=" + titleRes
+ + " inputType=" + inputType
+ + " minLines=" + minLines
+ + " optional=" + optional
+ + " shortForm=" + shortForm
+ + " longForm=" + longForm;
+ }
+ }
+
+ /**
+ * Generic method of inflating a given {@link ContentValues} into a user-readable
+ * {@link CharSequence}. For example, an inflater could combine the multiple
+ * columns of {@link StructuredPostal} together using a string resource
+ * before presenting to the user.
+ */
+ public interface StringInflater {
+ public CharSequence inflateUsing(Context context, ContentValues values);
+ }
+
+ /**
+ * Compare two {@link AccountType} by their {@link AccountType#getDisplayLabel} with the
+ * current locale.
+ */
+ public static class DisplayLabelComparator implements Comparator<AccountType> {
+ private final Context mContext;
+ /** {@link Comparator} for the current locale. */
+ private final Collator mCollator = Collator.getInstance();
+
+ public DisplayLabelComparator(Context context) {
+ mContext = context;
+ }
+
+ private String getDisplayLabel(AccountType type) {
+ CharSequence label = type.getDisplayLabel(mContext);
+ return (label == null) ? "" : label.toString();
+ }
+
+ @Override
+ public int compare(AccountType lhs, AccountType rhs) {
+ return mCollator.compare(getDisplayLabel(lhs), getDisplayLabel(rhs));
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountTypeProvider.java b/src/com/android/contacts/model/account/AccountTypeProvider.java
new file mode 100644
index 000000000..4f83ec62d
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountTypeProvider.java
@@ -0,0 +1,276 @@
+/*
+ * 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.model.account;
+
+import static com.android.contacts.util.DeviceLocalAccountTypeFactory.Util.isLocalAccountType;
+
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorDescription;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.SyncAdapterType;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+import com.android.contactsbind.ObjectFactory;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Provides access to {@link AccountType}s with contact data
+ *
+ * This class parses the contacts.xml for third-party accounts and caches the result.
+ * This means that {@link AccountTypeProvider#getAccountTypes(String)}} should be called from a
+ * background thread.
+ */
+public class AccountTypeProvider {
+ private static final String TAG = "AccountTypeProvider";
+
+ private final Context mContext;
+ private final DeviceLocalAccountTypeFactory mLocalAccountTypeFactory;
+ private final ImmutableMap<String, AuthenticatorDescription> mAuthTypes;
+
+ private final ConcurrentMap<String, List<AccountType>> mCache = new ConcurrentHashMap<>();
+
+ public AccountTypeProvider(Context context) {
+ this(context,
+ ObjectFactory.getDeviceLocalAccountTypeFactory(context),
+ ContentResolver.getSyncAdapterTypes(),
+ ((AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE))
+ .getAuthenticatorTypes());
+ }
+
+ public AccountTypeProvider(Context context, DeviceLocalAccountTypeFactory localTypeFactory,
+ SyncAdapterType[] syncAdapterTypes,
+ AuthenticatorDescription[] authenticatorDescriptions) {
+ mContext = context;
+ mLocalAccountTypeFactory = localTypeFactory;
+
+ mAuthTypes = onlyContactSyncable(authenticatorDescriptions, syncAdapterTypes);
+ }
+
+ /**
+ * Returns all account types associated with the provided type
+ *
+ * <p>There are many {@link AccountType}s for each accountType because {@AccountType} includes
+ * a dataSet and accounts can declare extension packages in contacts.xml that provide additional
+ * data sets for a particular type
+ * </p>
+ */
+ public List<AccountType> getAccountTypes(String accountType) {
+ // ConcurrentHashMap doesn't support null keys
+ if (accountType == null) {
+ AccountType type = mLocalAccountTypeFactory.getAccountType(accountType);
+ // Just in case the DeviceLocalAccountTypeFactory doesn't handle the null type
+ if (type == null) {
+ type = new FallbackAccountType(mContext);
+ }
+ return Collections.singletonList(type);
+ }
+
+ List<AccountType> types = mCache.get(accountType);
+ if (types == null) {
+ types = loadTypes(accountType);
+ mCache.put(accountType, types);
+ }
+ return types;
+ }
+
+ public boolean hasTypeForAccount(AccountWithDataSet account) {
+ return getTypeForAccount(account) != null;
+ }
+
+ public boolean hasTypeWithDataset(String type, String dataSet) {
+ // getAccountTypes() never returns null
+ final List<AccountType> accountTypes = getAccountTypes(type);
+ for (AccountType accountType : accountTypes) {
+ if (Objects.equal(accountType.dataSet, dataSet)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns the AccountType with the matching type and dataSet or null if no account with those
+ * members exists
+ */
+ public AccountType getType(String type, String dataSet) {
+ final List<AccountType> accountTypes = getAccountTypes(type);
+ for (AccountType accountType : accountTypes) {
+ if (Objects.equal(accountType.dataSet, dataSet)) {
+ return accountType;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the AccountType for a particular account or null if no account type exists for the
+ * account
+ */
+ public AccountType getTypeForAccount(AccountWithDataSet account) {
+ return getType(account.type, account.dataSet);
+ }
+
+ public boolean shouldUpdate(AuthenticatorDescription[] auths, SyncAdapterType[] syncTypes) {
+ Map<String, AuthenticatorDescription> contactsAuths = onlyContactSyncable(auths, syncTypes);
+ if (!contactsAuths.keySet().equals(mAuthTypes.keySet())) {
+ return true;
+ }
+ for (AuthenticatorDescription auth : contactsAuths.values()) {
+ if (!deepEquals(mAuthTypes.get(auth.type), auth)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean supportsContactsSyncing(String accountType) {
+ return mAuthTypes.containsKey(accountType);
+ }
+
+ private List<AccountType> loadTypes(String type) {
+ final AuthenticatorDescription auth = mAuthTypes.get(type);
+ if (auth == null) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Null auth type for " + type);
+ }
+ return Collections.emptyList();
+ }
+
+ AccountType accountType;
+ if (GoogleAccountType.ACCOUNT_TYPE.equals(type)) {
+ accountType = new GoogleAccountType(mContext, auth.packageName);
+ } else if (ExchangeAccountType.isExchangeType(type)) {
+ accountType = new ExchangeAccountType(mContext, auth.packageName, type);
+ } else if (SamsungAccountType.isSamsungAccountType(mContext, type,
+ auth.packageName)) {
+ accountType = new SamsungAccountType(mContext, auth.packageName, type);
+ } else if (!ExternalAccountType.hasContactsXml(mContext, auth.packageName)
+ && isLocalAccountType(mLocalAccountTypeFactory, type)) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Registering local account type=" + type
+ + ", packageName=" + auth.packageName);
+ }
+ accountType = mLocalAccountTypeFactory.getAccountType(type);
+ } else {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Registering external account type=" + type
+ + ", packageName=" + auth.packageName);
+ }
+ accountType = new ExternalAccountType(mContext, auth.packageName, false);
+ }
+ if (!accountType.isInitialized()) {
+ if (accountType.isEmbedded()) {
+ throw new IllegalStateException("Problem initializing embedded type "
+ + accountType.getClass().getCanonicalName());
+ } else {
+ // Skip external account types that couldn't be initialized
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Skipping external account type=" + type
+ + ", packageName=" + auth.packageName);
+ }
+ return Collections.emptyList();
+ }
+ }
+
+ accountType.initializeFieldsFromAuthenticator(auth);
+
+ final ImmutableList.Builder<AccountType> result = ImmutableList.builder();
+ result.add(accountType);
+
+ for (String extensionPackage : accountType.getExtensionPackageNames()) {
+ final ExternalAccountType extensionType =
+ new ExternalAccountType(mContext, extensionPackage, true);
+ if (!extensionType.isInitialized()) {
+ // Skip external account types that couldn't be initialized.
+ continue;
+ }
+ if (!extensionType.hasContactsMetadata()) {
+ Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+ + " it doesn't have the CONTACTS_STRUCTURE metadata");
+ continue;
+ }
+ if (TextUtils.isEmpty(extensionType.accountType)) {
+ Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+ + " the CONTACTS_STRUCTURE metadata doesn't have the accountType"
+ + " attribute");
+ continue;
+ }
+ if (!Objects.equal(extensionType.accountType, type)) {
+ Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+ + " the account type + " + extensionType.accountType +
+ " doesn't match expected type " + type);
+ continue;
+ }
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Registering extension package account type="
+ + accountType.accountType + ", dataSet=" + accountType.dataSet
+ + ", packageName=" + extensionPackage);
+ }
+
+ result.add(extensionType);
+ }
+ return result.build();
+ }
+
+ private static ImmutableMap<String, AuthenticatorDescription> onlyContactSyncable(
+ AuthenticatorDescription[] auths, SyncAdapterType[] syncTypes) {
+ final Set<String> mContactSyncableTypes = new HashSet<>();
+ for (SyncAdapterType type : syncTypes) {
+ if (type.authority.equals(ContactsContract.AUTHORITY)) {
+ mContactSyncableTypes.add(type.accountType);
+ }
+ }
+
+ final ImmutableMap.Builder<String, AuthenticatorDescription> builder =
+ ImmutableMap.builder();
+ for (AuthenticatorDescription auth : auths) {
+ if (mContactSyncableTypes.contains(auth.type)) {
+ builder.put(auth.type, auth);
+ }
+ }
+ return builder.build();
+ }
+
+ /**
+ * Compares all fields in auth1 and auth2
+ *
+ * <p>By default {@link AuthenticatorDescription#equals(Object)} only checks the type</p>
+ */
+ private boolean deepEquals(AuthenticatorDescription auth1, AuthenticatorDescription auth2) {
+ return Objects.equal(auth1, auth2) &&
+ Objects.equal(auth1.packageName, auth2.packageName) &&
+ auth1.labelId == auth2.labelId &&
+ auth1.iconId == auth2.iconId &&
+ auth1.smallIconId == auth2.smallIconId &&
+ auth1.accountPreferencesId == auth2.accountPreferencesId &&
+ auth1.customTokens == auth2.customTokens;
+ }
+
+}
diff --git a/src/com/android/contacts/model/account/AccountTypeWithDataSet.java b/src/com/android/contacts/model/account/AccountTypeWithDataSet.java
new file mode 100644
index 000000000..ab0a8913e
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountTypeWithDataSet.java
@@ -0,0 +1,99 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.google.common.base.Objects;
+
+
+/**
+ * Encapsulates an "account type" string and a "data set" string.
+ */
+public class AccountTypeWithDataSet {
+
+ private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
+ private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
+
+ /** account type. Can be null for fallback type. */
+ public final String accountType;
+
+ /** dataSet may be null, but never be "". */
+ public final String dataSet;
+
+ private AccountTypeWithDataSet(String accountType, String dataSet) {
+ this.accountType = TextUtils.isEmpty(accountType) ? null : accountType;
+ this.dataSet = TextUtils.isEmpty(dataSet) ? null : dataSet;
+ }
+
+ public static AccountTypeWithDataSet get(String accountType, String dataSet) {
+ return new AccountTypeWithDataSet(accountType, dataSet);
+ }
+
+ /**
+ * Return true if there are any contacts in the database with this account type and data set.
+ * Touches DB. Don't use in the UI thread.
+ */
+ public boolean hasData(Context context) {
+ final String BASE_SELECTION = RawContacts.ACCOUNT_TYPE + " = ?";
+ final String selection;
+ final String[] args;
+ if (TextUtils.isEmpty(dataSet)) {
+ selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
+ args = new String[] {accountType};
+ } else {
+ selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
+ args = new String[] {accountType, dataSet};
+ }
+
+ final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
+ ID_PROJECTION, selection, args, null);
+ if (c == null) return false;
+ try {
+ return c.moveToFirst();
+ } finally {
+ c.close();
+ }
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof AccountTypeWithDataSet)) return false;
+
+ AccountTypeWithDataSet other = (AccountTypeWithDataSet) o;
+ return Objects.equal(accountType, other.accountType)
+ && Objects.equal(dataSet, other.dataSet);
+ }
+
+ @Override
+ public int hashCode() {
+ return (accountType == null ? 0 : accountType.hashCode())
+ ^ (dataSet == null ? 0 : dataSet.hashCode());
+ }
+
+ @Override
+ public String toString() {
+ return "[" + accountType + "/" + dataSet + "]";
+ }
+}
diff --git a/src/com/android/contacts/model/account/AccountWithDataSet.java b/src/com/android/contacts/model/account/AccountWithDataSet.java
new file mode 100644
index 000000000..a16313981
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountWithDataSet.java
@@ -0,0 +1,258 @@
+/*
+ * 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.model.account;
+
+import android.accounts.Account;
+import android.content.ContentProviderOperation;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.preference.ContactsPreferences;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * Wrapper for an account that includes a data set (which may be null).
+ */
+public class AccountWithDataSet implements Parcelable {
+ private static final String STRINGIFY_SEPARATOR = "\u0001";
+ private static final String ARRAY_STRINGIFY_SEPARATOR = "\u0002";
+
+ private static final Pattern STRINGIFY_SEPARATOR_PAT =
+ Pattern.compile(Pattern.quote(STRINGIFY_SEPARATOR));
+ private static final Pattern ARRAY_STRINGIFY_SEPARATOR_PAT =
+ Pattern.compile(Pattern.quote(ARRAY_STRINGIFY_SEPARATOR));
+
+ public final String name;
+ public final String type;
+ public final String dataSet;
+ private final AccountTypeWithDataSet mAccountTypeWithDataSet;
+
+ private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
+ private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
+
+ public static final String LOCAL_ACCOUNT_SELECTION = RawContacts.ACCOUNT_TYPE + " IS NULL AND "
+ + RawContacts.ACCOUNT_NAME + " IS NULL AND "
+ + RawContacts.DATA_SET + " IS NULL";
+
+ public AccountWithDataSet(String name, String type, String dataSet) {
+ this.name = emptyToNull(name);
+ this.type = emptyToNull(type);
+ this.dataSet = emptyToNull(dataSet);
+ mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
+ }
+
+ private static final String emptyToNull(String text) {
+ return TextUtils.isEmpty(text) ? null : text;
+ }
+
+ public AccountWithDataSet(Parcel in) {
+ this.name = in.readString();
+ this.type = in.readString();
+ this.dataSet = in.readString();
+ mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
+ }
+
+ public boolean isNullAccount() {
+ return name == null && type == null && dataSet == null;
+ }
+
+ public static AccountWithDataSet getNullAccount() {
+ return new AccountWithDataSet(null, null, null);
+ }
+
+ public Account getAccountOrNull() {
+ if (name != null && type != null) {
+ return new Account(name, type);
+ }
+ return null;
+ }
+
+ public int describeContents() {
+ return 0;
+ }
+
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(name);
+ dest.writeString(type);
+ dest.writeString(dataSet);
+ }
+
+ // For Parcelable
+ public static final Creator<AccountWithDataSet> CREATOR = new Creator<AccountWithDataSet>() {
+ public AccountWithDataSet createFromParcel(Parcel source) {
+ return new AccountWithDataSet(source);
+ }
+
+ public AccountWithDataSet[] newArray(int size) {
+ return new AccountWithDataSet[size];
+ }
+ };
+
+ public AccountTypeWithDataSet getAccountTypeWithDataSet() {
+ return mAccountTypeWithDataSet;
+ }
+
+ /**
+ * Return {@code true} if this account has any contacts in the database.
+ * Touches DB. Don't use in the UI thread.
+ */
+ public boolean hasData(Context context) {
+ String selection;
+ String[] args = null;
+ if (isNullAccount()) {
+ selection = LOCAL_ACCOUNT_SELECTION;
+ } else {
+ final String BASE_SELECTION =
+ RawContacts.ACCOUNT_TYPE + " = ?" + " AND " + RawContacts.ACCOUNT_NAME + " = ?";
+ if (TextUtils.isEmpty(dataSet)) {
+ selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
+ args = new String[] {type, name};
+ } else {
+ selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
+ args = new String[] {type, name, dataSet};
+ }
+ }
+ selection += " AND " + RawContacts.DELETED + "=0";
+
+ final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
+ ID_PROJECTION, selection, args, null);
+ if (c == null) return false;
+ try {
+ return c.moveToFirst();
+ } finally {
+ c.close();
+ }
+ }
+
+ public boolean equals(Object obj) {
+ if (obj instanceof AccountWithDataSet) {
+ AccountWithDataSet other = (AccountWithDataSet) obj;
+ return Objects.equal(name, other.name)
+ && Objects.equal(type, other.type)
+ && Objects.equal(dataSet, other.dataSet);
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ int result = 17;
+ result = 31 * result + (name != null ? name.hashCode() : 0);
+ result = 31 * result + (type != null ? type.hashCode() : 0);
+ result = 31 * result + (dataSet != null ? dataSet.hashCode() : 0);
+ return result;
+ }
+
+ public String toString() {
+ return "AccountWithDataSet {name=" + name + ", type=" + type + ", dataSet=" + dataSet + "}";
+ }
+
+ private static StringBuilder addStringified(StringBuilder sb, AccountWithDataSet account) {
+ if (!TextUtils.isEmpty(account.name)) sb.append(account.name);
+ sb.append(STRINGIFY_SEPARATOR);
+ if (!TextUtils.isEmpty(account.type)) sb.append(account.type);
+ sb.append(STRINGIFY_SEPARATOR);
+ if (!TextUtils.isEmpty(account.dataSet)) sb.append(account.dataSet);
+
+ return sb;
+ }
+
+ /**
+ * Pack the instance into a string.
+ */
+ public String stringify() {
+ return addStringified(new StringBuilder(), this).toString();
+ }
+
+ /**
+ * Returns a {@link ContentProviderOperation} that will create a RawContact in this account
+ */
+ public ContentProviderOperation newRawContactOperation() {
+ final ContentProviderOperation.Builder builder =
+ ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
+ .withValue(RawContacts.ACCOUNT_NAME, name)
+ .withValue(RawContacts.ACCOUNT_TYPE, type);
+ if (dataSet != null) {
+ builder.withValue(RawContacts.DATA_SET, dataSet);
+ }
+ return builder.build();
+ }
+
+ /**
+ * Unpack a string created by {@link #stringify}.
+ *
+ * @throws IllegalArgumentException if it's an invalid string.
+ */
+ public static AccountWithDataSet unstringify(String s) {
+ final String[] array = STRINGIFY_SEPARATOR_PAT.split(s, 3);
+ if (array.length < 3) {
+ throw new IllegalArgumentException("Invalid string " + s);
+ }
+ return new AccountWithDataSet(array[0], array[1],
+ TextUtils.isEmpty(array[2]) ? null : array[2]);
+ }
+
+ /**
+ * Pack a list of {@link AccountWithDataSet} into a string.
+ */
+ public static String stringifyList(List<AccountWithDataSet> accounts) {
+ final StringBuilder sb = new StringBuilder();
+
+ for (AccountWithDataSet account : accounts) {
+ if (sb.length() > 0) {
+ sb.append(ARRAY_STRINGIFY_SEPARATOR);
+ }
+ addStringified(sb, account);
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * Unpack a list of {@link AccountWithDataSet} into a string.
+ *
+ * @throws IllegalArgumentException if it's an invalid string.
+ */
+ public static List<AccountWithDataSet> unstringifyList(String s) {
+ final ArrayList<AccountWithDataSet> ret = Lists.newArrayList();
+ if (TextUtils.isEmpty(s)) {
+ return ret;
+ }
+
+ final String[] array = ARRAY_STRINGIFY_SEPARATOR_PAT.split(s);
+
+ for (int i = 0; i < array.length; i++) {
+ ret.add(unstringify(array[i]));
+ }
+
+ return ret;
+ }
+}
+
diff --git a/src/com/android/contacts/model/account/AccountsLoader.java b/src/com/android/contacts/model/account/AccountsLoader.java
new file mode 100644
index 000000000..e3b4336e1
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountsLoader.java
@@ -0,0 +1,111 @@
+/*
+ * 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.model.account;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.os.Bundle;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.List;
+
+/**
+ * Loads the accounts from AccountTypeManager
+ */
+public class AccountsLoader extends ListenableFutureLoader<List<AccountInfo>> {
+ private final AccountTypeManager mAccountTypeManager;
+ private final Predicate<AccountInfo> mFilter;
+
+ public AccountsLoader(Context context) {
+ this(context, Predicates.<AccountInfo>alwaysTrue());
+ }
+
+ public AccountsLoader(Context context, Predicate<AccountInfo> filter) {
+ super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+ mAccountTypeManager = AccountTypeManager.getInstance(context);
+ mFilter = filter;
+ }
+
+ @Override
+ protected ListenableFuture<List<AccountInfo>> loadData() {
+ return mAccountTypeManager.filterAccountsAsync(mFilter);
+ }
+
+ @Override
+ protected boolean isSameData(List<AccountInfo> previous, List<AccountInfo> next) {
+ return Objects.equal(AccountInfo.extractAccounts(previous),
+ AccountInfo.extractAccounts(next));
+ }
+
+
+ public interface AccountsListener {
+ void onAccountsLoaded(List<AccountInfo> accounts);
+ }
+
+ /**
+ * Loads the accounts into the target fragment using {@link LoaderManager}
+ *
+ * <p>This is a convenience method to reduce the
+ * boilerplate needed when implementing {@link android.app.LoaderManager.LoaderCallbacks}
+ * in the simple case that the fragment wants to just load the accounts directly</p>
+ * <p>Note that changing the filter between invocations in the same component will not work
+ * properly because the loader is cached.</p>
+ */
+ public static <FragmentType extends Fragment & AccountsListener> void loadAccounts(
+ final FragmentType fragment, int loaderId, final Predicate<AccountInfo> filter) {
+ loadAccounts(
+ fragment.getActivity(), fragment.getLoaderManager(), loaderId, filter, fragment);
+ }
+
+ /**
+ * Same as {@link #loadAccounts(Fragment, int, Predicate)} for an Activity
+ */
+ public static <ActivityType extends Activity & AccountsListener> void loadAccounts(
+ final ActivityType activity, int id, final Predicate<AccountInfo> filter) {
+ loadAccounts(activity, activity.getLoaderManager(), id, filter, activity);
+ }
+
+ private static void loadAccounts(final Context context, LoaderManager loaderManager, int id,
+ final Predicate<AccountInfo> filter, final AccountsListener listener) {
+ loaderManager.initLoader(id, null,
+ new LoaderManager.LoaderCallbacks<List<AccountInfo>>() {
+ @Override
+ public Loader<List<AccountInfo>> onCreateLoader(int id, Bundle args) {
+ return new AccountsLoader(context, filter);
+ }
+
+ @Override
+ public void onLoadFinished(
+ Loader<List<AccountInfo>> loader, List<AccountInfo> data) {
+ listener.onAccountsLoaded(data);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<List<AccountInfo>> loader) {
+ }
+ });
+ }
+}
diff --git a/src/com/android/contacts/model/account/BaseAccountType.java b/src/com/android/contacts/model/account/BaseAccountType.java
new file mode 100644
index 000000000..50f623ae9
--- /dev/null
+++ b/src/com/android/contacts/model/account/BaseAccountType.java
@@ -0,0 +1,1469 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.inputmethod.EditorInfo;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.ContactDisplayUtils;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class BaseAccountType extends AccountType {
+ private static final String TAG = "BaseAccountType";
+
+ protected static final int FLAGS_PHONE = EditorInfo.TYPE_CLASS_PHONE;
+ protected static final int FLAGS_EMAIL = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
+ protected static final int FLAGS_PERSON_NAME = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+ protected static final int FLAGS_PHONETIC = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_PHONETIC;
+ protected static final int FLAGS_GENERIC_NAME = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
+ protected static final int FLAGS_NOTE = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+ protected static final int FLAGS_EVENT = EditorInfo.TYPE_CLASS_TEXT;
+ protected static final int FLAGS_WEBSITE = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_URI;
+ protected static final int FLAGS_POSTAL = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_POSTAL_ADDRESS | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS
+ | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+ protected static final int FLAGS_SIP_ADDRESS = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; // since SIP addresses have the same
+ // basic format as email addresses
+ protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+
+ // Specify the maximum number of lines that can be used to display various field types. If no
+ // value is specified for a particular type, we use the default value from {@link DataKind}.
+ protected static final int MAX_LINES_FOR_POSTAL_ADDRESS = 10;
+ protected static final int MAX_LINES_FOR_GROUP = 10;
+ protected static final int MAX_LINES_FOR_NOTE = 100;
+
+ private interface Tag {
+ static final String DATA_KIND = "DataKind";
+ static final String TYPE = "Type";
+ }
+
+ private interface Attr {
+ static final String MAX_OCCURRENCE = "maxOccurs";
+ static final String DATE_WITH_TIME = "dateWithTime";
+ static final String YEAR_OPTIONAL = "yearOptional";
+ static final String KIND = "kind";
+ static final String TYPE = "type";
+ }
+
+ protected interface Weight {
+ static final int NONE = -1;
+ static final int PHONE = 10;
+ static final int EMAIL = 15;
+ static final int STRUCTURED_POSTAL = 25;
+ static final int NICKNAME = 111;
+ static final int EVENT = 120;
+ static final int ORGANIZATION = 125;
+ static final int NOTE = 130;
+ static final int IM = 140;
+ static final int SIP_ADDRESS = 145;
+ static final int GROUP_MEMBERSHIP = 150;
+ static final int WEBSITE = 160;
+ static final int RELATIONSHIP = 999;
+ }
+
+ public BaseAccountType() {
+ this.accountType = null;
+ this.dataSet = null;
+ this.titleRes = R.string.account_phone;
+ this.iconRes = R.mipmap.ic_contacts_launcher;
+ }
+
+ protected static EditType buildPhoneType(int type) {
+ return new EditType(type, Phone.getTypeLabelResource(type));
+ }
+
+ protected static EditType buildEmailType(int type) {
+ return new EditType(type, Email.getTypeLabelResource(type));
+ }
+
+ protected static EditType buildPostalType(int type) {
+ return new EditType(type, StructuredPostal.getTypeLabelResource(type));
+ }
+
+ protected static EditType buildImType(int type) {
+ return new EditType(type, Im.getProtocolLabelResource(type));
+ }
+
+ protected static EditType buildEventType(int type, boolean yearOptional) {
+ return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional);
+ }
+
+ protected static EditType buildRelationType(int type) {
+ return new EditType(type, Relation.getTypeLabelResource(type));
+ }
+
+ protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+ final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+ R.string.nameLabelsGroup, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindName(Context context) throws DefinitionException {
+ final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
+ R.string.nameLabelsGroup, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ final boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+ kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setOptional(true));
+ if (!displayOrderPrimary) {
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ } else {
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ }
+ kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setOptional(true));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+ R.string.name_phonetic, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindNickname(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Nickname.CONTENT_ITEM_TYPE,
+ R.string.nicknameLabelsGroup, Weight.NICKNAME, true));
+ kind.typeOverallMax = 1;
+ kind.actionHeader = new SimpleInflater(R.string.nicknameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+ FLAGS_PERSON_NAME));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup,
+ Weight.PHONE, true));
+ kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24;
+ kind.iconAltDescriptionRes = R.string.sms;
+ kind.actionHeader = new PhoneActionInflater();
+ kind.actionAltHeader = new PhoneActionAltInflater();
+ kind.actionBody = new SimpleInflater(Phone.NUMBER);
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+ kind.typeList.add(
+ buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Phone.LABEL));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CALLBACK).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_ISDN).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER_FAX).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_TELEX).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_TTY_TDD).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_MOBILE).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_PAGER).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Email.CONTENT_ITEM_TYPE, R.string.emailLabelsGroup,
+ Weight.EMAIL, true));
+ kind.actionHeader = new EmailActionInflater();
+ kind.actionBody = new SimpleInflater(Email.DATA);
+ kind.typeColumn = Email.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+ kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+ kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+ kind.typeList.add(buildEmailType(Email.TYPE_MOBILE));
+ kind.typeList.add(
+ buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Email.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
+ R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL, true));
+ kind.actionHeader = new PostalActionInflater();
+ kind.actionBody = new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS);
+ kind.typeColumn = StructuredPostal.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(StructuredPostal.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(
+ new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
+ FLAGS_POSTAL));
+
+ kind.maxLinesForDisplay = MAX_LINES_FOR_POSTAL_ADDRESS;
+
+ return kind;
+ }
+
+ protected DataKind addDataKindIm(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
+ Weight.IM, true));
+ kind.actionHeader = new ImActionInflater();
+ kind.actionBody = new SimpleInflater(Im.DATA);
+
+ // NOTE: even though a traditional "type" exists, for editing
+ // purposes we're using the protocol to pick labels
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+ kind.typeColumn = Im.PROTOCOL;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildImType(Im.PROTOCOL_AIM));
+ kind.typeList.add(buildImType(Im.PROTOCOL_MSN));
+ kind.typeList.add(buildImType(Im.PROTOCOL_YAHOO));
+ kind.typeList.add(buildImType(Im.PROTOCOL_SKYPE));
+ kind.typeList.add(buildImType(Im.PROTOCOL_QQ));
+ kind.typeList.add(buildImType(Im.PROTOCOL_GOOGLE_TALK));
+ kind.typeList.add(buildImType(Im.PROTOCOL_ICQ));
+ kind.typeList.add(buildImType(Im.PROTOCOL_JABBER));
+ kind.typeList.add(buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true).setCustomColumn(
+ Im.CUSTOM_PROTOCOL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Organization.CONTENT_ITEM_TYPE,
+ R.string.organizationLabelsGroup, Weight.ORGANIZATION, true));
+ kind.actionHeader = new SimpleInflater(R.string.organizationLabelsGroup);
+ kind.actionBody = ORGANIZATION_BODY_INFLATER;
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+ FLAGS_GENERIC_NAME));
+ kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+ FLAGS_GENERIC_NAME));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Photo.CONTENT_ITEM_TYPE, -1, Weight.NONE, true));
+ kind.typeOverallMax = 1;
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+ return kind;
+ }
+
+ protected DataKind addDataKindNote(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Note.CONTENT_ITEM_TYPE, R.string.label_notes,
+ Weight.NOTE, true));
+ kind.typeOverallMax = 1;
+ kind.actionHeader = new SimpleInflater(R.string.label_notes);
+ kind.actionBody = new SimpleInflater(Note.NOTE);
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+ kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
+
+ return kind;
+ }
+
+ protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Website.CONTENT_ITEM_TYPE,
+ R.string.websiteLabelsGroup, Weight.WEBSITE, true));
+ kind.actionHeader = new SimpleInflater(R.string.websiteLabelsGroup);
+ kind.actionBody = new SimpleInflater(Website.URL);
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindSipAddress(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(SipAddress.CONTENT_ITEM_TYPE,
+ R.string.label_sip_address, Weight.SIP_ADDRESS, true));
+
+ kind.actionHeader = new SimpleInflater(R.string.label_sip_address);
+ kind.actionBody = new SimpleInflater(SipAddress.SIP_ADDRESS);
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
+ R.string.label_sip_address, FLAGS_SIP_ADDRESS));
+ kind.typeOverallMax = 1;
+
+ return kind;
+ }
+
+ protected DataKind addDataKindGroupMembership(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(GroupMembership.CONTENT_ITEM_TYPE,
+ R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, true));
+
+ kind.typeOverallMax = 1;
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+
+ kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
+
+ return kind;
+ }
+
+ protected DataKind addDataKindCustomField(Context context) throws DefinitionException {
+ final DataKind kind = addKind(new DataKind(CustomDataItem.MIMETYPE_CUSTOM_FIELD,
+ R.string.label_custom_field, Weight.NONE, /* editable */ false));
+ kind.actionBody = new SimpleInflater(Data.DATA2);
+ return kind;
+ }
+
+ /**
+ * Simple inflater that assumes a string resource has a "%s" that will be
+ * filled from the given column.
+ */
+ public static class SimpleInflater implements StringInflater {
+ private final int mStringRes;
+ private final String mColumnName;
+
+ public SimpleInflater(int stringRes) {
+ this(stringRes, null);
+ }
+
+ public SimpleInflater(String columnName) {
+ this(-1, columnName);
+ }
+
+ public SimpleInflater(int stringRes, String columnName) {
+ mStringRes = stringRes;
+ mColumnName = columnName;
+ }
+
+ @Override
+ public CharSequence inflateUsing(Context context, ContentValues values) {
+ final boolean validColumn = values.containsKey(mColumnName);
+ final boolean validString = mStringRes > 0;
+
+ final CharSequence stringValue = validString ? context.getText(mStringRes) : null;
+ final CharSequence columnValue = validColumn ? values.getAsString(mColumnName) : null;
+
+ if (validString && validColumn) {
+ return String.format(stringValue.toString(), columnValue);
+ } else if (validString) {
+ return stringValue;
+ } else if (validColumn) {
+ return columnValue;
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()
+ + " mStringRes=" + mStringRes
+ + " mColumnName" + mColumnName;
+ }
+
+ public String getColumnNameForTest() {
+ return mColumnName;
+ }
+ }
+
+ public static abstract class CommonInflater implements StringInflater {
+ protected abstract int getTypeLabelResource(Integer type);
+
+ protected boolean isCustom(Integer type) {
+ return type == BaseTypes.TYPE_CUSTOM;
+ }
+
+ protected String getTypeColumn() {
+ return Phone.TYPE;
+ }
+
+ protected String getLabelColumn() {
+ return Phone.LABEL;
+ }
+
+ protected CharSequence getTypeLabel(Resources res, Integer type, CharSequence label) {
+ final int labelRes = getTypeLabelResource(type);
+ if (type == null) {
+ return res.getText(labelRes);
+ } else if (isCustom(type)) {
+ return res.getString(labelRes, label == null ? "" : label);
+ } else {
+ return res.getText(labelRes);
+ }
+ }
+
+ @Override
+ public CharSequence inflateUsing(Context context, ContentValues values) {
+ final Integer type = values.getAsInteger(getTypeColumn());
+ final String label = values.getAsString(getLabelColumn());
+ return getTypeLabel(context.getResources(), type, label);
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName();
+ }
+ }
+
+ public static class PhoneActionInflater extends CommonInflater {
+ @Override
+ protected boolean isCustom(Integer type) {
+ return ContactDisplayUtils.isCustomPhoneType(type);
+ }
+
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ return ContactDisplayUtils.getPhoneLabelResourceId(type);
+ }
+ }
+
+ public static class PhoneActionAltInflater extends CommonInflater {
+ @Override
+ protected boolean isCustom(Integer type) {
+ return ContactDisplayUtils.isCustomPhoneType(type);
+ }
+
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ return ContactDisplayUtils.getSmsLabelResourceId(type);
+ }
+ }
+
+ public static class EmailActionInflater extends CommonInflater {
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ if (type == null) return R.string.email;
+ switch (type) {
+ case Email.TYPE_HOME: return R.string.email_home;
+ case Email.TYPE_WORK: return R.string.email_work;
+ case Email.TYPE_OTHER: return R.string.email_other;
+ case Email.TYPE_MOBILE: return R.string.email_mobile;
+ default: return R.string.email_custom;
+ }
+ }
+ }
+
+ public static class EventActionInflater extends CommonInflater {
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ return Event.getTypeResource(type);
+ }
+ }
+
+ public static class RelationActionInflater extends CommonInflater {
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ return Relation.getTypeLabelResource(type == null ? Relation.TYPE_CUSTOM : type);
+ }
+ }
+
+ public static class PostalActionInflater extends CommonInflater {
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ if (type == null) return R.string.map_other;
+ switch (type) {
+ case StructuredPostal.TYPE_HOME: return R.string.map_home;
+ case StructuredPostal.TYPE_WORK: return R.string.map_work;
+ case StructuredPostal.TYPE_OTHER: return R.string.map_other;
+ default: return R.string.map_custom;
+ }
+ }
+ }
+
+ public static class ImActionInflater extends CommonInflater {
+ @Override
+ protected String getTypeColumn() {
+ return Im.PROTOCOL;
+ }
+
+ @Override
+ protected String getLabelColumn() {
+ return Im.CUSTOM_PROTOCOL;
+ }
+
+ @Override
+ protected int getTypeLabelResource(Integer type) {
+ if (type == null) return R.string.chat;
+ switch (type) {
+ case Im.PROTOCOL_AIM: return R.string.chat_aim;
+ case Im.PROTOCOL_MSN: return R.string.chat_msn;
+ case Im.PROTOCOL_YAHOO: return R.string.chat_yahoo;
+ case Im.PROTOCOL_SKYPE: return R.string.chat_skype;
+ case Im.PROTOCOL_QQ: return R.string.chat_qq;
+ case Im.PROTOCOL_GOOGLE_TALK: return R.string.chat_gtalk;
+ case Im.PROTOCOL_ICQ: return R.string.chat_icq;
+ case Im.PROTOCOL_JABBER: return R.string.chat_jabber;
+ case Im.PROTOCOL_NETMEETING: return R.string.chat;
+ default: return R.string.chat;
+ }
+ }
+ }
+
+ public static final StringInflater ORGANIZATION_BODY_INFLATER = new StringInflater() {
+ @Override
+ public CharSequence inflateUsing(Context context, ContentValues values) {
+ final CharSequence companyValue = values.containsKey(Organization.COMPANY) ?
+ values.getAsString(Organization.COMPANY) : null;
+ final CharSequence titleValue = values.containsKey(Organization.TITLE) ?
+ values.getAsString(Organization.TITLE) : null;
+
+ if (companyValue != null && titleValue != null) {
+ return companyValue + ": " + titleValue;
+ } else if (companyValue == null) {
+ return titleValue;
+ } else {
+ return companyValue;
+ }
+ }
+ };
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return false;
+ }
+
+ /**
+ * Parses the content of the EditSchema tag in contacts.xml.
+ */
+ protected final void parseEditSchema(Context context, XmlPullParser parser, AttributeSet attrs)
+ throws XmlPullParserException, IOException, DefinitionException {
+
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ final int depth = parser.getDepth();
+ if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
+ continue; // Not direct child tag
+ }
+
+ final String tag = parser.getName();
+
+ if (Tag.DATA_KIND.equals(tag)) {
+ for (DataKind kind : KindParser.INSTANCE.parseDataKindTag(context, parser, attrs)) {
+ addKind(kind);
+ }
+ } else {
+ Log.w(TAG, "Skipping unknown tag " + tag);
+ }
+ }
+ }
+
+ // Utility methods to keep code shorter.
+ private static boolean getAttr(AttributeSet attrs, String attribute, boolean defaultValue) {
+ return attrs.getAttributeBooleanValue(null, attribute, defaultValue);
+ }
+
+ private static int getAttr(AttributeSet attrs, String attribute, int defaultValue) {
+ return attrs.getAttributeIntValue(null, attribute, defaultValue);
+ }
+
+ private static String getAttr(AttributeSet attrs, String attribute) {
+ return attrs.getAttributeValue(null, attribute);
+ }
+
+ // TODO Extract it to its own class, and move all KindBuilders to it as well.
+ private static class KindParser {
+ public static final KindParser INSTANCE = new KindParser();
+
+ private final Map<String, KindBuilder> mBuilders = Maps.newHashMap();
+
+ private KindParser() {
+ addBuilder(new NameKindBuilder());
+ addBuilder(new NicknameKindBuilder());
+ addBuilder(new PhoneKindBuilder());
+ addBuilder(new EmailKindBuilder());
+ addBuilder(new StructuredPostalKindBuilder());
+ addBuilder(new ImKindBuilder());
+ addBuilder(new OrganizationKindBuilder());
+ addBuilder(new PhotoKindBuilder());
+ addBuilder(new NoteKindBuilder());
+ addBuilder(new WebsiteKindBuilder());
+ addBuilder(new SipAddressKindBuilder());
+ addBuilder(new GroupMembershipKindBuilder());
+ addBuilder(new EventKindBuilder());
+ addBuilder(new RelationshipKindBuilder());
+ }
+
+ private void addBuilder(KindBuilder builder) {
+ mBuilders.put(builder.getTagName(), builder);
+ }
+
+ /**
+ * Takes a {@link XmlPullParser} at the start of a DataKind tag, parses it and returns
+ * {@link DataKind}s. (Usually just one, but there are three for the "name" kind.)
+ *
+ * This method returns a list, because we need to add 3 kinds for the name data kind.
+ * (structured, display and phonetic)
+ */
+ public List<DataKind> parseDataKindTag(Context context, XmlPullParser parser,
+ AttributeSet attrs)
+ throws DefinitionException, XmlPullParserException, IOException {
+ final String kind = getAttr(attrs, Attr.KIND);
+ final KindBuilder builder = mBuilders.get(kind);
+ if (builder != null) {
+ return builder.parseDataKind(context, parser, attrs);
+ } else {
+ throw new DefinitionException("Undefined data kind '" + kind + "'");
+ }
+ }
+ }
+
+ private static abstract class KindBuilder {
+
+ public abstract String getTagName();
+
+ /**
+ * DataKind tag parser specific to each kind. Subclasses must implement it.
+ */
+ public abstract List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException, IOException;
+
+ /**
+ * Creates a new {@link DataKind}, and also parses the child Type tags in the DataKind
+ * tag.
+ */
+ protected final DataKind newDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs, boolean isPseudo, String mimeType, String typeColumn,
+ int titleRes, int weight, StringInflater actionHeader, StringInflater actionBody)
+ throws DefinitionException, XmlPullParserException, IOException {
+
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Adding DataKind: " + mimeType);
+ }
+
+ final DataKind kind = new DataKind(mimeType, titleRes, weight, true);
+ kind.typeColumn = typeColumn;
+ kind.actionHeader = actionHeader;
+ kind.actionBody = actionBody;
+ kind.fieldList = Lists.newArrayList();
+
+ // Get more information from the tag...
+ // A pseudo data kind doesn't have corresponding tag the XML, so we skip this.
+ if (!isPseudo) {
+ kind.typeOverallMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+ // Process "Type" tags.
+ // If a kind has the type column, contacts.xml must have at least one type
+ // definition. Otherwise, it mustn't have a type definition.
+ if (kind.typeColumn != null) {
+ // Parse and add types.
+ kind.typeList = Lists.newArrayList();
+ parseTypes(context, parser, attrs, kind, true);
+ if (kind.typeList.size() == 0) {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " must have at least one type");
+ }
+ } else {
+ // Make sure it has no types.
+ parseTypes(context, parser, attrs, kind, false /* can't have types */);
+ }
+ }
+
+ return kind;
+ }
+
+ /**
+ * Parses Type elements in a DataKind element, and if {@code canHaveTypes} is true adds
+ * them to the given {@link DataKind}. Otherwise the {@link DataKind} can't have a type,
+ * so throws {@link DefinitionException}.
+ */
+ private void parseTypes(Context context, XmlPullParser parser, AttributeSet attrs,
+ DataKind kind, boolean canHaveTypes)
+ throws DefinitionException, XmlPullParserException, IOException {
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ final int depth = parser.getDepth();
+ if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
+ continue; // Not direct child tag
+ }
+
+ final String tag = parser.getName();
+ if (Tag.TYPE.equals(tag)) {
+ if (canHaveTypes) {
+ kind.typeList.add(parseTypeTag(parser, attrs, kind));
+ } else {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " can't have types");
+ }
+ } else {
+ throw new DefinitionException("Unknown tag: " + tag);
+ }
+ }
+ }
+
+ /**
+ * Parses a single Type element and returns an {@link EditType} built from it. Uses
+ * {@link #buildEditTypeForTypeTag} defined in subclasses to actually build an
+ * {@link EditType}.
+ */
+ private EditType parseTypeTag(XmlPullParser parser, AttributeSet attrs, DataKind kind)
+ throws DefinitionException {
+
+ final String typeName = getAttr(attrs, Attr.TYPE);
+
+ final EditType et = buildEditTypeForTypeTag(attrs, typeName);
+ if (et == null) {
+ throw new DefinitionException(
+ "Undefined type '" + typeName + "' for data kind '" + kind.mimeType + "'");
+ }
+ et.specificMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+ return et;
+ }
+
+ /**
+ * Returns an {@link EditType} for the given "type". Subclasses may optionally use
+ * the attributes in the tag to set optional values.
+ * (e.g. "yearOptional" for the event kind)
+ */
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ return null;
+ }
+
+ protected final void throwIfList(DataKind kind) throws DefinitionException {
+ if (kind.typeOverallMax != 1) {
+ throw new DefinitionException(
+ "Kind " + kind.mimeType + " must have 'overallMax=\"1\"'");
+ }
+ }
+ }
+
+ /**
+ * DataKind parser for Name. (structured, display, phonetic)
+ */
+ private static class NameKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "name";
+ }
+
+ private static void checkAttributeTrue(boolean value, String attrName)
+ throws DefinitionException {
+ if (!value) {
+ throw new DefinitionException(attrName + " must be true");
+ }
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+
+ // Build 3 data kinds:
+ // - StructuredName.CONTENT_ITEM_TYPE
+ // - DataKind.PSEUDO_MIME_TYPE_NAME
+ // - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME
+
+ final boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+ final boolean supportsPrefix = getAttr(attrs, "supportsPrefix", false);
+ final boolean supportsMiddleName = getAttr(attrs, "supportsMiddleName", false);
+ final boolean supportsSuffix = getAttr(attrs, "supportsSuffix", false);
+ final boolean supportsPhoneticFamilyName =
+ getAttr(attrs, "supportsPhoneticFamilyName", false);
+ final boolean supportsPhoneticMiddleName =
+ getAttr(attrs, "supportsPhoneticMiddleName", false);
+ final boolean supportsPhoneticGivenName =
+ getAttr(attrs, "supportsPhoneticGivenName", false);
+
+ // For now, every thing must be supported.
+ checkAttributeTrue(supportsPrefix, "supportsPrefix");
+ checkAttributeTrue(supportsMiddleName, "supportsMiddleName");
+ checkAttributeTrue(supportsSuffix, "supportsSuffix");
+ checkAttributeTrue(supportsPhoneticFamilyName, "supportsPhoneticFamilyName");
+ checkAttributeTrue(supportsPhoneticMiddleName, "supportsPhoneticMiddleName");
+ checkAttributeTrue(supportsPhoneticGivenName, "supportsPhoneticGivenName");
+
+ final List<DataKind> kinds = Lists.newArrayList();
+
+ // Structured name
+ final DataKind ks = newDataKind(context, parser, attrs, false,
+ StructuredName.CONTENT_ITEM_TYPE, null, R.string.nameLabelsGroup, Weight.NONE,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+
+ ks.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ ks.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ ks.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setLongForm(true));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC));
+ ks.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ throwIfList(ks);
+ kinds.add(ks);
+
+ // Name
+ final DataKind kn = newDataKind(context, parser, attrs, true,
+ DataKind.PSEUDO_MIME_TYPE_NAME, null,
+ R.string.nameLabelsGroup, Weight.NONE,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+ kn.typeOverallMax = 1;
+ throwIfList(kn);
+ kinds.add(kn);
+
+ kn.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setOptional(true));
+ if (!displayOrderPrimary) {
+ kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ } else {
+ kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ }
+ kn.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+ FLAGS_PERSON_NAME).setOptional(true));
+
+ // Phonetic name
+ final DataKind kp = newDataKind(context, parser, attrs, true,
+ DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME, null,
+ R.string.name_phonetic, Weight.NONE,
+ new SimpleInflater(R.string.nameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+ kp.typeOverallMax = 1;
+ kinds.add(kp);
+
+ // We may want to change the order depending on displayOrderPrimary too.
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+ R.string.name_phonetic_middle, FLAGS_PHONETIC));
+ kp.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+ return kinds;
+ }
+ }
+
+ private static class NicknameKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "nickname";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Nickname.CONTENT_ITEM_TYPE, null, R.string.nicknameLabelsGroup, Weight.NICKNAME,
+ new SimpleInflater(R.string.nicknameLabelsGroup),
+ new SimpleInflater(Nickname.NAME));
+
+ kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+ FLAGS_PERSON_NAME));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
+ throwIfList(kind);
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class PhoneKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "phone";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Phone.CONTENT_ITEM_TYPE, Phone.TYPE, R.string.phoneLabelsGroup, Weight.PHONE,
+ new PhoneActionInflater(), new SimpleInflater(Phone.NUMBER));
+
+ kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24;
+ kind.iconAltDescriptionRes = R.string.sms;
+ kind.actionAltHeader = new PhoneActionAltInflater();
+
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return Lists.newArrayList(kind);
+ }
+
+ /** Just to avoid line-wrapping... */
+ protected static EditType build(int type, boolean secondary) {
+ return new EditType(type, Phone.getTypeLabelResource(type)).setSecondary(secondary);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ if ("home".equals(type)) return build(Phone.TYPE_HOME, false);
+ if ("mobile".equals(type)) return build(Phone.TYPE_MOBILE, false);
+ if ("work".equals(type)) return build(Phone.TYPE_WORK, false);
+ if ("fax_work".equals(type)) return build(Phone.TYPE_FAX_WORK, true);
+ if ("fax_home".equals(type)) return build(Phone.TYPE_FAX_HOME, true);
+ if ("pager".equals(type)) return build(Phone.TYPE_PAGER, true);
+ if ("other".equals(type)) return build(Phone.TYPE_OTHER, false);
+ if ("callback".equals(type)) return build(Phone.TYPE_CALLBACK, true);
+ if ("car".equals(type)) return build(Phone.TYPE_CAR, true);
+ if ("company_main".equals(type)) return build(Phone.TYPE_COMPANY_MAIN, true);
+ if ("isdn".equals(type)) return build(Phone.TYPE_ISDN, true);
+ if ("main".equals(type)) return build(Phone.TYPE_MAIN, true);
+ if ("other_fax".equals(type)) return build(Phone.TYPE_OTHER_FAX, true);
+ if ("radio".equals(type)) return build(Phone.TYPE_RADIO, true);
+ if ("telex".equals(type)) return build(Phone.TYPE_TELEX, true);
+ if ("tty_tdd".equals(type)) return build(Phone.TYPE_TTY_TDD, true);
+ if ("work_mobile".equals(type)) return build(Phone.TYPE_WORK_MOBILE, true);
+ if ("work_pager".equals(type)) return build(Phone.TYPE_WORK_PAGER, true);
+
+ // Note "assistant" used to be a custom column for the fallback type, but not anymore.
+ if ("assistant".equals(type)) return build(Phone.TYPE_ASSISTANT, true);
+ if ("mms".equals(type)) return build(Phone.TYPE_MMS, true);
+ if ("custom".equals(type)) {
+ return build(Phone.TYPE_CUSTOM, true).setCustomColumn(Phone.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class EmailKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "email";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Email.CONTENT_ITEM_TYPE, Email.TYPE, R.string.emailLabelsGroup, Weight.EMAIL,
+ new EmailActionInflater(), new SimpleInflater(Email.DATA));
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("home".equals(type)) return buildEmailType(Email.TYPE_HOME);
+ if ("work".equals(type)) return buildEmailType(Email.TYPE_WORK);
+ if ("other".equals(type)) return buildEmailType(Email.TYPE_OTHER);
+ if ("mobile".equals(type)) return buildEmailType(Email.TYPE_MOBILE);
+ if ("custom".equals(type)) {
+ return buildEmailType(Email.TYPE_CUSTOM)
+ .setSecondary(true).setCustomColumn(Email.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class StructuredPostalKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "postal";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE,
+ R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL,
+ new PostalActionInflater(),
+ new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS));
+
+ if (getAttr(attrs, "needsStructured", false)) {
+ if (Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage())) {
+ // Japanese order
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ } else {
+ // Generic order
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ }
+ } else {
+ kind.maxLinesForDisplay= MAX_LINES_FOR_POSTAL_ADDRESS;
+ kind.fieldList.add(
+ new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
+ FLAGS_POSTAL));
+ }
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("home".equals(type)) return buildPostalType(StructuredPostal.TYPE_HOME);
+ if ("work".equals(type)) return buildPostalType(StructuredPostal.TYPE_WORK);
+ if ("other".equals(type)) return buildPostalType(StructuredPostal.TYPE_OTHER);
+ if ("custom".equals(type)) {
+ return buildPostalType(StructuredPostal.TYPE_CUSTOM)
+ .setSecondary(true).setCustomColumn(Email.LABEL);
+ }
+ return null;
+ }
+ }
+
+ private static class ImKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "im";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+
+ // IM is special:
+ // - It uses "protocol" as the custom label field
+ // - Its TYPE is fixed to TYPE_OTHER
+
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Im.CONTENT_ITEM_TYPE, Im.PROTOCOL, R.string.imLabelsGroup, Weight.IM,
+ new ImActionInflater(), new SimpleInflater(Im.DATA) // header / action
+ );
+ kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ if ("aim".equals(type)) return buildImType(Im.PROTOCOL_AIM);
+ if ("msn".equals(type)) return buildImType(Im.PROTOCOL_MSN);
+ if ("yahoo".equals(type)) return buildImType(Im.PROTOCOL_YAHOO);
+ if ("skype".equals(type)) return buildImType(Im.PROTOCOL_SKYPE);
+ if ("qq".equals(type)) return buildImType(Im.PROTOCOL_QQ);
+ if ("google_talk".equals(type)) return buildImType(Im.PROTOCOL_GOOGLE_TALK);
+ if ("icq".equals(type)) return buildImType(Im.PROTOCOL_ICQ);
+ if ("jabber".equals(type)) return buildImType(Im.PROTOCOL_JABBER);
+ if ("custom".equals(type)) {
+ return buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true)
+ .setCustomColumn(Im.CUSTOM_PROTOCOL);
+ }
+ return null;
+ }
+ }
+
+ private static class OrganizationKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "organization";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Organization.CONTENT_ITEM_TYPE, null, R.string.organizationLabelsGroup,
+ Weight.ORGANIZATION,
+ new SimpleInflater(R.string.organizationLabelsGroup),
+ ORGANIZATION_BODY_INFLATER);
+
+ kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+ FLAGS_GENERIC_NAME));
+ kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+ FLAGS_GENERIC_NAME));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class PhotoKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "photo";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Photo.CONTENT_ITEM_TYPE, null /* no type */, Weight.NONE, -1,
+ null, null // no header, no body
+ );
+
+ kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class NoteKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "note";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Note.CONTENT_ITEM_TYPE, null, R.string.label_notes, Weight.NOTE,
+ new SimpleInflater(R.string.label_notes), new SimpleInflater(Note.NOTE));
+
+ kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class WebsiteKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "website";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Website.CONTENT_ITEM_TYPE, null, R.string.websiteLabelsGroup, Weight.WEBSITE,
+ new SimpleInflater(R.string.websiteLabelsGroup),
+ new SimpleInflater(Website.URL));
+
+ kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup,
+ FLAGS_WEBSITE));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class SipAddressKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "sip_address";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ SipAddress.CONTENT_ITEM_TYPE, null, R.string.label_sip_address,
+ Weight.SIP_ADDRESS,
+ new SimpleInflater(R.string.label_sip_address),
+ new SimpleInflater(SipAddress.SIP_ADDRESS));
+
+ kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
+ R.string.label_sip_address, FLAGS_SIP_ADDRESS));
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ private static class GroupMembershipKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "group_membership";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ GroupMembership.CONTENT_ITEM_TYPE, null,
+ R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, null, null);
+
+ kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+ kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
+
+ throwIfList(kind);
+
+ return Lists.newArrayList(kind);
+ }
+ }
+
+ /**
+ * Event DataKind parser.
+ *
+ * Event DataKind is used only for Google/Exchange types, so this parser is not used for now.
+ */
+ private static class EventKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "event";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Event.CONTENT_ITEM_TYPE, Event.TYPE, R.string.eventLabelsGroup, Weight.EVENT,
+ new EventActionInflater(), new SimpleInflater(Event.START_DATE));
+
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ if (getAttr(attrs, Attr.DATE_WITH_TIME, false)) {
+ kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_AND_TIME_FORMAT;
+ kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
+ } else {
+ kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+ kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+ }
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ final boolean yo = getAttr(attrs, Attr.YEAR_OPTIONAL, false);
+
+ if ("birthday".equals(type)) {
+ return buildEventType(Event.TYPE_BIRTHDAY, yo).setSpecificMax(1);
+ }
+ if ("anniversary".equals(type)) return buildEventType(Event.TYPE_ANNIVERSARY, yo);
+ if ("other".equals(type)) return buildEventType(Event.TYPE_OTHER, yo);
+ if ("custom".equals(type)) {
+ return buildEventType(Event.TYPE_CUSTOM, yo)
+ .setSecondary(true).setCustomColumn(Event.LABEL);
+ }
+ return null;
+ }
+ }
+
+ /**
+ * Relationship DataKind parser.
+ *
+ * Relationship DataKind is used only for Google/Exchange types, so this parser is not used for
+ * now.
+ */
+ private static class RelationshipKindBuilder extends KindBuilder {
+ @Override
+ public String getTagName() {
+ return "relationship";
+ }
+
+ @Override
+ public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+ AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+ IOException {
+ final DataKind kind = newDataKind(context, parser, attrs, false,
+ Relation.CONTENT_ITEM_TYPE, Relation.TYPE,
+ R.string.relationLabelsGroup, Weight.RELATIONSHIP,
+ new RelationActionInflater(), new SimpleInflater(Relation.NAME));
+
+ kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+ FLAGS_RELATION));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+ return Lists.newArrayList(kind);
+ }
+
+ @Override
+ protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+ // EditType is mutable, so we need to create a new instance every time.
+ if ("assistant".equals(type)) return buildRelationType(Relation.TYPE_ASSISTANT);
+ if ("brother".equals(type)) return buildRelationType(Relation.TYPE_BROTHER);
+ if ("child".equals(type)) return buildRelationType(Relation.TYPE_CHILD);
+ if ("domestic_partner".equals(type)) {
+ return buildRelationType(Relation.TYPE_DOMESTIC_PARTNER);
+ }
+ if ("father".equals(type)) return buildRelationType(Relation.TYPE_FATHER);
+ if ("friend".equals(type)) return buildRelationType(Relation.TYPE_FRIEND);
+ if ("manager".equals(type)) return buildRelationType(Relation.TYPE_MANAGER);
+ if ("mother".equals(type)) return buildRelationType(Relation.TYPE_MOTHER);
+ if ("parent".equals(type)) return buildRelationType(Relation.TYPE_PARENT);
+ if ("partner".equals(type)) return buildRelationType(Relation.TYPE_PARTNER);
+ if ("referred_by".equals(type)) return buildRelationType(Relation.TYPE_REFERRED_BY);
+ if ("relative".equals(type)) return buildRelationType(Relation.TYPE_RELATIVE);
+ if ("sister".equals(type)) return buildRelationType(Relation.TYPE_SISTER);
+ if ("spouse".equals(type)) return buildRelationType(Relation.TYPE_SPOUSE);
+ if ("custom".equals(type)) {
+ return buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Relation.LABEL);
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/account/DeviceLocalAccountType.java b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
new file mode 100644
index 000000000..c6c7d07fa
--- /dev/null
+++ b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
@@ -0,0 +1,46 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+
+public class DeviceLocalAccountType extends FallbackAccountType {
+
+ private final boolean mGroupsEditable;
+
+ public DeviceLocalAccountType(Context context, boolean groupsEditable) {
+ super(context);
+ mGroupsEditable = groupsEditable;
+ }
+
+ public DeviceLocalAccountType(Context context) {
+ this(context, false);
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return mGroupsEditable;
+ }
+
+ @Override
+ public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+ // Use the "Device" type label for the name as well because on OEM phones the "name" is
+ // not always user-friendly
+ return new AccountInfo(
+ new AccountDisplayInfo(account, getDisplayLabel(context), getDisplayLabel(context),
+ getDisplayIcon(context), true), this);
+ }
+}
diff --git a/src/com/android/contacts/model/account/ExchangeAccountType.java b/src/com/android/contacts/model/account/ExchangeAccountType.java
new file mode 100644
index 000000000..bd7985276
--- /dev/null
+++ b/src/com/android/contacts/model/account/ExchangeAccountType.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.Locale;
+
+public class ExchangeAccountType extends BaseAccountType {
+ private static final String TAG = "ExchangeAccountType";
+
+ private static final String ACCOUNT_TYPE_AOSP = "com.android.exchange";
+ private static final String ACCOUNT_TYPE_GOOGLE_1 = "com.google.android.exchange";
+ private static final String ACCOUNT_TYPE_GOOGLE_2 = "com.google.android.gm.exchange";
+
+ public ExchangeAccountType(Context context, String authenticatorPackageName, String type) {
+ this.accountType = type;
+ this.resourcePackageName = null;
+ this.syncAdapterPackageName = authenticatorPackageName;
+
+ try {
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindEvent(context);
+ addDataKindWebsite(context);
+ addDataKindGroupMembership(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ // TODO: Change this to fail fast if there are no feedback reports
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build exchange account type", e);
+ }
+ }
+
+ public static boolean isExchangeType(String type) {
+ return ACCOUNT_TYPE_AOSP.equals(type) || ACCOUNT_TYPE_GOOGLE_1.equals(type)
+ || ACCOUNT_TYPE_GOOGLE_2.equals(type);
+ }
+
+ @Override
+ protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+ R.string.nameLabelsGroup, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+ FLAGS_PERSON_NAME).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
+ R.string.name_family, FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
+ R.string.name_middle, FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
+ R.string.name_given, FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.SUFFIX,
+ R.string.name_suffix, FLAGS_PERSON_NAME));
+
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+ R.string.name_phonetic, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+ R.string.name_phonetic_family, FLAGS_PHONETIC));
+ kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+ R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindNickname(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindNickname(context);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+ FLAGS_PERSON_NAME));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindPhone(context);
+
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList
+ .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
+ kind.typeList
+ .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
+ .setSpecificMax(1));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindEmail(context);
+
+ kind.typeOverallMax = 3;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindStructuredPostal(context);
+
+ final boolean useJapaneseOrder =
+ Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+ kind.typeColumn = StructuredPostal.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
+
+ kind.fieldList = Lists.newArrayList();
+ if (useJapaneseOrder) {
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ } else {
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ }
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindIm(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindIm(context);
+
+ // Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
+ kind.typeOverallMax = 3;
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindOrganization(context);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+ FLAGS_GENERIC_NAME));
+ kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+ FLAGS_GENERIC_NAME));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindPhoto(context);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindNote(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindNote(context);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+ return kind;
+ }
+
+ protected DataKind addDataKindEvent(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup,
+ Weight.EVENT, true));
+ kind.actionHeader = new EventActionInflater();
+ kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+ kind.typeOverallMax = 1;
+
+ kind.typeColumn = Event.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, false).setSpecificMax(1));
+
+ kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindWebsite(context);
+
+ kind.typeOverallMax = 1;
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
+
+ return kind;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return true;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+}
diff --git a/src/com/android/contacts/model/account/ExternalAccountType.java b/src/com/android/contacts/model/account/ExternalAccountType.java
new file mode 100644
index 000000000..c914c7494
--- /dev/null
+++ b/src/com/android/contacts/model/account/ExternalAccountType.java
@@ -0,0 +1,450 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A general contacts account type descriptor.
+ */
+public class ExternalAccountType extends BaseAccountType {
+ private static final String TAG = "ExternalAccountType";
+
+ private static final String SYNC_META_DATA = "android.content.SyncAdapter";
+
+ /**
+ * The metadata name for so-called "contacts.xml".
+ *
+ * On LMP and later, we also accept the "alternate" name.
+ * This is to allow sync adapters to have a contacts.xml without making it visible on older
+ * platforms. If you modify this also update the corresponding list in
+ * ContactsProvider/PhotoPriorityResolver
+ */
+ private static final String[] METADATA_CONTACTS_NAMES = new String[] {
+ "android.provider.ALTERNATE_CONTACTS_STRUCTURE",
+ "android.provider.CONTACTS_STRUCTURE"
+ };
+
+ private static final String TAG_CONTACTS_SOURCE_LEGACY = "ContactsSource";
+ private static final String TAG_CONTACTS_ACCOUNT_TYPE = "ContactsAccountType";
+ private static final String TAG_CONTACTS_DATA_KIND = "ContactsDataKind";
+ private static final String TAG_EDIT_SCHEMA = "EditSchema";
+
+ private static final String ATTR_INVITE_CONTACT_ACTIVITY = "inviteContactActivity";
+ private static final String ATTR_INVITE_CONTACT_ACTION_LABEL = "inviteContactActionLabel";
+ private static final String ATTR_VIEW_CONTACT_NOTIFY_SERVICE = "viewContactNotifyService";
+ private static final String ATTR_VIEW_GROUP_ACTIVITY = "viewGroupActivity";
+ private static final String ATTR_VIEW_GROUP_ACTION_LABEL = "viewGroupActionLabel";
+ private static final String ATTR_DATA_SET = "dataSet";
+ private static final String ATTR_EXTENSION_PACKAGE_NAMES = "extensionPackageNames";
+
+ // The following attributes should only be set in non-sync-adapter account types. They allow
+ // for the account type and resource IDs to be specified without an associated authenticator.
+ private static final String ATTR_ACCOUNT_TYPE = "accountType";
+ private static final String ATTR_ACCOUNT_LABEL = "accountTypeLabel";
+ private static final String ATTR_ACCOUNT_ICON = "accountTypeIcon";
+
+ private final boolean mIsExtension;
+
+ private String mInviteContactActivity;
+ private String mInviteActionLabelAttribute;
+ private int mInviteActionLabelResId;
+ private String mViewContactNotifyService;
+ private String mViewGroupActivity;
+ private String mViewGroupLabelAttribute;
+ private int mViewGroupLabelResId;
+ private List<String> mExtensionPackageNames;
+ private String mAccountTypeLabelAttribute;
+ private String mAccountTypeIconAttribute;
+ private boolean mHasContactsMetadata;
+ private boolean mHasEditSchema;
+ private boolean mGroupMembershipEditable;
+
+ public ExternalAccountType(Context context, String resPackageName, boolean isExtension) {
+ this(context, resPackageName, isExtension, null);
+ }
+
+ /**
+ * Constructor used for testing to initialize with any arbitrary XML.
+ *
+ * @param injectedMetadata If non-null, it'll be used to initialize the type. Only set by
+ * tests. If null, the metadata is loaded from the specified package.
+ */
+ ExternalAccountType(Context context, String packageName, boolean isExtension,
+ XmlResourceParser injectedMetadata) {
+ this.mIsExtension = isExtension;
+ this.resourcePackageName = packageName;
+ this.syncAdapterPackageName = packageName;
+
+ final XmlResourceParser parser;
+ if (injectedMetadata == null) {
+ parser = loadContactsXml(context, packageName);
+ } else {
+ parser = injectedMetadata;
+ }
+ boolean needLineNumberInErrorLog = true;
+ try {
+ if (parser != null) {
+ inflate(context, parser);
+ }
+
+ // Done parsing; line number no longer needed in error log.
+ needLineNumberInErrorLog = false;
+ if (mHasEditSchema) {
+ checkKindExists(StructuredName.CONTENT_ITEM_TYPE);
+ checkKindExists(DataKind.PSEUDO_MIME_TYPE_NAME);
+ checkKindExists(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME);
+ checkKindExists(Photo.CONTENT_ITEM_TYPE);
+ } else {
+ // Bring in name and photo from fallback source, which are non-optional
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ addDataKindPhoneticName(context);
+ addDataKindPhoto(context);
+ }
+ } catch (DefinitionException e) {
+ final StringBuilder error = new StringBuilder();
+ error.append("Problem reading XML");
+ if (needLineNumberInErrorLog && (parser != null)) {
+ error.append(" in line ");
+ error.append(parser.getLineNumber());
+ }
+ error.append(" for external package ");
+ error.append(packageName);
+ // Only send feedback if not from tests. There are tests that expect failures so no need
+ // to report those.
+ if (injectedMetadata == null) {
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build external account type",
+ e);
+ }
+ return;
+ } finally {
+ if (parser != null) {
+ parser.close();
+ }
+ }
+
+ mExtensionPackageNames = new ArrayList<String>();
+ mInviteActionLabelResId = resolveExternalResId(context, mInviteActionLabelAttribute,
+ syncAdapterPackageName, ATTR_INVITE_CONTACT_ACTION_LABEL);
+ mViewGroupLabelResId = resolveExternalResId(context, mViewGroupLabelAttribute,
+ syncAdapterPackageName, ATTR_VIEW_GROUP_ACTION_LABEL);
+ titleRes = resolveExternalResId(context, mAccountTypeLabelAttribute,
+ syncAdapterPackageName, ATTR_ACCOUNT_LABEL);
+ iconRes = resolveExternalResId(context, mAccountTypeIconAttribute,
+ syncAdapterPackageName, ATTR_ACCOUNT_ICON);
+
+ final DataKind dataKind = getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
+ mGroupMembershipEditable = dataKind != null && dataKind.editable;
+
+ // If we reach this point, the account type has been successfully initialized.
+ mIsInitialized = true;
+ }
+
+ /**
+ * Returns the CONTACTS_STRUCTURE metadata (aka "contacts.xml") in the given apk package.
+ *
+ * This method looks through all services in the package that handle sync adapter
+ * intents for the first one that contains CONTACTS_STRUCTURE metadata. We have to look
+ * through all sync adapters in the package in case there are contacts and other sync
+ * adapters (eg, calendar) in the same package.
+ *
+ * Returns {@code null} if the package has no CONTACTS_STRUCTURE metadata. In this case
+ * the account type *will* be initialized with minimal configuration.
+ */
+ public static XmlResourceParser loadContactsXml(Context context, String resPackageName) {
+ final PackageManager pm = context.getPackageManager();
+ final Intent intent = new Intent(SYNC_META_DATA).setPackage(resPackageName);
+ final List<ResolveInfo> intentServices = pm.queryIntentServices(intent,
+ PackageManager.GET_SERVICES | PackageManager.GET_META_DATA);
+
+ if (intentServices != null) {
+ for (final ResolveInfo resolveInfo : intentServices) {
+ final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
+ if (serviceInfo == null) {
+ continue;
+ }
+ for (String metadataName : METADATA_CONTACTS_NAMES) {
+ final XmlResourceParser parser = serviceInfo.loadXmlMetaData(
+ pm, metadataName);
+ if (parser != null) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, String.format("Metadata loaded from: %s, %s, %s",
+ serviceInfo.packageName, serviceInfo.name,
+ metadataName));
+ }
+ return parser;
+ }
+ }
+ }
+ }
+
+ // Package was found, but that doesn't contain the CONTACTS_STRUCTURE metadata.
+ return null;
+ }
+
+ /**
+ * Returns {@code TRUE} if the package contains CONTACTS_STRUCTURE metadata.
+ */
+ public static boolean hasContactsXml(Context context, String resPackageName) {
+ return loadContactsXml(context, resPackageName) != null;
+ }
+
+ private void checkKindExists(String mimeType) throws DefinitionException {
+ if (getKindForMimetype(mimeType) == null) {
+ throw new DefinitionException(mimeType + " must be supported");
+ }
+ }
+
+ @Override
+ public boolean isEmbedded() {
+ return false;
+ }
+
+ @Override
+ public boolean isExtension() {
+ return mIsExtension;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return mHasEditSchema;
+ }
+
+ /**
+ * Whether this account type has the android.provider.CONTACTS_STRUCTURE metadata xml.
+ */
+ public boolean hasContactsMetadata() {
+ return mHasContactsMetadata;
+ }
+
+ @Override
+ public String getInviteContactActivityClassName() {
+ return mInviteContactActivity;
+ }
+
+ @Override
+ protected int getInviteContactActionResId() {
+ return mInviteActionLabelResId;
+ }
+
+ @Override
+ public String getViewContactNotifyServiceClassName() {
+ return mViewContactNotifyService;
+ }
+
+ @Override
+ public String getViewGroupActivity() {
+ return mViewGroupActivity;
+ }
+
+ @Override
+ protected int getViewGroupLabelResId() {
+ return mViewGroupLabelResId;
+ }
+
+ @Override
+ public List<String> getExtensionPackageNames() {
+ return mExtensionPackageNames;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return mGroupMembershipEditable;
+ }
+
+ /**
+ * Inflate this {@link AccountType} from the given parser. This may only
+ * load details matching the publicly-defined schema.
+ */
+ protected void inflate(Context context, XmlPullParser parser) throws DefinitionException {
+ final AttributeSet attrs = Xml.asAttributeSet(parser);
+
+ try {
+ int type;
+ while ((type = parser.next()) != XmlPullParser.START_TAG
+ && type != XmlPullParser.END_DOCUMENT) {
+ // Drain comments and whitespace
+ }
+
+ if (type != XmlPullParser.START_TAG) {
+ throw new IllegalStateException("No start tag found");
+ }
+
+ String rootTag = parser.getName();
+ if (!TAG_CONTACTS_ACCOUNT_TYPE.equals(rootTag) &&
+ !TAG_CONTACTS_SOURCE_LEGACY.equals(rootTag)) {
+ throw new IllegalStateException("Top level element must be "
+ + TAG_CONTACTS_ACCOUNT_TYPE + ", not " + rootTag);
+ }
+
+ mHasContactsMetadata = true;
+
+ int attributeCount = parser.getAttributeCount();
+ for (int i = 0; i < attributeCount; i++) {
+ String attr = parser.getAttributeName(i);
+ String value = parser.getAttributeValue(i);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, attr + "=" + value);
+ }
+ if (ATTR_INVITE_CONTACT_ACTIVITY.equals(attr)) {
+ mInviteContactActivity = value;
+ } else if (ATTR_INVITE_CONTACT_ACTION_LABEL.equals(attr)) {
+ mInviteActionLabelAttribute = value;
+ } else if (ATTR_VIEW_CONTACT_NOTIFY_SERVICE.equals(attr)) {
+ mViewContactNotifyService = value;
+ } else if (ATTR_VIEW_GROUP_ACTIVITY.equals(attr)) {
+ mViewGroupActivity = value;
+ } else if (ATTR_VIEW_GROUP_ACTION_LABEL.equals(attr)) {
+ mViewGroupLabelAttribute = value;
+ } else if (ATTR_DATA_SET.equals(attr)) {
+ dataSet = value;
+ } else if (ATTR_EXTENSION_PACKAGE_NAMES.equals(attr)) {
+ mExtensionPackageNames.add(value);
+ } else if (ATTR_ACCOUNT_TYPE.equals(attr)) {
+ accountType = value;
+ } else if (ATTR_ACCOUNT_LABEL.equals(attr)) {
+ mAccountTypeLabelAttribute = value;
+ } else if (ATTR_ACCOUNT_ICON.equals(attr)) {
+ mAccountTypeIconAttribute = value;
+ } else if (Log.isLoggable(TAG, Log.WARN)) {
+ Log.w(TAG, "Unsupported attribute " + attr);
+ }
+ }
+
+ // Parse all children kinds
+ final int startDepth = parser.getDepth();
+ while (((type = parser.next()) != XmlPullParser.END_TAG
+ || parser.getDepth() > startDepth)
+ && type != XmlPullParser.END_DOCUMENT) {
+
+ if (type != XmlPullParser.START_TAG || parser.getDepth() != startDepth + 1) {
+ continue; // Not a direct child tag
+ }
+
+ String tag = parser.getName();
+ if (TAG_EDIT_SCHEMA.equals(tag)) {
+ mHasEditSchema = true;
+ parseEditSchema(context, parser, attrs);
+ } else if (TAG_CONTACTS_DATA_KIND.equals(tag)) {
+ final TypedArray a = context.obtainStyledAttributes(attrs,
+ R.styleable.ContactsDataKind);
+ final DataKind kind = new DataKind();
+
+ kind.mimeType = a
+ .getString(R.styleable.ContactsDataKind_android_mimeType);
+ final String summaryColumn = a.getString(
+ R.styleable.ContactsDataKind_android_summaryColumn);
+ if (summaryColumn != null) {
+ // Inflate a specific column as summary when requested
+ kind.actionHeader = new SimpleInflater(summaryColumn);
+ }
+ final String detailColumn = a.getString(
+ R.styleable.ContactsDataKind_android_detailColumn);
+ if (detailColumn != null) {
+ // Inflate specific column as summary
+ kind.actionBody = new SimpleInflater(detailColumn);
+ }
+
+ a.recycle();
+
+ addKind(kind);
+ }
+ }
+ } catch (XmlPullParserException e) {
+ throw new DefinitionException("Problem reading XML", e);
+ } catch (IOException e) {
+ throw new DefinitionException("Problem reading XML", e);
+ }
+ }
+
+ /**
+ * Takes a string in the "@xxx/yyy" format and return the resource ID for the resource in
+ * the resource package.
+ *
+ * If the argument is in the invalid format or isn't a resource name, it returns -1.
+ *
+ * @param context context
+ * @param resourceName Resource name in the "@xxx/yyy" format, e.g. "@string/invite_lavbel"
+ * @param packageName name of the package containing the resource.
+ * @param xmlAttributeName attribute name which the resource came from. Used for logging.
+ */
+ @VisibleForTesting
+ static int resolveExternalResId(Context context, String resourceName,
+ String packageName, String xmlAttributeName) {
+ if (TextUtils.isEmpty(resourceName)) {
+ return -1; // Empty text is okay.
+ }
+ if (resourceName.charAt(0) != '@') {
+ if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+ Log.w(TAG, xmlAttributeName + " must be a resource name beginnig with '@'");
+ }
+ return -1;
+ }
+ final String name = resourceName.substring(1);
+ final Resources res;
+ try {
+ res = context.getPackageManager().getResourcesForApplication(packageName);
+ } catch (NameNotFoundException e) {
+ if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+ Log.w(TAG, "Unable to load package " + packageName);
+ }
+ return -1;
+ }
+ final int resId = res.getIdentifier(name, null, packageName);
+ if (resId == 0) {
+ if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+ Log.w(TAG, "Unable to load " + resourceName + " from package " + packageName);
+ }
+ return -1;
+ }
+ return resId;
+ }
+
+ @VisibleForTesting
+ static boolean isFromTestApp(String packageName) {
+ return TextUtils.equals(packageName, "com.google.android.contacts.tests");
+ }
+}
diff --git a/src/com/android/contacts/model/account/FallbackAccountType.java b/src/com/android/contacts/model/account/FallbackAccountType.java
new file mode 100644
index 000000000..288a91717
--- /dev/null
+++ b/src/com/android/contacts/model/account/FallbackAccountType.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.res.ResourcesCompat;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contactsbind.FeedbackHelper;
+
+public class FallbackAccountType extends BaseAccountType {
+ private static final String TAG = "FallbackAccountType";
+
+ private FallbackAccountType(Context context, String resPackageName) {
+ this.accountType = null;
+ this.dataSet = null;
+ this.titleRes = R.string.account_phone;
+ this.iconRes = R.drawable.quantum_ic_smartphone_vd_theme_24;
+
+ // Note those are only set for unit tests.
+ this.resourcePackageName = resPackageName;
+ this.syncAdapterPackageName = resPackageName;
+
+ try {
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindWebsite(context);
+ addDataKindSipAddress(context);
+ addDataKindGroupMembership(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build fallback account type", e);
+ }
+ }
+
+ @Override
+ public Drawable getDisplayIcon(Context context) {
+ final Drawable icon = ResourcesCompat.getDrawable(context.getResources(), iconRes, null);
+ icon.mutate().setColorFilter(ContextCompat.getColor(context,
+ R.color.actionbar_icon_color_grey), PorterDuff.Mode.SRC_ATOP);
+ return icon;
+ }
+
+ public FallbackAccountType(Context context) {
+ this(context, null);
+ }
+
+ /**
+ * Used to compare with an {@link ExternalAccountType} built from a test contacts.xml.
+ * In order to build {@link DataKind}s with the same resource package name,
+ * {@code resPackageName} is injectable.
+ */
+ static AccountType createWithPackageNameForTest(Context context, String resPackageName) {
+ return new FallbackAccountType(context, resPackageName);
+ }
+
+ @Override
+ public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+ // Do nothing. For "Device" accounts we want to just display them using our own strings
+ // and icons.
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * <p>This is overriden because the base class validates that the account.type matches
+ * {@link #accountType} but for the fallback case we want to be more permissive</p>
+ */
+ @Override
+ public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+ return new AccountInfo(
+ new AccountDisplayInfo(account, account.name,
+ getDisplayLabel(context), getDisplayIcon(context), false), this);
+ }
+}
diff --git a/src/com/android/contacts/model/account/GoogleAccountType.java b/src/com/android/contacts/model/account/GoogleAccountType.java
new file mode 100644
index 000000000..c7aac7639
--- /dev/null
+++ b/src/com/android/contacts/model/account/GoogleAccountType.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+public class GoogleAccountType extends BaseAccountType {
+ private static final String TAG = "GoogleAccountType";
+
+ /**
+ * The package name that we should load contacts.xml from and rely on to handle
+ * G+ account actions. Even though this points to gms, in some cases gms will still hand
+ * off responsibility to the G+ app.
+ */
+ public static final String PLUS_EXTENSION_PACKAGE_NAME = "com.google.android.gms";
+
+ public static final String ACCOUNT_TYPE = "com.google";
+
+ private static final List<String> mExtensionPackages =
+ Lists.newArrayList(PLUS_EXTENSION_PACKAGE_NAME);
+
+ public GoogleAccountType(Context context, String authenticatorPackageName) {
+ this.accountType = ACCOUNT_TYPE;
+ this.resourcePackageName = null;
+ this.syncAdapterPackageName = authenticatorPackageName;
+
+ try {
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindWebsite(context);
+ addDataKindSipAddress(context);
+ addDataKindGroupMembership(context);
+ addDataKindRelation(context);
+ addDataKindEvent(context);
+ addDataKindCustomField(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build google account type", e);
+ }
+ }
+
+ @Override
+ public List<String> getExtensionPackageNames() {
+ return mExtensionPackages;
+ }
+
+ @Override
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindPhone(context);
+
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Phone.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindEmail(context);
+
+ kind.typeColumn = Email.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+ kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+ kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+ kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
+ Email.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ private DataKind addDataKindRelation(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
+ R.string.relationLabelsGroup, Weight.RELATIONSHIP, true));
+ kind.actionHeader = new RelationActionInflater();
+ kind.actionBody = new SimpleInflater(Relation.NAME);
+
+ kind.typeColumn = Relation.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
+ kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
+ kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Relation.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+ FLAGS_RELATION));
+
+ return kind;
+ }
+
+ private DataKind addDataKindEvent(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
+ R.string.eventLabelsGroup, Weight.EVENT, true));
+ kind.actionHeader = new EventActionInflater();
+ kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+ kind.typeColumn = Event.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+ kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+ kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
+ kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
+ kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
+ kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
+ .setCustomColumn(Event.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ return kind;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return true;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+
+ @Override
+ public String getViewContactNotifyServiceClassName() {
+ return "com.google.android.syncadapters.contacts." +
+ "SyncHighResPhotoIntentService";
+ }
+
+ @Override
+ public String getViewContactNotifyServicePackageName() {
+ return "com.google.android.syncadapters.contacts";
+ }
+}
diff --git a/src/com/android/contacts/model/account/SamsungAccountType.java b/src/com/android/contacts/model/account/SamsungAccountType.java
new file mode 100644
index 000000000..aa55095d7
--- /dev/null
+++ b/src/com/android/contacts/model/account/SamsungAccountType.java
@@ -0,0 +1,239 @@
+/*
+ * 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.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.Locale;
+
+/**
+ * A writable account type that can be used to support samsung contacts. This may not perfectly
+ * match Samsung's latest intended account schema.
+ *
+ * This is only used to partially support Samsung accounts. The DataKind labels & fields are
+ * setup to support the values used by Samsung. But, not everything in the Samsung account type is
+ * supported. The Samsung account type includes a "Message Type" mimetype that we have no intention
+ * of showing inside the Contact editor. Similarly, we don't handle the "Ringtone" mimetype here
+ * since managing ringtones is handled in a different flow.
+ */
+public class SamsungAccountType extends BaseAccountType {
+ private static final String TAG = "KnownExternalAccount";
+ private static final String ACCOUNT_TYPE_SAMSUNG = "com.osp.app.signin";
+
+ public SamsungAccountType(Context context, String authenticatorPackageName, String type) {
+ this.accountType = type;
+ this.resourcePackageName = null;
+ this.syncAdapterPackageName = authenticatorPackageName;
+
+ try {
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ addDataKindPhoneticName(context);
+ addDataKindNickname(context);
+ addDataKindPhone(context);
+ addDataKindEmail(context);
+ addDataKindStructuredPostal(context);
+ addDataKindIm(context);
+ addDataKindOrganization(context);
+ addDataKindPhoto(context);
+ addDataKindNote(context);
+ addDataKindWebsite(context);
+ addDataKindGroupMembership(context);
+ addDataKindRelation(context);
+ addDataKindEvent(context);
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ FeedbackHelper.sendFeedback(context, TAG, "Failed to build samsung account type", e);
+ }
+ }
+
+ /**
+ * Returns {@code TRUE} if this is samsung's account type and Samsung hasn't bothered to
+ * define a contacts.xml to provide a more accurate definition than ours.
+ */
+ public static boolean isSamsungAccountType(Context context, String type,
+ String packageName) {
+ return ACCOUNT_TYPE_SAMSUNG.equals(type)
+ && !ExternalAccountType.hasContactsXml(context, packageName);
+ }
+
+ @Override
+ protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindStructuredPostal(context);
+
+ final boolean useJapaneseOrder =
+ Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+ kind.typeColumn = StructuredPostal.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
+ kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
+
+ kind.fieldList = Lists.newArrayList();
+ if (useJapaneseOrder) {
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ } else {
+ kind.fieldList.add(new EditField(StructuredPostal.STREET,
+ R.string.postal_street, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.CITY,
+ R.string.postal_city,FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.REGION,
+ R.string.postal_region, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+ R.string.postal_postcode, FLAGS_POSTAL));
+ kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+ R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+ }
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindPhone(context);
+
+ kind.typeColumn = Phone.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+ kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Phone.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+ final DataKind kind = super.addDataKindEmail(context);
+
+ kind.typeColumn = Email.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+ kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+ kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+ kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
+ Email.LABEL));
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+ return kind;
+ }
+
+ private DataKind addDataKindRelation(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
+ R.string.relationLabelsGroup, 160, true));
+ kind.actionHeader = new RelationActionInflater();
+ kind.actionBody = new SimpleInflater(Relation.NAME);
+
+ kind.typeColumn = Relation.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
+ kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
+ kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
+ kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
+ kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
+ kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+ .setCustomColumn(Relation.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+ FLAGS_RELATION));
+
+ return kind;
+ }
+
+ private DataKind addDataKindEvent(Context context) throws DefinitionException {
+ DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
+ R.string.eventLabelsGroup, 150, true));
+ kind.actionHeader = new EventActionInflater();
+ kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+ kind.typeColumn = Event.TYPE;
+ kind.typeList = Lists.newArrayList();
+ kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+ kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+ kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
+ kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
+ kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
+ kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
+ .setCustomColumn(Event.LABEL));
+
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+ return kind;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return true;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+}
diff --git a/src/com/android/contacts/model/account/SimAccountType.java b/src/com/android/contacts/model/account/SimAccountType.java
new file mode 100644
index 000000000..360e9444c
--- /dev/null
+++ b/src/com/android/contacts/model/account/SimAccountType.java
@@ -0,0 +1,124 @@
+/*
+ * 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.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.collect.Lists;
+
+import java.util.Collections;
+
+/**
+ * Account type for SIM card contacts
+ */
+public class SimAccountType extends BaseAccountType {
+
+ public SimAccountType(Context context) {
+ this.titleRes = R.string.account_sim;
+ this.iconRes = R.drawable.quantum_ic_sim_card_vd_theme_24;
+
+ try {
+ addDataKindStructuredName(context);
+ addDataKindName(context);
+ final DataKind phoneKind = addDataKindPhone(context);
+ phoneKind.typeOverallMax = 1;
+ // SIM card contacts don't necessarily support separate types (based on data exposed
+ // in Samsung and LG Contacts Apps.
+ phoneKind.typeList = Collections.emptyList();
+
+ mIsInitialized = true;
+ } catch (DefinitionException e) {
+ // Just fail fast. Because we're explicitly adding the fields in this class this
+ // exception should only happen in case of a bug.
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return false;
+ }
+
+ @Override
+ public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+ // Do nothing. We want to use our local icon and title
+ }
+
+ @Override
+ protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+ final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+ R.string.nameLabelsGroup, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
+
+
+ kind.fieldList = Lists.newArrayList();
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+
+ return kind;
+ }
+
+ @Override
+ protected DataKind addDataKindName(Context context) throws DefinitionException {
+ final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
+ R.string.nameLabelsGroup, Weight.NONE, true));
+ kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+ kind.actionBody = new SimpleInflater(Nickname.NAME);
+ kind.typeOverallMax = 1;
+
+ final boolean displayOrderPrimary =
+ context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+ kind.fieldList = Lists.newArrayList();
+ if (!displayOrderPrimary) {
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ } else {
+ kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+ FLAGS_PERSON_NAME));
+ kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+ FLAGS_PERSON_NAME));
+ }
+
+ return kind;
+ }
+
+ @Override
+ public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+ // Use the "SIM" type label for the name as well because on OEM phones the "name" is
+ // not always user-friendly
+ return new AccountInfo(
+ new AccountDisplayInfo(account, getDisplayLabel(context), getDisplayLabel(context),
+ getDisplayIcon(context), true), this);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/CustomDataItem.java b/src/com/android/contacts/model/dataitem/CustomDataItem.java
new file mode 100644
index 000000000..5be812bb4
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/CustomDataItem.java
@@ -0,0 +1,42 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract.Data;
+
+/**
+ * Represents a custom field data item.
+ */
+public class CustomDataItem extends DataItem {
+
+ /**
+ * MIME type for custom field data defined in Contact Provider.
+ */
+ public static final String MIMETYPE_CUSTOM_FIELD =
+ "vnd.com.google.cursor.item/contact_user_defined_field";
+
+ CustomDataItem(ContentValues values) {super(values);}
+
+ public String getSummary() {
+ return getContentValues().getAsString(Data.DATA1);
+ }
+
+ public String getContent() {
+ return getContentValues().getAsString(Data.DATA2);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/DataItem.java b/src/com/android/contacts/model/dataitem/DataItem.java
new file mode 100644
index 000000000..81450bc2e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/DataItem.java
@@ -0,0 +1,248 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Identity;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Contacts.Data;
+import android.provider.ContactsContract.Contacts.Entity;
+
+import com.android.contacts.Collapser;
+import com.android.contacts.MoreContactUtils;
+import com.android.contacts.model.RawContactModifier;
+
+/**
+ * This is the base class for data items, which represents a row from the Data table.
+ */
+public class DataItem implements Collapser.Collapsible<DataItem> {
+
+ private final ContentValues mContentValues;
+ protected DataKind mKind;
+
+ protected DataItem(ContentValues values) {
+ mContentValues = values;
+ }
+
+ /**
+ * Factory for creating subclasses of DataItem objects based on the mimetype in the
+ * content values. Raw contact is the raw contact that this data item is associated with.
+ */
+ public static DataItem createFrom(ContentValues values) {
+ final String mimeType = values.getAsString(Data.MIMETYPE);
+ if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new GroupMembershipDataItem(values);
+ } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new StructuredNameDataItem(values);
+ } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new PhoneDataItem(values);
+ } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new EmailDataItem(values);
+ } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new StructuredPostalDataItem(values);
+ } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new ImDataItem(values);
+ } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new OrganizationDataItem(values);
+ } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new NicknameDataItem(values);
+ } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new NoteDataItem(values);
+ } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new WebsiteDataItem(values);
+ } else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new SipAddressDataItem(values);
+ } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new EventDataItem(values);
+ } else if (Relation.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new RelationDataItem(values);
+ } else if (Identity.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new IdentityDataItem(values);
+ } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ return new PhotoDataItem(values);
+ } else if (CustomDataItem.MIMETYPE_CUSTOM_FIELD.equals(mimeType)) {
+ return new CustomDataItem(values);
+ }
+
+ // generic
+ return new DataItem(values);
+ }
+
+ public ContentValues getContentValues() {
+ return mContentValues;
+ }
+
+ public void setRawContactId(long rawContactId) {
+ mContentValues.put(Data.RAW_CONTACT_ID, rawContactId);
+ }
+
+ public Long getRawContactId() {
+ return mContentValues.getAsLong(Data.RAW_CONTACT_ID);
+ }
+
+ /**
+ * Returns the data id.
+ */
+ public long getId() {
+ return mContentValues.getAsLong(Data._ID);
+ }
+
+ /**
+ * Returns the mimetype of the data.
+ */
+ public String getMimeType() {
+ return mContentValues.getAsString(Data.MIMETYPE);
+ }
+
+ public void setMimeType(String mimeType) {
+ mContentValues.put(Data.MIMETYPE, mimeType);
+ }
+
+ public boolean isPrimary() {
+ Integer primary = mContentValues.getAsInteger(Data.IS_PRIMARY);
+ return primary != null && primary != 0;
+ }
+
+ public boolean isSuperPrimary() {
+ Integer superPrimary = mContentValues.getAsInteger(Data.IS_SUPER_PRIMARY);
+ return superPrimary != null && superPrimary != 0;
+ }
+
+ public boolean hasKindTypeColumn(DataKind kind) {
+ final String key = kind.typeColumn;
+ return key != null && mContentValues.containsKey(key) &&
+ mContentValues.getAsInteger(key) != null;
+ }
+
+ public int getKindTypeColumn(DataKind kind) {
+ final String key = kind.typeColumn;
+ return mContentValues.getAsInteger(key);
+ }
+
+ /**
+ * Indicates the carrier presence value for the current {@link DataItem}.
+ *
+ * @return {@link Data#CARRIER_PRESENCE_VT_CAPABLE} if the {@link DataItem} supports carrier
+ * video calling, {@code 0} otherwise.
+ */
+ public int getCarrierPresence() {
+ final Integer value = mContentValues.getAsInteger(Data.CARRIER_PRESENCE);
+ return value != null ? value.intValue() : 0;
+ }
+
+ /**
+ * This builds the data string depending on the type of data item by using the generic
+ * DataKind object underneath.
+ */
+ public String buildDataString(Context context, DataKind kind) {
+ if (kind.actionBody == null) {
+ return null;
+ }
+ CharSequence actionBody = kind.actionBody.inflateUsing(context, mContentValues);
+ return actionBody == null ? null : actionBody.toString();
+ }
+
+ /**
+ * This builds the data string(intended for display) depending on the type of data item. It
+ * returns the same value as {@link #buildDataString} by default, but certain data items can
+ * override it to provide their version of formatted data strings.
+ *
+ * @return Data string representing the data item, possibly formatted for display
+ */
+ public String buildDataStringForDisplay(Context context, DataKind kind) {
+ return buildDataString(context, kind);
+ }
+
+ public void setDataKind(DataKind kind) {
+ mKind = kind;
+ }
+
+ public DataKind getDataKind() {
+ return mKind;
+ }
+
+ public Integer getTimesUsed() {
+ return mContentValues.getAsInteger(Entity.TIMES_USED);
+ }
+
+ public Long getLastTimeUsed() {
+ return mContentValues.getAsLong(Entity.LAST_TIME_USED);
+ }
+
+ @Override
+ public void collapseWith(DataItem that) {
+ DataKind thisKind = getDataKind();
+ DataKind thatKind = that.getDataKind();
+ // If this does not have a type and that does, or if that's type is higher precedence,
+ // use that's type
+ if ((!hasKindTypeColumn(thisKind) && that.hasKindTypeColumn(thatKind)) ||
+ that.hasKindTypeColumn(thatKind) &&
+ RawContactModifier.getTypePrecedence(thisKind, getKindTypeColumn(thisKind))
+ >
+ RawContactModifier.getTypePrecedence(thatKind, that.getKindTypeColumn(thatKind))) {
+ mContentValues.put(thatKind.typeColumn, that.getKindTypeColumn(thatKind));
+ mKind = thatKind;
+ }
+
+ // Choose the max of the maxLines and maxLabelLines values.
+ mKind.maxLinesForDisplay = Math.max(thisKind.maxLinesForDisplay,
+ thatKind.maxLinesForDisplay);
+
+ // If any of the collapsed entries are super primary make the whole thing super primary.
+ if (isSuperPrimary() || that.isSuperPrimary()) {
+ mContentValues.put(Data.IS_SUPER_PRIMARY, 1);
+ mContentValues.put(Data.IS_PRIMARY, 1);
+ }
+
+ // If any of the collapsed entries are primary make the whole thing primary.
+ if (isPrimary() || that.isPrimary()) {
+ mContentValues.put(Data.IS_PRIMARY, 1);
+ }
+
+ // Add up the times used
+ mContentValues.put(Entity.TIMES_USED, (getTimesUsed() == null ? 0 : getTimesUsed()) +
+ (that.getTimesUsed() == null ? 0 : that.getTimesUsed()));
+
+ // Use the most recent time
+ mContentValues.put(Entity.LAST_TIME_USED,
+ Math.max(getLastTimeUsed() == null ? 0 : getLastTimeUsed(),
+ that.getLastTimeUsed() == null ? 0 : that.getLastTimeUsed()));
+ }
+
+ @Override
+ public boolean shouldCollapseWith(DataItem t, Context context) {
+ if (mKind == null || t.getDataKind() == null) {
+ return false;
+ }
+ return MoreContactUtils.shouldCollapse(getMimeType(), buildDataString(context, mKind),
+ t.getMimeType(), t.buildDataString(context, t.getDataKind()));
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/DataKind.java b/src/com/android/contacts/model/dataitem/DataKind.java
new file mode 100644
index 000000000..f31e21c2e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/DataKind.java
@@ -0,0 +1,140 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.Data;
+
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.AccountType.StringInflater;
+
+import com.google.common.collect.Iterators;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * Description of a specific data type, usually marked by a unique
+ * {@link Data#MIMETYPE}. Includes details about how to view and edit
+ * {@link Data} rows of this kind, including the possible {@link EditType}
+ * labels and editable {@link EditField}.
+ */
+public final class DataKind {
+
+ public static final String PSEUDO_MIME_TYPE_NAME = "#name";
+ public static final String PSEUDO_MIME_TYPE_PHONETIC_NAME = "#phoneticName";
+
+ public String resourcePackageName;
+ public String mimeType;
+ public int titleRes;
+ public int iconAltRes;
+ public int iconAltDescriptionRes;
+ public int weight;
+ public boolean editable;
+
+ public StringInflater actionHeader;
+ public StringInflater actionAltHeader;
+ public StringInflater actionBody;
+
+ public String typeColumn;
+
+ /**
+ * Maximum number of values allowed in the list. -1 represents infinity.
+ */
+ public int typeOverallMax;
+
+ public List<EditType> typeList;
+ public List<EditField> fieldList;
+
+ public ContentValues defaultValues;
+
+ /**
+ * If this is a date field, this specifies the format of the date when saving. The
+ * date includes year, month and day. If this is not a date field or the date field is not
+ * editable, this value should be ignored.
+ */
+ public SimpleDateFormat dateFormatWithoutYear;
+
+ /**
+ * If this is a date field, this specifies the format of the date when saving. The
+ * date includes month and day. If this is not a date field, the field is not editable or
+ * dates without year are not supported, this value should be ignored.
+ */
+ public SimpleDateFormat dateFormatWithYear;
+
+ /**
+ * The number of lines available for displaying this kind of data.
+ * Defaults to 1.
+ */
+ public int maxLinesForDisplay;
+
+ public DataKind() {
+ maxLinesForDisplay = 1;
+ }
+
+ public DataKind(String mimeType, int titleRes, int weight, boolean editable) {
+ this.mimeType = mimeType;
+ this.titleRes = titleRes;
+ this.weight = weight;
+ this.editable = editable;
+ this.typeOverallMax = -1;
+ maxLinesForDisplay = 1;
+ }
+
+ public String getKindString(Context context) {
+ return (titleRes == -1 || titleRes == 0) ? "" : context.getString(titleRes);
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("DataKind:");
+ sb.append(" resPackageName=").append(resourcePackageName);
+ sb.append(" mimeType=").append(mimeType);
+ sb.append(" titleRes=").append(titleRes);
+ sb.append(" iconAltRes=").append(iconAltRes);
+ sb.append(" iconAltDescriptionRes=").append(iconAltDescriptionRes);
+ sb.append(" weight=").append(weight);
+ sb.append(" editable=").append(editable);
+ sb.append(" actionHeader=").append(actionHeader);
+ sb.append(" actionAltHeader=").append(actionAltHeader);
+ sb.append(" actionBody=").append(actionBody);
+ sb.append(" typeColumn=").append(typeColumn);
+ sb.append(" typeOverallMax=").append(typeOverallMax);
+ sb.append(" typeList=").append(toString(typeList));
+ sb.append(" fieldList=").append(toString(fieldList));
+ sb.append(" defaultValues=").append(defaultValues);
+ sb.append(" dateFormatWithoutYear=").append(toString(dateFormatWithoutYear));
+ sb.append(" dateFormatWithYear=").append(toString(dateFormatWithYear));
+
+ return sb.toString();
+ }
+
+ public static String toString(SimpleDateFormat format) {
+ return format == null ? "(null)" : format.toPattern();
+ }
+
+ public static String toString(Iterable<?> list) {
+ if (list == null) {
+ return "(null)";
+ } else {
+ return Iterators.toString(list.iterator());
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/EmailDataItem.java b/src/com/android/contacts/model/dataitem/EmailDataItem.java
new file mode 100644
index 000000000..77ad126a4
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/EmailDataItem.java
@@ -0,0 +1,48 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+
+/**
+ * Represents an email data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Email}.
+ */
+public class EmailDataItem extends DataItem {
+
+ /* package */ EmailDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getAddress() {
+ return getContentValues().getAsString(Email.ADDRESS);
+ }
+
+ public String getDisplayName() {
+ return getContentValues().getAsString(Email.DISPLAY_NAME);
+ }
+
+ public String getData() {
+ return getContentValues().getAsString(Email.DATA);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Email.LABEL);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/EventDataItem.java b/src/com/android/contacts/model/dataitem/EventDataItem.java
new file mode 100644
index 000000000..ad61dae6b
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/EventDataItem.java
@@ -0,0 +1,63 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.text.TextUtils;
+
+/**
+ * Represents an event data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Event}.
+ */
+public class EventDataItem extends DataItem {
+
+ /* package */ EventDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getStartDate() {
+ return getContentValues().getAsString(Event.START_DATE);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Event.LABEL);
+ }
+
+ @Override
+ public boolean shouldCollapseWith(DataItem t, Context context) {
+ if (!(t instanceof EventDataItem) || mKind == null || t.getDataKind() == null) {
+ return false;
+ }
+ final EventDataItem that = (EventDataItem) t;
+ // Events can be different (anniversary, birthday) but have the same start date
+ if (!TextUtils.equals(getStartDate(), that.getStartDate())) {
+ return false;
+ } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
+ return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
+ } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
+ return false;
+ } else if (getKindTypeColumn(mKind) == Event.TYPE_CUSTOM &&
+ !TextUtils.equals(getLabel(), that.getLabel())) {
+ // Check if custom types are not the same
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java b/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java
new file mode 100644
index 000000000..00558d083
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+
+/**
+ * Represents a group memebership data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.GroupMembership}.
+ */
+public class GroupMembershipDataItem extends DataItem {
+
+ /* package */ GroupMembershipDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public Long getGroupRowId() {
+ return getContentValues().getAsLong(GroupMembership.GROUP_ROW_ID);
+ }
+
+ public String getGroupSourceId() {
+ return getContentValues().getAsString(GroupMembership.GROUP_SOURCE_ID);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/IdentityDataItem.java b/src/com/android/contacts/model/dataitem/IdentityDataItem.java
new file mode 100644
index 000000000..045867aa2
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/IdentityDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Identity;
+
+/**
+ * Represents an identity data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Identity}.
+ */
+public class IdentityDataItem extends DataItem {
+
+ /* package */ IdentityDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getIdentity() {
+ return getContentValues().getAsString(Identity.IDENTITY);
+ }
+
+ public String getNamespace() {
+ return getContentValues().getAsString(Identity.NAMESPACE);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/ImDataItem.java b/src/com/android/contacts/model/dataitem/ImDataItem.java
new file mode 100644
index 000000000..a0e087c1d
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/ImDataItem.java
@@ -0,0 +1,113 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.text.TextUtils;
+
+/**
+ * Represents an IM data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Im}.
+ */
+public class ImDataItem extends DataItem {
+
+ private final boolean mCreatedFromEmail;
+
+ /* package */ ImDataItem(ContentValues values) {
+ super(values);
+ mCreatedFromEmail = false;
+ }
+
+ private ImDataItem(ContentValues values, boolean createdFromEmail) {
+ super(values);
+ mCreatedFromEmail = createdFromEmail;
+ }
+
+ public static ImDataItem createFromEmail(EmailDataItem item) {
+ final ImDataItem im = new ImDataItem(new ContentValues(item.getContentValues()), true);
+ im.setMimeType(Im.CONTENT_ITEM_TYPE);
+ return im;
+ }
+
+ public String getData() {
+ if (mCreatedFromEmail) {
+ return getContentValues().getAsString(Email.DATA);
+ } else {
+ return getContentValues().getAsString(Im.DATA);
+ }
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Im.LABEL);
+ }
+
+ /**
+ * Values are one of Im.PROTOCOL_
+ */
+ public Integer getProtocol() {
+ return getContentValues().getAsInteger(Im.PROTOCOL);
+ }
+
+ public boolean isProtocolValid() {
+ return getProtocol() != null;
+ }
+
+ public String getCustomProtocol() {
+ return getContentValues().getAsString(Im.CUSTOM_PROTOCOL);
+ }
+
+ public int getChatCapability() {
+ Integer result = getContentValues().getAsInteger(Im.CHAT_CAPABILITY);
+ return result == null ? 0 : result;
+ }
+
+ public boolean isCreatedFromEmail() {
+ return mCreatedFromEmail;
+ }
+
+ @Override
+ public boolean shouldCollapseWith(DataItem t, Context context) {
+ if (!(t instanceof ImDataItem) || mKind == null || t.getDataKind() == null) {
+ return false;
+ }
+ final ImDataItem that = (ImDataItem) t;
+ // IM can have the same data put different protocol. These should not collapse.
+ if (!getData().equals(that.getData())) {
+ return false;
+ } else if (!isProtocolValid() || !that.isProtocolValid()) {
+ // Deal with invalid protocol as if it was custom. If either has a non valid
+ // protocol, check to see if the other has a valid that is not custom
+ if (isProtocolValid()) {
+ return getProtocol() == Im.PROTOCOL_CUSTOM;
+ } else if (that.isProtocolValid()) {
+ return that.getProtocol() == Im.PROTOCOL_CUSTOM;
+ }
+ return true;
+ } else if (getProtocol() != that.getProtocol()) {
+ return false;
+ } else if (getProtocol() == Im.PROTOCOL_CUSTOM &&
+ !TextUtils.equals(getCustomProtocol(), that.getCustomProtocol())) {
+ // Check if custom protocols are not the same
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/NicknameDataItem.java b/src/com/android/contacts/model/dataitem/NicknameDataItem.java
new file mode 100644
index 000000000..2d4475160
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/NicknameDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+
+/**
+ * Represents a nickname data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Nickname}.
+ */
+public class NicknameDataItem extends DataItem {
+
+ public NicknameDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getName() {
+ return getContentValues().getAsString(Nickname.NAME);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Nickname.LABEL);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/NoteDataItem.java b/src/com/android/contacts/model/dataitem/NoteDataItem.java
new file mode 100644
index 000000000..9a572cbfe
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/NoteDataItem.java
@@ -0,0 +1,36 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+
+/**
+ * Represents a note data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Note}.
+ */
+public class NoteDataItem extends DataItem {
+
+ /* package */ NoteDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getNote() {
+ return getContentValues().getAsString(Note.NOTE);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/OrganizationDataItem.java b/src/com/android/contacts/model/dataitem/OrganizationDataItem.java
new file mode 100644
index 000000000..8c2a0c895
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/OrganizationDataItem.java
@@ -0,0 +1,64 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+
+/**
+ * Represents an organization data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Organization}.
+ */
+public class OrganizationDataItem extends DataItem {
+
+ /* package */ OrganizationDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getCompany() {
+ return getContentValues().getAsString(Organization.COMPANY);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Organization.LABEL);
+ }
+
+ public String getTitle() {
+ return getContentValues().getAsString(Organization.TITLE);
+ }
+
+ public String getDepartment() {
+ return getContentValues().getAsString(Organization.DEPARTMENT);
+ }
+
+ public String getJobDescription() {
+ return getContentValues().getAsString(Organization.JOB_DESCRIPTION);
+ }
+
+ public String getSymbol() {
+ return getContentValues().getAsString(Organization.SYMBOL);
+ }
+
+ public String getPhoneticName() {
+ return getContentValues().getAsString(Organization.PHONETIC_NAME);
+ }
+
+ public String getOfficeLocation() {
+ return getContentValues().getAsString(Organization.OFFICE_LOCATION);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/PhoneDataItem.java b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
new file mode 100644
index 000000000..8d6cf8eaa
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
@@ -0,0 +1,79 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+
+/**
+ * Represents a phone data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Phone}.
+ */
+public class PhoneDataItem extends DataItem {
+
+ public static final String KEY_FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
+
+ /* package */ PhoneDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getNumber() {
+ return getContentValues().getAsString(Phone.NUMBER);
+ }
+
+ /**
+ * Returns the normalized phone number in E164 format.
+ */
+ public String getNormalizedNumber() {
+ return getContentValues().getAsString(Phone.NORMALIZED_NUMBER);
+ }
+
+ public String getFormattedPhoneNumber() {
+ return getContentValues().getAsString(KEY_FORMATTED_PHONE_NUMBER);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Phone.LABEL);
+ }
+
+ public void computeFormattedPhoneNumber(String defaultCountryIso) {
+ final String phoneNumber = getNumber();
+ if (phoneNumber != null) {
+ final String formattedPhoneNumber = PhoneNumberUtilsCompat.formatNumber(phoneNumber,
+ getNormalizedNumber(), defaultCountryIso);
+ getContentValues().put(KEY_FORMATTED_PHONE_NUMBER, formattedPhoneNumber);
+ }
+ }
+
+ /**
+ * Returns the formatted phone number (if already computed using {@link
+ * #computeFormattedPhoneNumber}). Otherwise this method returns the unformatted phone number.
+ */
+ @Override
+ public String buildDataStringForDisplay(Context context, DataKind kind) {
+ final String formatted = getFormattedPhoneNumber();
+ if (formatted != null) {
+ return formatted;
+ } else {
+ return getNumber();
+ }
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/PhotoDataItem.java b/src/com/android/contacts/model/dataitem/PhotoDataItem.java
new file mode 100644
index 000000000..2ba13fb25
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/PhotoDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts.Photo;
+
+/**
+ * Represents a photo data item, wrapping the columns in
+ * {@link ContactsContract.Contacts.Photo}.
+ */
+public class PhotoDataItem extends DataItem {
+
+ /* package */ PhotoDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public Long getPhotoFileId() {
+ return getContentValues().getAsLong(Photo.PHOTO_FILE_ID);
+ }
+
+ public byte[] getPhoto() {
+ return getContentValues().getAsByteArray(Photo.PHOTO);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/RelationDataItem.java b/src/com/android/contacts/model/dataitem/RelationDataItem.java
new file mode 100644
index 000000000..e08ba4e53
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/RelationDataItem.java
@@ -0,0 +1,63 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.text.TextUtils;
+
+/**
+ * Represents a relation data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Relation}.
+ */
+public class RelationDataItem extends DataItem {
+
+ /* package */ RelationDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getName() {
+ return getContentValues().getAsString(Relation.NAME);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Relation.LABEL);
+ }
+
+ @Override
+ public boolean shouldCollapseWith(DataItem t, Context context) {
+ if (!(t instanceof RelationDataItem) || mKind == null || t.getDataKind() == null) {
+ return false;
+ }
+ final RelationDataItem that = (RelationDataItem) t;
+ // Relations can have different types (assistant, father) but have the same name
+ if (!TextUtils.equals(getName(), that.getName())) {
+ return false;
+ } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
+ return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
+ } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
+ return false;
+ } else if (getKindTypeColumn(mKind) == Relation.TYPE_CUSTOM &&
+ !TextUtils.equals(getLabel(), that.getLabel())) {
+ // Check if custom types are not the same
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/SipAddressDataItem.java b/src/com/android/contacts/model/dataitem/SipAddressDataItem.java
new file mode 100644
index 000000000..45ebeee6e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/SipAddressDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+
+/**
+ * Represents a sip address data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.SipAddress}.
+ */
+public class SipAddressDataItem extends DataItem {
+
+ /* package */ SipAddressDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getSipAddress() {
+ return getContentValues().getAsString(SipAddress.SIP_ADDRESS);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(SipAddress.LABEL);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java b/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java
new file mode 100644
index 000000000..4b691639c
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java
@@ -0,0 +1,100 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Contacts.Data;
+
+/**
+ * Represents a structured name data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.StructuredName}.
+ */
+public class StructuredNameDataItem extends DataItem {
+
+ public StructuredNameDataItem() {
+ super(new ContentValues());
+ getContentValues().put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ }
+
+ /* package */ StructuredNameDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getDisplayName() {
+ return getContentValues().getAsString(StructuredName.DISPLAY_NAME);
+ }
+
+ public void setDisplayName(String name) {
+ getContentValues().put(StructuredName.DISPLAY_NAME, name);
+ }
+
+ public String getGivenName() {
+ return getContentValues().getAsString(StructuredName.GIVEN_NAME);
+ }
+
+ public String getFamilyName() {
+ return getContentValues().getAsString(StructuredName.FAMILY_NAME);
+ }
+
+ public String getPrefix() {
+ return getContentValues().getAsString(StructuredName.PREFIX);
+ }
+
+ public String getMiddleName() {
+ return getContentValues().getAsString(StructuredName.MIDDLE_NAME);
+ }
+
+ public String getSuffix() {
+ return getContentValues().getAsString(StructuredName.SUFFIX);
+ }
+
+ public String getPhoneticGivenName() {
+ return getContentValues().getAsString(StructuredName.PHONETIC_GIVEN_NAME);
+ }
+
+ public String getPhoneticMiddleName() {
+ return getContentValues().getAsString(StructuredName.PHONETIC_MIDDLE_NAME);
+ }
+
+ public String getPhoneticFamilyName() {
+ return getContentValues().getAsString(StructuredName.PHONETIC_FAMILY_NAME);
+ }
+
+ public String getFullNameStyle() {
+ return getContentValues().getAsString(StructuredName.FULL_NAME_STYLE);
+ }
+
+ public void setPhoneticFamilyName(String name) {
+ getContentValues().put(StructuredName.PHONETIC_FAMILY_NAME, name);
+ }
+
+ public void setPhoneticMiddleName(String name) {
+ getContentValues().put(StructuredName.PHONETIC_MIDDLE_NAME, name);
+ }
+
+ public void setPhoneticGivenName(String name) {
+ getContentValues().put(StructuredName.PHONETIC_GIVEN_NAME, name);
+ }
+
+ public boolean isSuperPrimary() {
+ final ContentValues contentValues = getContentValues();
+ return contentValues == null || !contentValues.containsKey(StructuredName.IS_SUPER_PRIMARY)
+ ? false : contentValues.getAsBoolean(StructuredName.IS_SUPER_PRIMARY);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java b/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java
new file mode 100644
index 000000000..cf46c0711
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java
@@ -0,0 +1,68 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+
+/**
+ * Represents a structured postal data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.StructuredPostal}.
+ */
+public class StructuredPostalDataItem extends DataItem {
+
+ /* package */ StructuredPostalDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getFormattedAddress() {
+ return getContentValues().getAsString(StructuredPostal.FORMATTED_ADDRESS);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(StructuredPostal.LABEL);
+ }
+
+ public String getStreet() {
+ return getContentValues().getAsString(StructuredPostal.STREET);
+ }
+
+ public String getPOBox() {
+ return getContentValues().getAsString(StructuredPostal.POBOX);
+ }
+
+ public String getNeighborhood() {
+ return getContentValues().getAsString(StructuredPostal.NEIGHBORHOOD);
+ }
+
+ public String getCity() {
+ return getContentValues().getAsString(StructuredPostal.CITY);
+ }
+
+ public String getRegion() {
+ return getContentValues().getAsString(StructuredPostal.REGION);
+ }
+
+ public String getPostcode() {
+ return getContentValues().getAsString(StructuredPostal.POSTCODE);
+ }
+
+ public String getCountry() {
+ return getContentValues().getAsString(StructuredPostal.COUNTRY);
+ }
+}
diff --git a/src/com/android/contacts/model/dataitem/WebsiteDataItem.java b/src/com/android/contacts/model/dataitem/WebsiteDataItem.java
new file mode 100644
index 000000000..4439be79e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/WebsiteDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+
+/**
+ * Represents a website data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Website}.
+ */
+public class WebsiteDataItem extends DataItem {
+
+ /* package */ WebsiteDataItem(ContentValues values) {
+ super(values);
+ }
+
+ public String getUrl() {
+ return getContentValues().getAsString(Website.URL);
+ }
+
+ public String getLabel() {
+ return getContentValues().getAsString(Website.LABEL);
+ }
+}
diff --git a/src/com/android/contacts/preference/AboutPreferenceFragment.java b/src/com/android/contacts/preference/AboutPreferenceFragment.java
new file mode 100644
index 000000000..378948033
--- /dev/null
+++ b/src/com/android/contacts/preference/AboutPreferenceFragment.java
@@ -0,0 +1,104 @@
+/*
+ * 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.preference;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.LicenseActivity;
+
+/**
+ * This fragment shows the preferences for "about".
+ */
+public class AboutPreferenceFragment extends PreferenceFragment {
+
+ public static final String PRIVACY_POLICY_URL = "http://www.google.com/policies/privacy";
+ public static final String TERMS_OF_SERVICE_URL = "http://www.google.com/policies/terms";
+
+ public static AboutPreferenceFragment newInstance() {
+ return new AboutPreferenceFragment();
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.preference_about);
+
+ // Set build version of Contacts App.
+ final PackageManager manager = getActivity().getPackageManager();
+ try {
+ final PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0);
+ final Preference versionPreference = findPreference(
+ getString(R.string.pref_build_version_key));
+ versionPreference.setSummary(info.versionName);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Nothing
+ }
+
+ final Preference licensePreference = findPreference(
+ getString(R.string.pref_open_source_licenses_key));
+ licensePreference.setIntent(new Intent(getActivity(), LicenseActivity.class));
+
+ final Preference privacyPolicyPreference = findPreference("pref_privacy_policy");
+ final Preference termsOfServicePreference = findPreference("pref_terms_of_service");
+
+ final Preference.OnPreferenceClickListener listener =
+ new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ try {
+ if (preference == privacyPolicyPreference) {
+ startActivityForUrl(PRIVACY_POLICY_URL);
+ } else if (preference == termsOfServicePreference) {
+ startActivityForUrl(TERMS_OF_SERVICE_URL);
+ }
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(getContext(), getString(R.string.url_open_error_toast),
+ Toast.LENGTH_SHORT).show();
+ }
+ return true;
+ }
+ };
+
+ privacyPolicyPreference.setOnPreferenceClickListener(listener);
+ termsOfServicePreference.setOnPreferenceClickListener(listener);
+ }
+
+ @Override
+ public Context getContext() {
+ return getActivity();
+ }
+
+ private void startActivityForUrl(String urlString) {
+ final Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(urlString));
+ startActivity(intent);
+ }
+}
+
diff --git a/src/com/android/contacts/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
new file mode 100644
index 000000000..2d83bf198
--- /dev/null
+++ b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.preference;
+
+import android.content.res.Configuration;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.provider.ContactsContract.ProviderStatus;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatDelegate;
+import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.editor.SelectAccountDialogFragment;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.list.ProviderStatusWatcher;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.DisplayOptionsPreferenceFragment.ProfileListener;
+import com.android.contacts.preference.DisplayOptionsPreferenceFragment.ProfileQuery;
+import com.android.contacts.util.AccountSelectionUtil;
+
+/**
+ * Contacts settings.
+ */
+public final class ContactsPreferenceActivity extends PreferenceActivity
+ implements ProfileListener, SelectAccountDialogFragment.Listener {
+
+ private static final String TAG_ABOUT = "about_contacts";
+ private static final String TAG_DISPLAY_OPTIONS = "display_options";
+
+ private String mNewLocalProfileExtra;
+ private boolean mAreContactsAvailable;
+
+ private ProviderStatusWatcher mProviderStatusWatcher;
+
+ private AppCompatDelegate mCompatDelegate;
+
+ public static final String EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ mCompatDelegate = AppCompatDelegate.create(this, null);
+
+ super.onCreate(savedInstanceState);
+ mCompatDelegate.onCreate(savedInstanceState);
+
+
+ final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
+ }
+
+ mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
+
+ mNewLocalProfileExtra = getIntent().getStringExtra(EXTRA_NEW_LOCAL_PROFILE);
+ final int providerStatus = mProviderStatusWatcher.getProviderStatus();
+ mAreContactsAvailable = providerStatus == ProviderStatus.STATUS_NORMAL;
+
+ if (savedInstanceState == null) {
+ final DisplayOptionsPreferenceFragment fragment = DisplayOptionsPreferenceFragment
+ .newInstance(mNewLocalProfileExtra, mAreContactsAvailable);
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, fragment, TAG_DISPLAY_OPTIONS)
+ .commit();
+ setActivityTitle(R.string.activity_title_settings);
+ } else {
+ final AboutPreferenceFragment aboutFragment = (AboutPreferenceFragment)
+ getFragmentManager().findFragmentByTag(TAG_ABOUT);
+
+ if (aboutFragment != null) {
+ setActivityTitle(R.string.setting_about);
+ } else {
+ setActivityTitle(R.string.activity_title_settings);
+ }
+ }
+ }
+
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ mCompatDelegate.onPostCreate(savedInstanceState);
+ }
+
+ public void setSupportActionBar(Toolbar toolbar) {
+ mCompatDelegate.setSupportActionBar(toolbar);
+ }
+
+ @NonNull
+ @Override
+ public MenuInflater getMenuInflater() {
+ return mCompatDelegate.getMenuInflater();
+ }
+
+ @Override
+ public void setContentView(@LayoutRes int layoutRes) {
+ mCompatDelegate.setContentView(layoutRes);
+ }
+
+ @Override
+ public void setContentView(View view) {
+ mCompatDelegate.setContentView(view);
+ }
+
+ @Override
+ public void setContentView(View view, ViewGroup.LayoutParams params) {
+ mCompatDelegate.setContentView(view, params);
+ }
+
+ @Override
+ public void addContentView(View view, ViewGroup.LayoutParams params) {
+ mCompatDelegate.addContentView(view, params);
+ }
+
+ @Override
+ protected void onPostResume() {
+ super.onPostResume();
+ mCompatDelegate.onPostResume();
+ }
+
+ @Override
+ protected void onTitleChanged(CharSequence title, int color) {
+ super.onTitleChanged(title, color);
+ mCompatDelegate.setTitle(title);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ mCompatDelegate.onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mCompatDelegate.onDestroy();
+ }
+
+ @Override
+ public void invalidateOptionsMenu() {
+ mCompatDelegate.invalidateOptionsMenu();
+ }
+
+ protected void showAboutFragment() {
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, AboutPreferenceFragment.newInstance(), TAG_ABOUT)
+ .addToBackStack(null)
+ .commit();
+ setActivityTitle(R.string.setting_about);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ onBackPressed();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (getFragmentManager().getBackStackEntryCount() > 0) {
+ setActivityTitle(R.string.activity_title_settings);
+ getFragmentManager().popBackStack();
+ } else {
+ super.onBackPressed();
+ }
+ }
+
+ private void setActivityTitle(@StringRes int res) {
+ final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setTitle(res);
+ }
+ }
+
+ @Override
+ public void onProfileLoaded(Cursor cursor) {
+ boolean hasProfile = false;
+ String displayName = null;
+ long contactId = -1;
+ if (cursor != null && cursor.moveToFirst()) {
+ hasProfile = cursor.getInt(ProfileQuery.CONTACT_IS_USER_PROFILE) == 1;
+ displayName = cursor.getString(ProfileQuery.CONTACT_DISPLAY_NAME);
+ contactId = cursor.getLong(ProfileQuery.CONTACT_ID);
+ }
+ if (hasProfile && TextUtils.isEmpty(displayName)) {
+ displayName = getString(R.string.missing_name);
+ }
+ final DisplayOptionsPreferenceFragment fragment = (DisplayOptionsPreferenceFragment)
+ getFragmentManager().findFragmentByTag(TAG_DISPLAY_OPTIONS);
+ fragment.updateMyInfoPreference(hasProfile, displayName, contactId);
+ }
+
+ @Override
+ public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
+ AccountSelectionUtil.doImport(this, extraArgs.getInt(ImportDialogFragment
+ .KEY_RES_ID), account, extraArgs.getInt(ImportDialogFragment.KEY_SUBSCRIPTION_ID));
+ }
+
+ @Override
+ public void onAccountSelectorCancelled() {
+ }
+}
diff --git a/src/com/android/contacts/preference/ContactsPreferences.java b/src/com/android/contacts/preference/ContactsPreferences.java
new file mode 100644
index 000000000..87b13f749
--- /dev/null
+++ b/src/com/android/contacts/preference/ContactsPreferences.java
@@ -0,0 +1,395 @@
+/*
+ * Copyright (C) 2010 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.preference;
+
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.os.Handler;
+import android.os.Looper;
+import android.preference.PreferenceManager;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.List;
+
+/**
+ * Manages user preferences for contacts.
+ */
+public class ContactsPreferences implements OnSharedPreferenceChangeListener {
+
+ /**
+ * The value for the DISPLAY_ORDER key to show the given name first.
+ */
+ public static final int DISPLAY_ORDER_PRIMARY = 1;
+
+ /**
+ * The value for the DISPLAY_ORDER key to show the family name first.
+ */
+ public static final int DISPLAY_ORDER_ALTERNATIVE = 2;
+
+ public static final String DISPLAY_ORDER_KEY = "android.contacts.DISPLAY_ORDER";
+
+ /**
+ * The value for the SORT_ORDER key corresponding to sort by given name first.
+ */
+ public static final int SORT_ORDER_PRIMARY = 1;
+
+ public static final String SORT_ORDER_KEY = "android.contacts.SORT_ORDER";
+
+ /**
+ * The value for the SORT_ORDER key corresponding to sort by family name first.
+ */
+ public static final int SORT_ORDER_ALTERNATIVE = 2;
+
+ public static final String PREF_DISPLAY_ONLY_PHONES = "only_phones";
+
+ public static final boolean PREF_DISPLAY_ONLY_PHONES_DEFAULT = false;
+
+ public static final String PHONETIC_NAME_DISPLAY_KEY = "Phonetic_name_display";
+
+ /**
+ * Value to use when a preference is unassigned and needs to be read from the shared preferences
+ */
+ private static final int PREFERENCE_UNASSIGNED = -1;
+
+ private final Context mContext;
+ private int mSortOrder = PREFERENCE_UNASSIGNED;
+ private int mDisplayOrder = PREFERENCE_UNASSIGNED;
+ private int mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
+
+ private AccountWithDataSet mDefaultAccount = null;
+ private ChangeListener mListener = null;
+ private Handler mHandler;
+ private final SharedPreferences mPreferences;
+ private final BackupManager mBackupManager;
+ private final boolean mIsDefaultAccountUserChangeable;
+ private String mDefaultAccountKey;
+
+ public ContactsPreferences(Context context) {
+ this(context,
+ context.getResources().getBoolean(R.bool.config_default_account_user_changeable));
+ }
+
+ @VisibleForTesting
+ ContactsPreferences(Context context, boolean isDefaultAccountUserChangeable) {
+ mContext = context;
+ mIsDefaultAccountUserChangeable = isDefaultAccountUserChangeable;
+
+ mBackupManager = new BackupManager(mContext);
+
+ mHandler = new Handler(Looper.getMainLooper());
+ mPreferences = mContext.getSharedPreferences(context.getPackageName(),
+ Context.MODE_PRIVATE);
+ mDefaultAccountKey = mContext.getResources().getString(
+ R.string.contact_editor_default_account_key);
+ maybeMigrateSystemSettings();
+ }
+
+ public boolean isSortOrderUserChangeable() {
+ return mContext.getResources().getBoolean(R.bool.config_sort_order_user_changeable);
+ }
+
+ public int getDefaultSortOrder() {
+ if (mContext.getResources().getBoolean(R.bool.config_default_sort_order_primary)) {
+ return SORT_ORDER_PRIMARY;
+ } else {
+ return SORT_ORDER_ALTERNATIVE;
+ }
+ }
+
+ public int getSortOrder() {
+ if (!isSortOrderUserChangeable()) {
+ return getDefaultSortOrder();
+ }
+ if (mSortOrder == PREFERENCE_UNASSIGNED) {
+ mSortOrder = mPreferences.getInt(SORT_ORDER_KEY, getDefaultSortOrder());
+ }
+ return mSortOrder;
+ }
+
+ public void setSortOrder(int sortOrder) {
+ mSortOrder = sortOrder;
+ final Editor editor = mPreferences.edit();
+ editor.putInt(SORT_ORDER_KEY, sortOrder);
+ editor.commit();
+ mBackupManager.dataChanged();
+ }
+
+ public boolean isDisplayOrderUserChangeable() {
+ return mContext.getResources().getBoolean(R.bool.config_display_order_user_changeable);
+ }
+
+ public int getDefaultDisplayOrder() {
+ if (mContext.getResources().getBoolean(R.bool.config_default_display_order_primary)) {
+ return DISPLAY_ORDER_PRIMARY;
+ } else {
+ return DISPLAY_ORDER_ALTERNATIVE;
+ }
+ }
+
+ public int getDisplayOrder() {
+ if (!isDisplayOrderUserChangeable()) {
+ return getDefaultDisplayOrder();
+ }
+ if (mDisplayOrder == PREFERENCE_UNASSIGNED) {
+ mDisplayOrder = mPreferences.getInt(DISPLAY_ORDER_KEY, getDefaultDisplayOrder());
+ }
+ return mDisplayOrder;
+ }
+
+ public void setDisplayOrder(int displayOrder) {
+ mDisplayOrder = displayOrder;
+ final Editor editor = mPreferences.edit();
+ editor.putInt(DISPLAY_ORDER_KEY, displayOrder);
+ editor.commit();
+ mBackupManager.dataChanged();
+ }
+
+ public int getDefaultPhoneticNameDisplayPreference() {
+ if (mContext.getResources().getBoolean(R.bool.config_default_hide_phonetic_name_if_empty)) {
+ return PhoneticNameDisplayPreference.HIDE_IF_EMPTY;
+ } else {
+ return PhoneticNameDisplayPreference.SHOW_ALWAYS;
+ }
+ }
+
+ public boolean isPhoneticNameDisplayPreferenceChangeable() {
+ return mContext.getResources().getBoolean(
+ R.bool.config_phonetic_name_display_user_changeable);
+ }
+
+ public void setPhoneticNameDisplayPreference(int phoneticNameDisplayPreference) {
+ mPhoneticNameDisplayPreference = phoneticNameDisplayPreference;
+ final Editor editor = mPreferences.edit();
+ editor.putInt(PHONETIC_NAME_DISPLAY_KEY, phoneticNameDisplayPreference);
+ editor.commit();
+ mBackupManager.dataChanged();
+ }
+
+ public int getPhoneticNameDisplayPreference() {
+ if (!isPhoneticNameDisplayPreferenceChangeable()) {
+ return getDefaultPhoneticNameDisplayPreference();
+ }
+ if (mPhoneticNameDisplayPreference == PREFERENCE_UNASSIGNED) {
+ mPhoneticNameDisplayPreference = mPreferences.getInt(PHONETIC_NAME_DISPLAY_KEY,
+ getDefaultPhoneticNameDisplayPreference());
+ }
+ return mPhoneticNameDisplayPreference;
+ }
+
+ public boolean shouldHidePhoneticNamesIfEmpty() {
+ return getPhoneticNameDisplayPreference() == PhoneticNameDisplayPreference.HIDE_IF_EMPTY;
+ }
+
+ public boolean isDefaultAccountUserChangeable() {
+ return mIsDefaultAccountUserChangeable;
+ }
+
+ public AccountWithDataSet getDefaultAccount() {
+ if (!isDefaultAccountUserChangeable()) {
+ return mDefaultAccount;
+ }
+ if (mDefaultAccount == null) {
+ final String accountString = mPreferences
+ .getString(mDefaultAccountKey, null);
+ if (!TextUtils.isEmpty(accountString)) {
+ mDefaultAccount = AccountWithDataSet.unstringify(accountString);
+ }
+ }
+ return mDefaultAccount;
+ }
+
+ public void clearDefaultAccount() {
+ mDefaultAccount = null;
+ mPreferences.edit().remove(mDefaultAccountKey).commit();
+ }
+
+ public void setDefaultAccount(@NonNull AccountWithDataSet accountWithDataSet) {
+ if (accountWithDataSet == null) {
+ throw new IllegalArgumentException(
+ "argument should not be null");
+ }
+ mDefaultAccount = accountWithDataSet;
+ mPreferences.edit().putString(mDefaultAccountKey, accountWithDataSet.stringify()).commit();
+ }
+
+ public boolean isDefaultAccountSet() {
+ return mDefaultAccount != null || mPreferences.contains(mDefaultAccountKey);
+ }
+
+ /**
+ * @return false if there is only one writable account or no requirement to return true is met.
+ * true if the contact editor should show the "accounts changed" notification, that is:
+ * - If it's the first launch.
+ * - Or, if the default account has been removed.
+ * (And some extra sanity check)
+ *
+ * Note if this method returns {@code false}, the caller can safely assume that
+ * {@link #getDefaultAccount} will return a valid account. (Either an account which still
+ * exists, or {@code null} which should be interpreted as "local only".)
+ */
+ public boolean shouldShowAccountChangedNotification(List<AccountWithDataSet>
+ currentWritableAccounts) {
+ final AccountWithDataSet defaultAccount = getDefaultAccount();
+
+ // This shouldn't occur anymore because a "device" account is added in the case that there
+ // are no other accounts but if there are no writable accounts then the default has been
+ // initialized if it is "device"
+ if (currentWritableAccounts.isEmpty()) {
+ return defaultAccount == null || !defaultAccount.isNullAccount();
+ }
+
+ if (currentWritableAccounts.size() == 1
+ && !currentWritableAccounts.get(0).isNullAccount()) {
+ return false;
+ }
+
+ if (defaultAccount == null) {
+ return true;
+ }
+
+ if (!currentWritableAccounts.contains(defaultAccount)) {
+ return true;
+ }
+
+ // All good.
+ return false;
+ }
+
+ public void registerChangeListener(ChangeListener listener) {
+ if (mListener != null) unregisterChangeListener();
+
+ mListener = listener;
+
+ // Reset preferences to "unknown" because they may have changed while the
+ // listener was unregistered.
+ mDisplayOrder = PREFERENCE_UNASSIGNED;
+ mSortOrder = PREFERENCE_UNASSIGNED;
+ mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
+ mDefaultAccount = null;
+
+ mPreferences.registerOnSharedPreferenceChangeListener(this);
+ }
+
+ public void unregisterChangeListener() {
+ if (mListener != null) {
+ mListener = null;
+ }
+
+ mPreferences.unregisterOnSharedPreferenceChangeListener(this);
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String key) {
+ // This notification is not sent on the Ui thread. Use the previously created Handler
+ // to switch to the Ui thread
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ refreshValue(key);
+ }
+ });
+ }
+
+ /**
+ * Forces the value for the given key to be looked up from shared preferences and notifies
+ * the registered {@link ChangeListener}
+ *
+ * @param key the {@link SharedPreferences} key to look up
+ */
+ public void refreshValue(String key) {
+ if (DISPLAY_ORDER_KEY.equals(key)) {
+ mDisplayOrder = PREFERENCE_UNASSIGNED;
+ mDisplayOrder = getDisplayOrder();
+ } else if (SORT_ORDER_KEY.equals(key)) {
+ mSortOrder = PREFERENCE_UNASSIGNED;
+ mSortOrder = getSortOrder();
+ } else if (PHONETIC_NAME_DISPLAY_KEY.equals(key)) {
+ mPhoneticNameDisplayPreference = PREFERENCE_UNASSIGNED;
+ mPhoneticNameDisplayPreference = getPhoneticNameDisplayPreference();
+ } else if (mDefaultAccountKey.equals(key)) {
+ mDefaultAccount = null;
+ mDefaultAccount = getDefaultAccount();
+ }
+ if (mListener != null) mListener.onChange();
+ }
+
+ public interface ChangeListener {
+ void onChange();
+ }
+
+ /**
+ * If there are currently no preferences (which means this is the first time we are run),
+ * For sort order and display order, check to see if there are any preferences stored in
+ * system settings (pre-L) which can be copied into our own SharedPreferences.
+ * For default account setting, check to see if there are any preferences stored in the previous
+ * SharedPreferences which can be copied into current SharedPreferences.
+ */
+ private void maybeMigrateSystemSettings() {
+ if (!mPreferences.contains(SORT_ORDER_KEY)) {
+ int sortOrder = getDefaultSortOrder();
+ try {
+ sortOrder = Settings.System.getInt(mContext.getContentResolver(),
+ SORT_ORDER_KEY);
+ } catch (SettingNotFoundException e) {
+ }
+ setSortOrder(sortOrder);
+ }
+
+ if (!mPreferences.contains(DISPLAY_ORDER_KEY)) {
+ int displayOrder = getDefaultDisplayOrder();
+ try {
+ displayOrder = Settings.System.getInt(mContext.getContentResolver(),
+ DISPLAY_ORDER_KEY);
+ } catch (SettingNotFoundException e) {
+ }
+ setDisplayOrder(displayOrder);
+ }
+
+ if (!mPreferences.contains(PHONETIC_NAME_DISPLAY_KEY)) {
+ int phoneticNameFieldsDisplay = getDefaultPhoneticNameDisplayPreference();
+ try {
+ phoneticNameFieldsDisplay = Settings.System.getInt(mContext.getContentResolver(),
+ PHONETIC_NAME_DISPLAY_KEY);
+ } catch (SettingNotFoundException e) {
+ }
+ setPhoneticNameDisplayPreference(phoneticNameFieldsDisplay);
+ }
+
+ if (!mPreferences.contains(mDefaultAccountKey)) {
+ final SharedPreferences previousPrefs =
+ PreferenceManager.getDefaultSharedPreferences(mContext);
+ final String defaultAccount = previousPrefs.getString(mDefaultAccountKey, null);
+ if (!TextUtils.isEmpty(defaultAccount)) {
+ final AccountWithDataSet accountWithDataSet = AccountWithDataSet.unstringify(
+ defaultAccount);
+ setDefaultAccount(accountWithDataSet);
+ }
+ }
+ }
+
+}
diff --git a/src/com/android/contacts/preference/DefaultAccountPreference.java b/src/com/android/contacts/preference/DefaultAccountPreference.java
new file mode 100644
index 000000000..d43b8d574
--- /dev/null
+++ b/src/com/android/contacts/preference/DefaultAccountPreference.java
@@ -0,0 +1,112 @@
+/*
+ * 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.preference;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountsListAdapter;
+
+import java.util.List;
+
+public class DefaultAccountPreference extends DialogPreference {
+ private ContactsPreferences mPreferences;
+ private AccountsListAdapter mListAdapter;
+ private List<AccountInfo> mAccounts;
+ private int mChosenIndex = -1;
+
+ public DefaultAccountPreference(Context context) {
+ super(context);
+ prepare();
+ }
+
+ public DefaultAccountPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ prepare();
+ }
+
+ public void setAccounts(List<AccountInfo> accounts) {
+ mAccounts = accounts;
+ if (mListAdapter != null) {
+ mListAdapter.setAccounts(accounts, null);
+ notifyChanged();
+ }
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ prepare();
+ return super.onCreateDialogView();
+ }
+
+ private void prepare() {
+ mPreferences = new ContactsPreferences(getContext());
+ mListAdapter = new AccountsListAdapter(getContext());
+ if (mAccounts != null) {
+ mListAdapter.setAccounts(mAccounts, null);
+ }
+ }
+
+ @Override
+ protected boolean shouldPersist() {
+ return false; // This preference takes care of its own storage
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ final AccountWithDataSet defaultAccount = mPreferences.getDefaultAccount();
+ if (defaultAccount == null || mAccounts == null ||
+ !AccountInfo.contains(mAccounts, defaultAccount)) {
+ return null;
+ } else {
+ return AccountInfo.getAccount(mAccounts, defaultAccount).getNameLabel();
+ }
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ // UX recommendation is not to show buttons on such lists.
+ builder.setNegativeButton(null, null);
+ builder.setPositiveButton(null, null);
+ builder.setAdapter(mListAdapter, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mChosenIndex = which;
+ }
+ });
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ final AccountWithDataSet currentDefault = mPreferences.getDefaultAccount();
+
+ if (mChosenIndex != -1) {
+ final AccountWithDataSet chosenAccount = mListAdapter.getItem(mChosenIndex);
+ if (!chosenAccount.equals(currentDefault)) {
+ mPreferences.setDefaultAccount(chosenAccount);
+ notifyChanged();
+ }
+ } // else the user dismissed this dialog so leave the preference unchanged.
+ }
+}
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
new file mode 100644
index 000000000..22a66835b
--- /dev/null
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2010 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.preference;
+
+import android.app.Activity;
+import android.app.LoaderManager;
+import android.content.BroadcastReceiver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.provider.BlockedNumberContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Profile;
+import android.support.design.widget.Snackbar;
+import android.support.v4.content.LocalBroadcastManager;
+import android.telecom.TelecomManager;
+import android.telephony.TelephonyManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.SimImportService;
+import com.android.contacts.compat.TelecomManagerUtil;
+import com.android.contacts.compat.TelephonyManagerCompat;
+import com.android.contacts.interactions.ExportDialogFragment;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contactsbind.HelpUtils;
+
+import java.util.List;
+
+/**
+ * This fragment shows the preferences for "display options"
+ */
+public class DisplayOptionsPreferenceFragment extends PreferenceFragment
+ implements Preference.OnPreferenceClickListener, AccountsLoader.AccountsListener {
+
+ private static final int REQUEST_CODE_CUSTOM_CONTACTS_FILTER = 0;
+
+ private static final String ARG_CONTACTS_AVAILABLE = "are_contacts_available";
+ private static final String ARG_NEW_LOCAL_PROFILE = "new_local_profile";
+
+ private static final String KEY_ABOUT = "about";
+ private static final String KEY_ACCOUNTS = "accounts";
+ private static final String KEY_DEFAULT_ACCOUNT = "defaultAccount";
+ private static final String KEY_BLOCKED_NUMBERS = "blockedNumbers";
+ private static final String KEY_DISPLAY_ORDER = "displayOrder";
+ private static final String KEY_CUSTOM_CONTACTS_FILTER = "customContactsFilter";
+ private static final String KEY_IMPORT = "import";
+ private static final String KEY_EXPORT = "export";
+ private static final String KEY_MY_INFO = "myInfo";
+ private static final String KEY_SORT_ORDER = "sortOrder";
+ private static final String KEY_PHONETIC_NAME_DISPLAY = "phoneticNameDisplay";
+
+ private static final int LOADER_PROFILE = 0;
+ private static final int LOADER_ACCOUNTS = 1;
+
+ /**
+ * Callbacks for hosts of the {@link DisplayOptionsPreferenceFragment}.
+ */
+ public interface ProfileListener {
+ /**
+ * Invoked after profile has been loaded.
+ */
+ void onProfileLoaded(Cursor data);
+ }
+
+ /**
+ * The projections that are used to obtain user profile
+ */
+ public static class ProfileQuery {
+ /**
+ * Not instantiable.
+ */
+ private ProfileQuery() {}
+
+ private static final String[] PROFILE_PROJECTION_PRIMARY = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_PRIMARY, // 1
+ Contacts.IS_USER_PROFILE, // 2
+ };
+
+ private static final String[] PROFILE_PROJECTION_ALTERNATIVE = new String[] {
+ Contacts._ID, // 0
+ Contacts.DISPLAY_NAME_ALTERNATIVE, // 1
+ Contacts.IS_USER_PROFILE, // 2
+ };
+
+ public static final int CONTACT_ID = 0;
+ public static final int CONTACT_DISPLAY_NAME = 1;
+ public static final int CONTACT_IS_USER_PROFILE = 2;
+ }
+
+ private String mNewLocalProfileExtra;
+ private boolean mAreContactsAvailable;
+
+ private boolean mHasProfile;
+ private long mProfileContactId;
+
+ private Preference mMyInfoPreference;
+
+ private ProfileListener mListener;
+
+ private ViewGroup mRootView;
+ private SaveServiceResultListener mSaveServiceListener;
+
+ private final LoaderManager.LoaderCallbacks<Cursor> mProfileLoaderListener =
+ new LoaderManager.LoaderCallbacks<Cursor>() {
+
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ final CursorLoader loader = createCursorLoader(getContext());
+ loader.setUri(Profile.CONTENT_URI);
+ loader.setProjection(getProjection(getContext()));
+ return loader;
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (mListener != null) {
+ mListener.onProfileLoaded(data);
+ }
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ }
+ };
+
+ public static DisplayOptionsPreferenceFragment newInstance(String newLocalProfileExtra,
+ boolean areContactsAvailable) {
+ final DisplayOptionsPreferenceFragment fragment = new DisplayOptionsPreferenceFragment();
+ final Bundle args = new Bundle();
+ args.putString(ARG_NEW_LOCAL_PROFILE, newLocalProfileExtra);
+ args.putBoolean(ARG_CONTACTS_AVAILABLE, areContactsAvailable);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (ProfileListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString() + " must implement ProfileListener");
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ // Wrap the preference view in a FrameLayout so we can show a snackbar
+ mRootView = new FrameLayout(getActivity());
+ final View list = super.onCreateView(inflater, mRootView, savedInstanceState);
+ mRootView.addView(list);
+ return mRootView;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ mSaveServiceListener = new SaveServiceResultListener();
+ LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
+ mSaveServiceListener,
+ new IntentFilter(SimImportService.BROADCAST_SIM_IMPORT_COMPLETE));
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.preference_display_options);
+
+ final Bundle args = getArguments();
+ mNewLocalProfileExtra = args.getString(ARG_NEW_LOCAL_PROFILE);
+ mAreContactsAvailable = args.getBoolean(ARG_CONTACTS_AVAILABLE);
+
+ removeUnsupportedPreferences();
+
+ mMyInfoPreference = findPreference(KEY_MY_INFO);
+
+ final Preference accountsPreference = findPreference(KEY_ACCOUNTS);
+ accountsPreference.setOnPreferenceClickListener(this);
+
+ final Preference importPreference = findPreference(KEY_IMPORT);
+ importPreference.setOnPreferenceClickListener(this);
+
+ final Preference exportPreference = findPreference(KEY_EXPORT);
+ if (exportPreference != null) {
+ exportPreference.setOnPreferenceClickListener(this);
+ }
+
+ final Preference blockedNumbersPreference = findPreference(KEY_BLOCKED_NUMBERS);
+ if (blockedNumbersPreference != null) {
+ blockedNumbersPreference.setOnPreferenceClickListener(this);
+ }
+
+ final Preference aboutPreference = findPreference(KEY_ABOUT);
+ if (aboutPreference != null) {
+ aboutPreference.setOnPreferenceClickListener(this);
+ }
+
+ final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
+ if (customFilterPreference != null) {
+ customFilterPreference.setOnPreferenceClickListener(this);
+ setCustomContactsFilterSummary();
+ }
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ getLoaderManager().initLoader(LOADER_PROFILE, null, mProfileLoaderListener);
+ AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS, AccountTypeManager.writableFilter());
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mSaveServiceListener);
+ mRootView = null;
+ }
+
+ public void updateMyInfoPreference(boolean hasProfile, String displayName, long contactId) {
+ final CharSequence summary = hasProfile ? displayName : getString(R.string.set_up_profile);
+ mMyInfoPreference.setSummary(summary);
+ mHasProfile = hasProfile;
+ mProfileContactId = contactId;
+ mMyInfoPreference.setOnPreferenceClickListener(this);
+ }
+
+ private void removeUnsupportedPreferences() {
+ // Disable sort order for CJK locales where it is not supported
+ final Resources resources = getResources();
+ if (!resources.getBoolean(R.bool.config_sort_order_user_changeable)) {
+ getPreferenceScreen().removePreference(findPreference(KEY_SORT_ORDER));
+ }
+
+ if (!resources.getBoolean(R.bool.config_phonetic_name_display_user_changeable)) {
+ getPreferenceScreen().removePreference(findPreference(KEY_PHONETIC_NAME_DISPLAY));
+ }
+
+ if (HelpUtils.isHelpAndFeedbackAvailable()) {
+ getPreferenceScreen().removePreference(findPreference(KEY_ABOUT));
+ }
+
+ // Disable display order for CJK locales as well
+ if (!resources.getBoolean(R.bool.config_display_order_user_changeable)) {
+ getPreferenceScreen().removePreference(findPreference(KEY_DISPLAY_ORDER));
+ }
+
+ final boolean isPhone = TelephonyManagerCompat.isVoiceCapable(
+ (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE));
+ final boolean showBlockedNumbers = isPhone && ContactsUtils.FLAG_N_FEATURE
+ && BlockedNumberContract.canCurrentUserBlockNumbers(getContext());
+ if (!showBlockedNumbers) {
+ getPreferenceScreen().removePreference(findPreference(KEY_BLOCKED_NUMBERS));
+ }
+
+ if (!mAreContactsAvailable) {
+ getPreferenceScreen().removePreference(findPreference(KEY_EXPORT));
+ }
+ }
+
+ @Override
+ public void onAccountsLoaded(List<AccountInfo> accounts) {
+ // Hide accounts preferences if no writable accounts exist
+ final DefaultAccountPreference preference =
+ (DefaultAccountPreference) findPreference(KEY_DEFAULT_ACCOUNT);
+ preference.setAccounts(accounts);
+ }
+
+ @Override
+ public Context getContext() {
+ return getActivity();
+ }
+
+ private CursorLoader createCursorLoader(Context context) {
+ return new CursorLoader(context) {
+ @Override
+ protected Cursor onLoadInBackground() {
+ try {
+ return super.onLoadInBackground();
+ } catch (RuntimeException e) {
+ return null;
+ }
+ }
+ };
+ }
+
+ private String[] getProjection(Context context) {
+ final ContactsPreferences contactsPrefs = new ContactsPreferences(context);
+ final int displayOrder = contactsPrefs.getDisplayOrder();
+ if (displayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return ProfileQuery.PROFILE_PROJECTION_PRIMARY;
+ }
+ return ProfileQuery.PROFILE_PROJECTION_ALTERNATIVE;
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference p) {
+ final String prefKey = p.getKey();
+
+ if (KEY_ABOUT.equals(prefKey)) {
+ ((ContactsPreferenceActivity) getActivity()).showAboutFragment();
+ return true;
+ } else if (KEY_IMPORT.equals(prefKey)) {
+ ImportDialogFragment.show(getFragmentManager());
+ return true;
+ } else if (KEY_EXPORT.equals(prefKey)) {
+ ExportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class,
+ ExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
+ return true;
+ } else if (KEY_MY_INFO.equals(prefKey)) {
+ if (mHasProfile) {
+ final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mProfileContactId);
+ ImplicitIntentsUtil.startQuickContact(getActivity(), uri, ScreenType.ME_CONTACT);
+ } else {
+ final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+ intent.putExtra(mNewLocalProfileExtra, true);
+ ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+ }
+ return true;
+ } else if (KEY_ACCOUNTS.equals(prefKey)) {
+ ImplicitIntentsUtil.startActivityOutsideApp(getContext(),
+ ImplicitIntentsUtil.getIntentForAddingAccount());
+ return true;
+ } else if (KEY_BLOCKED_NUMBERS.equals(prefKey)) {
+ final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
+ (TelecomManager) getContext().getSystemService(Context.TELECOM_SERVICE));
+ startActivity(intent);
+ return true;
+ } else if (KEY_CUSTOM_CONTACTS_FILTER.equals(prefKey)) {
+ final ContactListFilter filter =
+ ContactListFilterController.getInstance(getContext()).getFilter();
+ AccountFilterUtil.startAccountFilterActivityForResult(
+ this, REQUEST_CODE_CUSTOM_CONTACTS_FILTER, filter);
+ }
+ return false;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CODE_CUSTOM_CONTACTS_FILTER
+ && resultCode == Activity.RESULT_OK) {
+ AccountFilterUtil.handleAccountFilterResult(
+ ContactListFilterController.getInstance(getContext()), resultCode, data);
+ setCustomContactsFilterSummary();
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ private void setCustomContactsFilterSummary() {
+ final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
+ if (customFilterPreference != null) {
+ final ContactListFilter filter =
+ ContactListFilterController.getInstance(getContext()).getPersistedFilter();
+ if (filter != null) {
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_DEFAULT ||
+ filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ customFilterPreference.setSummary(R.string.list_filter_all_accounts);
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ customFilterPreference.setSummary(R.string.listCustomView);
+ } else {
+ customFilterPreference.setSummary(null);
+ }
+ }
+ }
+ }
+
+ private class SaveServiceResultListener extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final long now = System.currentTimeMillis();
+ final long opStart = intent.getLongExtra(
+ SimImportService.EXTRA_OPERATION_REQUESTED_AT_TIME, now);
+
+ // If it's been over 30 seconds the user is likely in a different context so suppress
+ // the toast message.
+ if (now - opStart > 30*1000) return;
+
+ final int code = intent.getIntExtra(SimImportService.EXTRA_RESULT_CODE,
+ SimImportService.RESULT_UNKNOWN);
+ final int count = intent.getIntExtra(SimImportService.EXTRA_RESULT_COUNT, -1);
+ if (code == SimImportService.RESULT_SUCCESS && count > 0) {
+ Snackbar.make(mRootView, getResources().getQuantityString(
+ R.plurals.sim_import_success_toast_fmt, count, count),
+ Snackbar.LENGTH_LONG).show();
+ } else if (code == SimImportService.RESULT_FAILURE) {
+ Snackbar.make(mRootView, R.string.sim_import_failed_toast,
+ Snackbar.LENGTH_LONG).show();
+ }
+ }
+ }
+}
+
diff --git a/src/com/android/contacts/preference/DisplayOrderPreference.java b/src/com/android/contacts/preference/DisplayOrderPreference.java
new file mode 100644
index 000000000..801bb248a
--- /dev/null
+++ b/src/com/android/contacts/preference/DisplayOrderPreference.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010 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.preference;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.android.contacts.R;
+
+/**
+ * Custom preference: view-name-as (first name first or last name first).
+ */
+public final class DisplayOrderPreference extends ListPreference {
+
+ private ContactsPreferences mPreferences;
+ private Context mContext;
+
+ public DisplayOrderPreference(Context context) {
+ super(context);
+ prepare();
+ }
+
+ public DisplayOrderPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ prepare();
+ }
+
+ private void prepare() {
+ mContext = getContext();
+ mPreferences = new ContactsPreferences(mContext);
+ setEntries(new String[]{
+ mContext.getString(R.string.display_options_view_given_name_first),
+ mContext.getString(R.string.display_options_view_family_name_first),
+ });
+ setEntryValues(new String[]{
+ String.valueOf(ContactsPreferences.DISPLAY_ORDER_PRIMARY),
+ String.valueOf(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE),
+ });
+ setValue(String.valueOf(mPreferences.getDisplayOrder()));
+ }
+
+ @Override
+ protected boolean shouldPersist() {
+ return false; // This preference takes care of its own storage
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ switch (mPreferences.getDisplayOrder()) {
+ case ContactsPreferences.DISPLAY_ORDER_PRIMARY:
+ return mContext.getString(R.string.display_options_view_given_name_first);
+ case ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE:
+ return mContext.getString(R.string.display_options_view_family_name_first);
+ }
+ return null;
+ }
+
+ @Override
+ protected boolean persistString(String value) {
+ int newValue = Integer.parseInt(value);
+ if (newValue != mPreferences.getDisplayOrder()) {
+ mPreferences.setDisplayOrder(newValue);
+ notifyChanged();
+ }
+ return true;
+ }
+
+ @Override
+ // UX recommendation is not to show cancel button on such lists.
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setNegativeButton(null, null);
+ }
+}
diff --git a/src/com/android/contacts/preference/PhoneticNameDisplayPreference.java b/src/com/android/contacts/preference/PhoneticNameDisplayPreference.java
new file mode 100644
index 000000000..42bbcc3ec
--- /dev/null
+++ b/src/com/android/contacts/preference/PhoneticNameDisplayPreference.java
@@ -0,0 +1,93 @@
+/*
+ * 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.contacts.preference;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.android.contacts.R;
+
+/**
+ * Custom preference: phonetic name fields.
+ */
+public final class PhoneticNameDisplayPreference extends ListPreference {
+
+ public static final int SHOW_ALWAYS = 0;
+ public static final int HIDE_IF_EMPTY = 1;
+
+ private Context mContext;
+ private ContactsPreferences mPreferences;
+
+ public PhoneticNameDisplayPreference(Context context) {
+ super(context);
+ prepare();
+ }
+
+ public PhoneticNameDisplayPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ prepare();
+ }
+
+ private void prepare() {
+ mContext = getContext();
+ mPreferences = new ContactsPreferences(mContext);
+ setEntries(new String[]{
+ mContext.getString(R.string.editor_options_always_show_phonetic_names),
+ mContext.getString(R.string.editor_options_hide_phonetic_names_if_empty)
+ });
+ setEntryValues(new String[]{
+ String.valueOf(SHOW_ALWAYS),
+ String.valueOf(HIDE_IF_EMPTY),
+ });
+ setValue(String.valueOf(mPreferences.getPhoneticNameDisplayPreference()));
+ }
+
+ @Override
+ protected boolean shouldPersist() {
+ return false; // This preference takes care of its own storage
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ switch (mPreferences.getPhoneticNameDisplayPreference()) {
+ case SHOW_ALWAYS:
+ return mContext.getString(R.string.editor_options_always_show_phonetic_names);
+ case HIDE_IF_EMPTY:
+ return mContext.getString(R.string.editor_options_hide_phonetic_names_if_empty);
+ }
+ return null;
+ }
+
+ @Override
+ protected boolean persistString(String value) {
+ final int newValue = Integer.parseInt(value);
+ if (newValue != mPreferences.getPhoneticNameDisplayPreference()) {
+ mPreferences.setPhoneticNameDisplayPreference(newValue);
+ notifyChanged();
+ }
+ return true;
+ }
+
+ // UX recommendation is not to show cancel button on such lists.
+ @Override
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setNegativeButton(null, null);
+ }
+}
diff --git a/src/com/android/contacts/preference/SortOrderPreference.java b/src/com/android/contacts/preference/SortOrderPreference.java
new file mode 100644
index 000000000..387023112
--- /dev/null
+++ b/src/com/android/contacts/preference/SortOrderPreference.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010 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.preference;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.android.contacts.R;
+
+/**
+ * Custom preference: sort-by.
+ */
+public final class SortOrderPreference extends ListPreference {
+
+ private ContactsPreferences mPreferences;
+ private Context mContext;
+
+ public SortOrderPreference(Context context) {
+ super(context);
+ prepare();
+ }
+
+ public SortOrderPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ prepare();
+ }
+
+ private void prepare() {
+ mContext = getContext();
+ mPreferences = new ContactsPreferences(mContext);
+ setEntries(new String[]{
+ mContext.getString(R.string.display_options_sort_by_given_name),
+ mContext.getString(R.string.display_options_sort_by_family_name),
+ });
+ setEntryValues(new String[]{
+ String.valueOf(ContactsPreferences.SORT_ORDER_PRIMARY),
+ String.valueOf(ContactsPreferences.SORT_ORDER_ALTERNATIVE),
+ });
+ setValue(String.valueOf(mPreferences.getSortOrder()));
+ }
+
+ @Override
+ protected boolean shouldPersist() {
+ return false; // This preference takes care of its own storage
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ switch (mPreferences.getSortOrder()) {
+ case ContactsPreferences.SORT_ORDER_PRIMARY:
+ return mContext.getString(R.string.display_options_sort_by_given_name);
+ case ContactsPreferences.SORT_ORDER_ALTERNATIVE:
+ return mContext.getString(R.string.display_options_sort_by_family_name);
+ }
+ return null;
+ }
+
+ @Override
+ protected boolean persistString(String value) {
+ int newValue = Integer.parseInt(value);
+ if (newValue != mPreferences.getSortOrder()) {
+ mPreferences.setSortOrder(newValue);
+ notifyChanged();
+ }
+ return true;
+ }
+
+ @Override
+ // UX recommendation is not to show cancel button on such lists.
+ protected void onPrepareDialogBuilder(Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setNegativeButton(null, null);
+ }
+}
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index 7d904ab69..7d7e852d9 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -20,7 +20,7 @@ import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
-import com.android.contacts.common.Collapser;
+import com.android.contacts.Collapser;
/**
* Abstract definition of an action that could be performed, along with
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 5a49c77d8..a3f4869c6 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -29,19 +29,19 @@ import android.telecom.PhoneAccount;
import android.text.TextUtils;
import android.util.Log;
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.MoreContactUtils;
import com.android.contacts.R;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.EmailDataItem;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-import com.android.contacts.common.model.dataitem.SipAddressDataItem;
-import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
-import com.android.contacts.common.model.dataitem.WebsiteDataItem;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.SipAddressDataItem;
+import com.android.contacts.model.dataitem.StructuredPostalDataItem;
+import com.android.contacts.model.dataitem.WebsiteDataItem;
import com.android.contacts.quickcontact.WebAddress.ParseException;
import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.StructuredPostalUtils;
@@ -215,10 +215,10 @@ public class DataAction implements Action {
mAlternateIntent = new Intent(
Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
if (isVideoChatCapable) {
- mAlternateIconRes = R.drawable.sym_action_videochat_holo_light;
+ mAlternateIconRes = R.drawable.quantum_ic_videocam_vd_theme_24;
mAlternateIconDescriptionRes = R.string.video_chat;
} else {
- mAlternateIconRes = R.drawable.sym_action_audiochat_holo_light;
+ mAlternateIconRes = R.drawable.quantum_ic_mic_vd_theme_24;
mAlternateIconDescriptionRes = R.string.audio_chat;
}
}
diff --git a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
index c4969cc6d..422897172 100644
--- a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
+++ b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
@@ -16,17 +16,17 @@
package com.android.contacts.quickcontact;
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract.Directory;
import android.widget.Toast;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
import java.util.ArrayList;
/**
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index 762ff6c83..49da4c811 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -47,12 +47,11 @@ import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.android.contacts.R;
-import com.android.contacts.common.dialog.CallSubjectDialog;
+import com.android.contacts.dialog.CallSubjectDialog;
import java.util.ArrayList;
import java.util.List;
@@ -244,8 +243,6 @@ public class ExpandingEntryCardView extends CardView {
private View mExpandCollapseButton;
private TextView mExpandCollapseTextView;
private TextView mTitleTextView;
- private CharSequence mExpandButtonText;
- private CharSequence mCollapseButtonText;
private OnClickListener mOnClickListener;
private OnCreateContextMenuListener mOnCreateContextMenuListener;
private boolean mIsExpanded = false;
@@ -263,17 +260,9 @@ public class ExpandingEntryCardView extends CardView {
private final ImageView mExpandCollapseArrow;
private int mThemeColor;
private ColorFilter mThemeColorFilter;
- /**
- * Whether to prioritize the first entry type. If prioritized, we should show at least two
- * of this entry type.
- */
- private boolean mShowFirstEntryTypeTwice;
private boolean mIsAlwaysExpanded;
/** The ViewGroup to run the expand/collapse animation on */
private ViewGroup mAnimationViewGroup;
- private LinearLayout mBadgeContainer;
- private final List<ImageView> mBadges;
- private final List<Integer> mBadgeIds;
private final int mDividerLineHeightPixels;
/**
* List to hold the separators. This saves us from reconstructing every expand/collapse and
@@ -311,19 +300,8 @@ public class ExpandingEntryCardView extends CardView {
mExpandCollapseTextView = (TextView) mExpandCollapseButton.findViewById(R.id.text);
mExpandCollapseArrow = (ImageView) mExpandCollapseButton.findViewById(R.id.arrow);
mExpandCollapseButton.setOnClickListener(mExpandCollapseButtonListener);
- mBadgeContainer = (LinearLayout) mExpandCollapseButton.findViewById(R.id.badge_container);
mDividerLineHeightPixels = getResources()
.getDimensionPixelSize(R.dimen.divider_line_height);
-
- mBadges = new ArrayList<ImageView>();
- mBadgeIds = new ArrayList<Integer>();
- }
-
- public void initialize(List<List<Entry>> entries, int numInitialVisibleEntries,
- boolean isExpanded, boolean isAlwaysExpanded, ExpandingEntryCardViewListener listener,
- ViewGroup animationViewGroup) {
- initialize(entries, numInitialVisibleEntries, isExpanded, isAlwaysExpanded,
- listener, animationViewGroup, /* showFirstEntryTypeTwice = */ false);
}
/**
@@ -332,9 +310,8 @@ public class ExpandingEntryCardView extends CardView {
* @param entries The Entry list to display.
*/
public void initialize(List<List<Entry>> entries, int numInitialVisibleEntries,
- boolean isExpanded, boolean isAlwaysExpanded,
- ExpandingEntryCardViewListener listener, ViewGroup animationViewGroup,
- boolean showFirstEntryTypeTwice) {
+ boolean isExpanded, boolean isAlwaysExpanded, ExpandingEntryCardViewListener listener,
+ ViewGroup animationViewGroup) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
mIsExpanded = isExpanded;
mIsAlwaysExpanded = isAlwaysExpanded;
@@ -344,7 +321,6 @@ public class ExpandingEntryCardView extends CardView {
mEntries = entries;
mNumEntries = 0;
mAllEntriesInflated = false;
- mShowFirstEntryTypeTwice = showFirstEntryTypeTwice;
for (List<Entry> entryList : mEntries) {
mNumEntries += entryList.size();
mEntryViews.add(new ArrayList<View>());
@@ -368,30 +344,6 @@ public class ExpandingEntryCardView extends CardView {
applyColor();
}
- /**
- * Sets the text for the expand button.
- *
- * @param expandButtonText The expand button text.
- */
- public void setExpandButtonText(CharSequence expandButtonText) {
- mExpandButtonText = expandButtonText;
- if (mExpandCollapseTextView != null && !mIsExpanded) {
- mExpandCollapseTextView.setText(expandButtonText);
- }
- }
-
- /**
- * Sets the text for the expand button.
- *
- * @param expandButtonText The expand button text.
- */
- public void setCollapseButtonText(CharSequence expandButtonText) {
- mCollapseButtonText = expandButtonText;
- if (mExpandCollapseTextView != null && mIsExpanded) {
- mExpandCollapseTextView.setText(mCollapseButtonText);
- }
- }
-
@Override
public void setOnClickListener(OnClickListener listener) {
mOnClickListener = listener;
@@ -468,19 +420,9 @@ public class ExpandingEntryCardView extends CardView {
viewsToDisplay.add(entryViewList.get(0));
numInViewGroup++;
- int indexInEntryViewList = 1;
- if (mShowFirstEntryTypeTwice && i == 0 && entryViewList.size() > 1) {
- viewsToDisplay.add(entryViewList.get(1));
- numInViewGroup++;
- extraEntries--;
- indexInEntryViewList++;
- }
-
// Insert entries in this list to hit mCollapsedEntriesCount.
- for (int j = indexInEntryViewList;
- j < entryViewList.size() && numInViewGroup < mCollapsedEntriesCount &&
- extraEntries > 0;
- j++) {
+ for (int j = 1; j < entryViewList.size() && numInViewGroup < mCollapsedEntriesCount
+ && extraEntries > 0; j++) {
viewsToDisplay.add(entryViewList.get(j));
numInViewGroup++;
extraEntries--;
@@ -497,12 +439,12 @@ public class ExpandingEntryCardView extends CardView {
if (TextUtils.isEmpty(mTitleTextView.getText()) &&
entriesViewGroup.size() > 0) {
final View entry = entriesViewGroup.get(0);
- entry.setPadding(entry.getPaddingLeft(),
+ entry.setPaddingRelative(entry.getPaddingStart(),
getResources().getDimensionPixelSize(
R.dimen.expanding_entry_card_item_padding_top) +
getResources().getDimensionPixelSize(
R.dimen.expanding_entry_card_null_title_top_extra_padding),
- entry.getPaddingRight(),
+ entry.getPaddingEnd(),
entry.getPaddingBottom());
}
}
@@ -532,21 +474,13 @@ public class ExpandingEntryCardView extends CardView {
}
private CharSequence getExpandButtonText() {
- if (!TextUtils.isEmpty(mExpandButtonText)) {
- return mExpandButtonText;
- } else {
- // Default to "See more".
- return getResources().getText(R.string.expanding_entry_card_view_see_more);
- }
+ // Default to "See more".
+ return getResources().getText(R.string.expanding_entry_card_view_see_more);
}
private CharSequence getCollapseButtonText() {
- if (!TextUtils.isEmpty(mCollapseButtonText)) {
- return mCollapseButtonText;
- } else {
- // Default to "See less".
- return getResources().getText(R.string.expanding_entry_card_view_see_less);
- }
+ // Default to "See less".
+ return getResources().getText(R.string.expanding_entry_card_view_see_less);
}
/**
@@ -569,18 +503,8 @@ public class ExpandingEntryCardView extends CardView {
/* showIcon = */ View.VISIBLE));
numInflated++;
- int indexInEntryViewList = 1;
- if (mShowFirstEntryTypeTwice && i == 0 && entryList.size() > 1) {
- entryViewList.add(createEntryView(layoutInflater, entryList.get(1),
- /* showIcon = */ View.INVISIBLE));
- numInflated++;
- extraEntries--;
- indexInEntryViewList++;
- }
-
// Inflate entries in this list to hit mCollapsedEntriesCount.
- for (int j = indexInEntryViewList; j < entryList.size()
- && numInflated < mCollapsedEntriesCount
+ for (int j = 1; j < entryList.size() && numInflated < mCollapsedEntriesCount
&& extraEntries > 0; j++) {
entryViewList.add(createEntryView(layoutInflater, entryList.get(j),
/* showIcon = */ View.INVISIBLE));
@@ -638,6 +562,19 @@ public class ExpandingEntryCardView extends CardView {
}
}
+ public void setEntrySubHeaderColor(int color) {
+ if (mEntries != null) {
+ for (List<View> entryList : mEntryViews) {
+ for (View entryView : entryList) {
+ final TextView subHeader = (TextView) entryView.findViewById(R.id.sub_header);
+ if (subHeader != null) {
+ subHeader.setTextColor(color);
+ }
+ }
+ }
+ }
+ }
+
/**
* The ColorFilter is passed in along with the color so that a new one only needs to be created
* once for the entire activity.
@@ -828,52 +765,9 @@ public class ExpandingEntryCardView extends CardView {
animator.setDuration(duration);
animator.start();
}
- updateBadges();
-
mExpandCollapseTextView.setText(buttonText);
}
- private void updateBadges() {
- if (mIsExpanded) {
- mBadgeContainer.removeAllViews();
- } else {
- int numberOfMimeTypesShown = mCollapsedEntriesCount;
- if (mShowFirstEntryTypeTwice && mEntries.size() > 0
- && mEntries.get(0).size() > 1) {
- numberOfMimeTypesShown--;
- }
- // Inflate badges if not yet created
- if (mBadges.size() < mEntries.size() - numberOfMimeTypesShown) {
- for (int i = numberOfMimeTypesShown; i < mEntries.size(); i++) {
- Drawable badgeDrawable = mEntries.get(i).get(0).getIcon();
- int badgeResourceId = mEntries.get(i).get(0).getIconResourceId();
- // Do not add the same badge twice
- if (badgeResourceId != 0 && mBadgeIds.contains(badgeResourceId)) {
- continue;
- }
- if (badgeDrawable != null) {
- ImageView badgeView = new ImageView(getContext());
- LinearLayout.LayoutParams badgeViewParams = new LinearLayout.LayoutParams(
- (int) getResources().getDimension(
- R.dimen.expanding_entry_card_item_icon_width),
- (int) getResources().getDimension(
- R.dimen.expanding_entry_card_item_icon_height));
- badgeViewParams.setMarginEnd((int) getResources().getDimension(
- R.dimen.expanding_entry_card_badge_separator_margin));
- badgeView.setLayoutParams(badgeViewParams);
- badgeView.setImageDrawable(badgeDrawable);
- mBadges.add(badgeView);
- mBadgeIds.add(badgeResourceId);
- }
- }
- }
- mBadgeContainer.removeAllViews();
- for (ImageView badge : mBadges) {
- mBadgeContainer.addView(badge);
- }
- }
- }
-
private void expand() {
ChangeBounds boundsTransition = new ChangeBounds();
boundsTransition.setDuration(DURATION_EXPAND_ANIMATION_CHANGE_BOUNDS);
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index fa1132b36..c8ec36146 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -1,26 +1,26 @@
package com.android.contacts.quickcontact;
-import com.google.common.collect.Iterables;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.common.GroupMetaData;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.GroupMembershipDataItem;
-
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.GroupMembershipDataItem;
+
+import com.google.common.collect.Iterables;
+
import java.util.List;
/**
@@ -70,14 +70,28 @@ public class InvisibleContactUtil {
}
public static void addToDefaultGroup(Contact contactData, Context context) {
+ final RawContactDeltaList contactDeltaList = contactData.createRawContactDeltaList();
+ if (markAddToDefaultGroup(contactData, contactDeltaList, context)) {
+ // Fire off the intent. we don't need a callback, as the database listener
+ // should update the ui
+ final Intent intent = ContactSaveService.createSaveContactIntent(
+ context,
+ contactDeltaList, "", 0, false, QuickContactActivity.class,
+ Intent.ACTION_VIEW, null, /* joinContactIdExtraKey =*/ null,
+ /* joinContactId =*/ null);
+ ContactSaveService.startService(context, intent);
+ }
+ }
+
+ public static boolean markAddToDefaultGroup(Contact contactData,
+ RawContactDeltaList rawContactDeltaList, Context context) {
final long defaultGroupId = getDefaultGroupId(contactData.getGroupMetaData());
// there should always be a default group (otherwise the button would be invisible),
// but let's be safe here
- if (defaultGroupId == -1) return;
+ if (defaultGroupId == -1) return false;
// add the group membership to the current state
- final RawContactDeltaList contactDeltaList = contactData.createRawContactDeltaList();
- final RawContactDelta rawContactEntityDelta = contactDeltaList.get(0);
+ final RawContactDelta rawContactEntityDelta = rawContactDeltaList.get(0);
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
context);
@@ -86,27 +100,19 @@ public class InvisibleContactUtil {
GroupMembership.CONTENT_ITEM_TYPE);
final ValuesDelta entry = RawContactModifier.insertChild(rawContactEntityDelta,
groupMembershipKind);
- if (entry == null) return;
+ if (entry == null) return false;
entry.setGroupRowId(defaultGroupId);
-
- // and fire off the intent. we don't need a callback, as the database listener
- // should update the ui
- final Intent intent = ContactSaveService.createSaveContactIntent(
- context,
- contactDeltaList, "", 0, false, QuickContactActivity.class,
- Intent.ACTION_VIEW, null, /* joinContactIdExtraKey =*/ null,
- /* joinContactId =*/ null);
- ContactSaveService.startService(context, intent);
+ return true;
}
/** return default group id or -1 if no group or several groups are marked as default */
private static long getDefaultGroupId(List<GroupMetaData> groups) {
long defaultGroupId = -1;
for (GroupMetaData group : groups) {
- if (group.isDefaultGroup()) {
+ if (group.defaultGroup) {
// two default groups? return neither
if (defaultGroupId != -1) return -1;
- defaultGroupId = group.getGroupId();
+ defaultGroupId = group.groupId;
}
}
return defaultGroupId;
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index c63c989a4..014e1d548 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -1,4 +1,5 @@
/*
+
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,23 +17,25 @@
package com.android.contacts.quickcontact;
+import android.Manifest;
import android.accounts.Account;
import android.animation.ArgbEvaluator;
import android.animation.ObjectAnimator;
import android.app.Activity;
-import android.app.Fragment;
import android.app.LoaderManager.LoaderCallbacks;
+import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.Loader;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.res.ColorStateList;
-import android.content.res.Configuration;
+import android.content.pm.ShortcutManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -42,12 +45,12 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.media.RingtoneManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Trace;
import android.provider.CalendarContract;
-import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
@@ -63,15 +66,17 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.DataUsageFeedback;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.DataUsageFeedback;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
-import android.support.v4.content.ContextCompat;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v4.content.res.ResourcesCompat;
+import android.support.v4.os.BuildCompat;
import android.support.v7.graphics.Palette;
-import android.support.v7.widget.CardView;
import android.telecom.PhoneAccount;
import android.telecom.TelecomManager;
import android.text.BidiFormatter;
@@ -82,7 +87,6 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -91,86 +95,82 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.WindowManager;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
import android.widget.Toast;
import android.widget.Toolbar;
+import com.android.contacts.CallUtil;
+import com.android.contacts.ClipboardUtils;
+import com.android.contacts.Collapser;
import com.android.contacts.ContactSaveService;
import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.DynamicShortcuts;
import com.android.contacts.NfcHandler;
import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorBaseActivity;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ClipboardUtils;
-import com.android.contacts.common.Collapser;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.activity.RequestDesiredPermissionsActivity;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.EventCompat;
-import com.android.contacts.common.compat.MultiWindowCompat;
-import com.android.contacts.common.dialog.CallSubjectDialog;
-import com.android.contacts.common.editor.SelectAccountDialogFragment;
-import com.android.contacts.common.interactions.TouchPointManager;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.list.ShortcutIntentBuilder;
-import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.EmailDataItem;
-import com.android.contacts.common.model.dataitem.EventDataItem;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.model.dataitem.NicknameDataItem;
-import com.android.contacts.common.model.dataitem.NoteDataItem;
-import com.android.contacts.common.model.dataitem.OrganizationDataItem;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-import com.android.contacts.common.model.dataitem.RelationDataItem;
-import com.android.contacts.common.model.dataitem.SipAddressDataItem;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.common.model.dataitem.StructuredPostalDataItem;
-import com.android.contacts.common.model.dataitem.WebsiteDataItem;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.DateUtils;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.common.util.UriUtils;
-import com.android.contacts.common.util.ViewUtil;
+import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.activities.ContactSelectionActivity;
+import com.android.contacts.activities.RequestDesiredPermissionsActivity;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.EventCompat;
+import com.android.contacts.compat.MultiWindowCompat;
import com.android.contacts.detail.ContactDisplayUtils;
-import com.android.contacts.editor.AggregationSuggestionEngine;
-import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
+import com.android.contacts.dialog.CallSubjectDialog;
import com.android.contacts.editor.ContactEditorFragment;
import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.editor.EditorUiUtils;
import com.android.contacts.interactions.CalendarInteractionsLoader;
import com.android.contacts.interactions.CallLogInteractionsLoader;
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.interactions.ContactInteraction;
-import com.android.contacts.interactions.JoinContactsDialogFragment;
-import com.android.contacts.interactions.JoinContactsDialogFragment.JoinContactsListener;
import com.android.contacts.interactions.SmsInteractionsLoader;
+import com.android.contacts.interactions.TouchPointManager;
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.ShortcutIntentBuilder;
+import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.QuickContactEvent.ActionType;
+import com.android.contacts.logging.QuickContactEvent.CardType;
+import com.android.contacts.logging.QuickContactEvent.ContactType;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.EventDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+import com.android.contacts.model.dataitem.NicknameDataItem;
+import com.android.contacts.model.dataitem.NoteDataItem;
+import com.android.contacts.model.dataitem.OrganizationDataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.RelationDataItem;
+import com.android.contacts.model.dataitem.SipAddressDataItem;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.model.dataitem.StructuredPostalDataItem;
+import com.android.contacts.model.dataitem.WebsiteDataItem;
import com.android.contacts.quickcontact.ExpandingEntryCardView.Entry;
import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryContextMenuInfo;
import com.android.contacts.quickcontact.ExpandingEntryCardView.EntryTag;
import com.android.contacts.quickcontact.ExpandingEntryCardView.ExpandingEntryCardViewListener;
import com.android.contacts.quickcontact.WebAddress.ParseException;
+import com.android.contacts.util.DateUtils;
import com.android.contacts.util.ImageViewDrawableSetter;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.util.PermissionsUtil;
import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.SchedulingUtils;
+import com.android.contacts.util.SharedPreferenceUtil;
import com.android.contacts.util.StructuredPostalUtils;
+import com.android.contacts.util.UriUtils;
+import com.android.contacts.util.ViewUtil;
import com.android.contacts.widget.MultiShrinkScroller;
import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
import com.android.contacts.widget.QuickContactImageView;
@@ -178,7 +178,6 @@ import com.android.contactsbind.HelpUtils;
import com.google.common.collect.Lists;
-import java.lang.SecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -186,11 +185,8 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -198,8 +194,7 @@ import java.util.concurrent.ConcurrentHashMap;
* data asynchronously, and then shows a popup with details centered around
* {@link Intent#getSourceBounds()}.
*/
-public class QuickContactActivity extends ContactsActivity
- implements AggregationSuggestionEngine.Listener, JoinContactsListener {
+public class QuickContactActivity extends ContactsActivity {
/**
* QuickContacts immediately takes up the full screen. All possible information is shown.
@@ -210,31 +205,49 @@ public class QuickContactActivity extends ContactsActivity
/** Used to pass the screen where the user came before launching this Activity. */
public static final String EXTRA_PREVIOUS_SCREEN_TYPE = "previous_screen_type";
+ /** Used to pass the Contact card action. */
+ public static final String EXTRA_ACTION_TYPE = "action_type";
+ public static final String EXTRA_THIRD_PARTY_ACTION = "third_party_action";
+
+ /** Used to tell the QuickContact that the previous contact was edited, so it can return an
+ * activity result back to the original Activity that launched it. */
+ public static final String EXTRA_CONTACT_EDITED = "contact_edited";
private static final String TAG = "QuickContact";
private static final String KEY_THEME_COLOR = "theme_color";
- private static final String KEY_IS_SUGGESTION_LIST_COLLAPSED = "is_suggestion_list_collapsed";
- private static final String KEY_SELECTED_SUGGESTION_CONTACTS = "selected_suggestion_contacts";
private static final String KEY_PREVIOUS_CONTACT_ID = "previous_contact_id";
- private static final String KEY_SUGGESTIONS_AUTO_SELECTED = "suggestions_auto_seleted";
+
+ private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
+ private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
+ private static final String KEY_CUSTOM_RINGTONE = "customRingtone";
private static final int ANIMATION_STATUS_BAR_COLOR_CHANGE_DURATION = 150;
private static final int REQUEST_CODE_CONTACT_EDITOR_ACTIVITY = 1;
private static final int SCRIM_COLOR = Color.argb(0xC8, 0, 0, 0);
private static final int REQUEST_CODE_CONTACT_SELECTION_ACTIVITY = 2;
private static final String MIMETYPE_SMS = "vnd.android-dir/mms-sms";
+ private static final int REQUEST_CODE_JOIN = 3;
+ private static final int REQUEST_CODE_PICK_RINGTONE = 4;
+
+ private static final int CURRENT_API_VERSION = android.os.Build.VERSION.SDK_INT;
/** This is the Intent action to install a shortcut in the launcher. */
private static final String ACTION_INSTALL_SHORTCUT =
"com.android.launcher.action.INSTALL_SHORTCUT";
+ public static final String ACTION_SPLIT_COMPLETED = "splitCompleted";
+
+ // Phone specific option menu items
+ private boolean mSendToVoicemailState;
+ private boolean mArePhoneOptionsChangable;
+ private String mCustomRingtone;
+
@SuppressWarnings("deprecation")
private static final String LEGACY_AUTHORITY = android.provider.Contacts.AUTHORITY;
private static final String MIMETYPE_GPLUS_PROFILE =
"vnd.android.cursor.item/vnd.googleplus.profile";
- private static final String GPLUS_PROFILE_DATA_5_ADD_TO_CIRCLE = "addtocircle";
private static final String GPLUS_PROFILE_DATA_5_VIEW_PROFILE = "view";
private static final String MIMETYPE_HANGOUTS =
"vnd.android.cursor.item/vnd.googleplus.profile.comm";
@@ -243,6 +256,16 @@ public class QuickContactActivity extends ContactsActivity
private static final String CALL_ORIGIN_QUICK_CONTACTS_ACTIVITY =
"com.android.contacts.quickcontact.QuickContactActivity";
+ // Set true in {@link #onCreate} after orientation change for later use in processIntent().
+ private boolean mIsRecreatedInstance;
+ private boolean mShortcutUsageReported = false;
+
+ private boolean mShouldLog;
+
+ // Used to store and log the referrer package name and the contact type.
+ private String mReferrer;
+ private int mContactType;
+
/**
* The URI used to load the the Contact. Once the contact is loaded, use Contact#getLookupUri()
* instead of referencing this URI.
@@ -255,38 +278,25 @@ public class QuickContactActivity extends ContactsActivity
private boolean mHasAlreadyBeenOpened;
private boolean mOnlyOnePhoneNumber;
private boolean mOnlyOneEmail;
+ private ProgressDialog mProgressDialog;
+ private SaveServiceListener mListener;
private QuickContactImageView mPhotoView;
private ExpandingEntryCardView mContactCard;
private ExpandingEntryCardView mNoContactDetailsCard;
private ExpandingEntryCardView mRecentCard;
private ExpandingEntryCardView mAboutCard;
+ private ExpandingEntryCardView mPermissionExplanationCard;
- // Suggestion card.
- private CardView mCollapsedSuggestionCardView;
- private CardView mExpandSuggestionCardView;
- private View mCollapasedSuggestionHeader;
- private TextView mCollapsedSuggestionCardTitle;
- private TextView mExpandSuggestionCardTitle;
- private ImageView mSuggestionSummaryPhoto;
- private TextView mSuggestionForName;
- private TextView mSuggestionContactsNumber;
- private LinearLayout mSuggestionList;
- private Button mSuggestionsCancelButton;
- private Button mSuggestionsLinkButton;
- private boolean mIsSuggestionListCollapsed;
- private boolean mSuggestionsShouldAutoSelected = true;
private long mPreviousContactId = 0;
+ // Permission explanation card.
+ private boolean mShouldShowPermissionExplanation = false;
+ private String mPermissionExplanationCardSubHeader = "";
private MultiShrinkScroller mScroller;
- private SelectAccountDialogFragmentListener mSelectAccountFragmentListener;
private AsyncTask<Void, Void, Cp2DataCardModel> mEntriesAndActionsTask;
private AsyncTask<Void, Void, Void> mRecentDataTask;
- private AggregationSuggestionEngine mAggregationSuggestionEngine;
- private List<Suggestion> mSuggestions;
-
- private TreeSet<Long> mSelectedAggregationIds = new TreeSet<>();
/**
* The last copy of Cp2DataCardModel that was passed to {@link #populateContactAndAboutCard}.
*/
@@ -337,6 +347,7 @@ public class QuickContactActivity extends ContactsActivity
Im.CONTENT_ITEM_TYPE,
GroupMembership.CONTENT_ITEM_TYPE,
Identity.CONTENT_ITEM_TYPE,
+ CustomDataItem.MIMETYPE_CUSTOM_FIELD,
Note.CONTENT_ITEM_TYPE);
private static final BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
@@ -344,9 +355,6 @@ public class QuickContactActivity extends ContactsActivity
/** Id for the background contact loader */
private static final int LOADER_CONTACT_ID = 0;
- private static final String KEY_LOADER_EXTRA_PHONES =
- QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_PHONES";
-
/** Id for the background Sms Loader */
private static final int LOADER_SMS_ID = 1;
private static final int MAX_SMS_RETRIEVE = 3;
@@ -368,7 +376,11 @@ public class QuickContactActivity extends ContactsActivity
private static final int MIN_NUM_CONTACT_ENTRIES_SHOWN = 3;
private static final int MIN_NUM_COLLAPSED_RECENT_ENTRIES_SHOWN = 3;
private static final int CARD_ENTRY_ID_EDIT_CONTACT = -2;
-
+ private static final int CARD_ENTRY_ID_REQUEST_PERMISSION = -3;
+ private static final String KEY_LOADER_EXTRA_PHONES =
+ QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_PHONES";
+ private static final String KEY_LOADER_EXTRA_SIP_NUMBERS =
+ QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_SIP_NUMBERS";
private static final int[] mRecentLoaderIds = new int[]{
LOADER_SMS_ID,
@@ -401,6 +413,13 @@ public class QuickContactActivity extends ContactsActivity
return;
}
+ if (dataId == CARD_ENTRY_ID_REQUEST_PERMISSION) {
+ finish();
+ RequestDesiredPermissionsActivity.startPermissionActivity(
+ QuickContactActivity.this);
+ return;
+ }
+
// Pass the touch point through the intent for use in the InCallUI
if (Intent.ACTION_CALL.equals(intent.getAction())) {
if (TouchPointManager.getInstance().hasValidPoint()) {
@@ -415,6 +434,11 @@ public class QuickContactActivity extends ContactsActivity
mHasIntentLaunched = true;
try {
+ final int actionType = intent.getIntExtra(EXTRA_ACTION_TYPE,
+ ActionType.UNKNOWN_ACTION);
+ final String thirdPartyAction = intent.getStringExtra(EXTRA_THIRD_PARTY_ACTION);
+ Logger.logQuickContactEvent(mReferrer, mContactType,
+ CardType.UNKNOWN_CARD, actionType, thirdPartyAction);
ImplicitIntentsUtil.startActivityInAppIfPossible(QuickContactActivity.this, intent);
} catch (SecurityException ex) {
Toast.makeText(QuickContactActivity.this, R.string.missing_app,
@@ -476,202 +500,6 @@ public class QuickContactActivity extends ContactsActivity
}
};
- @Override
- public void onAggregationSuggestionChange() {
- if (mAggregationSuggestionEngine == null) {
- return;
- }
- mSuggestions = mAggregationSuggestionEngine.getSuggestions();
- mCollapsedSuggestionCardView.setVisibility(View.GONE);
- mExpandSuggestionCardView.setVisibility(View.GONE);
- mSuggestionList.removeAllViews();
-
- if (mContactData == null) {
- return;
- }
-
- final String suggestionForName = mContactData.getDisplayName();
- final int suggestionNumber = mSuggestions.size();
-
- if (suggestionNumber <= 0) {
- mSelectedAggregationIds.clear();
- return;
- }
-
- ContactPhotoManager.DefaultImageRequest
- request = new ContactPhotoManager.DefaultImageRequest(
- suggestionForName, mContactData.getLookupKey(), ContactPhotoManager.TYPE_DEFAULT,
- /* isCircular */ true );
- final long photoId = mContactData.getPhotoId();
- final byte[] photoBytes = mContactData.getThumbnailPhotoBinaryData();
- if (photoBytes != null) {
- ContactPhotoManager.getInstance(this).loadThumbnail(mSuggestionSummaryPhoto, photoId,
- /* darkTheme */ false , /* isCircular */ true , request);
- } else {
- ContactPhotoManager.DEFAULT_AVATAR.applyDefaultImage(mSuggestionSummaryPhoto,
- -1, false, request);
- }
-
- final String suggestionTitle = getResources().getQuantityString(
- R.plurals.quickcontact_suggestion_card_title, suggestionNumber, suggestionNumber);
- mCollapsedSuggestionCardTitle.setText(suggestionTitle);
- mExpandSuggestionCardTitle.setText(suggestionTitle);
-
- mSuggestionForName.setText(suggestionForName);
- final int linkedContactsNumber = mContactData.getRawContacts().size();
- final String contactsInfo;
- final String accountName = mContactData.getRawContacts().get(0).getAccountName();
- if (linkedContactsNumber == 1 && accountName == null) {
- mSuggestionContactsNumber.setVisibility(View.INVISIBLE);
- }
- if (linkedContactsNumber == 1 && accountName != null) {
- contactsInfo = getResources().getString(R.string.contact_from_account_name,
- accountName);
- } else {
- contactsInfo = getResources().getString(
- R.string.quickcontact_contacts_number, linkedContactsNumber);
- }
- mSuggestionContactsNumber.setText(contactsInfo);
-
- final Set<Long> suggestionContactIds = new HashSet<>();
- for (Suggestion suggestion : mSuggestions) {
- mSuggestionList.addView(inflateSuggestionListView(suggestion));
- suggestionContactIds.add(suggestion.contactId);
- }
-
- if (mIsSuggestionListCollapsed) {
- collapseSuggestionList();
- } else {
- expandSuggestionList();
- }
-
- // Remove contact Ids that are not suggestions.
- final Set<Long> selectedSuggestionIds = com.google.common.collect.Sets.intersection(
- mSelectedAggregationIds, suggestionContactIds);
- mSelectedAggregationIds = new TreeSet<>(selectedSuggestionIds);
- if (!mSelectedAggregationIds.isEmpty()) {
- enableLinkButton();
- }
- }
-
- private void collapseSuggestionList() {
- mCollapsedSuggestionCardView.setVisibility(View.VISIBLE);
- mExpandSuggestionCardView.setVisibility(View.GONE);
- mIsSuggestionListCollapsed = true;
- }
-
- private void expandSuggestionList() {
- mCollapsedSuggestionCardView.setVisibility(View.GONE);
- mExpandSuggestionCardView.setVisibility(View.VISIBLE);
- mIsSuggestionListCollapsed = false;
- }
-
- private View inflateSuggestionListView(final Suggestion suggestion) {
- final LayoutInflater layoutInflater = LayoutInflater.from(this);
- final View suggestionView = layoutInflater.inflate(
- R.layout.quickcontact_suggestion_contact_item, null);
-
- ContactPhotoManager.DefaultImageRequest
- request = new ContactPhotoManager.DefaultImageRequest(
- suggestion.name, suggestion.lookupKey, ContactPhotoManager.TYPE_DEFAULT, /*
- isCircular */ true);
- final ImageView photo = (ImageView) suggestionView.findViewById(
- R.id.aggregation_suggestion_photo);
- if (suggestion.photo != null) {
- ContactPhotoManager.getInstance(this).loadThumbnail(photo, suggestion.photoId,
- /* darkTheme */ false, /* isCircular */ true, request);
- } else {
- ContactPhotoManager.DEFAULT_AVATAR.applyDefaultImage(photo, -1, false, request);
- }
-
- final TextView name = (TextView) suggestionView.findViewById(R.id.aggregation_suggestion_name);
- name.setText(suggestion.name);
-
- final TextView accountNameView = (TextView) suggestionView.findViewById(
- R.id.aggregation_suggestion_account_name);
- final String accountName = suggestion.rawContacts.get(0).accountName;
- if (!TextUtils.isEmpty(accountName)) {
- accountNameView.setText(
- getResources().getString(R.string.contact_from_account_name, accountName));
- } else {
- accountNameView.setVisibility(View.INVISIBLE);
- }
-
- final CheckBox checkbox = (CheckBox) suggestionView.findViewById(R.id.suggestion_checkbox);
- final int[][] stateSet = new int[][] {
- new int[] { android.R.attr.state_checked },
- new int[] { -android.R.attr.state_checked }
- };
- final int[] colors = new int[] { mColorFilterColor, mColorFilterColor };
- if (suggestion != null && suggestion.name != null) {
- checkbox.setContentDescription(suggestion.name + " " +
- getResources().getString(R.string.contact_from_account_name, accountName));
- }
- checkbox.setButtonTintList(new ColorStateList(stateSet, colors));
- checkbox.setChecked(mSuggestionsShouldAutoSelected ||
- mSelectedAggregationIds.contains(suggestion.contactId));
- if (checkbox.isChecked()) {
- mSelectedAggregationIds.add(suggestion.contactId);
- }
- checkbox.setTag(suggestion.contactId);
- checkbox.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- final CheckBox checkBox = (CheckBox) v;
- final Long contactId = (Long) checkBox.getTag();
- if (mSelectedAggregationIds.contains(mContactData.getId())) {
- mSelectedAggregationIds.remove(mContactData.getId());
- }
- if (checkBox.isChecked()) {
- mSelectedAggregationIds.add(contactId);
- if (mSelectedAggregationIds.size() >= 1) {
- enableLinkButton();
- }
- } else {
- mSelectedAggregationIds.remove(contactId);
- mSuggestionsShouldAutoSelected = false;
- if (mSelectedAggregationIds.isEmpty()) {
- disableLinkButton();
- }
- }
- }
- });
-
- return suggestionView;
- }
-
- private void enableLinkButton() {
- mSuggestionsLinkButton.setClickable(true);
- mSuggestionsLinkButton.getBackground().setColorFilter(mColorFilter);
- mSuggestionsLinkButton.setTextColor(
- ContextCompat.getColor(this, android.R.color.white));
- mSuggestionsLinkButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- // Join selected contacts.
- if (!mSelectedAggregationIds.contains(mContactData.getId())) {
- mSelectedAggregationIds.add(mContactData.getId());
- }
- JoinContactsDialogFragment.start(
- QuickContactActivity.this, mSelectedAggregationIds);
- }
- });
- }
-
- @Override
- public void onContactsJoined() {
- disableLinkButton();
- }
-
- private void disableLinkButton() {
- mSuggestionsLinkButton.setClickable(false);
- mSuggestionsLinkButton.getBackground().setColorFilter(
- ContextCompat.getColor(this, R.color.disabled_button_background),
- PorterDuff.Mode.SRC_ATOP);
- mSuggestionsLinkButton.setTextColor(
- ContextCompat.getColor(this, R.color.disabled_button_text));
- }
-
private interface ContextMenuIds {
static final int COPY_TEXT = 0;
static final int CLEAR_DEFAULT = 1;
@@ -748,36 +576,6 @@ public class QuickContactActivity extends ContactsActivity
}
}
- /**
- * Headless fragment used to handle account selection callbacks invoked from
- * {@link DirectoryContactUtil}.
- */
- public static class SelectAccountDialogFragmentListener extends Fragment
- implements SelectAccountDialogFragment.Listener {
-
- private QuickContactActivity mQuickContactActivity;
-
- public SelectAccountDialogFragmentListener() {}
-
- @Override
- public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
- DirectoryContactUtil.createCopy(mQuickContactActivity.mContactData.getContentValues(),
- account, mQuickContactActivity);
- }
-
- @Override
- public void onAccountSelectorCancelled() {}
-
- /**
- * Set the parent activity. Since rotation can cause this fragment to be used across
- * more than one activity instance, we need to explicitly set this value instead
- * of making this class non-static.
- */
- public void setQuickContactActivity(QuickContactActivity quickContactActivity) {
- mQuickContactActivity = quickContactActivity;
- }
- }
-
final MultiShrinkScrollerListener mMultiShrinkScrollerListener
= new MultiShrinkScrollerListener() {
@Override
@@ -922,15 +720,81 @@ public class QuickContactActivity extends ContactsActivity
Trace.beginSection("onCreate()");
super.onCreate(savedInstanceState);
- if (RequestPermissionsActivity.startPermissionActivity(this) ||
- RequestDesiredPermissionsActivity.startPermissionActivity(this)) {
+ if (RequestPermissionsActivity.startPermissionActivityIfNeeded(this)) {
return;
}
+ mIsRecreatedInstance = savedInstanceState != null;
+ if (mIsRecreatedInstance) {
+ mPreviousContactId = savedInstanceState.getLong(KEY_PREVIOUS_CONTACT_ID);
+
+ // Phone specific options menus
+ mSendToVoicemailState = savedInstanceState.getBoolean(KEY_SEND_TO_VOICE_MAIL_STATE);
+ mArePhoneOptionsChangable =
+ savedInstanceState.getBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE);
+ mCustomRingtone = savedInstanceState.getString(KEY_CUSTOM_RINGTONE);
+ }
+ mProgressDialog = new ProgressDialog(this);
+ mProgressDialog.setIndeterminate(true);
+ mProgressDialog.setCancelable(false);
+
+ mListener = new SaveServiceListener();
+ final IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(ContactSaveService.BROADCAST_LINK_COMPLETE);
+ intentFilter.addAction(ContactSaveService.BROADCAST_UNLINK_COMPLETE);
+ LocalBroadcastManager.getInstance(this).registerReceiver(mListener,
+ intentFilter);
+
+
+ mShouldLog = true;
+
+ // There're 3 states for each permission:
+ // 1. App doesn't have permission, not asked user yet.
+ // 2. App doesn't have permission, user denied it previously.
+ // 3. App has permission.
+ // Permission explanation card is displayed only for case 1.
+ final boolean hasTelephonyFeature =
+ getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+
+ final boolean hasCalendarPermission = PermissionsUtil.hasPermission(
+ this, Manifest.permission.READ_CALENDAR);
+ final boolean hasSMSPermission = hasTelephonyFeature
+ && PermissionsUtil.hasPermission(this, Manifest.permission.READ_SMS);
+
+ final boolean wasCalendarPermissionDenied =
+ ActivityCompat.shouldShowRequestPermissionRationale(
+ this, Manifest.permission.READ_CALENDAR);
+ final boolean wasSMSPermissionDenied =
+ hasTelephonyFeature && ActivityCompat.shouldShowRequestPermissionRationale(
+ this, Manifest.permission.READ_SMS);
+
+ final boolean shouldDisplayCalendarMessage =
+ !hasCalendarPermission && !wasCalendarPermissionDenied;
+ final boolean shouldDisplaySMSMessage =
+ hasTelephonyFeature && !hasSMSPermission && !wasSMSPermissionDenied;
+ mShouldShowPermissionExplanation = shouldDisplayCalendarMessage || shouldDisplaySMSMessage;
+
+ if (shouldDisplayCalendarMessage && shouldDisplaySMSMessage) {
+ mPermissionExplanationCardSubHeader =
+ getString(R.string.permission_explanation_subheader_calendar_and_SMS);
+ } else if (shouldDisplayCalendarMessage) {
+ mPermissionExplanationCardSubHeader =
+ getString(R.string.permission_explanation_subheader_calendar);
+ } else if (shouldDisplaySMSMessage) {
+ mPermissionExplanationCardSubHeader =
+ getString(R.string.permission_explanation_subheader_SMS);
+ }
+
final int previousScreenType = getIntent().getIntExtra
(EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.UNKNOWN);
Logger.logScreenView(this, ScreenType.QUICK_CONTACT, previousScreenType);
+ mReferrer = getCallingPackage();
+ if (mReferrer == null && CompatUtils.isLollipopMr1Compatible() && getReferrer() != null) {
+ mReferrer = getReferrer().getAuthority();
+ }
+ mContactType = ContactType.UNKNOWN_TYPE;
+
if (CompatUtils.isLollipopCompatible()) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
@@ -951,61 +815,12 @@ public class QuickContactActivity extends ContactsActivity
mNoContactDetailsCard = (ExpandingEntryCardView) findViewById(R.id.no_contact_data_card);
mRecentCard = (ExpandingEntryCardView) findViewById(R.id.recent_card);
mAboutCard = (ExpandingEntryCardView) findViewById(R.id.about_card);
+ mPermissionExplanationCard =
+ (ExpandingEntryCardView) findViewById(R.id.permission_explanation_card);
- mCollapsedSuggestionCardView = (CardView) findViewById(R.id.collapsed_suggestion_card);
- mExpandSuggestionCardView = (CardView) findViewById(R.id.expand_suggestion_card);
- mCollapasedSuggestionHeader = findViewById(R.id.collapsed_suggestion_header);
- mCollapsedSuggestionCardTitle = (TextView) findViewById(
- R.id.collapsed_suggestion_card_title);
- mExpandSuggestionCardTitle = (TextView) findViewById(R.id.expand_suggestion_card_title);
- mSuggestionSummaryPhoto = (ImageView) findViewById(R.id.suggestion_icon);
- mSuggestionForName = (TextView) findViewById(R.id.suggestion_for_name);
- mSuggestionContactsNumber = (TextView) findViewById(R.id.suggestion_for_contacts_number);
- mSuggestionList = (LinearLayout) findViewById(R.id.suggestion_list);
- mSuggestionsCancelButton= (Button) findViewById(R.id.cancel_button);
- mSuggestionsLinkButton = (Button) findViewById(R.id.link_button);
- if (savedInstanceState != null) {
- mIsSuggestionListCollapsed = savedInstanceState.getBoolean(
- KEY_IS_SUGGESTION_LIST_COLLAPSED, true);
- mPreviousContactId = savedInstanceState.getLong(KEY_PREVIOUS_CONTACT_ID);
- mSuggestionsShouldAutoSelected = savedInstanceState.getBoolean(
- KEY_SUGGESTIONS_AUTO_SELECTED, true);
- mSelectedAggregationIds = (TreeSet<Long>)
- savedInstanceState.getSerializable(KEY_SELECTED_SUGGESTION_CONTACTS);
- } else {
- mIsSuggestionListCollapsed = true;
- mSelectedAggregationIds.clear();
- }
- if (mSelectedAggregationIds.isEmpty()) {
- disableLinkButton();
- } else {
- enableLinkButton();
- }
- mCollapasedSuggestionHeader.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- mCollapsedSuggestionCardView.setVisibility(View.GONE);
- mExpandSuggestionCardView.setVisibility(View.VISIBLE);
- mIsSuggestionListCollapsed = false;
- mExpandSuggestionCardTitle.requestFocus();
- mExpandSuggestionCardTitle.sendAccessibilityEvent(
- AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
- }
- });
-
- mSuggestionsCancelButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- mCollapsedSuggestionCardView.setVisibility(View.VISIBLE);
- mExpandSuggestionCardView.setVisibility(View.GONE);
- mIsSuggestionListCollapsed = true;
- }
- });
-
+ mPermissionExplanationCard.setOnClickListener(mEntryClickHandler);
mNoContactDetailsCard.setOnClickListener(mEntryClickHandler);
mContactCard.setOnClickListener(mEntryClickHandler);
- mContactCard.setExpandButtonText(
- getResources().getString(R.string.expanding_entry_card_view_see_all));
mContactCard.setOnCreateContextMenuListener(mEntryContextMenuListener);
mRecentCard.setOnClickListener(mEntryClickHandler);
@@ -1050,16 +865,6 @@ public class QuickContactActivity extends ContactsActivity
setHeaderNameText(R.string.missing_name);
- mSelectAccountFragmentListener= (SelectAccountDialogFragmentListener) getFragmentManager()
- .findFragmentByTag(FRAGMENT_TAG_SELECT_ACCOUNT);
- if (mSelectAccountFragmentListener == null) {
- mSelectAccountFragmentListener = new SelectAccountDialogFragmentListener();
- getFragmentManager().beginTransaction().add(0, mSelectAccountFragmentListener,
- FRAGMENT_TAG_SELECT_ACCOUNT).commit();
- mSelectAccountFragmentListener.setRetainInstance(true);
- }
- mSelectAccountFragmentListener.setQuickContactActivity(this);
-
SchedulingUtils.doOnPreDraw(mScroller, /* drawNextFrame = */ true,
new Runnable() {
@Override
@@ -1110,15 +915,35 @@ public class QuickContactActivity extends ContactsActivity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final boolean deletedOrSplit = requestCode == REQUEST_CODE_CONTACT_EDITOR_ACTIVITY &&
(resultCode == ContactDeletionInteraction.RESULT_CODE_DELETED ||
- resultCode == ContactEditorBaseActivity.RESULT_CODE_SPLIT);
+ resultCode == ContactEditorActivity.RESULT_CODE_SPLIT);
+ setResult(resultCode, data);
if (deletedOrSplit) {
finish();
} else if (requestCode == REQUEST_CODE_CONTACT_SELECTION_ACTIVITY &&
resultCode != RESULT_CANCELED) {
processIntent(data);
+ } else if (requestCode == REQUEST_CODE_JOIN) {
+ // Ignore failed requests
+ if (resultCode != Activity.RESULT_OK) {
+ return;
+ }
+ if (data != null) {
+ joinAggregate(ContentUris.parseId(data.getData()));
+ }
+ } else if (requestCode == REQUEST_CODE_PICK_RINGTONE && data != null) {
+ final Uri pickedUri = data.getParcelableExtra(
+ RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
+ onRingtonePicked(pickedUri);
}
}
+ private void onRingtonePicked(Uri pickedUri) {
+ mCustomRingtone = EditorUiUtils.getRingtoneStringFromUri(pickedUri, CURRENT_API_VERSION);
+ Intent intent = ContactSaveService.createSetRingtone(
+ this, mLookupUri, mCustomRingtone);
+ this.startService(intent);
+ }
+
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
@@ -1134,12 +959,12 @@ public class QuickContactActivity extends ContactsActivity
if (mColorFilter != null) {
savedInstanceState.putInt(KEY_THEME_COLOR, mColorFilterColor);
}
- savedInstanceState.putBoolean(KEY_IS_SUGGESTION_LIST_COLLAPSED, mIsSuggestionListCollapsed);
savedInstanceState.putLong(KEY_PREVIOUS_CONTACT_ID, mPreviousContactId);
- savedInstanceState.putBoolean(
- KEY_SUGGESTIONS_AUTO_SELECTED, mSuggestionsShouldAutoSelected);
- savedInstanceState.putSerializable(
- KEY_SELECTED_SUGGESTION_CONTACTS, mSelectedAggregationIds);
+
+ // Phone specific options
+ savedInstanceState.putBoolean(KEY_SEND_TO_VOICE_MAIL_STATE, mSendToVoicemailState);
+ savedInstanceState.putBoolean(KEY_ARE_PHONE_OPTIONS_CHANGEABLE, mArePhoneOptionsChangable);
+ savedInstanceState.putString(KEY_CUSTOM_RINGTONE, mCustomRingtone);
}
private void processIntent(Intent intent) {
@@ -1147,7 +972,16 @@ public class QuickContactActivity extends ContactsActivity
finish();
return;
}
+ if (ACTION_SPLIT_COMPLETED.equals(intent.getAction())) {
+ Toast.makeText(this, R.string.contactUnlinkedToast, Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+
Uri lookupUri = intent.getData();
+ if (intent.getBooleanExtra(EXTRA_CONTACT_EDITED, false)) {
+ setResult(ContactEditorActivity.RESULT_CODE_EDITED);
+ }
// Check to see whether it comes from the old version.
if (lookupUri != null && LEGACY_AUTHORITY.equals(lookupUri.getAuthority())) {
@@ -1163,6 +997,7 @@ public class QuickContactActivity extends ContactsActivity
getIntent().getStringExtra(QuickContact.EXTRA_PRIORITIZED_MIMETYPE);
final Uri oldLookupUri = mLookupUri;
+
if (lookupUri == null) {
finish();
return;
@@ -1170,15 +1005,19 @@ public class QuickContactActivity extends ContactsActivity
mLookupUri = lookupUri;
mExcludeMimes = intent.getStringArrayExtra(QuickContact.EXTRA_EXCLUDE_MIMES);
if (oldLookupUri == null) {
+ // Should not log if only orientation changes.
+ mShouldLog = !mIsRecreatedInstance;
mContactLoader = (ContactLoader) getLoaderManager().initLoader(
LOADER_CONTACT_ID, null, mLoaderContactCallbacks);
} else if (oldLookupUri != mLookupUri) {
+ // Should log when reload happens, regardless of orientation change.
+ mShouldLog = true;
// After copying a directory contact, the contact URI changes. Therefore,
// we need to reload the new contact.
destroyInteractionLoaders();
mContactLoader = (ContactLoader) (Loader<?>) getLoaderManager().getLoader(
LOADER_CONTACT_ID);
- mContactLoader.setLookupUri(mLookupUri);
+ mContactLoader.setNewLookup(mLookupUri);
mCachedCp2DataCardModel = null;
}
mContactLoader.forceLoad();
@@ -1241,7 +1080,27 @@ public class QuickContactActivity extends ContactsActivity
*/
private void bindContactData(final Contact data) {
Trace.beginSection("bindContactData");
+
+ final int actionType = mContactData == null ? ActionType.START : ActionType.UNKNOWN_ACTION;
mContactData = data;
+
+ final int newContactType;
+ if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
+ newContactType = ContactType.DIRECTORY;
+ } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
+ newContactType = ContactType.INVISIBLE_AND_ADDABLE;
+ } else if (isContactEditable()) {
+ newContactType = ContactType.EDITABLE;
+ } else {
+ newContactType = ContactType.UNKNOWN_TYPE;
+ }
+ if (mShouldLog && mContactType != newContactType) {
+ Logger.logQuickContactEvent(mReferrer, newContactType, CardType.UNKNOWN_CARD,
+ actionType, /* thirdPartyAction */ null);
+ }
+ mContactType = newContactType;
+
+ setStateForPhoneMenuItems(mContactData);
invalidateOptionsMenu();
Trace.endSection();
@@ -1291,12 +1150,12 @@ public class QuickContactActivity extends ContactsActivity
private void bindDataToCards(Cp2DataCardModel cp2DataCardModel) {
startInteractionLoaders(cp2DataCardModel);
populateContactAndAboutCard(cp2DataCardModel, /* shouldAddPhoneticName */ true);
- populateSuggestionCard();
}
private void startInteractionLoaders(Cp2DataCardModel cp2DataCardModel) {
final Map<String, List<DataItem>> dataItemsMap = cp2DataCardModel.dataItemsMap;
final List<DataItem> phoneDataItems = dataItemsMap.get(Phone.CONTENT_ITEM_TYPE);
+ final List<DataItem> sipCallDataItems = dataItemsMap.get(SipAddress.CONTENT_ITEM_TYPE);
if (phoneDataItems != null && phoneDataItems.size() == 1) {
mOnlyOnePhoneNumber = true;
}
@@ -1307,8 +1166,16 @@ public class QuickContactActivity extends ContactsActivity
phoneNumbers[i] = ((PhoneDataItem) phoneDataItems.get(i)).getNumber();
}
}
+ String[] sipNumbers = null;
+ if (sipCallDataItems != null) {
+ sipNumbers = new String[sipCallDataItems.size()];
+ for (int i = 0; i < sipCallDataItems.size(); ++i) {
+ sipNumbers[i] = ((SipAddressDataItem) sipCallDataItems.get(i)).getSipAddress();
+ }
+ }
final Bundle phonesExtraBundle = new Bundle();
phonesExtraBundle.putStringArray(KEY_LOADER_EXTRA_PHONES, phoneNumbers);
+ phonesExtraBundle.putStringArray(KEY_LOADER_EXTRA_SIP_NUMBERS, sipNumbers);
Trace.beginSection("start sms loader");
getLoaderManager().initLoader(
@@ -1393,50 +1260,14 @@ public class QuickContactActivity extends ContactsActivity
destroyInteractionLoaders();
startInteractionLoaders(mCachedCp2DataCardModel);
}
+ maybeShowProgressDialog();
}
- private void populateSuggestionCard() {
- // Initialize suggestion related view and data.
- if (mPreviousContactId != mContactData.getId()) {
- mCollapsedSuggestionCardView.setVisibility(View.GONE);
- mExpandSuggestionCardView.setVisibility(View.GONE);
- mIsSuggestionListCollapsed = true;
- mSuggestionsShouldAutoSelected = true;
- mSuggestionList.removeAllViews();
- }
-
- // Do not show the card when it's directory contact or invisible.
- if (DirectoryContactUtil.isDirectoryContact(mContactData)
- || InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
- return;
- }
-
- if (mAggregationSuggestionEngine == null) {
- mAggregationSuggestionEngine = new AggregationSuggestionEngine(this);
- mAggregationSuggestionEngine.setListener(this);
- mAggregationSuggestionEngine.setSuggestionsLimit(getResources().getInteger(
- R.integer.quickcontact_suggestions_limit));
- mAggregationSuggestionEngine.start();
- }
- mAggregationSuggestionEngine.setContactId(mContactData.getId());
- if (mPreviousContactId != 0
- && mPreviousContactId != mContactData.getId()) {
- // Clear selected Ids when listing suggestions for new contact Id.
- mSelectedAggregationIds.clear();
- }
- mPreviousContactId = mContactData.getId();
-
- // Trigger suggestion engine to compute suggestions.
- if (mContactData.getId() <= 0) {
- return;
- }
- final ContentValues values = new ContentValues();
- values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
- mContactData.getDisplayName());
- values.put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME,
- mContactData.getPhoneticName());
- mAggregationSuggestionEngine.onNameChange(ValuesDelta.fromBefore(values));
+ @Override
+ protected void onPause() {
+ super.onPause();
+ dismissProgressBar();
}
private void populateContactAndAboutCard(Cp2DataCardModel cp2DataCardModel,
@@ -1452,17 +1283,16 @@ public class QuickContactActivity extends ContactsActivity
final String customAboutCardName = cp2DataCardModel.customAboutCardName;
if (contactCardEntries.size() > 0) {
- final boolean firstEntriesArePrioritizedMimeType =
- !TextUtils.isEmpty(mExtraPrioritizedMimeType) &&
- mCachedCp2DataCardModel.dataItemsMap.containsKey(mExtraPrioritizedMimeType) &&
- mCachedCp2DataCardModel.dataItemsMap.get(mExtraPrioritizedMimeType).size() != 0;
mContactCard.initialize(contactCardEntries,
/* numInitialVisibleEntries = */ MIN_NUM_CONTACT_ENTRIES_SHOWN,
/* isExpanded = */ mContactCard.isExpanded(),
- /* isAlwaysExpanded = */ false,
+ /* isAlwaysExpanded = */ true,
mExpandingEntryCardViewListener,
- mScroller,
- firstEntriesArePrioritizedMimeType);
+ mScroller);
+ if (mContactCard.getVisibility() == View.GONE && mShouldLog) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.CONTACT,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ }
mContactCard.setVisibility(View.VISIBLE);
} else {
mContactCard.setVisibility(View.GONE);
@@ -1522,25 +1352,32 @@ public class QuickContactActivity extends ContactsActivity
mScroller);
if (contactCardEntries.size() == 0 && aboutCardEntries.size() == 0) {
- initializeNoContactDetailCard();
+ initializeNoContactDetailCard(cp2DataCardModel.areAllRawContactsSimAccounts);
} else {
mNoContactDetailsCard.setVisibility(View.GONE);
}
// If the Recent card is already initialized (all recent data is loaded), show the About
// card if it has entries. Otherwise About card visibility will be set in bindRecentData()
- if (isAllRecentDataLoaded() && aboutCardEntries.size() > 0) {
- mAboutCard.setVisibility(View.VISIBLE);
+ if (aboutCardEntries.size() > 0) {
+ if (mAboutCard.getVisibility() == View.GONE && mShouldLog) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.ABOUT,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ }
+ if (isAllRecentDataLoaded()) {
+ mAboutCard.setVisibility(View.VISIBLE);
+ }
}
Trace.endSection();
}
/**
* Create a card that shows "Add email" and "Add phone number" entries in grey.
+ * When contact is a SIM contact, only shows "Add phone number".
*/
- private void initializeNoContactDetailCard() {
- final Drawable phoneIcon = getResources().getDrawable(
- R.drawable.ic_phone_24dp).mutate();
+ private void initializeNoContactDetailCard(boolean areAllRawContactsSimAccounts) {
+ final Drawable phoneIcon = ResourcesCompat.getDrawable(getResources(),
+ R.drawable.quantum_ic_phone_vd_theme_24, null).mutate();
final Entry phonePromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
phoneIcon, getString(R.string.quickcontact_add_phone_number),
/* subHeader = */ null, /* subHeaderIcon = */ null, /* text = */ null,
@@ -1553,27 +1390,30 @@ public class QuickContactActivity extends ContactsActivity
/* thirdContentDescription = */ null,
/* thirdAction = */ Entry.ACTION_NONE,
/* thirdExtras = */ null,
- R.drawable.ic_phone_24dp);
-
- final Drawable emailIcon = getResources().getDrawable(
- R.drawable.ic_email_24dp).mutate();
- final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
- emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
- /* subHeaderIcon = */ null,
- /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
- getEditContactIntent(), /* alternateIcon = */ null,
- /* alternateIntent = */ null, /* alternateContentDescription = */ null,
- /* shouldApplyColor = */ true, /* isEditable = */ false,
- /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
- /* thirdIntent = */ null, /* thirdContentDescription = */ null,
- /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
- R.drawable.ic_email_24dp);
+ R.drawable.quantum_ic_phone_vd_theme_24);
final List<List<Entry>> promptEntries = new ArrayList<>();
promptEntries.add(new ArrayList<Entry>(1));
- promptEntries.add(new ArrayList<Entry>(1));
promptEntries.get(0).add(phonePromptEntry);
- promptEntries.get(1).add(emailPromptEntry);
+
+ if (!areAllRawContactsSimAccounts) {
+ final Drawable emailIcon = ResourcesCompat.getDrawable(getResources(),
+ R.drawable.quantum_ic_email_vd_theme_24, null).mutate();
+ final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
+ emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
+ /* subHeaderIcon = */ null,
+ /* text = */ null, /* textIcon = */ null, /* primaryContentDescription = */ null,
+ getEditContactIntent(), /* alternateIcon = */ null,
+ /* alternateIntent = */ null, /* alternateContentDescription = */ null,
+ /* shouldApplyColor = */ true, /* isEditable = */ false,
+ /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
+ /* thirdIntent = */ null, /* thirdContentDescription = */ null,
+ /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
+ R.drawable.quantum_ic_email_vd_theme_24);
+
+ promptEntries.add(new ArrayList<Entry>(1));
+ promptEntries.get(1).add(emailPromptEntry);
+ }
final int subHeaderTextColor = getResources().getColor(
R.color.quickcontact_entry_sub_header_text_color);
@@ -1581,6 +1421,10 @@ public class QuickContactActivity extends ContactsActivity
new PorterDuffColorFilter(subHeaderTextColor, PorterDuff.Mode.SRC_ATOP);
mNoContactDetailsCard.initialize(promptEntries, 2, /* isExpanded = */ true,
/* isAlwaysExpanded = */ true, mExpandingEntryCardViewListener, mScroller);
+ if (mNoContactDetailsCard.getVisibility() == View.GONE && mShouldLog) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.NO_CONTACT,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ }
mNoContactDetailsCard.setVisibility(View.VISIBLE);
mNoContactDetailsCard.setEntryHeaderColor(subHeaderTextColor);
mNoContactDetailsCard.setColorAndFilter(subHeaderTextColor, greyColorFilter);
@@ -1680,6 +1524,7 @@ public class QuickContactActivity extends ContactsActivity
dataModel.aboutCardEntries = aboutCardEntries;
dataModel.contactCardEntries = contactCardEntries;
dataModel.dataItemsMap = dataItemsMap;
+ dataModel.areAllRawContactsSimAccounts = data.areAllRawContactsSimAccounts(this);
return dataModel;
}
@@ -1696,6 +1541,7 @@ public class QuickContactActivity extends ContactsActivity
public List<List<Entry>> aboutCardEntries;
public List<List<Entry>> contactCardEntries;
public String customAboutCardName;
+ public boolean areAllRawContactsSimAccounts;
}
private static class MutableString {
@@ -1791,6 +1637,14 @@ public class QuickContactActivity extends ContactsActivity
entryContextMenuInfo = new EntryContextMenuInfo(subHeader, header,
dataItem.getMimeType(), dataItem.getId(), dataItem.isSuperPrimary());
}
+ } else if (dataItem instanceof CustomDataItem) {
+ final CustomDataItem customDataItem = (CustomDataItem) dataItem;
+ final String summary = customDataItem.getSummary();
+ header = TextUtils.isEmpty(summary)
+ ? res.getString(R.string.label_custom_field) : summary;
+ subHeader = customDataItem.getContent();
+ entryContextMenuInfo = new EntryContextMenuInfo(subHeader, header,
+ dataItem.getMimeType(), dataItem.getId(), dataItem.isSuperPrimary());
} else if (dataItem instanceof NoteDataItem) {
final NoteDataItem note = (NoteDataItem) dataItem;
header = res.getString(R.string.header_note_entry);
@@ -1871,19 +1725,21 @@ public class QuickContactActivity extends ContactsActivity
}
}
primaryContentDescription.append(header);
- phoneContentDescription = com.android.contacts.common.util.ContactDisplayUtils
+ phoneContentDescription = com.android.contacts.util.ContactDisplayUtils
.getTelephoneTtsSpannable(primaryContentDescription.toString(), header);
- icon = res.getDrawable(R.drawable.ic_phone_24dp);
- iconResourceId = R.drawable.ic_phone_24dp;
+ iconResourceId = R.drawable.quantum_ic_phone_vd_theme_24;
+ icon = res.getDrawable(iconResourceId);
if (PhoneCapabilityTester.isPhone(context)) {
intent = CallUtil.getCallIntent(phone.getNumber());
+ intent.putExtra(EXTRA_ACTION_TYPE, ActionType.CALL);
}
alternateIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts(ContactsUtils.SCHEME_SMSTO, phone.getNumber(), null));
+ alternateIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.SMS);
- alternateIcon = res.getDrawable(R.drawable.ic_message_24dp_mirrored);
+ alternateIcon = res.getDrawable(R.drawable.quantum_ic_message_vd_theme_24);
alternateContentDescription.append(res.getString(R.string.sms_custom, header));
- smsContentDescription = com.android.contacts.common.util.ContactDisplayUtils
+ smsContentDescription = com.android.contacts.util.ContactDisplayUtils
.getTelephoneTtsSpannable(alternateContentDescription.toString(), header);
int videoCapability = CallUtil.getVideoCallingAvailability(context);
@@ -1892,7 +1748,7 @@ public class QuickContactActivity extends ContactsActivity
boolean isVideoEnabled = (videoCapability & CallUtil.VIDEO_CALLING_ENABLED) != 0;
if (CallUtil.isCallWithSubjectSupported(context)) {
- thirdIcon = res.getDrawable(R.drawable.ic_call_note_white_24dp);
+ thirdIcon = res.getDrawable(R.drawable.quantum_ic_perm_phone_msg_vd_theme_24);
thirdAction = Entry.ACTION_CALL_WITH_SUBJECT;
thirdContentDescription =
res.getString(R.string.call_with_a_note);
@@ -1919,10 +1775,11 @@ public class QuickContactActivity extends ContactsActivity
boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
if ((isPresenceEnabled && isPresent) || !isPresenceEnabled) {
- thirdIcon = res.getDrawable(R.drawable.ic_videocam);
+ thirdIcon = res.getDrawable(R.drawable.quantum_ic_videocam_vd_theme_24);
thirdAction = Entry.ACTION_INTENT;
thirdIntent = CallUtil.getVideoCallIntent(phone.getNumber(),
CALL_ORIGIN_QUICK_CONTACTS_ACTIVITY);
+ thirdIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.VIDEOCALL);
thirdContentDescription =
res.getString(R.string.description_video_call);
}
@@ -1935,6 +1792,7 @@ public class QuickContactActivity extends ContactsActivity
primaryContentDescription.append(res.getString(R.string.email_other)).append(" ");
final Uri mailUri = Uri.fromParts(ContactsUtils.SCHEME_MAILTO, address, null);
intent = new Intent(Intent.ACTION_SENDTO, mailUri);
+ intent.putExtra(EXTRA_ACTION_TYPE, ActionType.EMAIL);
header = email.getAddress();
entryContextMenuInfo = new EntryContextMenuInfo(header,
res.getString(R.string.emailLabelsGroup), dataItem.getMimeType(),
@@ -1945,8 +1803,8 @@ public class QuickContactActivity extends ContactsActivity
primaryContentDescription.append(text).append(" ");
}
primaryContentDescription.append(header);
- icon = res.getDrawable(R.drawable.ic_email_24dp);
- iconResourceId = R.drawable.ic_email_24dp;
+ iconResourceId = R.drawable.quantum_ic_email_vd_theme_24;
+ icon = res.getDrawable(iconResourceId);
}
} else if (dataItem instanceof StructuredPostalDataItem) {
StructuredPostalDataItem postal = (StructuredPostalDataItem) dataItem;
@@ -1954,6 +1812,7 @@ public class QuickContactActivity extends ContactsActivity
if (!TextUtils.isEmpty(postalAddress)) {
primaryContentDescription.append(res.getString(R.string.map_other)).append(" ");
intent = StructuredPostalUtils.getViewPostalAddressIntent(postalAddress);
+ intent.putExtra(EXTRA_ACTION_TYPE, ActionType.ADDRESS);
header = postal.getFormattedAddress();
entryContextMenuInfo = new EntryContextMenuInfo(header,
res.getString(R.string.postalLabelsGroup), dataItem.getMimeType(),
@@ -1966,11 +1825,12 @@ public class QuickContactActivity extends ContactsActivity
primaryContentDescription.append(header);
alternateIntent =
StructuredPostalUtils.getViewPostalAddressDirectionsIntent(postalAddress);
- alternateIcon = res.getDrawable(R.drawable.ic_directions_24dp);
+ alternateIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.DIRECTIONS);
+ alternateIcon = res.getDrawable(R.drawable.quantum_ic_directions_vd_theme_24);
alternateContentDescription.append(res.getString(
R.string.content_description_directions)).append(" ").append(header);
- icon = res.getDrawable(R.drawable.ic_place_24dp);
- iconResourceId = R.drawable.ic_place_24dp;
+ iconResourceId = R.drawable.quantum_ic_place_vd_theme_24;
+ icon = res.getDrawable(iconResourceId);
}
} else if (dataItem instanceof SipAddressDataItem) {
final SipAddressDataItem sip = (SipAddressDataItem) dataItem;
@@ -1981,6 +1841,7 @@ public class QuickContactActivity extends ContactsActivity
if (PhoneCapabilityTester.isSipPhone(context)) {
final Uri callUri = Uri.fromParts(PhoneAccount.SCHEME_SIP, address, null);
intent = CallUtil.getCallIntent(callUri);
+ intent.putExtra(EXTRA_ACTION_TYPE, ActionType.SIPCALL);
}
header = address;
entryContextMenuInfo = new EntryContextMenuInfo(header,
@@ -1992,8 +1853,8 @@ public class QuickContactActivity extends ContactsActivity
primaryContentDescription.append(text).append(" ");
}
primaryContentDescription.append(header);
- icon = res.getDrawable(R.drawable.ic_dialer_sip_black_24dp);
- iconResourceId = R.drawable.ic_dialer_sip_black_24dp;
+ iconResourceId = R.drawable.quantum_ic_dialer_sip_vd_theme_24;
+ icon = res.getDrawable(iconResourceId);
}
} else if (dataItem instanceof StructuredNameDataItem) {
// If the name is already set and this is not the super primary value then leave the
@@ -2015,74 +1876,52 @@ public class QuickContactActivity extends ContactsActivity
intent = new Intent(Intent.ACTION_VIEW);
final Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, dataItem.getId());
intent.setDataAndType(uri, dataItem.getMimeType());
+ intent.putExtra(EXTRA_ACTION_TYPE, ActionType.THIRD_PARTY);
+ intent.putExtra(EXTRA_THIRD_PARTY_ACTION, dataItem.getMimeType());
if (intent != null) {
final String mimetype = intent.getType();
// Build advanced entry for known 3p types. Otherwise default to ResolveCache icon.
- switch (mimetype) {
- case MIMETYPE_GPLUS_PROFILE:
- // If a secondDataItem is available, use it to build an entry with
- // alternate actions
- if (secondDataItem != null) {
- icon = res.getDrawable(R.drawable.ic_google_plus_24dp);
- alternateIcon = res.getDrawable(R.drawable.ic_add_to_circles_black_24);
- final GPlusOrHangoutsDataItemModel itemModel =
- new GPlusOrHangoutsDataItemModel(intent, alternateIntent,
- dataItem, secondDataItem, alternateContentDescription,
- header, text, context);
-
- populateGPlusOrHangoutsDataItemModel(itemModel);
- intent = itemModel.intent;
- alternateIntent = itemModel.alternateIntent;
- alternateContentDescription = itemModel.alternateContentDescription;
- header = itemModel.header;
- text = itemModel.text;
- } else {
- if (GPLUS_PROFILE_DATA_5_ADD_TO_CIRCLE.equals(
- intent.getDataString())) {
- icon = res.getDrawable(R.drawable.ic_add_to_circles_black_24);
- } else {
- icon = res.getDrawable(R.drawable.ic_google_plus_24dp);
- }
- }
- break;
- case MIMETYPE_HANGOUTS:
- // If a secondDataItem is available, use it to build an entry with
- // alternate actions
- if (secondDataItem != null) {
- icon = res.getDrawable(R.drawable.ic_hangout_24dp);
- alternateIcon = res.getDrawable(R.drawable.ic_hangout_video_24dp);
- final GPlusOrHangoutsDataItemModel itemModel =
- new GPlusOrHangoutsDataItemModel(intent, alternateIntent,
- dataItem, secondDataItem, alternateContentDescription,
- header, text, context);
-
- populateGPlusOrHangoutsDataItemModel(itemModel);
- intent = itemModel.intent;
- alternateIntent = itemModel.alternateIntent;
- alternateContentDescription = itemModel.alternateContentDescription;
- header = itemModel.header;
- text = itemModel.text;
+ if (MIMETYPE_HANGOUTS.equals(mimetype)) {
+ // If a secondDataItem is available, use it to build an entry with
+ // alternate actions
+ if (secondDataItem != null) {
+ icon = res.getDrawable(R.drawable.quantum_ic_hangout_vd_theme_24);
+ alternateIcon = res.getDrawable(
+ R.drawable.quantum_ic_hangout_video_vd_theme_24);
+ final HangoutsDataItemModel itemModel =
+ new HangoutsDataItemModel(intent, alternateIntent,
+ dataItem, secondDataItem, alternateContentDescription,
+ header, text, context);
+
+ populateHangoutsDataItemModel(itemModel);
+ intent = itemModel.intent;
+ alternateIntent = itemModel.alternateIntent;
+ alternateContentDescription = itemModel.alternateContentDescription;
+ header = itemModel.header;
+ text = itemModel.text;
+ } else {
+ if (HANGOUTS_DATA_5_VIDEO.equals(intent.getDataString())) {
+ icon = res.getDrawable(R.drawable.quantum_ic_hangout_video_vd_theme_24);
} else {
- if (HANGOUTS_DATA_5_VIDEO.equals(intent.getDataString())) {
- icon = res.getDrawable(R.drawable.ic_hangout_video_24dp);
- } else {
- icon = res.getDrawable(R.drawable.ic_hangout_24dp);
- }
+ icon = res.getDrawable(R.drawable.quantum_ic_hangout_vd_theme_24);
}
- break;
- default:
+ }
+ } else {
+ icon = ResolveCache.getInstance(context).getIcon(
+ dataItem.getMimeType(), intent);
+ // Call mutate to create a new Drawable.ConstantState for color filtering
+ if (icon != null) {
+ icon.mutate();
+ }
+ shouldApplyColor = false;
+
+ if (!MIMETYPE_GPLUS_PROFILE.equals(mimetype)) {
entryContextMenuInfo = new EntryContextMenuInfo(header, mimetype,
dataItem.getMimeType(), dataItem.getId(),
dataItem.isSuperPrimary());
- icon = ResolveCache.getInstance(context).getIcon(
- dataItem.getMimeType(), intent);
- // Call mutate to create a new Drawable.ConstantState for color filtering
- if (icon != null) {
- icon.mutate();
- }
- shouldApplyColor = false;
+ }
}
}
}
@@ -2130,9 +1969,10 @@ public class QuickContactActivity extends ContactsActivity
private List<Entry> dataItemsToEntries(List<DataItem> dataItems,
MutableString aboutCardTitleOut) {
// Hangouts and G+ use two data items to create one entry.
- if (dataItems.get(0).getMimeType().equals(MIMETYPE_GPLUS_PROFILE) ||
- dataItems.get(0).getMimeType().equals(MIMETYPE_HANGOUTS)) {
- return gPlusOrHangoutsDataItemsToEntries(dataItems);
+ if (dataItems.get(0).getMimeType().equals(MIMETYPE_GPLUS_PROFILE)) {
+ return gPlusDataItemsToEntries(dataItems);
+ } else if (dataItems.get(0).getMimeType().equals(MIMETYPE_HANGOUTS)) {
+ return hangoutsDataItemsToEntries(dataItems);
} else {
final List<Entry> entries = new ArrayList<>();
for (DataItem dataItem : dataItems) {
@@ -2147,15 +1987,10 @@ public class QuickContactActivity extends ContactsActivity
}
/**
- * G+ and Hangout entries are unique in that a single ExpandingEntryCardView.Entry consists
- * of two data items. This method attempts to build each entry using the two data items if
- * they are available. If there are more or less than two data items, a fall back is used
- * and each data item gets its own entry.
+ * Put the data items into buckets based on the raw contact id
*/
- private List<Entry> gPlusOrHangoutsDataItemsToEntries(List<DataItem> dataItems) {
- final List<Entry> entries = new ArrayList<>();
+ private Map<Long, List<DataItem>> dataItemsToBucket(List<DataItem> dataItems) {
final Map<Long, List<DataItem>> buckets = new HashMap<>();
- // Put the data items into buckets based on the raw contact id
for (DataItem dataItem : dataItems) {
List<DataItem> bucket = buckets.get(dataItem.getRawContactId());
if (bucket == null) {
@@ -2164,10 +1999,43 @@ public class QuickContactActivity extends ContactsActivity
}
bucket.add(dataItem);
}
+ return buckets;
+ }
+
+ /**
+ * For G+ entries, a single ExpandingEntryCardView.Entry consists of two data items. This
+ * method use only the View profile to build entry.
+ */
+ private List<Entry> gPlusDataItemsToEntries(List<DataItem> dataItems) {
+ final List<Entry> entries = new ArrayList<>();
+
+ for (List<DataItem> bucket : dataItemsToBucket(dataItems).values()) {
+ for (DataItem dataItem : bucket) {
+ if (GPLUS_PROFILE_DATA_5_VIEW_PROFILE.equals(
+ dataItem.getContentValues().getAsString(Data.DATA5))) {
+ final Entry entry = dataItemToEntry(dataItem, /* secondDataItem = */ null,
+ this, mContactData, /* aboutCardName = */ null);
+ if (entry != null) {
+ entries.add(entry);
+ }
+ }
+ }
+ }
+ return entries;
+ }
+
+ /**
+ * For Hangouts entries, a single ExpandingEntryCardView.Entry consists of two data items. This
+ * method attempts to build each entry using the two data items if they are available. If there
+ * are more or less than two data items, a fall back is used and each data item gets its own
+ * entry.
+ */
+ private List<Entry> hangoutsDataItemsToEntries(List<DataItem> dataItems) {
+ final List<Entry> entries = new ArrayList<>();
// Use the buckets to build entries. If a bucket contains two data items, build the special
// entry, otherwise fall back to the normal entry.
- for (List<DataItem> bucket : buckets.values()) {
+ for (List<DataItem> bucket : dataItemsToBucket(dataItems).values()) {
if (bucket.size() == 2) {
// Use the pair to build an entry
final Entry entry = dataItemToEntry(bucket.get(0),
@@ -2190,10 +2058,10 @@ public class QuickContactActivity extends ContactsActivity
}
/**
- * Used for statically passing around G+ or Hangouts data items and entry fields to
- * populateGPlusOrHangoutsDataItemModel.
+ * Used for statically passing around Hangouts data items and entry fields to
+ * populateHangoutsDataItemModel.
*/
- private static final class GPlusOrHangoutsDataItemModel {
+ private static final class HangoutsDataItemModel {
public Intent intent;
public Intent alternateIntent;
public DataItem dataItem;
@@ -2203,7 +2071,7 @@ public class QuickContactActivity extends ContactsActivity
public String text;
public Context context;
- public GPlusOrHangoutsDataItemModel(Intent intent, Intent alternateIntent, DataItem dataItem,
+ public HangoutsDataItemModel(Intent intent, Intent alternateIntent, DataItem dataItem,
DataItem secondDataItem, StringBuilder alternateContentDescription, String header,
String text, Context context) {
this.intent = intent;
@@ -2217,29 +2085,28 @@ public class QuickContactActivity extends ContactsActivity
}
}
- private static void populateGPlusOrHangoutsDataItemModel(
- GPlusOrHangoutsDataItemModel dataModel) {
+ private static void populateHangoutsDataItemModel(
+ HangoutsDataItemModel dataModel) {
final Intent secondIntent = new Intent(Intent.ACTION_VIEW);
secondIntent.setDataAndType(ContentUris.withAppendedId(Data.CONTENT_URI,
dataModel.secondDataItem.getId()), dataModel.secondDataItem.getMimeType());
+ secondIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.THIRD_PARTY);
+ secondIntent.putExtra(EXTRA_THIRD_PARTY_ACTION, dataModel.secondDataItem.getMimeType());
+
// There is no guarantee the order the data items come in. Second
// data item does not necessarily mean it's the alternate.
- // Hangouts video and Add to circles should be alternate. Swap if needed
+ // Hangouts video should be alternate. Swap if needed
if (HANGOUTS_DATA_5_VIDEO.equals(
- dataModel.dataItem.getContentValues().getAsString(Data.DATA5)) ||
- GPLUS_PROFILE_DATA_5_ADD_TO_CIRCLE.equals(
- dataModel.dataItem.getContentValues().getAsString(Data.DATA5))) {
+ dataModel.dataItem.getContentValues().getAsString(Data.DATA5))) {
dataModel.alternateIntent = dataModel.intent;
dataModel.alternateContentDescription = new StringBuilder(dataModel.header);
dataModel.intent = secondIntent;
- dataModel.header = dataModel.secondDataItem.buildDataStringForDisplay(dataModel.context,
- dataModel.secondDataItem.getDataKind());
+ dataModel.header = dataModel.secondDataItem.buildDataStringForDisplay(
+ dataModel.context, dataModel.secondDataItem.getDataKind());
dataModel.text = dataModel.secondDataItem.getDataKind().typeColumn;
} else if (HANGOUTS_DATA_5_MESSAGE.equals(
- dataModel.dataItem.getContentValues().getAsString(Data.DATA5)) ||
- GPLUS_PROFILE_DATA_5_VIEW_PROFILE.equals(
- dataModel.dataItem.getContentValues().getAsString(Data.DATA5))) {
+ dataModel.dataItem.getContentValues().getAsString(Data.DATA5))) {
dataModel.alternateIntent = secondIntent;
dataModel.alternateContentDescription = new StringBuilder(
dataModel.secondDataItem.buildDataStringForDisplay(dataModel.context,
@@ -2323,8 +2190,6 @@ public class QuickContactActivity extends ContactsActivity
if (imageViewDrawable == mPhotoView.getDrawable()) {
mHasComputedThemeColor = true;
setThemeColor(palette);
- // update color and photo in suggestion card
- onAggregationSuggestionChange();
}
}
}.execute();
@@ -2342,7 +2207,6 @@ public class QuickContactActivity extends ContactsActivity
mContactCard.setColorAndFilter(mColorFilterColor, mColorFilter);
mRecentCard.setColorAndFilter(mColorFilterColor, mColorFilter);
mAboutCard.setColorAndFilter(mColorFilterColor, mColorFilter);
- mSuggestionsCancelButton.setTextColor(mColorFilterColor);
}
private void updateStatusBarColor() {
@@ -2437,6 +2301,11 @@ public class QuickContactActivity extends ContactsActivity
return;
}
+ if (!mIsRecreatedInstance && !mShortcutUsageReported && data != null) {
+ mShortcutUsageReported = true;
+ DynamicShortcuts.reportShortcutUsed(QuickContactActivity.this,
+ data.getLookupKey());
+ }
bindContactData(data);
} finally {
@@ -2452,13 +2321,20 @@ public class QuickContactActivity extends ContactsActivity
// Load all contact data. We need loadGroupMetaData=true to determine whether the
// contact is invisible. If it is, we need to display an "Add to Contacts" MenuItem.
return new ContactLoader(getApplicationContext(), mLookupUri,
- true /*loadGroupMetaData*/, false /*loadInvitableAccountTypes*/,
- true /*postViewNotification*/, true /*computeFormattedPhoneNumber*/);
+ true /*loadGroupMetaData*/, true /*postViewNotification*/,
+ true /*computeFormattedPhoneNumber*/);
}
};
@Override
public void onBackPressed() {
+ final int previousScreenType = getIntent().getIntExtra
+ (EXTRA_PREVIOUS_SCREEN_TYPE, ScreenType.UNKNOWN);
+ if ((previousScreenType == ScreenType.ALL_CONTACTS
+ || previousScreenType == ScreenType.FAVORITES)
+ && !SharedPreferenceUtil.getHamburgerPromoTriggerActionHappenedBefore(this)) {
+ SharedPreferenceUtil.setHamburgerPromoTriggerActionHappenedBefore(this);
+ }
if (mScroller != null) {
if (!mIsExitAnimationInProgress) {
mScroller.scrollOffBottom();
@@ -2507,6 +2383,7 @@ public class QuickContactActivity extends ContactsActivity
loader = new CallLogInteractionsLoader(
QuickContactActivity.this,
args.getStringArray(KEY_LOADER_EXTRA_PHONES),
+ args.getStringArray(KEY_LOADER_EXTRA_SIP_NUMBERS),
MAX_CALL_LOG_RETRIEVE);
}
return loader;
@@ -2594,7 +2471,62 @@ public class QuickContactActivity extends ContactsActivity
/* numInitialVisibleEntries = */ MIN_NUM_COLLAPSED_RECENT_ENTRIES_SHOWN,
/* isExpanded = */ mRecentCard.isExpanded(), /* isAlwaysExpanded = */ false,
mExpandingEntryCardViewListener, mScroller);
+ if (mRecentCard.getVisibility() == View.GONE && mShouldLog) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.RECENT,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ }
mRecentCard.setVisibility(View.VISIBLE);
+ } else {
+ mRecentCard.setVisibility(View.GONE);
+ }
+
+ Trace.endSection();
+ Trace.beginSection("initialize permission explanation card");
+
+ final Drawable historyIcon = ResourcesCompat.getDrawable(getResources(),
+ R.drawable.quantum_ic_history_vd_theme_24, null);
+
+ final Entry permissionExplanationEntry = new Entry(CARD_ENTRY_ID_REQUEST_PERMISSION,
+ historyIcon, getString(R.string.permission_explanation_header),
+ mPermissionExplanationCardSubHeader, /* subHeaderIcon = */ null,
+ /* text = */ null, /* textIcon = */ null,
+ /* primaryContentDescription = */ null, getIntent(),
+ /* alternateIcon = */ null, /* alternateIntent = */ null,
+ /* alternateContentDescription = */ null, /* shouldApplyColor = */ true,
+ /* isEditable = */ false, /* EntryContextMenuInfo = */ null,
+ /* thirdIcon = */ null, /* thirdIntent = */ null,
+ /* thirdContentDescription = */ null, /* thirdAction = */ Entry.ACTION_NONE,
+ /* thirdExtras = */ null, R.drawable.quantum_ic_history_vd_theme_24);
+
+ final List<List<Entry>> permissionExplanationEntries = new ArrayList<>();
+ permissionExplanationEntries.add(new ArrayList<Entry>());
+ permissionExplanationEntries.get(0).add(permissionExplanationEntry);
+
+ final int subHeaderTextColor = getResources().getColor(android.R.color.white);
+ final PorterDuffColorFilter whiteColorFilter =
+ new PorterDuffColorFilter(subHeaderTextColor, PorterDuff.Mode.SRC_ATOP);
+
+ mPermissionExplanationCard.initialize(permissionExplanationEntries,
+ /* numInitialVisibleEntries = */ 1,
+ /* isExpanded = */ true,
+ /* isAlwaysExpanded = */ true,
+ /* listener = */ null,
+ mScroller);
+
+ mPermissionExplanationCard.setColorAndFilter(subHeaderTextColor, whiteColorFilter);
+ mPermissionExplanationCard.setBackgroundColor(mColorFilterColor);
+ mPermissionExplanationCard.setEntryHeaderColor(subHeaderTextColor);
+ mPermissionExplanationCard.setEntrySubHeaderColor(subHeaderTextColor);
+
+ if (mShouldShowPermissionExplanation) {
+ if (mPermissionExplanationCard.getVisibility() == View.GONE
+ && mShouldLog) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.PERMISSION,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ }
+ mPermissionExplanationCard.setVisibility(View.VISIBLE);
+ } else {
+ mPermissionExplanationCard.setVisibility(View.GONE);
}
Trace.endSection();
@@ -2631,10 +2563,8 @@ public class QuickContactActivity extends ContactsActivity
@Override
public void onDestroy() {
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(mListener);
super.onDestroy();
- if (mAggregationSuggestionEngine != null) {
- mAggregationSuggestionEngine.quit();
- }
}
/**
@@ -2652,7 +2582,7 @@ public class QuickContactActivity extends ContactsActivity
}
private Intent getEditContactIntent() {
- return EditorIntents.createCompactEditContactIntent(
+ return EditorIntents.createEditContactIntent(QuickContactActivity.this,
mContactData.getLookupUri(),
mHasComputedThemeColor
? new MaterialPalette(mColorFilterColor, mStatusBarColor) : null,
@@ -2670,31 +2600,22 @@ public class QuickContactActivity extends ContactsActivity
ContactDeletionInteraction.start(this, contactUri, /* finishActivityWhenDone =*/ true);
}
- private void toggleStar(MenuItem starredMenuItem) {
- // Make sure there is a contact
- if (mContactData != null) {
- // Read the current starred value from the UI instead of using the last
- // loaded state. This allows rapid tapping without writing the same
- // value several times
- final boolean isStarred = starredMenuItem.isChecked();
-
- // To improve responsiveness, swap out the picture (and tag) in the UI already
- ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
- mContactData.isDirectoryEntry(), mContactData.isUserProfile(),
- !isStarred);
-
- // Now perform the real save
- final Intent intent = ContactSaveService.createSetStarredIntent(
- QuickContactActivity.this, mContactData.getLookupUri(), !isStarred);
- startService(intent);
-
- final CharSequence accessibilityText = !isStarred
- ? getResources().getText(R.string.description_action_menu_add_star)
- : getResources().getText(R.string.description_action_menu_remove_star);
- // Accessibility actions need to have an associated view. We can't access the MenuItem's
- // underlying view, so put this accessibility action on the root view.
- mScroller.announceForAccessibility(accessibilityText);
- }
+ private void toggleStar(MenuItem starredMenuItem, boolean isStarred) {
+ // To improve responsiveness, swap out the picture (and tag) in the UI already
+ ContactDisplayUtils.configureStarredMenuItem(starredMenuItem,
+ mContactData.isDirectoryEntry(), mContactData.isUserProfile(), !isStarred);
+
+ // Now perform the real save
+ final Intent intent = ContactSaveService.createSetStarredIntent(
+ QuickContactActivity.this, mContactData.getLookupUri(), !isStarred);
+ startService(intent);
+
+ final CharSequence accessibilityText = !isStarred
+ ? getResources().getText(R.string.description_action_menu_add_star)
+ : getResources().getText(R.string.description_action_menu_remove_star);
+ // Accessibility actions need to have an associated view. We can't access the MenuItem's
+ // underlying view, so put this accessibility action on the root view.
+ mScroller.announceForAccessibility(accessibilityText);
}
private void shareContact() {
@@ -2705,7 +2626,8 @@ public class QuickContactActivity extends ContactsActivity
intent.putExtra(Intent.EXTRA_STREAM, shareUri);
// Launch chooser to share contact via
- final CharSequence chooseTitle = getText(R.string.share_via);
+ final CharSequence chooseTitle = getResources().getQuantityString(
+ R.plurals.title_share_via, /* quantity */ 1);
final Intent chooseIntent = Intent.createChooser(intent, chooseTitle);
try {
@@ -2725,22 +2647,32 @@ public class QuickContactActivity extends ContactsActivity
@Override
public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
- // Broadcast the shortcutIntent to the launcher to create a
- // shortcut to this contact
- shortcutIntent.setAction(ACTION_INSTALL_SHORTCUT);
- QuickContactActivity.this.sendBroadcast(shortcutIntent);
-
- // Send a toast to give feedback to the user that a shortcut to this
- // contact was added to the launcher.
- final String displayName = shortcutIntent
- .getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
- final String toastMessage = TextUtils.isEmpty(displayName)
- ? getString(R.string.createContactShortcutSuccessful_NoName)
- : getString(R.string.createContactShortcutSuccessful, displayName);
- Toast.makeText(QuickContactActivity.this, toastMessage,
- Toast.LENGTH_SHORT).show();
+ if (BuildCompat.isAtLeastO()) {
+ final ShortcutManager shortcutManager = (ShortcutManager)
+ getSystemService(SHORTCUT_SERVICE);
+ final DynamicShortcuts shortcuts =
+ new DynamicShortcuts(QuickContactActivity.this);
+ shortcutManager.requestPinShortcut(
+ shortcuts.getQuickContactShortcutInfo(
+ mContactData.getId(), mContactData.getLookupKey(),
+ mContactData.getDisplayName()), null);
+ } else {
+ // Broadcast the shortcutIntent to the launcher to create a
+ // shortcut to this contact
+ shortcutIntent.setAction(ACTION_INSTALL_SHORTCUT);
+ QuickContactActivity.this.sendBroadcast(shortcutIntent);
+ // Send a toast to give feedback to the user that a shortcut to this
+ // contact was added to the launcher.
+ final String displayName = shortcutIntent
+ .getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
+ final String toastMessage = TextUtils.isEmpty(displayName)
+ ? getString(R.string.createContactShortcutSuccessful_NoName)
+ : getString(R.string.createContactShortcutSuccessful,
+ displayName);
+ Toast.makeText(QuickContactActivity.this, toastMessage,
+ Toast.LENGTH_SHORT).show();
+ }
}
-
});
builder.createContactShortcutIntent(mContactData.getLookupUri());
}
@@ -2750,6 +2682,13 @@ public class QuickContactActivity extends ContactsActivity
mContactData.isDirectoryEntry()) {
return false;
}
+
+ if (BuildCompat.isAtLeastO()) {
+ final ShortcutManager manager = (ShortcutManager)
+ getSystemService(Context.SHORTCUT_SERVICE);
+ return manager.isRequestPinShortcutSupported();
+ }
+
final Intent createShortcutIntent = new Intent();
createShortcutIntent.setAction(ACTION_INSTALL_SHORTCUT);
final List<ResolveInfo> receivers = getPackageManager()
@@ -2757,6 +2696,15 @@ public class QuickContactActivity extends ContactsActivity
return receivers != null && receivers.size() > 0;
}
+ private void setStateForPhoneMenuItems(Contact contact) {
+ if (contact != null) {
+ mSendToVoicemailState = contact.isSendToVoicemail();
+ mCustomRingtone = contact.getCustomRingtone();
+ mArePhoneOptionsChangable = isContactEditable()
+ && PhoneCapabilityTester.isPhone(this);
+ }
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
final MenuInflater inflater = getMenuInflater();
@@ -2777,15 +2725,27 @@ public class QuickContactActivity extends ContactsActivity
editMenuItem.setVisible(true);
if (DirectoryContactUtil.isDirectoryContact(mContactData) || InvisibleContactUtil
.isInvisibleAndAddable(mContactData, this)) {
- editMenuItem.setIcon(R.drawable.ic_person_add_tinted_24dp);
+ editMenuItem.setIcon(R.drawable.quantum_ic_person_add_vd_theme_24);
editMenuItem.setTitle(R.string.menu_add_contact);
} else if (isContactEditable()) {
- editMenuItem.setIcon(R.drawable.ic_create_24dp);
+ editMenuItem.setIcon(R.drawable.quantum_ic_create_vd_theme_24);
editMenuItem.setTitle(R.string.menu_editContact);
} else {
editMenuItem.setVisible(false);
}
+ // The link menu item is only visible if this has a single raw contact.
+ final MenuItem joinMenuItem = menu.findItem(R.id.menu_join);
+ joinMenuItem.setVisible(!InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)
+ && isContactEditable() && !mContactData.isUserProfile()
+ && !mContactData.isMultipleRawContacts());
+
+ // Viewing linked contacts can only happen if there are multiple raw contacts and
+ // the link menu isn't available.
+ final MenuItem linkedContactsMenuItem = menu.findItem(R.id.menu_linked_contacts);
+ linkedContactsMenuItem.setVisible(mContactData.isMultipleRawContacts()
+ && !joinMenuItem.isVisible());
+
final MenuItem deleteMenuItem = menu.findItem(R.id.menu_delete);
deleteMenuItem.setVisible(isContactEditable() && !mContactData.isUserProfile());
@@ -2795,6 +2755,17 @@ public class QuickContactActivity extends ContactsActivity
final MenuItem shortcutMenuItem = menu.findItem(R.id.menu_create_contact_shortcut);
shortcutMenuItem.setVisible(isShortcutCreatable());
+ // Hide telephony-related settings (ringtone, send to voicemail)
+ // if we don't have a telephone
+ final MenuItem ringToneMenuItem = menu.findItem(R.id.menu_set_ringtone);
+ ringToneMenuItem.setVisible(!mContactData.isUserProfile() && mArePhoneOptionsChangable);
+
+ final MenuItem sendToVoiceMailMenuItem = menu.findItem(R.id.menu_send_to_voicemail);
+ sendToVoiceMailMenuItem.setVisible(!mContactData.isUserProfile()
+ && mArePhoneOptionsChangable);
+ sendToVoiceMailMenuItem.setTitle(mSendToVoicemailState
+ ? R.string.menu_unredirect_calls_to_vm : R.string.menu_redirect_calls_to_vm);
+
final MenuItem helpMenu = menu.findItem(R.id.menu_help);
helpMenu.setVisible(HelpUtils.isHelpAndFeedbackAvailable());
@@ -2805,90 +2776,227 @@ public class QuickContactActivity extends ContactsActivity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_star:
- toggleStar(item);
- return true;
- case R.id.menu_edit:
- if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
- // This action is used to launch the contact selector, with the option of
- // creating a new contact. Creating a new contact is an INSERT, while selecting
- // an exisiting one is an edit. The fields in the edit screen will be
- // prepopulated with data.
-
- final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.setType(Contacts.CONTENT_ITEM_TYPE);
-
- ArrayList<ContentValues> values = mContactData.getContentValues();
-
- // Only pre-fill the name field if the provided display name is an nickname
- // or better (e.g. structured name, nickname)
- if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
- intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
- } else if (mContactData.getDisplayNameSource()
- == DisplayNameSources.ORGANIZATION) {
- // This is probably an organization. Instead of copying the organization
- // name into a name entry, copy it into the organization entry. This
- // way we will still consider the contact an organization.
- final ContentValues organization = new ContentValues();
- organization.put(Organization.COMPANY, mContactData.getDisplayName());
- organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
- values.add(organization);
- }
-
- // Last time used and times used are aggregated values from the usage stat
- // table. They need to be removed from data values so the SQL table can insert
- // properly
- for (ContentValues value : values) {
- value.remove(Data.LAST_TIME_USED);
- value.remove(Data.TIMES_USED);
- }
- intent.putExtra(Intents.Insert.DATA, values);
-
- // If the contact can only export to the same account, add it to the intent.
- // Otherwise the ContactEditorFragment will show a dialog for selecting an
- // account.
- if (mContactData.getDirectoryExportSupport() ==
- Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
- intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
- new Account(mContactData.getDirectoryAccountName(),
- mContactData.getDirectoryAccountType()));
- intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
- mContactData.getRawContacts().get(0).getDataSet());
- }
-
- // Add this flag to disable the delete menu option on directory contact joins
- // with local contacts. The delete option is ambiguous when joining contacts.
- intent.putExtra(ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
- true);
-
- startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
- } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
- InvisibleContactUtil.addToDefaultGroup(mContactData, this);
- } else if (isContactEditable()) {
- editContact();
+ final int id = item.getItemId();
+ if (id == R.id.menu_star) {// Make sure there is a contact
+ if (mContactData != null) {
+ // Read the current starred value from the UI instead of using the last
+ // loaded state. This allows rapid tapping without writing the same
+ // value several times
+ final boolean isStarred = item.isChecked();
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ isStarred ? ActionType.UNSTAR : ActionType.STAR,
+ /* thirdPartyAction */ null);
+ toggleStar(item, isStarred);
+ }
+ } else if (id == R.id.menu_edit) {
+ if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.ADD, /* thirdPartyAction */ null);
+
+ // This action is used to launch the contact selector, with the option of
+ // creating a new contact. Creating a new contact is an INSERT, while selecting
+ // an exisiting one is an edit. The fields in the edit screen will be
+ // prepopulated with data.
+
+ final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ intent.setType(Contacts.CONTENT_ITEM_TYPE);
+
+ ArrayList<ContentValues> values = mContactData.getContentValues();
+
+ // Only pre-fill the name field if the provided display name is an nickname
+ // or better (e.g. structured name, nickname)
+ if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
+ intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
+ } else if (mContactData.getDisplayNameSource()
+ == DisplayNameSources.ORGANIZATION) {
+ // This is probably an organization. Instead of copying the organization
+ // name into a name entry, copy it into the organization entry. This
+ // way we will still consider the contact an organization.
+ final ContentValues organization = new ContentValues();
+ organization.put(Organization.COMPANY, mContactData.getDisplayName());
+ organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ values.add(organization);
}
- return true;
- case R.id.menu_delete:
- if (isContactEditable()) {
- deleteContact();
+
+ // Last time used and times used are aggregated values from the usage stat
+ // table. They need to be removed from data values so the SQL table can insert
+ // properly
+ for (ContentValues value : values) {
+ value.remove(Data.LAST_TIME_USED);
+ value.remove(Data.TIMES_USED);
}
- return true;
- case R.id.menu_share:
- if (isContactShareable()) {
- shareContact();
+ intent.putExtra(Intents.Insert.DATA, values);
+
+ // If the contact can only export to the same account, add it to the intent.
+ // Otherwise the ContactEditorFragment will show a dialog for selecting
+ // an account.
+ if (mContactData.getDirectoryExportSupport() ==
+ Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
+ intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
+ new Account(mContactData.getDirectoryAccountName(),
+ mContactData.getDirectoryAccountType()));
+ intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
+ mContactData.getRawContacts().get(0).getDataSet());
}
- return true;
- case R.id.menu_create_contact_shortcut:
- if (isShortcutCreatable()) {
- createLauncherShortcutWithContact();
+
+ // Add this flag to disable the delete menu option on directory contact joins
+ // with local contacts. The delete option is ambiguous when joining contacts.
+ intent.putExtra(
+ ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
+ true);
+
+ intent.setPackage(getPackageName());
+ startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
+ } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.ADD, /* thirdPartyAction */ null);
+ InvisibleContactUtil.addToDefaultGroup(mContactData, this);
+ } else if (isContactEditable()) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.EDIT, /* thirdPartyAction */ null);
+ editContact();
+ }
+ } else if (id == R.id.menu_join) {
+ return doJoinContactAction();
+ } else if (id == R.id.menu_linked_contacts) {
+ return showRawContactPickerDialog();
+ } else if (id == R.id.menu_delete) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.REMOVE, /* thirdPartyAction */ null);
+ if (isContactEditable()) {
+ deleteContact();
+ }
+ } else if (id == R.id.menu_share) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.SHARE, /* thirdPartyAction */ null);
+ if (isContactShareable()) {
+ shareContact();
+ }
+ } else if (id == R.id.menu_create_contact_shortcut) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.SHORTCUT, /* thirdPartyAction */ null);
+ if (isShortcutCreatable()) {
+ createLauncherShortcutWithContact();
+ }
+ } else if (id == R.id.menu_set_ringtone) {
+ doPickRingtone();
+ } else if (id == R.id.menu_send_to_voicemail) {// Update state and save
+ mSendToVoicemailState = !mSendToVoicemailState;
+ item.setTitle(mSendToVoicemailState
+ ? R.string.menu_unredirect_calls_to_vm
+ : R.string.menu_redirect_calls_to_vm);
+ final Intent intent = ContactSaveService.createSetSendToVoicemail(
+ this, mLookupUri, mSendToVoicemailState);
+ this.startService(intent);
+ } else if (id == R.id.menu_help) {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.HELP, /* thirdPartyAction */ null);
+ HelpUtils.launchHelpAndFeedbackForContactScreen(this);
+ } else {
+ Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+ ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+ return super.onOptionsItemSelected(item);
+ }
+ return true;
+ }
+
+ private boolean showRawContactPickerDialog() {
+ if (mContactData == null) return false;
+ startActivityForResult(EditorIntents.createViewLinkedContactsIntent(
+ QuickContactActivity.this,
+ mContactData.getLookupUri(),
+ mHasComputedThemeColor
+ ? new MaterialPalette(mColorFilterColor, mStatusBarColor)
+ : null),
+ REQUEST_CODE_CONTACT_EDITOR_ACTIVITY);
+ return true;
+ }
+
+ private boolean doJoinContactAction() {
+ if (mContactData == null) return false;
+
+ mPreviousContactId = mContactData.getId();
+ final Intent intent = new Intent(this, ContactSelectionActivity.class);
+ intent.setAction(UiIntentActions.PICK_JOIN_CONTACT_ACTION);
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, mPreviousContactId);
+ startActivityForResult(intent, REQUEST_CODE_JOIN);
+ return true;
+ }
+
+ /**
+ * Performs aggregation with the contact selected by the user from suggestions or A-Z list.
+ */
+ private void joinAggregate(final long contactId) {
+ final Intent intent = ContactSaveService.createJoinContactsIntent(
+ this, mPreviousContactId, contactId, QuickContactActivity.class,
+ Intent.ACTION_VIEW);
+ this.startService(intent);
+ showLinkProgressBar();
+ }
+
+
+ private void doPickRingtone() {
+ final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
+ // Allow user to pick 'Default'
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
+ // Show only ringtones
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
+ // Allow the user to pick a silent ringtone
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
+
+ final Uri ringtoneUri = EditorUiUtils.getRingtoneUriFromString(mCustomRingtone,
+ CURRENT_API_VERSION);
+
+ // Put checkmark next to the current ringtone for this contact
+ intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
+
+ // Launch!
+ try {
+ startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(this, R.string.missing_app, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void dismissProgressBar() {
+ if (mProgressDialog != null && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
+ private void showLinkProgressBar() {
+ mProgressDialog.setMessage(getString(R.string.contacts_linking_progress_bar));
+ mProgressDialog.show();
+ }
+
+ private void showUnlinkProgressBar() {
+ mProgressDialog.setMessage(getString(R.string.contacts_unlinking_progress_bar));
+ mProgressDialog.show();
+ }
+
+ private void maybeShowProgressDialog() {
+ if (ContactSaveService.getState().isActionPending(
+ ContactSaveService.ACTION_SPLIT_CONTACT)) {
+ showUnlinkProgressBar();
+ } else if (ContactSaveService.getState().isActionPending(
+ ContactSaveService.ACTION_JOIN_CONTACTS)) {
+ showLinkProgressBar();
+ }
+ }
+
+ private class SaveServiceListener extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Got broadcast from save service " + intent);
+ }
+ if (ContactSaveService.BROADCAST_LINK_COMPLETE.equals(intent.getAction())
+ || ContactSaveService.BROADCAST_UNLINK_COMPLETE.equals(intent.getAction())) {
+ dismissProgressBar();
+ if (ContactSaveService.BROADCAST_UNLINK_COMPLETE.equals(intent.getAction())) {
+ finish();
}
- return true;
- case R.id.menu_help:
- HelpUtils.launchHelpAndFeedbackForContactScreen(this);
- return true;
- default:
- return super.onOptionsItemSelected(item);
+ }
}
}
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
index dae10affe..a032a99b4 100644
--- a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
+++ b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
@@ -16,14 +16,14 @@
package com.android.contacts.quickcontact;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.ContactsContract.QuickContact;
+import com.android.contacts.util.ImplicitIntentsUtil;
+
/**
* Broadcast receiver for invoking QuickContact using the widget. The purpose of this pass-through
* intent receiver is to disable the animation that RemoveViews typically do, which interfere
diff --git a/src/com/android/contacts/quickcontact/ResolveCache.java b/src/com/android/contacts/quickcontact/ResolveCache.java
index e6adaf353..303132cee 100644
--- a/src/com/android/contacts/quickcontact/ResolveCache.java
+++ b/src/com/android/contacts/quickcontact/ResolveCache.java
@@ -25,9 +25,9 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.text.TextUtils;
import com.android.contacts.util.PhoneCapabilityTester;
+
import com.google.common.collect.Sets;
import java.lang.ref.SoftReference;
diff --git a/src/com/android/contacts/quickcontact/WebAddress.java b/src/com/android/contacts/quickcontact/WebAddress.java
index d55a8740a..1b6ca193a 100644
--- a/src/com/android/contacts/quickcontact/WebAddress.java
+++ b/src/com/android/contacts/quickcontact/WebAddress.java
@@ -16,12 +16,12 @@
package com.android.contacts.quickcontact;
+import static android.util.Patterns.GOOD_IRI_CHAR;
+
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import static android.util.Patterns.GOOD_IRI_CHAR;
-
/**
* Below is a partial copy of {@link android.net.WebAddress}. The original author doesn't
* believe this API is suitable for making public. He recommends we copy it.
@@ -67,8 +67,6 @@ public class WebAddress {
throw new NullPointerException();
}
- // android.util.Log.d(LOGTAG, "WebAddress: " + address);
-
mScheme = "";
mHost = "";
mPort = -1;
diff --git a/src/com/android/contacts/testing/InjectedServices.java b/src/com/android/contacts/testing/InjectedServices.java
new file mode 100644
index 000000000..3822dd6ab
--- /dev/null
+++ b/src/com/android/contacts/testing/InjectedServices.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 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.testing;
+
+import android.content.ContentResolver;
+import android.content.SharedPreferences;
+
+import com.google.common.collect.Maps;
+
+import java.util.HashMap;
+
+/**
+ * A mechanism for providing alternative (mock) services to the application
+ * while running tests. Activities, Services and the Application should check
+ * with this class to see if a particular service has been overridden.
+ */
+public class InjectedServices {
+
+ private ContentResolver mContentResolver;
+ private SharedPreferences mSharedPreferences;
+ private HashMap<String, Object> mSystemServices;
+
+ public void setContentResolver(ContentResolver contentResolver) {
+ this.mContentResolver = contentResolver;
+ }
+
+ public ContentResolver getContentResolver() {
+ return mContentResolver;
+ }
+
+ public void setSharedPreferences(SharedPreferences sharedPreferences) {
+ this.mSharedPreferences = sharedPreferences;
+ }
+
+ public SharedPreferences getSharedPreferences() {
+ return mSharedPreferences;
+ }
+
+ public void setSystemService(String name, Object service) {
+ if (mSystemServices == null) {
+ mSystemServices = Maps.newHashMap();
+ }
+
+ mSystemServices.put(name, service);
+ }
+
+ public Object getSystemService(String name) {
+ if (mSystemServices != null) {
+ return mSystemServices.get(name);
+ }
+ return null;
+ }
+}
diff --git a/src/com/android/contacts/util/AccountFilterUtil.java b/src/com/android/contacts/util/AccountFilterUtil.java
new file mode 100644
index 000000000..54c16e2bd
--- /dev/null
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -0,0 +1,245 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.ActivityNotFoundException;
+import android.content.AsyncTaskLoader;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents;
+import android.support.v4.content.LocalBroadcastManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.list.AccountFilterActivity;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.android.contactsbind.ObjectFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utility class for account filter manipulation.
+ */
+public class AccountFilterUtil {
+ private static final String TAG = AccountFilterUtil.class.getSimpleName();
+
+ /**
+ * Launches account filter setting Activity using
+ * {@link Fragment#startActivityForResult(Intent, int)}.
+ *
+ * @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
+ * @param currentFilter currently-selected filter, so that it can be displayed as activated.
+ */
+ public static void startAccountFilterActivityForResult(
+ Fragment fragment, int requestCode, ContactListFilter currentFilter) {
+ final Activity activity = fragment.getActivity();
+ if (activity != null) {
+ final Intent intent = new Intent(activity, AccountFilterActivity.class);
+ fragment.startActivityForResult(intent, requestCode);
+ } else {
+ Log.w(TAG, "getActivity() returned null. Ignored");
+ }
+ }
+
+ /**
+ * Useful method to handle onActivityResult() for
+ * {@link #startAccountFilterActivityForResult(Fragment, int, ContactListFilter)}.
+ *
+ * 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 = (ContactListFilter)
+ data.getParcelableExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER);
+ if (filter == null) {
+ return;
+ }
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+ filterController.selectCustomFilter();
+ } else {
+ filterController.setContactListFilter(filter, /* persistent */
+ filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ }
+ }
+ }
+
+ /**
+ * Loads a list of contact list filters
+ */
+ public static class FilterLoader extends ListenableFutureLoader<List<ContactListFilter>> {
+ private AccountTypeManager mAccountTypeManager;
+ private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
+
+ public FilterLoader(Context context) {
+ super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+ mAccountTypeManager = AccountTypeManager.getInstance(context);
+ mDeviceLocalFactory = ObjectFactory.getDeviceLocalAccountTypeFactory(context);
+ }
+
+
+ @Override
+ protected ListenableFuture<List<ContactListFilter>> loadData() {
+ return Futures.transform(mAccountTypeManager.filterAccountsAsync(
+ AccountTypeManager.writableFilter()),
+ new Function<List<AccountInfo>, List<ContactListFilter>>() {
+ @Override
+ public List<ContactListFilter> apply(List<AccountInfo> input) {
+ return getFiltersForAccounts(input);
+ }
+ }, ContactsExecutors.getDefaultThreadPoolExecutor());
+ }
+
+ private List<ContactListFilter> getFiltersForAccounts(List<AccountInfo> accounts) {
+ final ArrayList<ContactListFilter> accountFilters = new ArrayList<>();
+ AccountInfo.sortAccounts(getDefaultAccount(getContext()), accounts);
+
+ for (AccountInfo accountInfo : accounts) {
+ final AccountType accountType = accountInfo.getType();
+ final AccountWithDataSet account = accountInfo.getAccount();
+ if ((accountType.isExtension() ||
+ DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+ mDeviceLocalFactory, account.type)) &&
+ !account.hasData(getContext())) {
+ // Hide extensions and device accounts with no raw_contacts.
+ continue;
+ }
+ final Drawable icon = accountType != null ?
+ accountType.getDisplayIcon(getContext()) : null;
+ if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+ mDeviceLocalFactory, account.type)) {
+ accountFilters.add(ContactListFilter.createDeviceContactsFilter(icon, account));
+ } else {
+ accountFilters.add(ContactListFilter.createAccountFilter(
+ account.type, account.name, account.dataSet, icon));
+ }
+ }
+
+ return accountFilters;
+ }
+ }
+
+ private static AccountWithDataSet getDefaultAccount(Context context) {
+ return new ContactsPreferences(context).getDefaultAccount();
+ }
+
+ /**
+ * Returns a {@link ContactListFilter} of type
+ * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
+ * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
+ */
+ public static ContactListFilter createContactsFilter(Context context) {
+ final int filterType =
+ ContactListFilterController.getInstance(context).isCustomFilterPersisted()
+ ? ContactListFilter.FILTER_TYPE_CUSTOM
+ : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+ return ContactListFilter.createFilterWithType(filterType);
+ }
+
+ /**
+ * Start editor intent; and if filter is an account filter, we pass account info to editor so
+ * as to create a contact in that account.
+ */
+ public static void startEditorIntent(Context context, Intent src, ContactListFilter filter) {
+ final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+ intent.putExtras(src);
+
+ // If we are in account view, we pass the account explicitly in order to
+ // create contact in the account. This will prevent the default account dialog
+ // from being displayed.
+ if (!isAllContactsFilter(filter) && filter.accountName != null
+ && filter.accountType != null) {
+ final Account account = new Account(filter.accountName, filter.accountType);
+ intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
+ intent.putExtra(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
+ } else if (isDeviceContactsFilter(filter)) {
+ intent.putExtra(ContactEditorActivity.EXTRA_ACCOUNT_WITH_DATA_SET,
+ filter.toAccountWithDataSet());
+ }
+
+ try {
+ ImplicitIntentsUtil.startActivityInApp(context, intent);
+ } catch (ActivityNotFoundException ex) {
+ Toast.makeText(context, R.string.missing_app, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ public static boolean isAllContactsFilter(ContactListFilter filter) {
+ return filter != null && filter.isContactsFilterType();
+ }
+
+ public static boolean isDeviceContactsFilter(ContactListFilter filter) {
+ return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
+ }
+
+ /**
+ * Returns action bar title for filter and returns default title "Contacts" if filter is empty.
+ */
+ public static String getActionBarTitleForFilter(Context context, ContactListFilter filter) {
+ if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+ return context.getString(R.string.account_phone);
+ } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT &&
+ !TextUtils.isEmpty(filter.accountName)) {
+ return getActionBarTitleForAccount(context, filter);
+ }
+ return context.getString(R.string.contactsList);
+ }
+
+ private static String getActionBarTitleForAccount(Context context, ContactListFilter filter) {
+ final AccountInfo info = AccountTypeManager.getInstance(context)
+ .getAccountInfoForAccount(filter.toAccountWithDataSet());
+ if (info == null) {
+ return context.getString(R.string.contactsList);
+ }
+
+ if (info.hasGoogleAccountType()) {
+ return context.getString(R.string.title_from_google);
+ }
+ return context.getString(R.string.title_from_other_accounts,
+ info.getNameLabel().toString());
+ }
+}
diff --git a/src/com/android/contacts/util/AccountSelectionUtil.java b/src/com/android/contacts/util/AccountSelectionUtil.java
new file mode 100644
index 000000000..bfe8a08b3
--- /dev/null
+++ b/src/com/android/contacts/util/AccountSelectionUtil.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.util.Log;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.vcard.ImportVCardActivity;
+
+import java.util.List;
+
+/**
+ * Utility class for selecting an Account for importing contact(s)
+ */
+public class AccountSelectionUtil {
+ // TODO: maybe useful for EditContactActivity.java...
+ private static final String LOG_TAG = "AccountSelectionUtil";
+
+ public static boolean mVCardShare = false;
+
+ public static Uri mPath;
+
+ public static class AccountSelectedListener
+ implements DialogInterface.OnClickListener {
+
+ final private Activity mActivity;
+ final private int mResId;
+ final private int mSubscriptionId;
+
+ final protected List<AccountWithDataSet> mAccountList;
+
+ public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
+ int resId, int subscriptionId) {
+ if (accountList == null || accountList.size() == 0) {
+ Log.e(LOG_TAG, "The size of Account list is 0.");
+ }
+ mActivity = activity;
+ mAccountList = accountList;
+ mResId = resId;
+ mSubscriptionId = subscriptionId;
+ }
+
+ public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
+ int resId) {
+ // Subscription id is only needed for importing from SIM card. We can safely ignore
+ // its value for SD card importing.
+ this(activity, accountList, resId, /* subscriptionId = */ -1);
+ }
+
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ doImport(mActivity, mResId, mAccountList.get(which), mSubscriptionId);
+ }
+ }
+
+ /**
+ * When OnClickListener or OnCancelListener is null, uses a default listener.
+ * The default OnCancelListener just closes itself with {@link Dialog#dismiss()}.
+ */
+ public static Dialog getSelectAccountDialog(Activity activity, int resId,
+ DialogInterface.OnClickListener onClickListener,
+ DialogInterface.OnCancelListener onCancelListener) {
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(activity);
+ final List<AccountWithDataSet> writableAccountList =
+ accountTypes.blockForWritableAccounts();
+
+ Log.i(LOG_TAG, "The number of available accounts: " + writableAccountList.size());
+
+ // Assume accountList.size() > 1
+
+ // Wrap our context to inflate list items using correct theme
+ final Context dialogContext = new ContextThemeWrapper(
+ activity, android.R.style.Theme_Light);
+ final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final ArrayAdapter<AccountWithDataSet> accountAdapter =
+ new ArrayAdapter<AccountWithDataSet>(
+ activity, R.layout.account_selector_list_item_condensed, writableAccountList) {
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = dialogInflater.inflate(
+ R.layout.account_selector_list_item_condensed,
+ parent, false);
+ }
+
+ final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
+ final TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);
+ final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
+
+ final AccountWithDataSet account = this.getItem(position);
+ final AccountType accountType = accountTypes.getAccountType(
+ account.type, account.dataSet);
+ final Context context = getContext();
+
+ text1.setText(accountType.getDisplayLabel(context));
+ text2.setText(account.name);
+ icon.setImageDrawable(accountType.getDisplayIcon(getContext()));
+
+ return convertView;
+ }
+ };
+
+ if (onClickListener == null) {
+ AccountSelectedListener accountSelectedListener =
+ new AccountSelectedListener(activity, writableAccountList, resId);
+ onClickListener = accountSelectedListener;
+ }
+ if (onCancelListener == null) {
+ onCancelListener = new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ dialog.dismiss();
+ }
+ };
+ }
+ final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ final TextView title = (TextView) View.inflate(activity, R.layout.dialog_title, null);
+ title.setText(R.string.dialog_new_contact_account);
+ builder.setCustomTitle(title);
+ builder.setSingleChoiceItems(accountAdapter, 0, onClickListener);
+ builder.setOnCancelListener(onCancelListener);
+ final AlertDialog result = builder.create();
+ return result;
+ }
+
+ public static void doImport(Activity activity, int resId, AccountWithDataSet account,
+ int subscriptionId) {
+ if (resId == R.string.import_from_sim) {
+ doImportFromSim(activity, account, subscriptionId);
+ } else if (resId == R.string.import_from_vcf_file) {
+ doImportFromVcfFile(activity, account);
+ }
+ }
+
+ public static void doImportFromSim(Context context, AccountWithDataSet account,
+ int subscriptionId) {
+ Intent importIntent = new Intent(Intent.ACTION_VIEW);
+ importIntent.setType("vnd.android.cursor.item/sim-contact");
+ if (account != null) {
+ importIntent.putExtra("account_name", account.name);
+ importIntent.putExtra("account_type", account.type);
+ importIntent.putExtra("data_set", account.dataSet);
+ }
+ importIntent.putExtra("subscription_id", (Integer) subscriptionId);
+ importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts");
+ context.startActivity(importIntent);
+ }
+
+ public static void doImportFromVcfFile(Activity activity, AccountWithDataSet account) {
+ Intent importIntent = new Intent(activity, ImportVCardActivity.class);
+ if (account != null) {
+ importIntent.putExtra("account_name", account.name);
+ importIntent.putExtra("account_type", account.type);
+ importIntent.putExtra("data_set", account.dataSet);
+ }
+
+ if (mVCardShare) {
+ importIntent.setAction(Intent.ACTION_VIEW);
+ importIntent.setData(mPath);
+ }
+ mVCardShare = false;
+ mPath = null;
+ activity.startActivityForResult(importIntent, 0);
+ }
+}
diff --git a/src/com/android/contacts/util/AccountsListAdapter.java b/src/com/android/contacts/util/AccountsListAdapter.java
new file mode 100644
index 000000000..2bcc68b84
--- /dev/null
+++ b/src/com/android/contacts/util/AccountsListAdapter.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 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.util;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * List-Adapter for Account selection
+ */
+public final class AccountsListAdapter extends BaseAdapter {
+ private final LayoutInflater mInflater;
+ private List<AccountInfo> mAccounts;
+ private int mCustomLayout = -1;
+
+ public AccountsListAdapter(Context context) {
+ this(context, Collections.<AccountInfo>emptyList(), null);
+ }
+
+ public AccountsListAdapter(Context context, List<AccountInfo> accounts) {
+ this(context, accounts, null);
+ }
+
+ /**
+ * @param currentAccount the Account currently selected by the user, which should come
+ * first in the list. Can be null.
+ */
+ public AccountsListAdapter(Context context, List<AccountInfo> accounts,
+ AccountWithDataSet currentAccount) {
+ mInflater = LayoutInflater.from(context);
+
+ mAccounts = new ArrayList<>(accounts.size());
+ setAccounts(accounts, currentAccount);
+ }
+
+ public void setAccounts(List<AccountInfo> accounts, AccountWithDataSet currentAccount) {
+ // If it's not empty use the previous "current" account (the first one in the list)
+ final AccountInfo currentInfo = mAccounts.isEmpty()
+ ? AccountInfo.getAccount(accounts, currentAccount)
+ : AccountInfo.getAccount(accounts, mAccounts.get(0).getAccount());
+
+ mAccounts.clear();
+ mAccounts.addAll(accounts);
+
+ if (currentInfo != null
+ && !mAccounts.isEmpty()
+ && !mAccounts.get(0).sameAccount(currentAccount)
+ && mAccounts.remove(currentInfo)) {
+ mAccounts.add(0, currentInfo);
+ }
+ notifyDataSetChanged();
+ }
+
+ public void setCustomLayout(int customLayout) {
+ mCustomLayout = customLayout;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final View resultView = convertView != null ? convertView :
+ mInflater.inflate(mCustomLayout > 0 ? mCustomLayout :
+ R.layout.account_selector_list_item_condensed, parent, false);
+
+ final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
+ final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
+ final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
+
+ text1.setText(mAccounts.get(position).getTypeLabel());
+ text2.setText(mAccounts.get(position).getNameLabel());
+
+ icon.setImageDrawable(mAccounts.get(position).getIcon());
+
+ return resultView;
+ }
+
+ @Override
+ public int getCount() {
+ return mAccounts.size();
+ }
+
+ @Override
+ public AccountWithDataSet getItem(int position) {
+ return mAccounts.get(position).getAccount();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+}
+
diff --git a/src/com/android/contacts/util/BitmapUtil.java b/src/com/android/contacts/util/BitmapUtil.java
new file mode 100644
index 000000000..0bc4aef1a
--- /dev/null
+++ b/src/com/android/contacts/util/BitmapUtil.java
@@ -0,0 +1,181 @@
+/*
+ * 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.util;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+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 {
+ private BitmapUtil() {}
+
+ /**
+ * Returns Width or Height of the picture, depending on which size is smaller. Doesn't actually
+ * decode the picture, so it is pretty efficient to run.
+ */
+ public static int getSmallerExtentFromBytes(byte[] bytes) {
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+
+ // don't actually decode the picture, just return its bounds
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
+
+ // test what the best sample size is
+ return Math.min(options.outWidth, options.outHeight);
+ }
+
+ /**
+ * Finds the optimal sampleSize for loading the picture
+ * @param originalSmallerExtent Width or height of the picture, whichever is smaller
+ * @param targetExtent Width or height of the target view, whichever is bigger.
+ *
+ * If either one of the parameters is 0 or smaller, no sampling is applied
+ */
+ public static int findOptimalSampleSize(int originalSmallerExtent, int targetExtent) {
+ // If we don't know sizes, we can't do sampling.
+ if (targetExtent < 1) return 1;
+ if (originalSmallerExtent < 1) return 1;
+
+ // Test what the best sample size is. To do that, we find the sample size that gives us
+ // the best trade-off between resulting image size and memory requirement. We allow
+ // the down-sampled image to be 20% smaller than the target size. That way we can get around
+ // unfortunate cases where e.g. a 720 picture is requested for 362 and not down-sampled at
+ // all. Why 20%? Why not. Prove me wrong.
+ int extent = originalSmallerExtent;
+ int sampleSize = 1;
+ while ((extent >> 1) >= targetExtent * 0.8f) {
+ sampleSize <<= 1;
+ extent >>= 1;
+ }
+
+ return sampleSize;
+ }
+
+ /**
+ * Decodes the bitmap with the given sample size
+ */
+ public static Bitmap decodeBitmapFromBytes(byte[] bytes, int sampleSize) {
+ final BitmapFactory.Options options;
+ if (sampleSize <= 1) {
+ options = null;
+ } else {
+ options = new BitmapFactory.Options();
+ options.inSampleSize = sampleSize;
+ }
+ 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.
+ *
+ * @param input {@link Bitmap} to scale and crop
+ * @param targetWidth desired output width
+ * @param targetHeight desired output height
+ * @return output bitmap scaled to the target width/height and cropped to an oval. The
+ * cropping algorithm will try to fit as much of the input into the output as possible,
+ * while preserving the target width/height ratio.
+ */
+ public static Bitmap getRoundedBitmap(Bitmap input, int targetWidth, int targetHeight) {
+ if (input == null) {
+ return null;
+ }
+ final Bitmap.Config inputConfig = input.getConfig();
+ final Bitmap result = Bitmap.createBitmap(targetWidth, targetHeight,
+ inputConfig != null ? inputConfig : Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(result);
+ final Paint paint = new Paint();
+ canvas.drawARGB(0, 0, 0, 0);
+ paint.setAntiAlias(true);
+ final RectF dst = new RectF(0, 0, targetWidth, targetHeight);
+ canvas.drawOval(dst, paint);
+
+ // Specifies that only pixels present in the destination (i.e. the drawn oval) should
+ // be overwritten with pixels from the input bitmap.
+ paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
+
+ final int inputWidth = input.getWidth();
+ final int inputHeight = input.getHeight();
+
+ // Choose the largest scale factor that will fit inside the dimensions of the
+ // input bitmap.
+ final float scaleBy = Math.min((float) inputWidth / targetWidth,
+ (float) inputHeight / targetHeight);
+
+ final int xCropAmountHalved = (int) (scaleBy * targetWidth / 2);
+ final int yCropAmountHalved = (int) (scaleBy * targetHeight / 2);
+
+ final Rect src = new Rect(
+ inputWidth / 2 - xCropAmountHalved,
+ inputHeight / 2 - yCropAmountHalved,
+ inputWidth / 2 + xCropAmountHalved,
+ inputHeight / 2 + yCropAmountHalved);
+
+ canvas.drawBitmap(input, src, dst, paint);
+ return result;
+ }
+
+ /**
+ * Converts a drawable to a bitmap.
+ */
+ public static Bitmap drawableToBitmap(Drawable drawable, int avatarSizePx) {
+ if (drawable instanceof BitmapDrawable) {
+ return ((BitmapDrawable) drawable).getBitmap();
+ }
+
+ final Bitmap bitmap =
+ Bitmap.createBitmap(avatarSizePx, avatarSizePx, Bitmap.Config.ARGB_8888);
+
+ final Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ return bitmap;
+ }
+}
diff --git a/src/com/android/contacts/util/CommonDateUtils.java b/src/com/android/contacts/util/CommonDateUtils.java
new file mode 100644
index 000000000..6be63028f
--- /dev/null
+++ b/src/com/android/contacts/util/CommonDateUtils.java
@@ -0,0 +1,41 @@
+/*
+ * 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.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+/**
+ * Common date utilities.
+ */
+public class CommonDateUtils {
+
+ // All the SimpleDateFormats in this class use the UTC timezone
+ public static final SimpleDateFormat NO_YEAR_DATE_FORMAT =
+ new SimpleDateFormat("--MM-dd", Locale.US);
+ public static final SimpleDateFormat FULL_DATE_FORMAT =
+ new SimpleDateFormat("yyyy-MM-dd", Locale.US);
+ public static final SimpleDateFormat DATE_AND_TIME_FORMAT =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+ public static final SimpleDateFormat NO_YEAR_DATE_AND_TIME_FORMAT =
+ new SimpleDateFormat("--MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+
+ /**
+ * Exchange requires 8:00 for birthdays
+ */
+ public final static int DEFAULT_HOUR = 8;
+}
diff --git a/src/com/android/contacts/util/Constants.java b/src/com/android/contacts/util/Constants.java
new file mode 100644
index 000000000..e4ca02711
--- /dev/null
+++ b/src/com/android/contacts/util/Constants.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+public class Constants {
+
+ /**
+ * Log tag for performance measurement.
+ * To enable: adb shell setprop log.tag.ContactsPerf VERBOSE
+ */
+ public static final String PERFORMANCE_TAG = "ContactsPerf";
+
+ // Used for lookup URI that contains an encoded JSON string.
+ public static final String LOOKUP_URI_ENCODED = "encoded";
+}
diff --git a/src/com/android/contacts/util/ContactDisplayUtils.java b/src/com/android/contacts/util/ContactDisplayUtils.java
new file mode 100644
index 000000000..67b8e07e1
--- /dev/null
+++ b/src/com/android/contacts/util/ContactDisplayUtils.java
@@ -0,0 +1,297 @@
+/*
+ * 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.util;
+
+import static android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import android.content.Context;
+import android.content.res.Resources;
+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.R;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.preference.ContactsPreferences;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * Methods for handling various contact data labels.
+ */
+public class ContactDisplayUtils {
+
+ private static final String TAG = ContactDisplayUtils.class.getSimpleName();
+
+ public static final int INTERACTION_CALL = 1;
+ public static final int INTERACTION_SMS = 2;
+
+ /**
+ * Checks if the given data type is a custom type.
+ *
+ * @param type Phone data type.
+ * @return {@literal true} if the type is custom. {@literal false} if not.
+ */
+ public static boolean isCustomPhoneType(Integer type) {
+ return type == Phone.TYPE_CUSTOM || type == Phone.TYPE_ASSISTANT;
+ }
+
+ /**
+ * Gets a display label for a given phone type.
+ *
+ * @param type The type of number.
+ * @param customLabel A custom label to use if the phone is determined to be of custom type
+ * determined by {@link #isCustomPhoneType(Integer))}
+ * @param interactionType whether this is a call or sms. Either {@link #INTERACTION_CALL} or
+ * {@link #INTERACTION_SMS}.
+ * @param context The application context.
+ * @return An appropriate string label
+ */
+ public static CharSequence getLabelForCallOrSms(Integer type, CharSequence customLabel,
+ int interactionType, Context context) {
+ Preconditions.checkNotNull(context);
+
+ if (isCustomPhoneType(type)) {
+ return (customLabel == null) ? "" : customLabel;
+ } else {
+ int resId;
+ if (interactionType == INTERACTION_SMS) {
+ resId = getSmsLabelResourceId(type);
+ } else {
+ resId = getPhoneLabelResourceId(type);
+ if (interactionType != INTERACTION_CALL) {
+ Log.e(TAG, "Un-recognized interaction type: " + interactionType +
+ ". Defaulting to ContactDisplayUtils.INTERACTION_CALL.");
+ }
+ }
+
+ return context.getResources().getText(resId);
+ }
+ }
+
+ /**
+ * Find a label for calling.
+ *
+ * @param type The type of number.
+ * @return An appropriate string label.
+ */
+ public static int getPhoneLabelResourceId(Integer type) {
+ if (type == null) return R.string.call_other;
+ switch (type) {
+ case Phone.TYPE_HOME:
+ return R.string.call_home;
+ case Phone.TYPE_MOBILE:
+ return R.string.call_mobile;
+ case Phone.TYPE_WORK:
+ return R.string.call_work;
+ case Phone.TYPE_FAX_WORK:
+ return R.string.call_fax_work;
+ case Phone.TYPE_FAX_HOME:
+ return R.string.call_fax_home;
+ case Phone.TYPE_PAGER:
+ return R.string.call_pager;
+ case Phone.TYPE_OTHER:
+ return R.string.call_other;
+ case Phone.TYPE_CALLBACK:
+ return R.string.call_callback;
+ case Phone.TYPE_CAR:
+ return R.string.call_car;
+ case Phone.TYPE_COMPANY_MAIN:
+ return R.string.call_company_main;
+ case Phone.TYPE_ISDN:
+ return R.string.call_isdn;
+ case Phone.TYPE_MAIN:
+ return R.string.call_main;
+ case Phone.TYPE_OTHER_FAX:
+ return R.string.call_other_fax;
+ case Phone.TYPE_RADIO:
+ return R.string.call_radio;
+ case Phone.TYPE_TELEX:
+ return R.string.call_telex;
+ case Phone.TYPE_TTY_TDD:
+ return R.string.call_tty_tdd;
+ case Phone.TYPE_WORK_MOBILE:
+ return R.string.call_work_mobile;
+ case Phone.TYPE_WORK_PAGER:
+ return R.string.call_work_pager;
+ case Phone.TYPE_ASSISTANT:
+ return R.string.call_assistant;
+ case Phone.TYPE_MMS:
+ return R.string.call_mms;
+ default:
+ return R.string.call_custom;
+ }
+
+ }
+
+ /**
+ * Find a label for sending an sms.
+ *
+ * @param type The type of number.
+ * @return An appropriate string label.
+ */
+ public static int getSmsLabelResourceId(Integer type) {
+ if (type == null) return R.string.sms_other;
+ switch (type) {
+ case Phone.TYPE_HOME:
+ return R.string.sms_home;
+ case Phone.TYPE_MOBILE:
+ return R.string.sms_mobile;
+ case Phone.TYPE_WORK:
+ return R.string.sms_work;
+ case Phone.TYPE_FAX_WORK:
+ return R.string.sms_fax_work;
+ case Phone.TYPE_FAX_HOME:
+ return R.string.sms_fax_home;
+ case Phone.TYPE_PAGER:
+ return R.string.sms_pager;
+ case Phone.TYPE_OTHER:
+ return R.string.sms_other;
+ case Phone.TYPE_CALLBACK:
+ return R.string.sms_callback;
+ case Phone.TYPE_CAR:
+ return R.string.sms_car;
+ case Phone.TYPE_COMPANY_MAIN:
+ return R.string.sms_company_main;
+ case Phone.TYPE_ISDN:
+ return R.string.sms_isdn;
+ case Phone.TYPE_MAIN:
+ return R.string.sms_main;
+ case Phone.TYPE_OTHER_FAX:
+ return R.string.sms_other_fax;
+ case Phone.TYPE_RADIO:
+ return R.string.sms_radio;
+ case Phone.TYPE_TELEX:
+ return R.string.sms_telex;
+ case Phone.TYPE_TTY_TDD:
+ return R.string.sms_tty_tdd;
+ case Phone.TYPE_WORK_MOBILE:
+ return R.string.sms_work_mobile;
+ case Phone.TYPE_WORK_PAGER:
+ return R.string.sms_work_pager;
+ case Phone.TYPE_ASSISTANT:
+ return R.string.sms_assistant;
+ case Phone.TYPE_MMS:
+ return R.string.sms_mms;
+ default:
+ return R.string.sms_custom;
+ }
+ }
+
+ /**
+ * Whether the given text could be a phone number.
+ *
+ * Note this will miss many things that are legitimate phone numbers, for example,
+ * phone numbers with letters.
+ */
+ public static boolean isPossiblePhoneNumber(CharSequence text) {
+ return text == null ? false : Patterns.PHONE.matcher(text.toString()).matches();
+ }
+
+ /**
+ * Returns a Spannable for the given message with a telephone {@link TtsSpan} set for
+ * the given phone number text wherever it is found within the message.
+ */
+ public static Spannable getTelephoneTtsSpannable(String message, String phoneNumber) {
+ if (message == null) {
+ return null;
+ }
+ final Spannable spannable = new SpannableString(message);
+ int start = phoneNumber == null ? -1 : message.indexOf(phoneNumber);
+ while (start >= 0) {
+ final int end = start + phoneNumber.length();
+ final TtsSpan ttsSpan = PhoneNumberUtilsCompat.createTtsSpan(phoneNumber);
+ spannable.setSpan(ttsSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // this is consistenly done in a misleading way..
+ start = message.indexOf(phoneNumber, end);
+ }
+ return spannable;
+ }
+
+ /**
+ * Retrieves a string from a string template that takes 1 phone number as argument,
+ * span the number with a telephone {@link TtsSpan}, and return the spanned string.
+ *
+ * @param resources to retrieve the string from
+ * @param stringId ID of the string
+ * @param number to pass in the template
+ * @return CharSequence with the phone number wrapped in a TtsSpan
+ */
+ public static CharSequence getTtsSpannedPhoneNumber(Resources resources,
+ int stringId, String number){
+ String msg = resources.getString(stringId, number);
+ return ContactDisplayUtils.getTelephoneTtsSpannable(msg, number);
+ }
+
+ /**
+ * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+ * Defaults to the name that is non-null.
+ *
+ * @param namePrimary the primary name.
+ * @param nameAlternative the alternative name.
+ * @param contactsPreferences the ContactsPreferences used to determine the preferred
+ * display name.
+ * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
+ */
+ public static String getPreferredDisplayName(String namePrimary, String nameAlternative,
+ @Nullable ContactsPreferences contactsPreferences) {
+ if (contactsPreferences == null) {
+ return namePrimary != null ? namePrimary : nameAlternative;
+ }
+ if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+ return namePrimary;
+ }
+
+ if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE
+ && !TextUtils.isEmpty(nameAlternative)) {
+ return nameAlternative;
+ }
+
+ return namePrimary;
+ }
+
+ /**
+ * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+ * Defaults to the name that is non-null.
+ *
+ * @param namePrimary the primary name.
+ * @param nameAlternative the alternative name.
+ * @param contactsPreferences the ContactsPreferences used to determine the preferred sort
+ * order.
+ * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
+ */
+ public static String getPreferredSortName(String namePrimary, String nameAlternative,
+ @Nullable ContactsPreferences contactsPreferences) {
+ if (contactsPreferences == null) {
+ return namePrimary != null ? namePrimary : nameAlternative;
+ }
+
+ if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+ return namePrimary;
+ }
+
+ if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
+ !TextUtils.isEmpty(nameAlternative)) {
+ return nameAlternative;
+ }
+
+ return namePrimary;
+ }
+}
diff --git a/src/com/android/contacts/util/ContactLoaderUtils.java b/src/com/android/contacts/util/ContactLoaderUtils.java
new file mode 100644
index 000000000..91c683fcd
--- /dev/null
+++ b/src/com/android/contacts/util/ContactLoaderUtils.java
@@ -0,0 +1,78 @@
+/*
+ * 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.util;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.net.Uri;
+import android.provider.Contacts;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+
+/**
+ * Utility methods for the {@link ContactLoader}.
+ */
+public final class ContactLoaderUtils {
+
+ /** Static helper, not instantiable. */
+ private ContactLoaderUtils() {}
+
+ /**
+ * Transforms the given Uri and returns a Lookup-Uri that represents the contact.
+ * For legacy contacts, a raw-contact lookup is performed. An {@link IllegalArgumentException}
+ * can be thrown if the URI is null or the authority is not recognized.
+ *
+ * Do not call from the UI thread.
+ */
+ @SuppressWarnings("deprecation")
+ public static Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri)
+ throws IllegalArgumentException {
+ if (uri == null) throw new IllegalArgumentException("uri must not be null");
+
+ final String authority = uri.getAuthority();
+
+ // Current Style Uri?
+ if (ContactsContract.AUTHORITY.equals(authority)) {
+ final String type = resolver.getType(uri);
+ // Contact-Uri? Good, return it
+ if (ContactsContract.Contacts.CONTENT_ITEM_TYPE.equals(type)) {
+ return uri;
+ }
+
+ // RawContact-Uri? Transform it to ContactUri
+ if (RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
+ final long rawContactId = ContentUris.parseId(uri);
+ return RawContacts.getContactLookupUri(resolver,
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+ }
+
+ // Anything else? We don't know what this is
+ throw new IllegalArgumentException("uri format is unknown");
+ }
+
+ // Legacy Style? Convert to RawContact
+ final String OBSOLETE_AUTHORITY = Contacts.AUTHORITY;
+ if (OBSOLETE_AUTHORITY.equals(authority)) {
+ // Legacy Format. Convert to RawContact-Uri and then lookup the contact
+ final long rawContactId = ContentUris.parseId(uri);
+ return RawContacts.getContactLookupUri(resolver,
+ ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+ }
+
+ throw new IllegalArgumentException("uri authority is unknown");
+ }
+}
diff --git a/src/com/android/contacts/util/ContactPhotoUtils.java b/src/com/android/contacts/util/ContactPhotoUtils.java
index ce691c3b7..943f5ddd9 100644
--- a/src/com/android/contacts/util/ContactPhotoUtils.java
+++ b/src/com/android/contacts/util/ContactPhotoUtils.java
@@ -23,12 +23,12 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
-import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.content.FileProvider;
import android.util.Log;
import com.android.contacts.R;
+
import com.google.common.io.Closeables;
import java.io.ByteArrayOutputStream;
@@ -162,7 +162,9 @@ public class ContactPhotoUtils {
outputStream.write(buffer, 0, length);
totalLength += length;
}
- Log.v(TAG, "Wrote " + totalLength + " bytes for photo " + inputUri.toString());
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Wrote " + totalLength + " bytes for photo " + inputUri.toString());
+ }
} catch (IOException | NullPointerException e) {
Log.e(TAG, "Failed to write photo: " + inputUri.toString() + " because: " + e);
return false;
diff --git a/src/com/android/contacts/util/ContactsNotificationChannelsUtil.java b/src/com/android/contacts/util/ContactsNotificationChannelsUtil.java
new file mode 100644
index 000000000..fec3bda30
--- /dev/null
+++ b/src/com/android/contacts/util/ContactsNotificationChannelsUtil.java
@@ -0,0 +1,44 @@
+/*
+ * 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.contacts.util;
+
+import android.annotation.TargetApi;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Build;
+import android.support.v4.os.BuildCompat;
+
+import com.android.contacts.R;
+
+@TargetApi(Build.VERSION_CODES.O)
+public class ContactsNotificationChannelsUtil {
+ public static String DEFAULT_CHANNEL = "DEFAULT_CHANNEL";
+
+ private ContactsNotificationChannelsUtil() {}
+
+ public static void createDefaultChannel(Context context) {
+ if (!BuildCompat.isAtLeastO()) {
+ return;
+ }
+ final NotificationManager nm = context.getSystemService(NotificationManager.class);
+ final NotificationChannel channel = new NotificationChannel(DEFAULT_CHANNEL,
+ context.getString(R.string.contacts_default_notification_channel),
+ NotificationManager.IMPORTANCE_LOW);
+ nm.createNotificationChannel(channel);
+ }
+}
diff --git a/src/com/android/contacts/util/DataStatus.java b/src/com/android/contacts/util/DataStatus.java
new file mode 100644
index 000000000..f26761503
--- /dev/null
+++ b/src/com/android/contacts/util/DataStatus.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.Data;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+
+import com.android.contacts.R;
+
+/**
+ * Storage for a social status update. Holds a single update, but can use
+ * {@link #possibleUpdate(Cursor)} to consider updating when a better status
+ * exists. Statuses with timestamps, or with newer timestamps win.
+ */
+public class DataStatus {
+ private int mPresence = -1;
+ private String mStatus = null;
+ private long mTimestamp = -1;
+
+ private String mResPackage = null;
+ private int mIconRes = -1;
+ private int mLabelRes = -1;
+
+ public DataStatus() {
+ }
+
+ public DataStatus(Cursor cursor) {
+ // When creating from cursor row, fill normally
+ fromCursor(cursor);
+ }
+
+ /**
+ * Attempt updating this {@link DataStatus} based on values at the
+ * current row of the given {@link Cursor}.
+ */
+ public void possibleUpdate(Cursor cursor) {
+ final boolean hasStatus = !isNull(cursor, Data.STATUS);
+ final boolean hasTimestamp = !isNull(cursor, Data.STATUS_TIMESTAMP);
+
+ // Bail early when not valid status, or when previous status was
+ // found and we can't compare this one.
+ if (!hasStatus) return;
+ if (isValid() && !hasTimestamp) return;
+
+ if (hasTimestamp) {
+ // Compare timestamps and bail if older status
+ final long newTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
+ if (newTimestamp < mTimestamp) return;
+
+ mTimestamp = newTimestamp;
+ }
+
+ // Fill in remaining details from cursor
+ fromCursor(cursor);
+ }
+
+ private void fromCursor(Cursor cursor) {
+ mPresence = getInt(cursor, Data.PRESENCE, -1);
+ mStatus = getString(cursor, Data.STATUS);
+ mTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
+ mResPackage = getString(cursor, Data.STATUS_RES_PACKAGE);
+ mIconRes = getInt(cursor, Data.STATUS_ICON, -1);
+ mLabelRes = getInt(cursor, Data.STATUS_LABEL, -1);
+ }
+
+ public boolean isValid() {
+ return !TextUtils.isEmpty(mStatus);
+ }
+
+ public int getPresence() {
+ return mPresence;
+ }
+
+ public CharSequence getStatus() {
+ return mStatus;
+ }
+
+ public long getTimestamp() {
+ return mTimestamp;
+ }
+
+ /**
+ * Build any timestamp and label into a single string.
+ */
+ public CharSequence getTimestampLabel(Context context) {
+ final PackageManager pm = context.getPackageManager();
+
+ // Use local package for resources when none requested
+ if (mResPackage == null) mResPackage = context.getPackageName();
+
+ final boolean validTimestamp = mTimestamp > 0;
+ final boolean validLabel = mResPackage != null && mLabelRes != -1;
+
+ final CharSequence timeClause = validTimestamp ? DateUtils.getRelativeTimeSpanString(
+ mTimestamp, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS,
+ DateUtils.FORMAT_ABBREV_RELATIVE) : null;
+ final CharSequence labelClause = validLabel ? pm.getText(mResPackage, mLabelRes,
+ null) : null;
+
+ if (validTimestamp && validLabel) {
+ return context.getString(
+ R.string.contact_status_update_attribution_with_date,
+ timeClause, labelClause);
+ } else if (validLabel) {
+ return context.getString(
+ R.string.contact_status_update_attribution,
+ labelClause);
+ } else if (validTimestamp) {
+ return timeClause;
+ } else {
+ return null;
+ }
+ }
+
+ public Drawable getIcon(Context context) {
+ final PackageManager pm = context.getPackageManager();
+
+ // Use local package for resources when none requested
+ if (mResPackage == null) mResPackage = context.getPackageName();
+
+ final boolean validIcon = mResPackage != null && mIconRes != -1;
+ return validIcon ? pm.getDrawable(mResPackage, mIconRes, null) : null;
+ }
+
+ private static String getString(Cursor cursor, String columnName) {
+ return cursor.getString(cursor.getColumnIndex(columnName));
+ }
+
+ private static int getInt(Cursor cursor, String columnName) {
+ return cursor.getInt(cursor.getColumnIndex(columnName));
+ }
+
+ private static int getInt(Cursor cursor, String columnName, int missingValue) {
+ final int columnIndex = cursor.getColumnIndex(columnName);
+ return cursor.isNull(columnIndex) ? missingValue : cursor.getInt(columnIndex);
+ }
+
+ private static long getLong(Cursor cursor, String columnName, long missingValue) {
+ final int columnIndex = cursor.getColumnIndex(columnName);
+ return cursor.isNull(columnIndex) ? missingValue : cursor.getLong(columnIndex);
+ }
+
+ private static boolean isNull(Cursor cursor, String columnName) {
+ return cursor.isNull(cursor.getColumnIndex(columnName));
+ }
+}
diff --git a/src/com/android/contacts/util/DateUtils.java b/src/com/android/contacts/util/DateUtils.java
new file mode 100644
index 000000000..c4607823b
--- /dev/null
+++ b/src/com/android/contacts/util/DateUtils.java
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2010 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.util;
+
+import android.content.Context;
+import android.text.format.DateFormat;
+
+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();
+ }
+}
diff --git a/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java b/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java
new file mode 100644
index 000000000..59ee7e5d3
--- /dev/null
+++ b/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java
@@ -0,0 +1,79 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.support.annotation.IntDef;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.DeviceLocalAccountType;
+
+import java.lang.annotation.Retention;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Reports whether a value from RawContacts.ACCOUNT_TYPE should be considered a "Device"
+ * account
+ */
+public interface DeviceLocalAccountTypeFactory {
+
+ @Retention(SOURCE)
+ @IntDef({TYPE_OTHER, TYPE_DEVICE, TYPE_SIM})
+ @interface LocalAccountType {}
+ static final int TYPE_OTHER = 0;
+ static final int TYPE_DEVICE = 1;
+ static final int TYPE_SIM = 2;
+
+ @DeviceLocalAccountTypeFactory.LocalAccountType int classifyAccount(String accountType);
+
+ AccountType getAccountType(String accountType);
+
+ class Util {
+ private Util() { }
+
+ public static boolean isLocalAccountType(@LocalAccountType int type) {
+ return type == TYPE_SIM || type == TYPE_DEVICE;
+ }
+
+ public static boolean isLocalAccountType(DeviceLocalAccountTypeFactory factory,
+ String type) {
+
+ return isLocalAccountType(factory.classifyAccount(type));
+ }
+ }
+
+ class Default implements DeviceLocalAccountTypeFactory {
+ private Context mContext;
+
+ public Default(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public int classifyAccount(String accountType) {
+ return accountType == null ? TYPE_DEVICE : TYPE_OTHER;
+ }
+
+ @Override
+ public AccountType getAccountType(String accountType) {
+ if (accountType != null) {
+ throw new IllegalArgumentException(accountType + " is not a device account type.");
+ }
+ return new DeviceLocalAccountType(mContext);
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/EmptyService.java b/src/com/android/contacts/util/EmptyService.java
new file mode 100644
index 000000000..2e6a159bf
--- /dev/null
+++ b/src/com/android/contacts/util/EmptyService.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+/**
+ * Background {@link Service} that is used to keep our process alive long enough
+ * for background threads to finish. Started and stopped directly by specific
+ * background tasks when needed.
+ */
+public class EmptyService extends Service {
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+}
diff --git a/src/com/android/contacts/util/ImageViewDrawableSetter.java b/src/com/android/contacts/util/ImageViewDrawableSetter.java
index 6147c3975..b90cf1f02 100644
--- a/src/com/android/contacts/util/ImageViewDrawableSetter.java
+++ b/src/com/android/contacts/util/ImageViewDrawableSetter.java
@@ -26,10 +26,10 @@ import android.media.ThumbnailUtils;
import android.text.TextUtils;
import android.widget.ImageView;
-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.model.Contact;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.model.Contact;
import java.util.Arrays;
diff --git a/src/com/android/contacts/util/ImplicitIntentsUtil.java b/src/com/android/contacts/util/ImplicitIntentsUtil.java
new file mode 100644
index 000000000..0d00519f2
--- /dev/null
+++ b/src/com/android/contacts/util/ImplicitIntentsUtil.java
@@ -0,0 +1,231 @@
+/*
+ * 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.util;
+
+import static com.android.contacts.ShortcutIntentBuilder.INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.QuickContact;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.quickcontact.QuickContactActivity;
+
+import java.util.List;
+
+/**
+ * Utility for forcing intents to be started inside the current app. This is useful for avoiding
+ * senseless disambiguation dialogs. Ie, if a user clicks a contact inside Contacts we assume
+ * they want to view the contact inside the Contacts app as opposed to a 3rd party contacts app.
+ *
+ * Methods are designed to replace the use of startActivity() for implicit intents. This class isn't
+ * necessary for explicit intents. No attempt is made to replace startActivityForResult(), since
+ * startActivityForResult() is always used with explicit intents in this project.
+ *
+ * Why not just always use explicit intents? The Contacts/Dialer app implements standard intent
+ * actions used by others apps. We want to continue exercising these intent filters to make sure
+ * they still work. Plus we sometimes don't know an explicit intent would work. See
+ * {@link #startActivityInAppIfPossible}.
+ *
+ * Some ContactsCommon code that is only used by Dialer doesn't use ImplicitIntentsUtil.
+ */
+public class ImplicitIntentsUtil {
+
+ /**
+ * Start an intent. If it is possible for this app to handle the intent, force this app's
+ * activity to handle the intent. Sometimes it is impossible to know whether this app
+ * can handle an intent while coding since the code is used inside both Dialer and Contacts.
+ * This method is particularly useful in such circumstances.
+ *
+ * On a Nexus 5 with a small number of apps, this method consistently added 3-16ms of delay
+ * in order to talk to the package manager.
+ */
+ public static void startActivityInAppIfPossible(Context context, Intent intent) {
+ final Intent appIntent = getIntentInAppIfExists(context, intent);
+ if (appIntent != null) {
+ context.startActivity(appIntent);
+ } else {
+ context.startActivity(intent);
+ }
+ }
+
+ /**
+ * Start intent using an activity inside this app. This method is useful if you are certain
+ * that the intent can be handled inside this app, and you care about shaving milliseconds.
+ */
+ public static void startActivityInApp(Context context, Intent intent) {
+ String packageName = context.getPackageName();
+ intent.setPackage(packageName);
+ context.startActivity(intent);
+ }
+
+ /**
+ * Start an intent normally. Assert that the intent can't be opened inside this app.
+ */
+ public static void startActivityOutsideApp(Context context, Intent intent) {
+ final boolean isPlatformDebugBuild = Build.TYPE.equals("eng")
+ || Build.TYPE.equals("userdebug");
+ if (isPlatformDebugBuild) {
+ if (getIntentInAppIfExists(context, intent) != null) {
+ throw new AssertionError("startActivityOutsideApp() was called for an intent" +
+ " that can be handled inside the app");
+ }
+ }
+ context.startActivity(intent);
+ }
+
+ /**
+ * Starts QuickContact in app with the default mode and specified previous screen type.
+ */
+ public static void startQuickContact(Activity activity, Uri contactLookupUri,
+ int previousScreenType) {
+ startQuickContact(activity, contactLookupUri, previousScreenType, /* requestCode */ -1);
+ }
+
+ /**
+ * Starts QuickContact for result with the default mode and specified previous screen type.
+ */
+ public static void startQuickContactForResult(Activity activity, Uri contactLookupUri,
+ int previousScreenType, int requestCode) {
+ startQuickContact(activity, contactLookupUri, previousScreenType, requestCode);
+ }
+
+ private static void startQuickContact(Activity activity, Uri contactLookupUri,
+ int previousScreenType, int requestCode) {
+ final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
+ activity, contactLookupUri, previousScreenType);
+
+ // We only start "for result" if specifically requested.
+ if (requestCode >= 0) {
+ intent.setPackage(activity.getPackageName());
+ activity.startActivityForResult(intent, requestCode);
+ } else {
+ startActivityInApp(activity, intent);
+ }
+ }
+
+ /**
+ * Returns an implicit intent for opening QuickContacts with the default mode and specified
+ * previous screen type.
+ */
+ public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+ int previousScreenType) {
+ return composeQuickContactIntent(context, contactLookupUri,
+ QuickContactActivity.MODE_FULLY_EXPANDED, previousScreenType);
+ }
+
+ /**
+ * Returns an implicit intent for opening QuickContacts.
+ */
+ public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+ int mode, int previousScreenType) {
+ final Intent intent = new Intent(context, QuickContactActivity.class);
+ intent.setAction(QuickContact.ACTION_QUICK_CONTACT);
+ intent.setData(contactLookupUri);
+ intent.putExtra(QuickContact.EXTRA_MODE, mode);
+ // Make sure not to show QuickContacts on top of another QuickContacts.
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreenType);
+ return intent;
+ }
+
+ /**
+ * Returns an Intent to open the Settings add account activity filtered to only
+ * display contact provider account types.
+ */
+ public static Intent getIntentForAddingAccount() {
+ final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+ intent.putExtra(Settings.EXTRA_AUTHORITIES,
+ new String[]{ContactsContract.AUTHORITY});
+ return intent;
+ }
+
+ /**
+ * Returns an Intent to add a google account.
+ */
+ public static Intent getIntentForAddingGoogleAccount() {
+ final Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+ intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES,
+ new String[]{GoogleAccountType.ACCOUNT_TYPE});
+ return intent;
+ }
+
+ public static Intent getIntentForQuickContactLauncherShortcut(Context context, Uri contactUri) {
+ final Intent intent = composeQuickContactIntent(context, contactUri,
+ QuickContact.MODE_LARGE, ScreenType.UNKNOWN);
+ intent.setPackage(context.getPackageName());
+
+ // When starting from the launcher, start in a new, cleared task.
+ // CLEAR_WHEN_TASK_RESET cannot reset the root of a task, so we
+ // clear the whole thing preemptively here since QuickContactActivity will
+ // finish itself when launching other detail activities. We need to use
+ // Intent.FLAG_ACTIVITY_NO_ANIMATION since not all versions of launcher will respect
+ // the INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION intent extra.
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_NO_ANIMATION);
+
+ // Tell the launcher to not do its animation, because we are doing our own
+ intent.putExtra(INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION, true);
+
+ intent.putExtra(QuickContact.EXTRA_EXCLUDE_MIMES, (String[])null);
+
+ return intent;
+ }
+
+ /**
+ * Returns a copy of {@param intent} with a class name set, if a class inside this app
+ * has a corresponding intent filter.
+ */
+ private static Intent getIntentInAppIfExists(Context context, Intent intent) {
+ try {
+ final Intent intentCopy = new Intent(intent);
+ // Force this intentCopy to open inside the current app.
+ intentCopy.setPackage(context.getPackageName());
+ final List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(
+ intentCopy, PackageManager.MATCH_DEFAULT_ONLY);
+ if (list != null && list.size() != 0) {
+ // Now that we know the intentCopy will work inside the current app, we
+ // can return this intent non-null.
+ if (list.get(0).activityInfo != null
+ && !TextUtils.isEmpty(list.get(0).activityInfo.name)) {
+ // Now that we know the class name, we may as well attach it to intentCopy
+ // to prevent the package manager from needing to find it again inside
+ // startActivity(). This is only needed for efficiency.
+ intentCopy.setClassName(context.getPackageName(),
+ list.get(0).activityInfo.name);
+ }
+ return intentCopy;
+ }
+ return null;
+ } catch (Exception e) {
+ // Don't let the package manager crash our app. If the package manager can't resolve the
+ // intent here, then we can still call startActivity without calling setClass() first.
+ return null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/LocalizedNameResolver.java b/src/com/android/contacts/util/LocalizedNameResolver.java
new file mode 100644
index 000000000..e6acc6450
--- /dev/null
+++ b/src/com/android/contacts/util/LocalizedNameResolver.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2010 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.util;
+
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.AttributeSet;
+import android.util.Xml;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.ExternalAccountType;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Retrieves localized names per account type. This allows customizing texts like
+ * "All Contacts" for certain account types, but e.g. "All Friends" or "All Connections" for others.
+ */
+public class LocalizedNameResolver {
+ private static final String TAG = "LocalizedNameResolver";
+
+ private static final String CONTACTS_DATA_KIND = "ContactsDataKind";
+
+ /**
+ * Returns the name for All Contacts for the specified account type.
+ */
+ public static String getAllContactsName(Context context, String accountType) {
+ if (context == null) throw new IllegalArgumentException("Context must not be null");
+ if (accountType == null) return null;
+
+ return resolveAllContactsName(context, accountType);
+ }
+
+ /**
+ * Finds "All Contacts"-Name for the specified account type.
+ */
+ private static String resolveAllContactsName(Context context, String accountType) {
+ final AccountManager am = AccountManager.get(context);
+
+ for (AuthenticatorDescription auth : am.getAuthenticatorTypes()) {
+ if (accountType.equals(auth.type)) {
+ return resolveAllContactsNameFromMetaData(context, auth.packageName);
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Finds the meta-data XML containing the contacts configuration and
+ * reads the picture priority from that file.
+ */
+ private static String resolveAllContactsNameFromMetaData(Context context, String packageName) {
+ final XmlResourceParser parser = ExternalAccountType.loadContactsXml(context, packageName);
+ if (parser != null) {
+ return loadAllContactsNameFromXml(context, parser, packageName);
+ }
+ return null;
+ }
+
+ private static String loadAllContactsNameFromXml(Context context, XmlPullParser parser,
+ String packageName) {
+ try {
+ final AttributeSet attrs = Xml.asAttributeSet(parser);
+ int type;
+ while ((type = parser.next()) != XmlPullParser.START_TAG
+ && type != XmlPullParser.END_DOCUMENT) {
+ // Drain comments and whitespace
+ }
+
+ if (type != XmlPullParser.START_TAG) {
+ throw new IllegalStateException("No start tag found");
+ }
+
+ final int depth = parser.getDepth();
+ while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
+ && type != XmlPullParser.END_DOCUMENT) {
+ String name = parser.getName();
+ if (type == XmlPullParser.START_TAG && CONTACTS_DATA_KIND.equals(name)) {
+ final TypedArray typedArray = context.obtainStyledAttributes(attrs,
+ R.styleable.ContactsDataKind);
+ try {
+ // See if a string has been hardcoded directly into the xml
+ final String nonResourceString = typedArray.getNonResourceString(
+ R.styleable.ContactsDataKind_android_allContactsName);
+ if (nonResourceString != null) {
+ return nonResourceString;
+ }
+
+ // See if a resource is referenced. We can't rely on getString
+ // to automatically resolve it as the resource lives in a different package
+ int id = typedArray.getResourceId(
+ R.styleable.ContactsDataKind_android_allContactsName, 0);
+ if (id == 0) return null;
+
+ // Resolve the resource Id
+ final PackageManager packageManager = context.getPackageManager();
+ final Resources resources;
+ try {
+ resources = packageManager.getResourcesForApplication(packageName);
+ } catch (NameNotFoundException e) {
+ return null;
+ }
+ try {
+ return resources.getString(id);
+ } catch (NotFoundException e) {
+ return null;
+ }
+ } finally {
+ typedArray.recycle();
+ }
+ }
+ }
+ return null;
+ } catch (XmlPullParserException e) {
+ throw new IllegalStateException("Problem reading XML", e);
+ } catch (IOException e) {
+ throw new IllegalStateException("Problem reading XML", e);
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/MaterialColorMapUtils.java b/src/com/android/contacts/util/MaterialColorMapUtils.java
new file mode 100644
index 000000000..39f69c239
--- /dev/null
+++ b/src/com/android/contacts/util/MaterialColorMapUtils.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2014 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.util;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.Trace;
+import android.support.v4.content.ContextCompat;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.PeopleActivity;
+
+public class MaterialColorMapUtils {
+ private final TypedArray sPrimaryColors;
+ private final TypedArray sSecondaryColors;
+
+ public MaterialColorMapUtils(Resources resources) {
+ sPrimaryColors = resources.obtainTypedArray(
+ com.android.contacts.R.array.letter_tile_colors);
+ sSecondaryColors = resources.obtainTypedArray(
+ com.android.contacts.R.array.letter_tile_colors_dark);
+ }
+
+ public static class MaterialPalette implements Parcelable {
+ public MaterialPalette(int primaryColor, int secondaryColor) {
+ mPrimaryColor = primaryColor;
+ mSecondaryColor = secondaryColor;
+ }
+ public final int mPrimaryColor;
+ public final int mSecondaryColor;
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ MaterialPalette other = (MaterialPalette) obj;
+ if (mPrimaryColor != other.mPrimaryColor) {
+ return false;
+ }
+ if (mSecondaryColor != other.mSecondaryColor) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + mPrimaryColor;
+ result = prime * result + mSecondaryColor;
+ return result;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mPrimaryColor);
+ dest.writeInt(mSecondaryColor);
+ }
+
+ private MaterialPalette(Parcel in) {
+ mPrimaryColor = in.readInt();
+ mSecondaryColor = in.readInt();
+ }
+
+ public static final Creator<MaterialPalette> CREATOR = new Creator<MaterialPalette>() {
+ @Override
+ public MaterialPalette createFromParcel(Parcel in) {
+ return new MaterialPalette(in);
+ }
+
+ @Override
+ public MaterialPalette[] newArray(int size) {
+ return new MaterialPalette[size];
+ }
+ };
+ }
+
+ /**
+ * Return primary and secondary colors from the Material color palette that are similar to
+ * {@param color}.
+ */
+ public MaterialPalette calculatePrimaryAndSecondaryColor(int color) {
+ Trace.beginSection("calculatePrimaryAndSecondaryColor");
+
+ final float colorHue = hue(color);
+ float minimumDistance = Float.MAX_VALUE;
+ int indexBestMatch = 0;
+ for (int i = 0; i < sPrimaryColors.length(); i++) {
+ final int primaryColor = sPrimaryColors.getColor(i, 0);
+ final float comparedHue = hue(primaryColor);
+ // No need to be perceptually accurate when calculating color distances since
+ // we are only mapping to 15 colors. Being slightly inaccurate isn't going to change
+ // the mapping very often.
+ final float distance = Math.abs(comparedHue - colorHue);
+ if (distance < minimumDistance) {
+ minimumDistance = distance;
+ indexBestMatch = i;
+ }
+ }
+
+ Trace.endSection();
+ return new MaterialPalette(sPrimaryColors.getColor(indexBestMatch, 0),
+ sSecondaryColors.getColor(indexBestMatch, 0));
+ }
+
+ 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.
+ *
+ * @return A value between 0.0f and 1.0f
+ */
+ public static float hue(int color) {
+ int r = (color >> 16) & 0xFF;
+ int g = (color >> 8) & 0xFF;
+ int b = color & 0xFF;
+
+ int V = Math.max(b, Math.max(r, g));
+ int temp = Math.min(b, Math.min(r, g));
+
+ float H;
+
+ if (V == temp) {
+ H = 0;
+ } else {
+ final float vtemp = V - temp;
+ final float cr = (V - r) / vtemp;
+ final float cg = (V - g) / vtemp;
+ final float cb = (V - b) / vtemp;
+
+ if (r == V) {
+ H = cb - cg;
+ } else if (g == V) {
+ H = 2 + cr - cb;
+ } else {
+ H = 4 + cg - cr;
+ }
+
+ H /= 6.f;
+ if (H < 0) {
+ H++;
+ }
+ }
+
+ return H;
+ }
+
+ /**
+ * Returns status bar color for group view and non-group views.
+ */
+ public static int getStatusBarColor(Activity activity) {
+ final boolean isGroupView = activity instanceof PeopleActivity
+ && ((PeopleActivity) activity).isGroupView();
+ return isGroupView
+ ? ContextCompat.getColor(activity, R.color.group_primary_color_dark)
+ : ContextCompat.getColor(activity, R.color.primary_color_dark);
+ }
+
+ /**
+ * Returns toolbar color for group view and non-group views.
+ */
+ public static int getToolBarColor(Activity activity) {
+ final boolean isGroupView = activity instanceof PeopleActivity
+ && ((PeopleActivity) activity).isGroupView();
+ return isGroupView
+ ? ContextCompat.getColor(activity, R.color.group_primary_color)
+ : ContextCompat.getColor(activity, R.color.primary_color);
+ }
+}
diff --git a/src/com/android/contacts/util/NameConverter.java b/src/com/android/contacts/util/NameConverter.java
new file mode 100644
index 000000000..2d9f6fd1d
--- /dev/null
+++ b/src/com/android/contacts/util/NameConverter.java
@@ -0,0 +1,158 @@
+/*
+ * 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.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.model.dataitem.StructuredNameDataItem;
+
+/**
+ * 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 ContentValues) into a display name string.
+ * @param context Activity context.
+ * @param values The content values containing values comprising the structured name.
+ * @return
+ */
+ 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;
+ }
+
+ 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/src/com/android/contacts/util/PermissionsUtil.java b/src/com/android/contacts/util/PermissionsUtil.java
new file mode 100644
index 000000000..c56b13eb2
--- /dev/null
+++ b/src/com/android/contacts/util/PermissionsUtil.java
@@ -0,0 +1,108 @@
+/*
+ * 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.util;
+
+import android.Manifest.permission;
+import android.app.AppOpsManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.os.Process;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.LocalBroadcastManager;
+
+/**
+ * Utility class to help with runtime permissions.
+ */
+public class PermissionsUtil {
+ // Each permission in this list is a cherry-picked permission from a particular permission
+ // group. Granting a permission group enables access to all permissions in that group so we
+ // only need to check a single permission in each group.
+ // Note: This assumes that the app has correctly requested for all the relevant permissions
+ // in its Manifest file.
+ public static final String PHONE = permission.CALL_PHONE;
+ public static final String CONTACTS = permission.READ_CONTACTS;
+ public static final String LOCATION = permission.ACCESS_FINE_LOCATION;
+
+ public static boolean hasPhonePermissions(Context context) {
+ return hasPermission(context, PHONE);
+ }
+
+ public static boolean hasContactsPermissions(Context context) {
+ return hasPermission(context, CONTACTS);
+ }
+
+ public static boolean hasLocationPermissions(Context context) {
+ return hasPermission(context, LOCATION);
+ }
+
+ public static boolean hasPermission(Context context, String permission) {
+ return ContextCompat.checkSelfPermission(context, permission)
+ == PackageManager.PERMISSION_GRANTED;
+ }
+
+ public static boolean hasAppOp(Context context, String appOp) {
+ final AppOpsManager appOpsManager =
+ (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ final int mode = appOpsManager.checkOpNoThrow(appOp, Process.myUid(),
+ context.getPackageName());
+ return mode == AppOpsManager.MODE_ALLOWED;
+ }
+
+ /**
+ * Rudimentary methods wrapping the use of a LocalBroadcastManager to simplify the process
+ * of notifying other classes when a particular fragment is notified that a permission is
+ * granted.
+ *
+ * To be notified when a permission has been granted, create a new broadcast receiver
+ * and register it using {@link #registerPermissionReceiver(Context, BroadcastReceiver, String)}
+ *
+ * E.g.
+ *
+ * final BroadcastReceiver receiver = new BroadcastReceiver() {
+ * @Override
+ * public void onReceive(Context context, Intent intent) {
+ * refreshContactsView();
+ * }
+ * }
+ *
+ * PermissionsUtil.registerPermissionReceiver(getActivity(), receiver, READ_CONTACTS);
+ *
+ * If you register to listen for multiple permissions, you can identify which permission was
+ * granted by inspecting {@link Intent#getAction()}.
+ *
+ * In the fragment that requests for the permission, be sure to call
+ * {@link #notifyPermissionGranted(Context, String)} when the permission is granted so that
+ * any interested listeners are notified of the change.
+ */
+ public static void registerPermissionReceiver(Context context, BroadcastReceiver receiver,
+ String permission) {
+ final IntentFilter filter = new IntentFilter(permission);
+ LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter);
+ }
+
+ public static void unregisterPermissionReceiver(Context context, BroadcastReceiver receiver) {
+ LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver);
+ }
+
+ public static void notifyPermissionGranted(Context context, String permission) {
+ final Intent intent = new Intent(permission);
+ LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+ }
+}
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index d1373f40b..9753b8851 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -27,8 +27,8 @@ import android.provider.MediaStore;
import android.provider.Telephony;
import android.telephony.TelephonyManager;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.compat.TelephonyManagerCompat;
import java.util.List;
diff --git a/src/com/android/contacts/util/PhoneNumberFormatter.java b/src/com/android/contacts/util/PhoneNumberFormatter.java
new file mode 100644
index 000000000..58d6800ad
--- /dev/null
+++ b/src/com/android/contacts/util/PhoneNumberFormatter.java
@@ -0,0 +1,89 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.telephony.PhoneNumberFormattingTextWatcher;
+import android.widget.TextView;
+
+import com.android.contacts.GeoUtil;
+import com.android.contacts.compat.PhoneNumberFormattingTextWatcherCompat;
+
+public final class PhoneNumberFormatter {
+ private PhoneNumberFormatter() {}
+
+ /**
+ * Load {@link TextWatcherLoadAsyncTask} in a worker thread and set it to a {@link TextView}.
+ */
+ private static class TextWatcherLoadAsyncTask extends
+ AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher> {
+ private final String mCountryCode;
+ private final TextView mTextView;
+ private final boolean mFormatAfterWatcherSet;
+
+ public TextWatcherLoadAsyncTask(
+ String countryCode, TextView textView, boolean formatAfterWatcherSet) {
+ mCountryCode = countryCode;
+ mTextView = textView;
+ mFormatAfterWatcherSet = formatAfterWatcherSet;
+ }
+
+ @Override
+ protected PhoneNumberFormattingTextWatcher doInBackground(Void... params) {
+ return PhoneNumberFormattingTextWatcherCompat.newInstance(mCountryCode);
+ }
+
+ @Override
+ protected void onPostExecute(PhoneNumberFormattingTextWatcher watcher) {
+ if (watcher == null || isCancelled()) {
+ return; // May happen if we cancel the task.
+ }
+
+ // Setting a text changed listener is safe even after the view is detached.
+ mTextView.addTextChangedListener(watcher);
+
+ // Forcing formatting the existing phone number
+ if (mFormatAfterWatcherSet) {
+ watcher.afterTextChanged(mTextView.getEditableText());
+ }
+ }
+ }
+
+ /**
+ * Delay-set {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}.
+ */
+ public static final void setPhoneNumberFormattingTextWatcher(Context context,
+ TextView textView) {
+ setPhoneNumberFormattingTextWatcher(context, textView,
+ /* formatAfterWatcherSet =*/ false);
+ }
+
+ /**
+ * Delay-sets {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}
+ * and formats the number immediately if formatAfterWaterSet is true.
+ * In some cases, formatting before user editing might cause unwanted results
+ * (e.g. the editor thinks the user changed the content, and would save
+ * when closed even when the user didn't make other changes.)
+ */
+ public static final void setPhoneNumberFormattingTextWatcher(
+ Context context, TextView textView, boolean formatAfterWatcherSet) {
+ new TextWatcherLoadAsyncTask(GeoUtil.getCurrentCountryIso(context),
+ textView, formatAfterWatcherSet)
+ .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
+ }
+}
diff --git a/src/com/android/contacts/util/PhoneNumberHelper.java b/src/com/android/contacts/util/PhoneNumberHelper.java
new file mode 100644
index 000000000..eb070b217
--- /dev/null
+++ b/src/com/android/contacts/util/PhoneNumberHelper.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util;
+
+import android.telephony.PhoneNumberUtils;
+import android.util.Log;
+
+/**
+ * This class wraps several PhoneNumberUtil calls and TelephonyManager calls. Some of them are
+ * the same as the ones in the framework's code base. We can remove those once they are part of
+ * the public API.
+ */
+public class PhoneNumberHelper {
+
+ private static final String LOG_TAG = PhoneNumberHelper.class.getSimpleName();
+
+ private static final String KOREA_ISO_COUNTRY_CODE = "KR";
+ /**
+ * Determines if the specified number is actually a URI (i.e. a SIP address) rather than a
+ * regular PSTN phone number, based on whether or not the number contains an "@" character.
+ *
+ * @param number Phone number
+ * @return true if number contains @
+ *
+ * TODO: Remove if PhoneNumberUtils.isUriNumber(String number) is made public.
+ */
+ public static boolean isUriNumber(String number) {
+ // Note we allow either "@" or "%40" to indicate a URI, in case
+ // the passed-in string is URI-escaped. (Neither "@" nor "%40"
+ // will ever be found in a legal PSTN number.)
+ return number != null && (number.contains("@") || number.contains("%40"));
+ }
+
+ /**
+ * Normalize a phone number by removing the characters other than digits. If
+ * the given number has keypad letters, the letters will be converted to
+ * digits first.
+ *
+ * @param phoneNumber The number to be normalized.
+ * @return The normalized number.
+ *
+ * TODO: Remove if PhoneNumberUtils.normalizeNumber(String phoneNumber) is made public.
+ */
+ public static String normalizeNumber(String phoneNumber) {
+ 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 (i == 0 && c == '+') {
+ sb.append(c);
+ } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+ return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * @return the "username" part of the specified SIP address, i.e. the part before the "@"
+ * character (or "%40").
+ *
+ * @param number SIP address of the form "username@domainname" (or the URI-escaped equivalent
+ * "username%40domainname")
+ *
+ * TODO: Remove if PhoneNumberUtils.getUsernameFromUriNumber(String number) is made public.
+ */
+ public static String getUsernameFromUriNumber(String number) {
+ // The delimiter between username and domain name can be
+ // either "@" or "%40" (the URI-escaped equivalent.)
+ int delimiterIndex = number.indexOf('@');
+ if (delimiterIndex < 0) {
+ delimiterIndex = number.indexOf("%40");
+ }
+ if (delimiterIndex < 0) {
+ Log.w(LOG_TAG,
+ "getUsernameFromUriNumber: no delimiter found in SIP addr '" + number + "'");
+ return number;
+ }
+ return number.substring(0, delimiterIndex);
+ }
+}
diff --git a/src/com/android/contacts/util/SchedulingUtils.java b/src/com/android/contacts/util/SchedulingUtils.java
index fbb245862..f85133992 100644
--- a/src/com/android/contacts/util/SchedulingUtils.java
+++ b/src/com/android/contacts/util/SchedulingUtils.java
@@ -17,7 +17,6 @@
package com.android.contacts.util;
import android.view.View;
-import android.view.ViewTreeObserver.OnDrawListener;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.ViewTreeObserver.OnPreDrawListener;
diff --git a/src/com/android/contacts/util/SearchUtil.java b/src/com/android/contacts/util/SearchUtil.java
new file mode 100644
index 000000000..d80fc53c3
--- /dev/null
+++ b/src/com/android/contacts/util/SearchUtil.java
@@ -0,0 +1,204 @@
+/*
+ * 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.util;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Methods related to search.
+ */
+public class SearchUtil {
+
+ public static class MatchedLine {
+
+ public int startIndex = -1;
+ public String line;
+
+ @Override
+ public String toString() {
+ return "MatchedLine{" +
+ "line='" + line + '\'' +
+ ", startIndex=" + startIndex +
+ '}';
+ }
+ }
+
+ /**
+ * Given a string with lines delimited with '\n', finds the matching line to the given
+ * substring.
+ *
+ * @param contents The string to search.
+ * @param substring The substring to search for.
+ * @return A MatchedLine object containing the matching line and the startIndex of the substring
+ * match within that line.
+ */
+ public static MatchedLine findMatchingLine(String contents, String substring) {
+ final MatchedLine matched = new MatchedLine();
+
+ // Snippet may contain multiple lines separated by "\n".
+ // Locate the lines of the content that contain the substring.
+ final int index = SearchUtil.contains(contents, substring);
+ if (index != -1) {
+ // Match found. Find the corresponding line.
+ int start = index - 1;
+ while (start > -1) {
+ if (contents.charAt(start) == '\n') {
+ break;
+ }
+ start--;
+ }
+ int end = index + 1;
+ while (end < contents.length()) {
+ if (contents.charAt(end) == '\n') {
+ break;
+ }
+ end++;
+ }
+ matched.line = contents.substring(start + 1, end);
+ matched.startIndex = index - (start + 1);
+ }
+ return matched;
+ }
+
+ /**
+ * Similar to String.contains() with two main differences:
+ * <p>
+ * 1) Only searches token prefixes. A token is defined as any combination of letters or
+ * numbers.
+ * <p>
+ * 2) Returns the starting index where the substring is found.
+ *
+ * @param value The string to search.
+ * @param substring The substring to look for.
+ * @return The starting index where the substring is found. {@literal -1} if substring is not
+ * found in value.
+ */
+ @VisibleForTesting
+ static int contains(String value, String substring) {
+ if (value.length() < substring.length()) {
+ return -1;
+ }
+
+ // i18n support
+ // Generate the code points for the substring once.
+ // There will be a maximum of substring.length code points. But may be fewer.
+ // Since the array length is not an accurate size, we need to keep a separate variable.
+ final int[] substringCodePoints = new int[substring.length()];
+ int substringLength = 0; // may not equal substring.length()!!
+ for (int i = 0; i < substring.length(); ) {
+ final int codePoint = Character.codePointAt(substring, i);
+ substringCodePoints[substringLength] = codePoint;
+ substringLength++;
+ i += Character.charCount(codePoint);
+ }
+
+ for (int i = 0; i < value.length(); i = findNextTokenStart(value, i)) {
+ int numMatch = 0;
+ for (int j = i; j < value.length() && numMatch < substringLength; ++numMatch) {
+ int valueCp = Character.toLowerCase(value.codePointAt(j));
+ int substringCp = substringCodePoints[numMatch];
+ if (valueCp != substringCp) {
+ break;
+ }
+ j += Character.charCount(valueCp);
+ }
+ if (numMatch == substringLength) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Find the start of the next token. A token is composed of letters and numbers. Any other
+ * character are considered delimiters.
+ *
+ * @param line The string to search for the next token.
+ * @param startIndex The index to start searching. 0 based indexing.
+ * @return The index for the start of the next token. line.length() if next token not found.
+ */
+ @VisibleForTesting
+ static int findNextTokenStart(String line, int startIndex) {
+ int index = startIndex;
+
+ // If already in token, eat remainder of token.
+ while (index <= line.length()) {
+ if (index == line.length()) {
+ // No more tokens.
+ return index;
+ }
+ final int codePoint = line.codePointAt(index);
+ if (!Character.isLetterOrDigit(codePoint)) {
+ break;
+ }
+ index += Character.charCount(codePoint);
+ }
+
+ // Out of token, eat all consecutive delimiters.
+ while (index <= line.length()) {
+ if (index == line.length()) {
+ return index;
+ }
+ final int codePoint = line.codePointAt(index);
+ if (Character.isLetterOrDigit(codePoint)) {
+ break;
+ }
+ index += Character.charCount(codePoint);
+ }
+
+ return index;
+ }
+
+ /**
+ * Anything other than letter and numbers are considered delimiters. Remove start and end
+ * delimiters since they are not relevant to search.
+ *
+ * @param query The query string to clean.
+ * @return The cleaned query. Empty string if all characters are cleaned out.
+ */
+ public static String cleanStartAndEndOfSearchQuery(String query) {
+ int start = 0;
+ while (start < query.length()) {
+ int codePoint = query.codePointAt(start);
+ if (Character.isLetterOrDigit(codePoint)) {
+ break;
+ }
+ start += Character.charCount(codePoint);
+ }
+
+ if (start == query.length()) {
+ // All characters are delimiters.
+ return "";
+ }
+
+ int end = query.length() - 1;
+ while (end > -1) {
+ if (Character.isLowSurrogate(query.charAt(end))) {
+ // Assume valid i18n string. There should be a matching high surrogate before it.
+ end--;
+ }
+ int codePoint = query.codePointAt(end);
+ if (Character.isLetterOrDigit(codePoint)) {
+ break;
+ }
+ end--;
+ }
+
+ // end is a letter or digit.
+ return query.substring(start, end + 1);
+ }
+}
diff --git a/src/com/android/contacts/util/SharedPreferenceUtil.java b/src/com/android/contacts/util/SharedPreferenceUtil.java
new file mode 100644
index 000000000..16047112e
--- /dev/null
+++ b/src/com/android/contacts/util/SharedPreferenceUtil.java
@@ -0,0 +1,263 @@
+/*
+ * 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.util;
+
+import android.app.backup.BackupManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.android.contacts.model.SimCard;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class SharedPreferenceUtil {
+
+ public static final String PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES =
+ "num-of-dismisses-account-sync-off";
+
+ public static final String PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES =
+ "num-of-dismisses-auto-sync-off";
+
+ public static final String PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED =
+ "hamburgerPromoDisplayed";
+
+ public static final String PREFERENCE_KEY_HAMBURGER_MENU_CLICKED =
+ "hamburgerMenuClicked";
+
+ public static final String PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED =
+ "hamburgerPromoTriggerActionHappened";
+
+ private static final String PREFERENCE_KEY_IMPORTED_SIM_CARDS =
+ "importedSimCards";
+
+ private static final String PREFERENCE_KEY_DISMISSED_SIM_CARDS =
+ "dismissedSimCards";
+
+ private static final String PREFERENCE_KEY_RESTORED_DEVICES =
+ "restoredDevices";
+
+ private static final String PREFERENCE_KEY_DISMISSED_DEVICES =
+ "dismissedDevices";
+
+ public static final String PREFERENCE_WELCOME_CARD_DISMISSED =
+ "welcome-reminder-card-dismissed";
+
+ public static boolean getHamburgerPromoDisplayedBefore(Context context) {
+ return getSharedPreferences(context)
+ .getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, false);
+ }
+
+ public static void setHamburgerPromoDisplayedBefore(Context context) {
+ getSharedPreferences(context).edit()
+ .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, true)
+ .apply();
+ new BackupManager(context).dataChanged();
+ }
+
+ public static boolean getHamburgerMenuClickedBefore(Context context) {
+ return getSharedPreferences(context)
+ .getBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, false);
+ }
+
+ public static void setHamburgerMenuClickedBefore(Context context) {
+ getSharedPreferences(context).edit()
+ .putBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, true)
+ .apply();
+ new BackupManager(context).dataChanged();
+ }
+
+ public static boolean getHamburgerPromoTriggerActionHappenedBefore(Context context) {
+ return getSharedPreferences(context)
+ .getBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, false);
+ }
+
+ public static void setHamburgerPromoTriggerActionHappenedBefore(Context context) {
+ getSharedPreferences(context).edit()
+ .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, true)
+ .apply();
+ new BackupManager(context).dataChanged();
+ }
+
+ /**
+ * Show hamburger promo if:
+ * 1) Hamburger menu is never clicked before
+ * 2) Hamburger menu promo is never displayed before
+ * 3) There is at least one available user action
+ * (for now, available user actions to trigger to displayed hamburger promo are:
+ * a: QuickContact UI back to PeopleActivity
+ * b: Search action back to PeopleActivity)
+ */
+ public static boolean getShouldShowHamburgerPromo(Context context) {
+ return !getHamburgerMenuClickedBefore(context)
+ && getHamburgerPromoTriggerActionHappenedBefore(context)
+ && !getHamburgerPromoDisplayedBefore(context);
+ }
+
+ protected static SharedPreferences getSharedPreferences(Context context) {
+ return context.getSharedPreferences(getSharedPreferencesFilename(context),
+ Context.MODE_PRIVATE);
+ }
+
+ public static String getSharedPreferencesFilename(Context context) {
+ return context.getPackageName();
+ }
+
+ public static int getNumOfDismissesForAutoSyncOff(Context context) {
+ return getSharedPreferences(context).getInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
+ }
+
+ public static void resetNumOfDismissesForAutoSyncOff(Context context) {
+ final int value = getSharedPreferences(context).getInt(
+ PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
+ if (value != 0) {
+ getSharedPreferences(context).edit()
+ .putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0).apply();
+ }
+ }
+
+ public static void incNumOfDismissesForAutoSyncOff(Context context) {
+ final int value = getSharedPreferences(context).getInt(
+ PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, 0);
+ getSharedPreferences(context).edit()
+ .putInt(PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES, value + 1).apply();
+ }
+
+ private static String buildSharedPrefsName(String accountName) {
+ return accountName + "-" + PREFERENCE_KEY_ACCOUNT_SYNC_OFF_DISMISSES;
+ }
+
+ public static int getNumOfDismissesforAccountSyncOff(Context context, String accountName) {
+ return getSharedPreferences(context).getInt(buildSharedPrefsName(accountName), 0);
+ }
+
+ public static void resetNumOfDismissesForAccountSyncOff(Context context, String accountName) {
+ final int value = getSharedPreferences(context).getInt(
+ buildSharedPrefsName(accountName), 0);
+ if (value != 0) {
+ getSharedPreferences(context).edit()
+ .putInt(buildSharedPrefsName(accountName), 0).apply();
+ }
+ }
+
+ public static void incNumOfDismissesForAccountSyncOff(Context context, String accountName) {
+ final int value = getSharedPreferences(context).getInt(
+ buildSharedPrefsName(accountName), 0);
+ getSharedPreferences(context).edit()
+ .putInt(buildSharedPrefsName(accountName), value + 1).apply();
+ }
+
+ public static void persistSimStates(Context context, Collection<SimCard> sims) {
+ final Set<String> imported = new HashSet<>(getImportedSims(context));
+ final Set<String> dismissed = new HashSet<>(getDismissedSims(context));
+ for (SimCard sim : sims) {
+ final String id = sim.getSimId();
+ if (id == null) {
+ continue;
+ }
+ if (sim.isImported()) {
+ imported.add(id);
+ } else {
+ imported.remove(id);
+ }
+ if (sim.isDismissed()) {
+ dismissed.add(id);
+ } else {
+ dismissed.remove(id);
+ }
+ }
+ getSharedPreferences(context).edit()
+ .putStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, imported)
+ .putStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, dismissed)
+ .apply();
+ }
+
+ public static List<SimCard> restoreSimStates(Context context, List<SimCard> sims) {
+ final Set<String> imported = getImportedSims(context);
+ final Set<String> dismissed = getDismissedSims(context);
+ List<SimCard> result = new ArrayList<>();
+ for (SimCard sim : sims) {
+ result.add(sim.withImportAndDismissStates(imported.contains(sim.getSimId()),
+ dismissed.contains(sim.getSimId())));
+ }
+ return result;
+ }
+
+ private static Set<String> getImportedSims(Context context) {
+ return getSharedPreferences(context)
+ .getStringSet(PREFERENCE_KEY_IMPORTED_SIM_CARDS, Collections.<String>emptySet());
+ }
+
+ private static Set<String> getDismissedSims(Context context) {
+ return getSharedPreferences(context)
+ .getStringSet(PREFERENCE_KEY_DISMISSED_SIM_CARDS, Collections.<String>emptySet());
+ }
+
+ public static Set<String> getRestoredDevices(Context context) {
+ return getSharedPreferences(context)
+ .getStringSet(PREFERENCE_KEY_RESTORED_DEVICES, Collections.<String>emptySet());
+ }
+
+ public static Set<String> getDismissedDevices(Context context) {
+ return getSharedPreferences(context)
+ .getStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, Collections.<String>emptySet());
+ }
+
+ public static void addRestoredDevice(Context context, String deviceId) {
+ final Set<String> restoredDevices = new HashSet<>(getRestoredDevices(context));
+ restoredDevices.add(deviceId);
+ getSharedPreferences(context).edit()
+ .putStringSet(PREFERENCE_KEY_RESTORED_DEVICES, restoredDevices)
+ .apply();
+ }
+
+ public static void addDismissedDevice(Context context, String deviceId) {
+ final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
+ dismissedDevices.add(deviceId);
+ getSharedPreferences(context).edit()
+ .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
+ .commit();
+ }
+
+ public static void removeDismissedDevice(Context context, String deviceId) {
+ final Set<String> dismissedDevices = new HashSet<>(getDismissedDevices(context));
+ dismissedDevices.remove(deviceId);
+ getSharedPreferences(context).edit()
+ .putStringSet(PREFERENCE_KEY_DISMISSED_DEVICES, dismissedDevices)
+ .commit();
+ }
+
+ public static boolean isWelcomeCardDismissed(Context context) {
+ return getSharedPreferences(context).getBoolean(PREFERENCE_WELCOME_CARD_DISMISSED,
+ false);
+ }
+
+ public static void setWelcomeCardDismissed(Context context, boolean isDismissed) {
+ getSharedPreferences(context).edit().putBoolean(PREFERENCE_WELCOME_CARD_DISMISSED,
+ isDismissed).apply();
+ new BackupManager(context).dataChanged();
+ }
+
+ public static void clear(Context context) {
+ getSharedPreferences(context).edit().clear().commit();
+ new BackupManager(context).dataChanged();
+ }
+}
diff --git a/src/com/android/contacts/util/StopWatch.java b/src/com/android/contacts/util/StopWatch.java
new file mode 100644
index 000000000..4300eff0f
--- /dev/null
+++ b/src/com/android/contacts/util/StopWatch.java
@@ -0,0 +1,110 @@
+/*
+ * 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.util;
+
+import android.util.Log;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+
+/**
+ * A {@link StopWatch} records start, laps and stop, and print them to logcat.
+ */
+public class StopWatch {
+
+ private final String mLabel;
+
+ private final ArrayList<Long> mTimes = Lists.newArrayList();
+ private final ArrayList<String> mLapLabels = Lists.newArrayList();
+
+ private StopWatch(String label) {
+ mLabel = label;
+ lap("");
+ }
+
+ /**
+ * Create a new instance and start it.
+ */
+ public static StopWatch start(String label) {
+ return new StopWatch(label);
+ }
+
+ /**
+ * Record a lap.
+ */
+ public void lap(String lapLabel) {
+ mTimes.add(System.currentTimeMillis());
+ mLapLabels.add(lapLabel);
+ }
+
+ /**
+ * Stop it and log the result, if the total time >= {@code timeThresholdToLog}.
+ */
+ public void stopAndLog(String TAG, int timeThresholdToLog) {
+
+ lap("");
+
+ final long start = mTimes.get(0);
+ final long stop = mTimes.get(mTimes.size() - 1);
+
+ final long total = stop - start;
+ if (total < timeThresholdToLog) return;
+
+ final StringBuilder sb = new StringBuilder();
+ sb.append(mLabel);
+ sb.append(",");
+ sb.append(total);
+ sb.append(": ");
+
+ long last = start;
+ for (int i = 1; i < mTimes.size(); i++) {
+ final long current = mTimes.get(i);
+ sb.append(mLapLabels.get(i));
+ sb.append(",");
+ sb.append((current - last));
+ sb.append(" ");
+ last = current;
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, sb.toString());
+ }
+
+ /**
+ * Return a dummy instance that does no operations.
+ */
+ public static StopWatch getNullStopWatch() {
+ return NullStopWatch.INSTANCE;
+ }
+
+ 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
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/SyncUtil.java b/src/com/android/contacts/util/SyncUtil.java
new file mode 100644
index 000000000..c5feb39b2
--- /dev/null
+++ b/src/com/android/contacts/util/SyncUtil.java
@@ -0,0 +1,121 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.provider.ContactsContract;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.List;
+
+/**
+ * Utilities related to sync.
+ */
+public final class SyncUtil {
+ private static final String TAG = "SyncUtil";
+
+ public static final int SYNC_SETTING_SYNC_ON = 0;
+ public static final int SYNC_SETTING_GLOBAL_SYNC_OFF = 1;
+ public static final int SYNC_SETTING_ACCOUNT_SYNC_OFF = 2;
+
+ private SyncUtil() {
+ }
+
+ public static final boolean isSyncStatusPendingOrActive(Account account) {
+ if (account == null) {
+ return false;
+ }
+ return ContentResolver.isSyncPending(account, ContactsContract.AUTHORITY)
+ || ContentResolver.isSyncActive(account, ContactsContract.AUTHORITY);
+ }
+
+ /**
+ * Returns true {@link ContentResolver#isSyncPending(Account, String)} or
+ * {@link ContentResolver#isSyncActive(Account, String)} is true for any account in accounts
+ */
+ public static final boolean isAnySyncing(List<AccountWithDataSet> accounts) {
+ for (AccountWithDataSet accountWithDataSet : accounts) {
+ if (isSyncStatusPendingOrActive(accountWithDataSet.getAccountOrNull())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if the given Google account is not syncable.
+ */
+ public static final boolean isUnsyncableGoogleAccount(Account account) {
+ if (account == null || !GoogleAccountType.ACCOUNT_TYPE.equals(account.type)) {
+ return false;
+ }
+ return ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY) <= 0;
+ }
+
+ public static final boolean hasSyncableAccount(AccountTypeManager accountTypeManager) {
+ return !accountTypeManager.getWritableGoogleAccounts().isEmpty();
+ }
+
+ public static boolean isAlertVisible(Context context, Account account, int reason) {
+ if (reason == SYNC_SETTING_GLOBAL_SYNC_OFF) {
+ return (SharedPreferenceUtil.getNumOfDismissesForAutoSyncOff(context) == 0);
+ } else if (reason == SYNC_SETTING_ACCOUNT_SYNC_OFF && account != null) {
+ return (SharedPreferenceUtil.getNumOfDismissesforAccountSyncOff(
+ context, account.name) == 0);
+ }
+ return false;
+ }
+
+ public static int calculateReasonSyncOff(Context context, Account account) {
+ // Global sync is turned off
+ if (!ContentResolver.getMasterSyncAutomatically()) {
+ if (account != null) {
+ SharedPreferenceUtil.resetNumOfDismissesForAccountSyncOff(
+ context, account.name);
+ }
+ return SYNC_SETTING_GLOBAL_SYNC_OFF;
+ }
+
+ // Global sync is on, clear the number of times users has dismissed this
+ // alert so that next time global sync is off, alert gets displayed again.
+ SharedPreferenceUtil.resetNumOfDismissesForAutoSyncOff(context);
+ if (account != null) {
+ // Account level sync is off
+ if (!ContentResolver.getSyncAutomatically(account, ContactsContract.AUTHORITY)) {
+ return SYNC_SETTING_ACCOUNT_SYNC_OFF;
+ }
+ // Account sync is on, clear the number of times users has dismissed this
+ // alert so that next time sync is off, alert gets displayed again.
+ SharedPreferenceUtil.resetNumOfDismissesForAccountSyncOff(
+ context, account.name);
+ }
+ return SYNC_SETTING_SYNC_ON;
+ }
+
+ public static boolean isNetworkConnected(Context context) {
+ ConnectivityManager cm =
+ (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+ return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/util/TelephonyManagerUtils.java b/src/com/android/contacts/util/TelephonyManagerUtils.java
new file mode 100644
index 000000000..ef1544caa
--- /dev/null
+++ b/src/com/android/contacts/util/TelephonyManagerUtils.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import java.util.Locale;
+
+/**
+ * This class provides several TelephonyManager util functions.
+ */
+public class TelephonyManagerUtils {
+
+ private static final String LOG_TAG = TelephonyManagerUtils.class.getSimpleName();
+
+ /**
+ * Gets the voicemail tag from Telephony Manager.
+ * @param context Current application context
+ * @return Voicemail tag, the alphabetic identifier associated with the voice mail number.
+ */
+ public static String getVoiceMailAlphaTag(Context context) {
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ final String voiceMailLabel = telephonyManager.getVoiceMailAlphaTag();
+ return voiceMailLabel;
+ }
+
+ /**
+ * @return The ISO 3166-1 two letters country code of the country the user
+ * is in based on the network location. If the network location does not exist, fall
+ * back to the locale setting.
+ */
+ public static String getCurrentCountryIso(Context context, Locale locale) {
+ // Without framework function calls, this seems to be the most accurate location service
+ // we can rely on.
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
+
+ if (countryIso == null) {
+ countryIso = locale.getCountry();
+ Log.w(LOG_TAG, "No CountryDetector; falling back to countryIso based on locale: "
+ + countryIso);
+ }
+ return countryIso;
+ }
+
+ /**
+ * @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/src/com/android/contacts/util/TrafficStatsTags.java b/src/com/android/contacts/util/TrafficStatsTags.java
new file mode 100644
index 000000000..617aa4d51
--- /dev/null
+++ b/src/com/android/contacts/util/TrafficStatsTags.java
@@ -0,0 +1,21 @@
+/*
+ * 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.util;
+
+public class TrafficStatsTags {
+ public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x0001;
+ public static final int TAG_MAX = 0x9999;
+}
diff --git a/src/com/android/contacts/util/UriUtils.java b/src/com/android/contacts/util/UriUtils.java
new file mode 100644
index 000000000..419304f01
--- /dev/null
+++ b/src/com/android/contacts/util/UriUtils.java
@@ -0,0 +1,94 @@
+/*
+ * 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.util;
+
+import android.net.Uri;
+import android.provider.ContactsContract;
+
+import java.util.List;
+
+/**
+ * Utility methods for dealing with URIs.
+ */
+public class UriUtils {
+ /** Static helper, not instantiable. */
+ private UriUtils() {}
+
+ /** Checks whether two URI are equal, taking care of the case where either is null. */
+ public static boolean areEqual(Uri uri1, Uri uri2) {
+ if (uri1 == null && uri2 == null) {
+ return true;
+ }
+ if (uri1 == null || uri2 == null) {
+ return false;
+ }
+ return uri1.equals(uri2);
+ }
+
+ /** Parses a string into a URI and returns null if the given string is null. */
+ public static Uri parseUriOrNull(String uriString) {
+ if (uriString == null) {
+ return null;
+ }
+ return Uri.parse(uriString);
+ }
+
+ /** Converts a URI into a string, returns null if the given URI is null. */
+ public static String uriToString(Uri uri) {
+ return uri == null ? null : uri.toString();
+ }
+
+ public static boolean isEncodedContactUri(Uri uri) {
+ if (uri == null) {
+ return false;
+ }
+ final String lastPathSegment = uri.getLastPathSegment();
+ if (lastPathSegment == null) {
+ return false;
+ }
+ return lastPathSegment.equals(Constants.LOOKUP_URI_ENCODED);
+ }
+
+ /**
+ * @return {@code uri} as-is if the authority is of contacts provider. Otherwise
+ * or {@code uri} is null, return null otherwise
+ */
+ public static Uri nullForNonContactsUri(Uri uri) {
+ if (uri == null) {
+ return null;
+ }
+ return ContactsContract.AUTHORITY.equals(uri.getAuthority()) ? uri : null;
+ }
+
+ /**
+ * Parses the given URI to determine the original lookup key of the contact.
+ */
+ public static String getLookupKeyFromUri(Uri lookupUri) {
+ // Would be nice to be able to persist the lookup key somehow to avoid having to parse
+ // the uri entirely just to retrieve the lookup key, but every uri is already parsed
+ // once anyway to check if it is an encoded JSON uri, so this has negligible effect
+ // on performance.
+ if (lookupUri != null && !UriUtils.isEncodedContactUri(lookupUri)) {
+ final List<String> segments = lookupUri.getPathSegments();
+ // This returns the third path segment of the uri, where the lookup key is located.
+ // See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}.
+ return (segments.size() < 3) ? null : Uri.encode(segments.get(2));
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/ViewUtil.java b/src/com/android/contacts/util/ViewUtil.java
new file mode 100644
index 000000000..ccb8a82ec
--- /dev/null
+++ b/src/com/android/contacts/util/ViewUtil.java
@@ -0,0 +1,127 @@
+/*
+ * 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.util;
+
+import android.content.res.Resources;
+import android.graphics.Outline;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewOutlineProvider;
+import android.widget.ListView;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+
+/**
+ * Provides static functions to work with views
+ */
+public class ViewUtil {
+ private ViewUtil() {}
+
+ /**
+ * Returns the width as specified in the LayoutParams
+ * @throws IllegalStateException Thrown if the view's width is unknown before a layout pass
+ * s
+ */
+ public static int getConstantPreLayoutWidth(View view) {
+ // We haven't been layed out yet, so get the size from the LayoutParams
+ final ViewGroup.LayoutParams p = view.getLayoutParams();
+ if (p.width < 0) {
+ throw new IllegalStateException("Expecting view's width to be a constant rather " +
+ "than a result of the layout pass");
+ }
+ return p.width;
+ }
+
+ /**
+ * Returns a boolean indicating whether or not the view's layout direction is RTL
+ *
+ * @param view - A valid view
+ * @return True if the view's layout direction is RTL
+ */
+ public static boolean isViewLayoutRtl(View view) {
+ return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
+ }
+
+ private static final ViewOutlineProvider OVAL_OUTLINE_PROVIDER;
+ static {
+ if (CompatUtils.isLollipopCompatible()) {
+ OVAL_OUTLINE_PROVIDER = new ViewOutlineProvider() {
+ @Override
+ public void getOutline(View view, Outline outline) {
+ outline.setOval(0, 0, view.getWidth(), view.getHeight());
+ }
+ };
+ } else {
+ OVAL_OUTLINE_PROVIDER = null;
+ }
+ }
+
+ private static final ViewOutlineProvider RECT_OUTLINE_PROVIDER;
+ static {
+ if (CompatUtils.isLollipopCompatible()) {
+ RECT_OUTLINE_PROVIDER = new ViewOutlineProvider() {
+ @Override
+ public void getOutline(View view, Outline outline) {
+ outline.setRect(0, 0, view.getWidth(), view.getHeight());
+ }
+ };
+ } else {
+ RECT_OUTLINE_PROVIDER = null;
+ }
+ }
+
+ /**
+ * Adds a rectangular outline to a view. This can be useful when you want to add a shadow
+ * to a transparent view. See b/16856049.
+ * @param view view that the outline is added to
+ * @param res The resources file.
+ */
+ public static void addRectangularOutlineProvider(View view, Resources res) {
+ if (CompatUtils.isLollipopCompatible()) {
+ view.setOutlineProvider(RECT_OUTLINE_PROVIDER);
+ }
+ }
+
+ /**
+ * Configures the floating action button, clipping it to a circle and setting its translation z.
+ * @param view The float action button's view.
+ * @param res The resources file.
+ */
+ public static void setupFloatingActionButton(View view, Resources res) {
+ if (CompatUtils.isLollipopCompatible()) {
+ view.setOutlineProvider(OVAL_OUTLINE_PROVIDER);
+ view.setTranslationZ(
+ res.getDimensionPixelSize(R.dimen.floating_action_button_translation_z));
+ }
+ }
+
+ /**
+ * Adds padding to the bottom of the given {@link ListView} so that the floating action button
+ * does not obscure any content.
+ *
+ * @param listView to add the padding to
+ * @param res valid resources object
+ */
+ public static void addBottomPaddingToListViewForFab(ListView listView, Resources res) {
+ final int fabPadding = res.getDimensionPixelSize(
+ R.dimen.floating_action_button_list_bottom_padding);
+ listView.setPaddingRelative(listView.getPaddingStart(), listView.getPaddingTop(),
+ listView.getPaddingEnd(), listView.getPaddingBottom() + fabPadding);
+ listView.setClipToPadding(false);
+ }
+}
diff --git a/src/com/android/contacts/util/WeakAsyncTask.java b/src/com/android/contacts/util/WeakAsyncTask.java
new file mode 100644
index 000000000..f60cfd781
--- /dev/null
+++ b/src/com/android/contacts/util/WeakAsyncTask.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.util;
+
+import android.os.AsyncTask;
+
+import java.lang.ref.WeakReference;
+
+public abstract class WeakAsyncTask<Params, Progress, Result, WeakTarget> extends
+ AsyncTask<Params, Progress, Result> {
+ protected WeakReference<WeakTarget> mTarget;
+
+ public WeakAsyncTask(WeakTarget target) {
+ mTarget = new WeakReference<WeakTarget>(target);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected final void onPreExecute() {
+ final WeakTarget target = mTarget.get();
+ if (target != null) {
+ this.onPreExecute(target);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected final Result doInBackground(Params... params) {
+ final WeakTarget target = mTarget.get();
+ if (target != null) {
+ return this.doInBackground(target, params);
+ } else {
+ return null;
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected final void onPostExecute(Result result) {
+ final WeakTarget target = mTarget.get();
+ if (target != null) {
+ this.onPostExecute(target, result);
+ }
+ }
+
+ protected void onPreExecute(WeakTarget target) {
+ // No default action
+ }
+
+ protected abstract Result doInBackground(WeakTarget target, Params... params);
+
+ protected void onPostExecute(WeakTarget target, Result result) {
+ // No default action
+ }
+}
diff --git a/src/com/android/contacts/util/concurrent/ContactsExecutors.java b/src/com/android/contacts/util/concurrent/ContactsExecutors.java
new file mode 100644
index 000000000..58a6c1f4b
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/ContactsExecutors.java
@@ -0,0 +1,242 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+package com.android.contacts.util.concurrent;
+
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.NonNull;
+
+import com.google.common.util.concurrent.ForwardingFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
+
+import java.util.List;
+import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Delayed;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RunnableScheduledFuture;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Provides some common executors for use with {@link Futures}
+ */
+public class ContactsExecutors {
+
+ private ContactsExecutors() {}
+
+ private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
+ private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
+
+ // AsyncTask.THREAD_POOL_EXECUTOR is a ThreadPoolExecutor so we should end up always using that
+ // but we have a fallback in case the platform implementation changes in some future release.
+ private static final ListeningExecutorService DEFAULT_THREAD_POOL_EXECUTOR =
+ (AsyncTask.THREAD_POOL_EXECUTOR instanceof ExecutorService) ?
+ MoreExecutors.listeningDecorator(
+ (ExecutorService) AsyncTask.THREAD_POOL_EXECUTOR) :
+ MoreExecutors.listeningDecorator(
+ Executors.newFixedThreadPool(CORE_POOL_SIZE));
+
+ // We initialize this lazily since in some cases we may never even read from the SIM card
+ private static ListeningExecutorService sSimExecutor;
+
+ /**
+ * Returns the default thread pool that can be used for background work.
+ */
+ public static ListeningExecutorService getDefaultThreadPoolExecutor() {
+ return DEFAULT_THREAD_POOL_EXECUTOR;
+ }
+
+ /**
+ * Creates an executor that runs commands on the application UI thread
+ */
+ public static ScheduledExecutorService newUiThreadExecutor() {
+ return newHandlerExecutor(new Handler(Looper.getMainLooper()));
+ }
+
+ /**
+ * Create an executor that posts commands to the provided handler
+ */
+ public static ScheduledExecutorService newHandlerExecutor(final Handler handler) {
+ return new HandlerExecutorService(handler);
+ }
+
+ /**
+ * Returns an ExecutorService that can be used to read from the SIM card.
+ *
+ * <p>See b/32831092</p>
+ * <p>A different executor than {@link ContactsExecutors#getDefaultThreadPoolExecutor()} is
+ * provided for this case because reads of the SIM card can block for long periods of time
+ * and if they do we might exhaust our thread pool. Additionally it appears that reading from
+ * the SIM provider from multiple threads concurrently can cause problems.
+ * </p>
+ */
+ public synchronized static ListeningExecutorService getSimReadExecutor() {
+ if (sSimExecutor == null) {
+ final ThreadPoolExecutor executor = new ThreadPoolExecutor(
+ 1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+ executor.allowCoreThreadTimeOut(true);
+ sSimExecutor = MoreExecutors.listeningDecorator(executor);
+ }
+ return sSimExecutor;
+ }
+
+ /**
+ * Wrapper around a handler that implements a subset of the ScheduledExecutorService
+ *
+ * <p>This class is useful for testability because Handler can't be mocked since it's
+ * methods are final. It might be better to just use Executors.newSingleThreadScheduledExecutor
+ * in the cases where we need to run some time based tasks.
+ * </p>
+ */
+ private static class HandlerExecutorService extends AbstractExecutorService
+ implements ScheduledExecutorService {
+ private final Handler mHandler;
+
+ private HandlerExecutorService(Handler handler) {
+ mHandler = handler;
+ }
+
+ @NonNull
+ @Override
+ public ScheduledFuture<?> schedule(final Runnable command, long delay, TimeUnit unit) {
+ final HandlerFuture<Void> future = HandlerFuture
+ .fromRunnable(mHandler, delay, unit, command);
+ mHandler.postDelayed(future, unit.toMillis(delay));
+ return future;
+ }
+
+ @NonNull
+ @Override
+ public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
+ final HandlerFuture<V> future = new HandlerFuture<>(mHandler, delay, unit, callable);
+ mHandler.postDelayed(future, unit.toMillis(delay));
+ return future;
+ }
+
+ @NonNull
+ @Override
+ public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay,
+ long period, TimeUnit unit) {
+ throw new UnsupportedOperationException();
+ }
+
+ @NonNull
+ @Override
+ public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
+ long delay, TimeUnit unit) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void shutdown() {
+ }
+
+ @Override
+ public List<Runnable> shutdownNow() {
+ return null;
+ }
+
+ @Override
+ public boolean isShutdown() {
+ return false;
+ }
+
+ @Override
+ public boolean isTerminated() {
+ return false;
+ }
+
+ @Override
+ public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void execute(Runnable command) {
+ mHandler.post(command);
+ }
+ }
+
+ private static class HandlerFuture<T> extends ForwardingFuture<T> implements
+ RunnableScheduledFuture<T> {
+
+ private final Handler mHandler;
+ private final long mDelayMillis;
+ private final Callable<T> mTask;
+ private final SettableFuture<T> mDelegate = SettableFuture.create();
+
+ private final AtomicLong mStart = new AtomicLong(-1);
+
+ private HandlerFuture(Handler handler, long delay, TimeUnit timeUnit, Callable<T> task) {
+ mHandler = handler;
+ mDelayMillis = timeUnit.toMillis(delay);
+ mTask = task;
+ }
+
+ @Override
+ public boolean isPeriodic() {
+ return false;
+ }
+
+ @Override
+ public long getDelay(TimeUnit unit) {
+ long start = mStart.get();
+ if (start < 0) {
+ return mDelayMillis;
+ }
+ long remaining = mDelayMillis - (System.currentTimeMillis() - start);
+ return TimeUnit.MILLISECONDS.convert(remaining, unit);
+ }
+
+ @Override
+ public int compareTo(Delayed o) {
+ return Long.compare(getDelay(TimeUnit.MILLISECONDS),
+ o.getDelay(TimeUnit.MILLISECONDS));
+ }
+
+ @Override
+ protected Future<T> delegate() {
+ return mDelegate;
+ }
+
+ @Override
+ public boolean cancel(boolean b) {
+ mHandler.removeCallbacks(this);
+ return super.cancel(b);
+ }
+
+ @Override
+ public void run() {
+ if (!mStart.compareAndSet(-1, System.currentTimeMillis())) {
+ // Already started
+ return;
+ }
+ try {
+ mDelegate.set(mTask.call());
+ } catch (Exception e) {
+ mDelegate.setException(e);
+ }
+ }
+
+ public static HandlerFuture<Void> fromRunnable(Handler handler, long delay, TimeUnit unit,
+ final Runnable command) {
+ return new HandlerFuture<>(handler, delay, unit, new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ command.run();
+ return null;
+ }
+ });
+ }
+ }
+}
diff --git a/src/com/android/contacts/util/concurrent/FuturesUtil.java b/src/com/android/contacts/util/concurrent/FuturesUtil.java
new file mode 100644
index 000000000..113af93ce
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/FuturesUtil.java
@@ -0,0 +1,59 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+package com.android.contacts.util.concurrent;
+
+import android.os.Handler;
+
+import com.google.common.util.concurrent.FutureFallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Has utility methods for operating on ListenableFutures
+ */
+public class FuturesUtil {
+
+ /**
+ * See
+ * {@link FuturesUtil#withTimeout(ListenableFuture, long, TimeUnit, ScheduledExecutorService)}
+ */
+ public static <V> ListenableFuture<V> withTimeout(final ListenableFuture<V> future, long time,
+ TimeUnit unit, Handler handler) {
+ return withTimeout(future, time, unit, ContactsExecutors.newHandlerExecutor(handler));
+ }
+
+ /**
+ * Returns a future that completes with the result from the input future unless the specified
+ * time elapses before it finishes in which case the result will contain a TimeoutException and
+ * the input future will be canceled.
+ *
+ * <p>Guava has Futures.withTimeout but it isn't available until v19.0 and we depend on v14.0
+ * right now. Replace usages of this method if we upgrade our dependency.</p>
+ */
+ public static <V> ListenableFuture<V> withTimeout(final ListenableFuture<V> future, long time,
+ TimeUnit unit, ScheduledExecutorService executor) {
+ final AtomicBoolean didTimeout = new AtomicBoolean(false);
+ executor.schedule(new Runnable() {
+ @Override
+ public void run() {
+ didTimeout.set(!future.isDone() && !future.isCancelled());
+ future.cancel(true);
+ }
+ }, time, unit);
+
+ return Futures.withFallback(future, new FutureFallback<V>() {
+ @Override
+ public ListenableFuture<V> create(Throwable t) throws Exception {
+ if ((t instanceof CancellationException) && didTimeout.get()) {
+ return Futures.immediateFailedFuture(new TimeoutException("Timeout expired"));
+ }
+ return Futures.immediateFailedFuture(t);
+ }
+ });
+ }
+}
diff --git a/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
new file mode 100644
index 000000000..67d52593f
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
@@ -0,0 +1,156 @@
+/*
+ * 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.util.concurrent;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.support.v4.content.LocalBroadcastManager;
+import android.util.Log;
+
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.Executor;
+
+/**
+ * Wraps a ListenableFuture for integration with {@link android.app.LoaderManager}
+ *
+ * <p>Using a loader ensures that the result is delivered while the receiving component (activity
+ * or fragment) is resumed and also prevents leaking references these components
+ * </p>
+ */
+public abstract class ListenableFutureLoader<D> extends Loader<D> {
+ private static final String TAG = "FutureLoader";
+
+ private final IntentFilter mReloadFilter;
+ private final Executor mUiExecutor;
+ private final LocalBroadcastManager mLocalBroadcastManager;
+
+ private ListenableFuture<D> mFuture;
+ private D mLoadedData;
+
+ private BroadcastReceiver mReceiver;
+
+ /**
+ * Stores away the application context associated with context.
+ * Since Loaders can be used across multiple activities it's dangerous to
+ * store the context directly; always use {@link #getContext()} to retrieve
+ * the Loader's Context, don't use the constructor argument directly.
+ * The Context returned by {@link #getContext} is safe to use across
+ * Activity instances.
+ *
+ * @param context used to retrieve the application context.
+ */
+ public ListenableFutureLoader(Context context) {
+ this(context, null);
+ }
+
+ public ListenableFutureLoader(Context context, IntentFilter reloadBroadcastFilter) {
+ super(context);
+ mUiExecutor = ContactsExecutors.newUiThreadExecutor();
+ mReloadFilter = reloadBroadcastFilter;
+ mLocalBroadcastManager = LocalBroadcastManager.getInstance(context);
+ }
+
+ @Override
+ protected void onStartLoading() {
+ if (mReloadFilter != null && mReceiver == null) {
+ mReceiver = new ForceLoadReceiver();
+ mLocalBroadcastManager.registerReceiver(mReceiver, mReloadFilter);
+ }
+
+ if (mLoadedData != null) {
+ deliverResult(mLoadedData);
+ }
+ if (mFuture == null) {
+ takeContentChanged();
+ forceLoad();
+ } else if (takeContentChanged()) {
+ forceLoad();
+ }
+ }
+
+ @Override
+ protected void onForceLoad() {
+ mFuture = loadData();
+ Futures.addCallback(mFuture, new FutureCallback<D>() {
+ @Override
+ public void onSuccess(D result) {
+ if (mLoadedData == null || !isSameData(mLoadedData, result)) {
+ deliverResult(result);
+ }
+ mLoadedData = result;
+ commitContentChanged();
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ if (t instanceof CancellationException) {
+ Log.i(TAG, "Loading cancelled", t);
+ rollbackContentChanged();
+ } else {
+ Log.e(TAG, "Loading failed", t);
+ }
+ }
+ }, mUiExecutor);
+ }
+
+ @Override
+ protected void onStopLoading() {
+ if (mFuture != null) {
+ mFuture.cancel(false);
+ mFuture = null;
+ }
+ }
+
+ @Override
+ protected void onReset() {
+ mFuture = null;
+ mLoadedData = null;
+ if (mReceiver != null) {
+ mLocalBroadcastManager.unregisterReceiver(mReceiver);
+ }
+ }
+
+ protected abstract ListenableFuture<D> loadData();
+
+ /**
+ * Returns whether the newly loaded data is the same as the cached value
+ *
+ * <p>This allows subclasses to suppress delivering results when the data hasn't
+ * actually changed. By default it will always return false.
+ * </p>
+ */
+ protected boolean isSameData(D previousData, D newData) {
+ return false;
+ }
+
+ public final D getLoadedData() {
+ return mLoadedData;
+ }
+
+ public class ForceLoadReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ onContentChanged();
+ }
+ }
+}
diff --git a/src/com/android/contacts/vcard/CancelActivity.java b/src/com/android/contacts/vcard/CancelActivity.java
new file mode 100644
index 000000000..5787d620a
--- /dev/null
+++ b/src/com/android/contacts/vcard/CancelActivity.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.util.Log;
+
+import com.android.contacts.R;
+
+/**
+ * The Activity for canceling vCard import/export.
+ */
+public class CancelActivity extends Activity implements ServiceConnection {
+ private final String LOG_TAG = "VCardCancel";
+
+ /* package */ final static String JOB_ID = "job_id";
+ /* package */ final static String DISPLAY_NAME = "display_name";
+
+ /**
+ * Type of the process to be canceled. Only used for choosing appropriate title/message.
+ * Must be {@link VCardService#TYPE_IMPORT} or {@link VCardService#TYPE_EXPORT}.
+ */
+ /* package */ final static String TYPE = "type";
+
+ private class RequestCancelListener implements DialogInterface.OnClickListener {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ bindService(new Intent(CancelActivity.this,
+ VCardService.class), CancelActivity.this, Context.BIND_AUTO_CREATE);
+ }
+ }
+
+ private class CancelListener
+ implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+ }
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ }
+
+ private final CancelListener mCancelListener = new CancelListener();
+ private int mJobId;
+ private String mDisplayName;
+ private int mType;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final Uri uri = getIntent().getData();
+ mJobId = Integer.parseInt(uri.getQueryParameter(JOB_ID));
+ mDisplayName = uri.getQueryParameter(DISPLAY_NAME);
+ mType = Integer.parseInt(uri.getQueryParameter(TYPE));
+ showDialog(R.id.dialog_cancel_confirmation);
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle bundle) {
+ if (id == R.id.dialog_cancel_confirmation) {
+ final String message;
+ if (mType == VCardService.TYPE_IMPORT) {
+ message = getString(R.string.cancel_import_confirmation_message, mDisplayName);
+ } else {
+ message = getString(R.string.cancel_export_confirmation_message, mDisplayName);
+ }
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setMessage(message)
+ .setPositiveButton(android.R.string.ok, new RequestCancelListener())
+ .setOnCancelListener(mCancelListener)
+ .setNegativeButton(android.R.string.cancel, mCancelListener);
+ return builder.create();
+ } else if (id == R.id.dialog_cancel_failed) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setTitle(R.string.cancel_vcard_import_or_export_failed)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setMessage(getString(R.string.fail_reason_unknown))
+ .setOnCancelListener(mCancelListener)
+ .setPositiveButton(android.R.string.ok, mCancelListener);
+ return builder.create();
+ } else {
+ Log.w(LOG_TAG, "Unknown dialog id: " + id);
+ return super.onCreateDialog(id, bundle);
+ }
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder binder) {
+ VCardService service = ((VCardService.MyBinder) binder).getService();
+
+ try {
+ final CancelRequest request = new CancelRequest(mJobId, mDisplayName);
+ service.handleCancelRequest(request, null);
+ } finally {
+ unbindService(this);
+ }
+
+ finish();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ // do nothing
+ }
+}
diff --git a/src/com/android/contacts/vcard/CancelRequest.java b/src/com/android/contacts/vcard/CancelRequest.java
new file mode 100644
index 000000000..0b4baee8a
--- /dev/null
+++ b/src/com/android/contacts/vcard/CancelRequest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+/**
+ * Class representing one request for canceling vCard import/export.
+ */
+public class CancelRequest {
+ public final int jobId;
+ /**
+ * Name used for showing users some useful info. Typically a file name.
+ * Must not be used to do some actual operations.
+ */
+ public final String displayName;
+ public CancelRequest(int jobId, String displayName) {
+ this.jobId = jobId;
+ this.displayName = displayName;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
new file mode 100644
index 000000000..13d80caa1
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -0,0 +1,339 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContactsEntity;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardComposer;
+import com.android.vcard.VCardConfig;
+
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+/**
+ * Class for processing one export request from a user. Dropped after exporting requested Uri(s).
+ * {@link VCardService} will create another object when there is another export request.
+ */
+public class ExportProcessor extends ProcessorBase {
+ private static final String LOG_TAG = "VCardExport";
+ private static final boolean DEBUG = VCardService.DEBUG;
+
+ private final VCardService mService;
+ private final ContentResolver mResolver;
+ private final NotificationManager mNotificationManager;
+ private final ExportRequest mExportRequest;
+ private final int mJobId;
+ private final String mCallingActivity;
+
+ private volatile boolean mCanceled;
+ private volatile boolean mDone;
+
+ private final int SHOW_READY_TOAST = 1;
+ private final Handler handler = new Handler() {
+ public void handleMessage(Message msg) {
+ if (msg.arg1 == SHOW_READY_TOAST) {
+ // This message is long, so we set the duration to LENGTH_LONG.
+ Toast.makeText(mService,
+ R.string.exporting_vcard_finished_toast, Toast.LENGTH_LONG).show();
+ }
+
+ }
+ };
+
+ public ExportProcessor(VCardService service, ExportRequest exportRequest, int jobId,
+ String callingActivity) {
+ mService = service;
+ mResolver = service.getContentResolver();
+ mNotificationManager =
+ (NotificationManager)mService.getSystemService(Context.NOTIFICATION_SERVICE);
+ mExportRequest = exportRequest;
+ mJobId = jobId;
+ mCallingActivity = callingActivity;
+ }
+
+ @Override
+ public final int getType() {
+ return VCardService.TYPE_EXPORT;
+ }
+
+ @Override
+ public void run() {
+ // ExecutorService ignores RuntimeException, so we need to show it here.
+ try {
+ runInternal();
+
+ if (isCancelled()) {
+ doCancelNotification();
+ }
+ } catch (OutOfMemoryError|RuntimeException e) {
+ FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to process vcard export", e);
+ throw e;
+ } finally {
+ synchronized (this) {
+ mDone = true;
+ }
+ }
+ }
+
+ private void runInternal() {
+ if (DEBUG) Log.d(LOG_TAG, String.format("vCard export (id: %d) has started.", mJobId));
+ final ExportRequest request = mExportRequest;
+ VCardComposer composer = null;
+ Writer writer = null;
+ boolean successful = false;
+ try {
+ if (isCancelled()) {
+ Log.i(LOG_TAG, "Export request is cancelled before handling the request");
+ return;
+ }
+ final Uri uri = request.destUri;
+ final OutputStream outputStream;
+ try {
+ outputStream = mResolver.openOutputStream(uri);
+ } catch (FileNotFoundException e) {
+ Log.w(LOG_TAG, "FileNotFoundException thrown", e);
+ // Need concise title.
+
+ final String errorReason =
+ mService.getString(R.string.fail_reason_could_not_open_file,
+ uri, e.getMessage());
+ doFinishNotification(errorReason, null);
+ return;
+ }
+
+ final String exportType = request.exportType;
+ final int vcardType;
+ if (TextUtils.isEmpty(exportType)) {
+ vcardType = VCardConfig.getVCardTypeFromString(
+ mService.getString(R.string.config_export_vcard_type));
+ } else {
+ vcardType = VCardConfig.getVCardTypeFromString(exportType);
+ }
+
+ composer = new VCardComposer(mService, vcardType, true);
+
+ // for test
+ // int vcardType = (VCardConfig.VCARD_TYPE_V21_GENERIC |
+ // VCardConfig.FLAG_USE_QP_TO_PRIMARY_PROPERTIES);
+ // composer = new VCardComposer(ExportVCardActivity.this, vcardType, true);
+
+ writer = new BufferedWriter(new OutputStreamWriter(outputStream));
+ final Uri contentUriForRawContactsEntity = RawContactsEntity.CONTENT_URI;
+ // TODO: should provide better selection.
+ if (!composer.init(Contacts.CONTENT_URI, new String[] {Contacts._ID},
+ null, null,
+ null, contentUriForRawContactsEntity)) {
+ final String errorReason = composer.getErrorReason();
+ Log.e(LOG_TAG, "initialization of vCard composer failed: " + errorReason);
+ final String translatedErrorReason =
+ translateComposerError(errorReason);
+ final String title =
+ mService.getString(R.string.fail_reason_could_not_initialize_exporter,
+ translatedErrorReason);
+ doFinishNotification(title, null);
+ return;
+ }
+
+ final int total = composer.getCount();
+ if (total == 0) {
+ final String title =
+ mService.getString(R.string.fail_reason_no_exportable_contact);
+ doFinishNotification(title, null);
+ return;
+ }
+
+ int current = 1; // 1-origin
+ while (!composer.isAfterLast()) {
+ if (isCancelled()) {
+ Log.i(LOG_TAG, "Export request is cancelled during composing vCard");
+ return;
+ }
+ try {
+ writer.write(composer.createOneEntry());
+ } catch (IOException e) {
+ final String errorReason = composer.getErrorReason();
+ Log.e(LOG_TAG, "Failed to read a contact: " + errorReason);
+ final String translatedErrorReason =
+ translateComposerError(errorReason);
+ final String title =
+ mService.getString(R.string.fail_reason_error_occurred_during_export,
+ translatedErrorReason);
+ doFinishNotification(title, null);
+ return;
+ }
+
+ // vCard export is quite fast (compared to import), and frequent notifications
+ // bother notification bar too much.
+ if (current % 100 == 1) {
+ doProgressNotification(uri, total, current);
+ }
+ current++;
+ }
+ Log.i(LOG_TAG, "Successfully finished exporting vCard " + request.destUri);
+
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Ask MediaScanner to scan the file: " + request.destUri.getPath());
+ }
+ mService.updateMediaScanner(request.destUri.getPath());
+
+ successful = true;
+ final String filename = ExportVCardActivity.getOpenableUriDisplayName(mService, uri);
+ // If it is a local file (i.e. not a file from Drive), we need to allow user to share
+ // the file by pressing the notification; otherwise, it would be a file in Drive, we
+ // don't need to enable this action in notification since the file is already uploaded.
+ if (isLocalFile(uri)) {
+ final Message msg = handler.obtainMessage();
+ msg.arg1 = SHOW_READY_TOAST;
+ handler.sendMessage(msg);
+ doFinishNotificationWithShareAction(
+ mService.getString(R.string.exporting_vcard_finished_title_fallback),
+ mService.getString(R.string.touch_to_share_contacts), uri);
+ } else {
+ final String title = filename == null
+ ? mService.getString(R.string.exporting_vcard_finished_title_fallback)
+ : mService.getString(R.string.exporting_vcard_finished_title, filename);
+ doFinishNotification(title, null);
+ }
+ } finally {
+ if (composer != null) {
+ composer.terminate();
+ }
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException e) {
+ Log.w(LOG_TAG, "IOException is thrown during close(). Ignored. " + e);
+ }
+ }
+ mService.handleFinishExportNotification(mJobId, successful);
+ }
+ }
+
+ private boolean isLocalFile(Uri uri) {
+ final String authority = uri.getAuthority();
+ return mService.getString(R.string.contacts_file_provider_authority).equals(authority);
+ }
+
+ private String translateComposerError(String errorMessage) {
+ final Resources resources = mService.getResources();
+ if (VCardComposer.FAILURE_REASON_FAILED_TO_GET_DATABASE_INFO.equals(errorMessage)) {
+ return resources.getString(R.string.composer_failed_to_get_database_infomation);
+ } else if (VCardComposer.FAILURE_REASON_NO_ENTRY.equals(errorMessage)) {
+ return resources.getString(R.string.composer_has_no_exportable_contact);
+ } else if (VCardComposer.FAILURE_REASON_NOT_INITIALIZED.equals(errorMessage)) {
+ return resources.getString(R.string.composer_not_initialized);
+ } else {
+ return errorMessage;
+ }
+ }
+
+ private void doProgressNotification(Uri uri, int totalCount, int currentCount) {
+ final String displayName = uri.getLastPathSegment();
+ final String description =
+ mService.getString(R.string.exporting_contact_list_message, displayName);
+ final String tickerText =
+ mService.getString(R.string.exporting_contact_list_title);
+ final Notification notification =
+ NotificationImportExportListener.constructProgressNotification(mService,
+ VCardService.TYPE_EXPORT, description, tickerText, mJobId, displayName,
+ totalCount, currentCount);
+ mService.startForeground(mJobId, notification);
+ }
+
+ private void doCancelNotification() {
+ if (DEBUG) Log.d(LOG_TAG, "send cancel notification");
+ final String description = mService.getString(R.string.exporting_vcard_canceled_title,
+ mExportRequest.destUri.getLastPathSegment());
+ final Notification notification =
+ NotificationImportExportListener.constructCancelNotification(mService, description);
+ mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+ mJobId, notification);
+ }
+
+ private void doFinishNotification(final String title, final String description) {
+ if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
+ final Intent intent = new Intent();
+ intent.setClassName(mService, mCallingActivity);
+ final Notification notification =
+ NotificationImportExportListener.constructFinishNotification(mService, title,
+ description, intent);
+ mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+ mJobId, notification);
+ }
+
+ /**
+ * Pass intent with ACTION_SEND to notification so that user can press the notification to
+ * share contacts.
+ */
+ private void doFinishNotificationWithShareAction(final String title, final String
+ description, Uri uri) {
+ if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
+ final Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType(Contacts.CONTENT_VCARD_TYPE);
+ intent.putExtra(Intent.EXTRA_STREAM, uri);
+ // Securely grant access using temporary access permissions
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ // Build notification
+ final Notification notification =
+ NotificationImportExportListener.constructFinishNotificationWithFlags(
+ mService, title, description, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
+ mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+ mJobId, notification);
+ }
+
+ @Override
+ public synchronized boolean cancel(boolean mayInterruptIfRunning) {
+ if (DEBUG) Log.d(LOG_TAG, "received cancel request");
+ if (mDone || mCanceled) {
+ return false;
+ }
+ mCanceled = true;
+ return true;
+ }
+
+ @Override
+ public synchronized boolean isCancelled() {
+ return mCanceled;
+ }
+
+ @Override
+ public synchronized boolean isDone() {
+ return mDone;
+ }
+
+ public ExportRequest getRequest() {
+ return mExportRequest;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ExportRequest.java b/src/com/android/contacts/vcard/ExportRequest.java
new file mode 100644
index 000000000..65e395e7b
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportRequest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.net.Uri;
+
+public class ExportRequest {
+ public final Uri destUri;
+ /**
+ * Can be null.
+ */
+ public final String exportType;
+
+ public ExportRequest(Uri destUri) {
+ this(destUri, null);
+ }
+
+ public ExportRequest(Uri destUri, String exportType) {
+ this.destUri = destUri;
+ this.exportType = exportType;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ExportVCardActivity.java b/src/com/android/contacts/vcard/ExportVCardActivity.java
new file mode 100644
index 000000000..690f2070c
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportVCardActivity.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.provider.OpenableColumns;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestImportVCardPermissionsActivity;
+
+import java.util.List;
+
+/**
+ * Shows a dialog confirming the export and asks actual vCard export to {@link VCardService}
+ *
+ * This Activity first connects to VCardService and ask an available file name and shows it to
+ * a user. After the user's confirmation, it send export request with the file name, assuming the
+ * file name is not reserved yet.
+ */
+public class ExportVCardActivity extends Activity implements ServiceConnection,
+ DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+ private static final String LOG_TAG = "VCardExport";
+ protected static final boolean DEBUG = VCardService.DEBUG;
+ private static final int REQUEST_CREATE_DOCUMENT = 100;
+
+ /**
+ * True when this Activity is connected to {@link VCardService}.
+ *
+ * Should be touched inside synchronized block.
+ */
+ protected boolean mConnected;
+
+ /**
+ * True when users need to do something and this Activity should not disconnect from
+ * VCardService. False when all necessary procedures are done (including sending export request)
+ * or there's some error occured.
+ */
+ private volatile boolean mProcessOngoing = true;
+
+ protected VCardService mService;
+ private static final BidiFormatter mBidiFormatter = BidiFormatter.getInstance();
+
+ // String for storing error reason temporarily.
+ private String mErrorReason;
+
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ if (RequestImportVCardPermissionsActivity.startPermissionActivityIfNeeded(this)) {
+ return;
+ }
+
+ if (!hasExportIntentHandler()) {
+ Log.e(LOG_TAG, "Couldn't find export intent handler");
+ showErrorDialog();
+ return;
+ }
+
+ connectVCardService();
+ }
+
+ private void connectVCardService() {
+ final String callingActivity = getIntent().getExtras()
+ .getString(VCardCommonArguments.ARG_CALLING_ACTIVITY);
+ Intent intent = new Intent(this, VCardService.class);
+ intent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity);
+
+ if (startService(intent) == null) {
+ Log.e(LOG_TAG, "Failed to start vCard service");
+ showErrorDialog();
+ return;
+ }
+
+ if (!bindService(intent, this, Context.BIND_AUTO_CREATE)) {
+ Log.e(LOG_TAG, "Failed to connect to vCard service.");
+ showErrorDialog();
+ }
+ // Continued to onServiceConnected()
+ }
+
+ private boolean hasExportIntentHandler() {
+ final Intent intent = getCreateDocIntent();
+ final List<ResolveInfo> receivers = getPackageManager().queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+ return receivers != null && receivers.size() > 0;
+ }
+
+ private Intent getCreateDocIntent() {
+ final Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType(VCardService.X_VCARD_MIME_TYPE);
+ intent.putExtra(Intent.EXTRA_TITLE, mBidiFormatter.unicodeWrap(
+ getString(R.string.exporting_vcard_filename), TextDirectionHeuristics.LTR));
+ return intent;
+ }
+
+ private void showErrorDialog() {
+ mErrorReason = getString(R.string.fail_reason_unknown);
+ showDialog(R.id.dialog_fail_to_export_with_reason);
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_CREATE_DOCUMENT) {
+ if (resultCode == Activity.RESULT_OK && mService != null &&
+ data != null && data.getData() != null) {
+ final Uri targetFileName = data.getData();
+ if (DEBUG) Log.d(LOG_TAG, "exporting to " + targetFileName);
+ final ExportRequest request = new ExportRequest(targetFileName);
+ // The connection object will call finish().
+ mService.handleExportRequest(request, new NotificationImportExportListener(
+ ExportVCardActivity.this));
+ } else if (DEBUG) {
+ if (mService == null) {
+ Log.d(LOG_TAG, "No vCard service.");
+ } else {
+ Log.d(LOG_TAG, "create document cancelled or no data returned");
+ }
+ }
+ finish();
+ }
+ }
+
+ @Override
+ public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
+ if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
+ mConnected = true;
+ mService = ((VCardService.MyBinder) binder).getService();
+
+ // Have the user choose where vcards will be exported to
+ startActivityForResult(getCreateDocIntent(), REQUEST_CREATE_DOCUMENT);
+ }
+
+ // Use synchronized since we don't want to call finish() just after this call.
+ @Override
+ public synchronized void onServiceDisconnected(ComponentName name) {
+ if (DEBUG) Log.d(LOG_TAG, "onServiceDisconnected()");
+ mService = null;
+ mConnected = false;
+ if (mProcessOngoing) {
+ // Unexpected disconnect event.
+ Log.w(LOG_TAG, "Disconnected from service during the process ongoing.");
+ showErrorDialog();
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id, Bundle bundle) {
+ if (id == R.id.dialog_fail_to_export_with_reason) {
+ mProcessOngoing = false;
+ return new AlertDialog.Builder(this)
+ .setTitle(R.string.exporting_contact_failed_title)
+ .setMessage(getString(R.string.exporting_contact_failed_message,
+ mErrorReason != null ? mErrorReason :
+ getString(R.string.fail_reason_unknown)))
+ .setPositiveButton(android.R.string.ok, this)
+ .setOnCancelListener(this)
+ .create();
+ }
+ return super.onCreateDialog(id, bundle);
+ }
+
+ @Override
+ protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
+ if (id == R.id.dialog_fail_to_export_with_reason) {
+ ((AlertDialog)dialog).setMessage(mErrorReason);
+ } else {
+ super.onPrepareDialog(id, dialog, args);
+ }
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onClick() is called");
+ finish();
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onCancel() is called");
+ mProcessOngoing = false;
+ finish();
+ }
+
+ @Override
+ public void unbindService(ServiceConnection conn) {
+ mProcessOngoing = false;
+ super.unbindService(conn);
+ }
+
+ @Override
+ protected void onDestroy() {
+ if (mConnected) {
+ unbindService(this);
+ mConnected = false;
+ }
+ super.onDestroy();
+ }
+
+ /**
+ * Returns the display name for the given openable Uri or null if it could not be resolved. */
+ static String getOpenableUriDisplayName(Context context, Uri uri) {
+ if (uri == null) return null;
+ final Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+ try {
+ if (cursor != null && cursor.moveToFirst()) {
+ return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
new file mode 100644
index 000000000..c6fcccb8c
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.accounts.Account;
+import android.app.Notification;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.util.Log;
+
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryCommitter;
+import com.android.vcard.VCardEntryConstructor;
+import com.android.vcard.VCardEntryHandler;
+import com.android.vcard.VCardInterpreter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNotSupportedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class for processing one import request from a user. Dropped after importing requested Uri(s).
+ * {@link VCardService} will create another object when there is another import request.
+ */
+public class ImportProcessor extends ProcessorBase implements VCardEntryHandler {
+ private static final String LOG_TAG = "VCardImport";
+ private static final boolean DEBUG = VCardService.DEBUG;
+
+ private final VCardService mService;
+ private final ContentResolver mResolver;
+ private final ImportRequest mImportRequest;
+ private final int mJobId;
+ private final VCardImportExportListener mListener;
+
+ // TODO: remove and show appropriate message instead.
+ private final List<Uri> mFailedUris = new ArrayList<Uri>();
+
+ private VCardParser mVCardParser;
+
+ private volatile boolean mCanceled;
+ private volatile boolean mDone;
+
+ private int mCurrentCount = 0;
+ private int mTotalCount = 0;
+
+ public ImportProcessor(final VCardService service, final VCardImportExportListener listener,
+ final ImportRequest request, final int jobId) {
+ mService = service;
+ mResolver = mService.getContentResolver();
+ mListener = listener;
+
+ mImportRequest = request;
+ mJobId = jobId;
+ }
+
+ @Override
+ public void onStart() {
+ // do nothing
+ }
+
+ @Override
+ public void onEnd() {
+ // do nothing
+ }
+
+ @Override
+ public void onEntryCreated(VCardEntry entry) {
+ mCurrentCount++;
+ if (mListener != null) {
+ final Notification notification = mListener.onImportParsed(mImportRequest, mJobId,
+ entry, mCurrentCount, mTotalCount);
+ if (notification != null) {
+ mService.startForeground(mJobId, notification);
+ }
+ }
+ }
+
+ @Override
+ public final int getType() {
+ return VCardService.TYPE_IMPORT;
+ }
+
+ @Override
+ public void run() {
+ // ExecutorService ignores RuntimeException, so we need to show it here.
+ try {
+ runInternal();
+
+ if (isCancelled() && mListener != null) {
+ mListener.onImportCanceled(mImportRequest, mJobId);
+ }
+ } catch (OutOfMemoryError|RuntimeException e) {
+ FeedbackHelper.sendFeedback(mService, LOG_TAG, "Vcard import failed", e);
+ } finally {
+ synchronized (this) {
+ mDone = true;
+ }
+ }
+ }
+
+ private void runInternal() {
+ Log.i(LOG_TAG, String.format("vCard import (id: %d) has started.", mJobId));
+ final ImportRequest request = mImportRequest;
+ if (isCancelled()) {
+ Log.i(LOG_TAG, "Canceled before actually handling parameter (" + request.uri + ")");
+ return;
+ }
+ final int[] possibleVCardVersions;
+ if (request.vcardVersion == ImportVCardActivity.VCARD_VERSION_AUTO_DETECT) {
+ /**
+ * Note: this code assumes that a given Uri is able to be opened more than once,
+ * which may not be true in certain conditions.
+ */
+ possibleVCardVersions = new int[] {
+ ImportVCardActivity.VCARD_VERSION_V21,
+ ImportVCardActivity.VCARD_VERSION_V30
+ };
+ } else {
+ possibleVCardVersions = new int[] {
+ request.vcardVersion
+ };
+ }
+
+ final Uri uri = request.uri;
+ final Account account = request.account;
+ final int estimatedVCardType = request.estimatedVCardType;
+ final String estimatedCharset = request.estimatedCharset;
+ final int entryCount = request.entryCount;
+ mTotalCount += entryCount;
+
+ final VCardEntryConstructor constructor =
+ new VCardEntryConstructor(estimatedVCardType, account, estimatedCharset);
+ final VCardEntryCommitter committer = new VCardEntryCommitter(mResolver);
+ constructor.addEntryHandler(committer);
+ constructor.addEntryHandler(this);
+
+ InputStream is = null;
+ boolean successful = false;
+ try {
+ if (uri != null) {
+ Log.i(LOG_TAG, "start importing one vCard (Uri: " + uri + ")");
+ is = mResolver.openInputStream(uri);
+ } else if (request.data != null){
+ Log.i(LOG_TAG, "start importing one vCard (byte[])");
+ is = new ByteArrayInputStream(request.data);
+ }
+
+ if (is != null) {
+ successful = readOneVCard(is, estimatedVCardType, estimatedCharset, constructor,
+ possibleVCardVersions);
+ }
+ } catch (IOException e) {
+ successful = false;
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+ }
+
+ mService.handleFinishImportNotification(mJobId, successful);
+
+ if (successful) {
+ // TODO: successful becomes true even when cancelled. Should return more appropriate
+ // value
+ if (isCancelled()) {
+ Log.i(LOG_TAG, "vCard import has been canceled (uri: " + uri + ")");
+ // Cancel notification will be done outside this method.
+ } else {
+ Log.i(LOG_TAG, "Successfully finished importing one vCard file: " + uri);
+ List<Uri> uris = committer.getCreatedUris();
+ if (mListener != null) {
+ if (uris != null && uris.size() == 1) {
+ mListener.onImportFinished(mImportRequest, mJobId, uris.get(0));
+ } else {
+ if (uris == null || uris.size() == 0) {
+ // Not critical, but suspicious.
+ Log.w(LOG_TAG, "Created Uris is null or 0 length " +
+ "though the creation itself is successful.");
+ }
+ mListener.onImportFinished(mImportRequest, mJobId, null);
+ }
+ }
+ }
+ } else {
+ Log.w(LOG_TAG, "Failed to read one vCard file: " + uri);
+ mFailedUris.add(uri);
+ }
+ }
+
+ private boolean readOneVCard(InputStream is, int vcardType, String charset,
+ final VCardInterpreter interpreter,
+ final int[] possibleVCardVersions) {
+ boolean successful = false;
+ final int length = possibleVCardVersions.length;
+ for (int i = 0; i < length; i++) {
+ final int vcardVersion = possibleVCardVersions[i];
+ try {
+ if (i > 0 && (interpreter instanceof VCardEntryConstructor)) {
+ // Let the object clean up internal temporary objects,
+ ((VCardEntryConstructor) interpreter).clear();
+ }
+
+ // We need synchronized block here,
+ // since we need to handle mCanceled and mVCardParser at once.
+ // In the worst case, a user may call cancel() just before creating
+ // mVCardParser.
+ synchronized (this) {
+ mVCardParser = (vcardVersion == ImportVCardActivity.VCARD_VERSION_V30 ?
+ new VCardParser_V30(vcardType) :
+ new VCardParser_V21(vcardType));
+ if (isCancelled()) {
+ Log.i(LOG_TAG, "ImportProcessor already recieves cancel request, so " +
+ "send cancel request to vCard parser too.");
+ mVCardParser.cancel();
+ }
+ }
+ mVCardParser.parse(is, interpreter);
+
+ successful = true;
+ break;
+ } catch (IOException|VCardNotSupportedException e) {
+ // VCardNestedException (a subclass of VCardNotSupportedException) should
+ // not be thrown here. We should instead handle it
+ // in the preprocessing session in ImportVCardActivity, as we don't try
+ // to detect the type of given vCard here.
+ //
+ // TODO: Handle this case appropriately, which should mean we have to have
+ // code trying to auto-detect the type of given vCard twice (both in
+ // ImportVCardActivity and ImportVCardService).
+ FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to read vcard", e);
+ } catch (VCardVersionException e) {
+ if (i == length - 1) {
+ Log.e(LOG_TAG, "Appropriate version for this vCard is not found.");
+ } else {
+ // We'll try the other (v30) version.
+ }
+ } catch (VCardException e) {
+ Log.e(LOG_TAG, e.toString());
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+ }
+
+ return successful;
+ }
+
+ @Override
+ public synchronized boolean cancel(boolean mayInterruptIfRunning) {
+ if (DEBUG) Log.d(LOG_TAG, "ImportProcessor received cancel request");
+ if (mDone || mCanceled) {
+ return false;
+ }
+ mCanceled = true;
+ synchronized (this) {
+ if (mVCardParser != null) {
+ mVCardParser.cancel();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public synchronized boolean isCancelled() {
+ return mCanceled;
+ }
+
+
+ @Override
+ public synchronized boolean isDone() {
+ return mDone;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ImportRequest.java b/src/com/android/contacts/vcard/ImportRequest.java
new file mode 100644
index 000000000..6e9470f2b
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportRequest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.accounts.Account;
+import android.net.Uri;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.vcard.VCardSourceDetector;
+
+/**
+ * Class representing one request for importing vCard (given as a Uri).
+ *
+ * Mainly used when {@link ImportVCardActivity} requests {@link VCardService}
+ * to import some specific Uri.
+ *
+ * Note: This object's accepting only One Uri does NOT mean that
+ * there's only one vCard entry inside the instance, as one Uri often has multiple
+ * vCard entries inside it.
+ */
+public class ImportRequest {
+ /**
+ * Can be null (typically when there's no Account available in the system).
+ */
+ public final Account account;
+
+ /**
+ * Uri to be imported. May have different content than originally given from users, so
+ * when displaying user-friendly information (e.g. "importing xxx.vcf"), use
+ * {@link #displayName} instead.
+ *
+ * If this is null {@link #data} contains the byte stream of the vcard.
+ */
+ public final Uri uri;
+
+ /**
+ * Holds the byte stream of the vcard, if {@link #uri} is null.
+ */
+ public final byte[] data;
+
+ /**
+ * String to be displayed to the user to indicate the source of the VCARD.
+ */
+ public final String displayName;
+
+ /**
+ * Can be {@link VCardSourceDetector#PARSE_TYPE_UNKNOWN}.
+ */
+ public final int estimatedVCardType;
+
+ /**
+ * Can be null, meaning no preferable charset is available.
+ */
+ public final String estimatedCharset;
+
+ /**
+ * Assumes that one Uri contains only one version, while there's a (tiny) possibility
+ * we may have two types in one vCard.
+ *
+ * e.g.
+ * BEGIN:VCARD
+ * VERSION:2.1
+ * ...
+ * END:VCARD
+ * BEGIN:VCARD
+ * VERSION:3.0
+ * ...
+ * END:VCARD
+ *
+ * We've never seen this kind of a file, but we may have to cope with it in the future.
+ */
+ public final int vcardVersion;
+
+ /**
+ * The count of vCard entries in {@link #uri}. A receiver of this object can use it
+ * when showing the progress of import. Thus a receiver must be able to torelate this
+ * variable being invalid because of vCard's limitation.
+ *
+ * vCard does not let us know this count without looking over a whole file content,
+ * which means we have to open and scan over {@link #uri} to know this value, while
+ * it may not be opened more than once (Uri does not require it to be opened multiple times
+ * and may become invalid after its close() request).
+ */
+ public final int entryCount;
+
+ public ImportRequest(AccountWithDataSet account,
+ byte[] data, Uri uri, String displayName, int estimatedType, String estimatedCharset,
+ int vcardVersion, int entryCount) {
+ this.account = account != null ? account.getAccountOrNull() : null;
+ this.data = data;
+ this.uri = uri;
+ this.displayName = displayName;
+ this.estimatedVCardType = estimatedType;
+ this.estimatedCharset = estimatedCharset;
+ this.vcardVersion = vcardVersion;
+ this.entryCount = entryCount;
+ }
+}
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
new file mode 100644
index 000000000..2c69cdfd6
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -0,0 +1,811 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ClipData;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.provider.OpenableColumns;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestImportVCardPermissionsActivity;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntryCounter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardSourceDetector;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNestedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * The class letting users to import vCard. This includes the UI part for letting them select
+ * an Account and posssibly a file if there's no Uri is given from its caller Activity.
+ *
+ * Note that this Activity assumes that the instance is a "one-shot Activity", which will be
+ * finished (with the method {@link Activity#finish()}) after the import and never reuse
+ * any Dialog in the instance. So this code is careless about the management around managed
+ * dialogs stuffs (like how onCreateDialog() is used).
+ */
+public class ImportVCardActivity extends Activity implements ImportVCardDialogFragment.Listener {
+ private static final String LOG_TAG = "VCardImport";
+
+ private static final int SELECT_ACCOUNT = 0;
+
+ /* package */ final static int VCARD_VERSION_AUTO_DETECT = 0;
+ /* package */ final static int VCARD_VERSION_V21 = 1;
+ /* package */ final static int VCARD_VERSION_V30 = 2;
+
+ private static final int REQUEST_OPEN_DOCUMENT = 100;
+
+ /**
+ * Notification id used when error happened before sending an import request to VCardServer.
+ */
+ private static final int FAILURE_NOTIFICATION_ID = 1;
+
+ private static final String LOCAL_TMP_FILE_NAME_EXTRA =
+ "com.android.contacts.vcard.LOCAL_TMP_FILE_NAME";
+
+ private static final String SOURCE_URI_DISPLAY_NAME =
+ "com.android.contacts.vcard.SOURCE_URI_DISPLAY_NAME";
+
+ private static final String STORAGE_VCARD_URI_PREFIX = "file:///storage";
+
+ private AccountWithDataSet mAccount;
+
+ private ProgressDialog mProgressDialogForCachingVCard;
+
+ private VCardCacheThread mVCardCacheThread;
+ private ImportRequestConnection mConnection;
+ /* package */ VCardImportExportListener mListener;
+
+ private String mErrorMessage;
+
+ private Handler mHandler = new Handler();
+
+ // Runs on the UI thread.
+ private class DialogDisplayer implements Runnable {
+ private final int mResId;
+ public DialogDisplayer(int resId) {
+ mResId = resId;
+ }
+ public DialogDisplayer(String errorMessage) {
+ mResId = R.id.dialog_error_with_message;
+ mErrorMessage = errorMessage;
+ }
+ @Override
+ public void run() {
+ if (!isFinishing()) {
+ showDialog(mResId);
+ }
+ }
+ }
+
+ private class CancelListener
+ implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+ }
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ }
+
+ private CancelListener mCancelListener = new CancelListener();
+
+ private class ImportRequestConnection implements ServiceConnection {
+ private VCardService mService;
+
+ public void sendImportRequest(final List<ImportRequest> requests) {
+ Log.i(LOG_TAG, "Send an import request");
+ mService.handleImportRequest(requests, mListener);
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder binder) {
+ mService = ((VCardService.MyBinder) binder).getService();
+ Log.i(LOG_TAG,
+ String.format("Connected to VCardService. Kick a vCard cache thread (uri: %s)",
+ Arrays.toString(mVCardCacheThread.getSourceUris())));
+ mVCardCacheThread.start();
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ Log.i(LOG_TAG, "Disconnected from VCardService");
+ }
+ }
+
+ /**
+ * Caches given vCard files into a local directory, and sends actual import request to
+ * {@link VCardService}.
+ *
+ * We need to cache given files into local storage. One of reasons is that some data (as Uri)
+ * may have special permissions. Callers may allow only this Activity to access that content,
+ * not what this Activity launched (like {@link VCardService}).
+ */
+ private class VCardCacheThread extends Thread
+ implements DialogInterface.OnCancelListener {
+ private boolean mCanceled;
+ private PowerManager.WakeLock mWakeLock;
+ private VCardParser mVCardParser;
+ private final Uri[] mSourceUris; // Given from a caller.
+ private final String[] mSourceDisplayNames; // Display names for each Uri in mSourceUris.
+ private final byte[] mSource;
+ private final String mDisplayName;
+
+ public VCardCacheThread(final Uri[] sourceUris, String[] sourceDisplayNames) {
+ mSourceUris = sourceUris;
+ mSourceDisplayNames = sourceDisplayNames;
+ mSource = null;
+ final Context context = ImportVCardActivity.this;
+ final PowerManager powerManager =
+ (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = powerManager.newWakeLock(
+ PowerManager.SCREEN_DIM_WAKE_LOCK |
+ PowerManager.ON_AFTER_RELEASE, LOG_TAG);
+ mDisplayName = null;
+ }
+
+ @Override
+ public void finalize() {
+ if (mWakeLock != null && mWakeLock.isHeld()) {
+ Log.w(LOG_TAG, "WakeLock is being held.");
+ mWakeLock.release();
+ }
+ }
+
+ @Override
+ public void run() {
+ Log.i(LOG_TAG, "vCard cache thread starts running.");
+ if (mConnection == null) {
+ throw new NullPointerException("vCard cache thread must be launched "
+ + "after a service connection is established");
+ }
+
+ mWakeLock.acquire();
+ try {
+ if (mCanceled == true) {
+ Log.i(LOG_TAG, "vCard cache operation is canceled.");
+ return;
+ }
+
+ final Context context = ImportVCardActivity.this;
+ // Uris given from caller applications may not be opened twice: consider when
+ // it is not from local storage (e.g. "file:///...") but from some special
+ // provider (e.g. "content://...").
+ // Thus we have to once copy the content of Uri into local storage, and read
+ // it after it.
+ //
+ // We may be able to read content of each vCard file during copying them
+ // to local storage, but currently vCard code does not allow us to do so.
+ int cache_index = 0;
+ ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
+ if (mSource != null) {
+ try {
+ requests.add(constructImportRequest(mSource, null, mDisplayName));
+ } catch (VCardException e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "Failed to cache vcard", e);
+ showFailureNotification(R.string.fail_reason_not_supported);
+ return;
+ }
+ } else {
+ int i = 0;
+ for (Uri sourceUri : mSourceUris) {
+ if (mCanceled) {
+ Log.i(LOG_TAG, "vCard cache operation is canceled.");
+ break;
+ }
+
+ String sourceDisplayName = mSourceDisplayNames[i++];
+
+ final ImportRequest request;
+ try {
+ request = constructImportRequest(null, sourceUri, sourceDisplayName);
+ } catch (VCardException e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "Failed to cache vcard", e);
+ showFailureNotification(R.string.fail_reason_not_supported);
+ return;
+ } catch (IOException e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "Failed to cache vcard", e);
+ showFailureNotification(R.string.fail_reason_io_error);
+ return;
+ }
+ if (mCanceled) {
+ Log.i(LOG_TAG, "vCard cache operation is canceled.");
+ return;
+ }
+ requests.add(request);
+ }
+ }
+ if (!requests.isEmpty()) {
+ mConnection.sendImportRequest(requests);
+ } else {
+ Log.w(LOG_TAG, "Empty import requests. Ignore it.");
+ }
+ } catch (OutOfMemoryError e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "OutOfMemoryError occured during caching vCard", e);
+ System.gc();
+ runOnUiThread(new DialogDisplayer(
+ getString(R.string.fail_reason_low_memory_during_import)));
+ } catch (IOException e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "IOException during caching vCard", e);
+ runOnUiThread(new DialogDisplayer(
+ getString(R.string.fail_reason_io_error)));
+ } finally {
+ Log.i(LOG_TAG, "Finished caching vCard.");
+ mWakeLock.release();
+ try {
+ unbindService(mConnection);
+ } catch (IllegalArgumentException e) {
+ FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+ "Cannot unbind service connection", e);
+ }
+ mProgressDialogForCachingVCard.dismiss();
+ mProgressDialogForCachingVCard = null;
+ finish();
+ }
+ }
+
+ /**
+ * Reads localDataUri (possibly multiple times) and constructs {@link ImportRequest} from
+ * its content.
+ *
+ * @arg localDataUri Uri actually used for the import. Should be stored in
+ * app local storage, as we cannot guarantee other types of Uris can be read
+ * multiple times. This variable populates {@link ImportRequest#uri}.
+ * @arg displayName Used for displaying information to the user. This variable populates
+ * {@link ImportRequest#displayName}.
+ */
+ private ImportRequest constructImportRequest(final byte[] data,
+ final Uri localDataUri, final String displayName)
+ throws IOException, VCardException {
+ final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
+ VCardEntryCounter counter = null;
+ VCardSourceDetector detector = null;
+ int vcardVersion = VCARD_VERSION_V21;
+ try {
+ boolean shouldUseV30 = false;
+ InputStream is;
+ if (data != null) {
+ is = new ByteArrayInputStream(data);
+ } else {
+ is = resolver.openInputStream(localDataUri);
+ }
+ mVCardParser = new VCardParser_V21();
+ try {
+ counter = new VCardEntryCounter();
+ detector = new VCardSourceDetector();
+ mVCardParser.addInterpreter(counter);
+ mVCardParser.addInterpreter(detector);
+ mVCardParser.parse(is);
+ } catch (VCardVersionException e1) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+
+ shouldUseV30 = true;
+ if (data != null) {
+ is = new ByteArrayInputStream(data);
+ } else {
+ is = resolver.openInputStream(localDataUri);
+ }
+ mVCardParser = new VCardParser_V30();
+ try {
+ counter = new VCardEntryCounter();
+ detector = new VCardSourceDetector();
+ mVCardParser.addInterpreter(counter);
+ mVCardParser.addInterpreter(detector);
+ mVCardParser.parse(is);
+ } catch (VCardVersionException e2) {
+ throw new VCardException("vCard with unspported version.");
+ }
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ vcardVersion = shouldUseV30 ? VCARD_VERSION_V30 : VCARD_VERSION_V21;
+ } catch (VCardNestedException e) {
+ Log.w(LOG_TAG, "Nested Exception is found (it may be false-positive).");
+ // Go through without throwing the Exception, as we may be able to detect the
+ // version before it
+ }
+ return new ImportRequest(mAccount,
+ data, localDataUri, displayName,
+ detector.getEstimatedType(),
+ detector.getEstimatedCharset(),
+ vcardVersion, counter.getCount());
+ }
+
+ public Uri[] getSourceUris() {
+ return mSourceUris;
+ }
+
+ public void cancel() {
+ mCanceled = true;
+ if (mVCardParser != null) {
+ mVCardParser.cancel();
+ }
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ Log.i(LOG_TAG, "Cancel request has come. Abort caching vCard.");
+ cancel();
+ }
+ }
+
+ private void importVCard(final Uri uri, final String sourceDisplayName) {
+ importVCard(new Uri[] {uri}, new String[] {sourceDisplayName});
+ }
+
+ private void importVCard(final Uri[] uris, final String[] sourceDisplayNames) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (!isFinishing()) {
+ mVCardCacheThread = new VCardCacheThread(uris, sourceDisplayNames);
+ mListener = new NotificationImportExportListener(ImportVCardActivity.this);
+ showDialog(R.id.dialog_cache_vcard);
+ }
+ }
+ });
+ }
+
+ private String getDisplayName(Uri sourceUri) {
+ if (sourceUri == null) {
+ return null;
+ }
+ final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
+ String displayName = null;
+ Cursor cursor = null;
+ // Try to get a display name from the given Uri. If it fails, we just
+ // pick up the last part of the Uri.
+ try {
+ cursor = resolver.query(sourceUri,
+ new String[] { OpenableColumns.DISPLAY_NAME },
+ null, null, null);
+ if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
+ if (cursor.getCount() > 1) {
+ Log.w(LOG_TAG, "Unexpected multiple rows: "
+ + cursor.getCount());
+ }
+ int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
+ if (index >= 0) {
+ displayName = cursor.getString(index);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ if (TextUtils.isEmpty(displayName)){
+ displayName = sourceUri.getLastPathSegment();
+ }
+ return displayName;
+ }
+
+ /**
+ * Copy the content of sourceUri to the destination.
+ */
+ private Uri copyTo(final Uri sourceUri, String filename) throws IOException {
+ Log.i(LOG_TAG, String.format("Copy a Uri to app local storage (%s -> %s)",
+ sourceUri, filename));
+ final Context context = ImportVCardActivity.this;
+ final ContentResolver resolver = context.getContentResolver();
+ ReadableByteChannel inputChannel = null;
+ WritableByteChannel outputChannel = null;
+ Uri destUri = null;
+ try {
+ inputChannel = Channels.newChannel(resolver.openInputStream(sourceUri));
+ destUri = Uri.parse(context.getFileStreamPath(filename).toURI().toString());
+ outputChannel = context.openFileOutput(filename, Context.MODE_PRIVATE).getChannel();
+ final ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
+ while (inputChannel.read(buffer) != -1) {
+ buffer.flip();
+ outputChannel.write(buffer);
+ buffer.compact();
+ }
+ buffer.flip();
+ while (buffer.hasRemaining()) {
+ outputChannel.write(buffer);
+ }
+ } finally {
+ if (inputChannel != null) {
+ try {
+ inputChannel.close();
+ } catch (IOException e) {
+ Log.w(LOG_TAG, "Failed to close inputChannel.");
+ }
+ }
+ if (outputChannel != null) {
+ try {
+ outputChannel.close();
+ } catch(IOException e) {
+ Log.w(LOG_TAG, "Failed to close outputChannel");
+ }
+ }
+ }
+ return destUri;
+ }
+
+ /**
+ * Reads the file from {@param sourceUri} and copies it to local cache file.
+ * Returns the local file name which stores the file from sourceUri.
+ */
+ private String readUriToLocalFile(Uri sourceUri) {
+ // Read the uri to local first.
+ int cache_index = 0;
+ String localFilename = null;
+ // Note: caches are removed by VCardService.
+ while (true) {
+ localFilename = VCardService.CACHE_FILE_PREFIX + cache_index + ".vcf";
+ final File file = getFileStreamPath(localFilename);
+ if (!file.exists()) {
+ break;
+ } else {
+ if (cache_index == Integer.MAX_VALUE) {
+ throw new RuntimeException("Exceeded cache limit");
+ }
+ cache_index++;
+ }
+ }
+ try {
+ copyTo(sourceUri, localFilename);
+ } catch (IOException|SecurityException e) {
+ FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to copy vcard to local file", e);
+ showFailureNotification(R.string.fail_reason_io_error);
+ return null;
+ }
+
+ if (localFilename == null) {
+ Log.e(LOG_TAG, "Cannot load uri to local storage.");
+ showFailureNotification(R.string.fail_reason_io_error);
+ return null;
+ }
+
+ return localFilename;
+ }
+
+ private Uri readUriToLocalUri(Uri sourceUri) {
+ final String fileName = readUriToLocalFile(sourceUri);
+ if (fileName == null) {
+ return null;
+ }
+ return Uri.parse(getFileStreamPath(fileName).toURI().toString());
+ }
+
+ // Returns true if uri is from Storage.
+ private boolean isStorageUri(Uri uri) {
+ return uri != null && uri.toString().startsWith(STORAGE_VCARD_URI_PREFIX);
+ }
+
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ Uri sourceUri = getIntent().getData();
+
+ // Reading uris from non-storage needs the permission granted from the source intent,
+ // instead of permissions from RequestImportVCardPermissionActivity. So skipping requesting
+ // permissions from RequestImportVCardPermissionActivity for uris from non-storage source.
+ if (isStorageUri(sourceUri) && RequestImportVCardPermissionsActivity
+ .startPermissionActivity(this, isCallerSelf(this))) {
+ return;
+ }
+
+ String sourceDisplayName = null;
+ if (sourceUri != null) {
+ // Read the uri to local first.
+ String localTmpFileName = getIntent().getStringExtra(LOCAL_TMP_FILE_NAME_EXTRA);
+ sourceDisplayName = getIntent().getStringExtra(SOURCE_URI_DISPLAY_NAME);
+ if (TextUtils.isEmpty(localTmpFileName)) {
+ localTmpFileName = readUriToLocalFile(sourceUri);
+ sourceDisplayName = getDisplayName(sourceUri);
+ if (localTmpFileName == null) {
+ Log.e(LOG_TAG, "Cannot load uri to local storage.");
+ showFailureNotification(R.string.fail_reason_io_error);
+ return;
+ }
+ getIntent().putExtra(LOCAL_TMP_FILE_NAME_EXTRA, localTmpFileName);
+ getIntent().putExtra(SOURCE_URI_DISPLAY_NAME, sourceDisplayName);
+ }
+ sourceUri = Uri.parse(getFileStreamPath(localTmpFileName).toURI().toString());
+ }
+
+ // Always request required permission for contacts before importing the vcard.
+ if (RequestImportVCardPermissionsActivity.startPermissionActivity(this,
+ isCallerSelf(this))) {
+ return;
+ }
+
+ String accountName = null;
+ String accountType = null;
+ String dataSet = null;
+ final Intent intent = getIntent();
+ if (intent != null) {
+ accountName = intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME);
+ accountType = intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE);
+ dataSet = intent.getStringExtra(SelectAccountActivity.DATA_SET);
+ } else {
+ Log.e(LOG_TAG, "intent does not exist");
+ }
+
+ if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
+ mAccount = new AccountWithDataSet(accountName, accountType, dataSet);
+ } else {
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+ final List<AccountWithDataSet> accountList = accountTypes.blockForWritableAccounts();
+ if (accountList.size() == 0) {
+ mAccount = null;
+ } else if (accountList.size() == 1) {
+ mAccount = accountList.get(0);
+ } else {
+ startActivityForResult(new Intent(this, SelectAccountActivity.class),
+ SELECT_ACCOUNT);
+ return;
+ }
+ }
+
+ if (isCallerSelf(this)) {
+ startImport(sourceUri, sourceDisplayName);
+ } else {
+ ImportVCardDialogFragment.show(this, sourceUri, sourceDisplayName);
+ }
+ }
+
+ private static boolean isCallerSelf(Activity activity) {
+ // {@link Activity#getCallingActivity()} is a safer alternative to
+ // {@link Activity#getCallingPackage()} that works around a
+ // framework bug where getCallingPackage() can sometimes return null even when the
+ // current activity *was* in fact launched via a startActivityForResult() call.
+ //
+ // (The bug happens if the task stack needs to be re-created by the framework after
+ // having been killed due to memory pressure or by the "Don't keep activities"
+ // developer option; see bug 7494866 for the full details.)
+ //
+ // Turns out that {@link Activity#getCallingActivity()} *does* return correct info
+ // even in the case where getCallingPackage() is broken, so the workaround is simply
+ // to get the package name from getCallingActivity().getPackageName() instead.
+ final ComponentName callingActivity = activity.getCallingActivity();
+ if (callingActivity == null) return false;
+ final String packageName = callingActivity.getPackageName();
+ if (packageName == null) return false;
+ return packageName.equals(activity.getApplicationContext().getPackageName());
+ }
+
+ @Override
+ public void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName) {
+ startImport(sourceUri, sourceDisplayName);
+ }
+
+ @Override
+ public void onImportVCardDenied() {
+ finish();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ if (requestCode == SELECT_ACCOUNT) {
+ if (resultCode == Activity.RESULT_OK) {
+ mAccount = new AccountWithDataSet(
+ intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
+ intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
+ intent.getStringExtra(SelectAccountActivity.DATA_SET));
+ final Uri sourceUri = getIntent().getData();
+ if (sourceUri == null) {
+ startImport(sourceUri, /* sourceDisplayName =*/ null);
+ } else {
+ final String sourceDisplayName = getIntent().getStringExtra(
+ SOURCE_URI_DISPLAY_NAME);
+ final String localFileName = getIntent().getStringExtra(
+ LOCAL_TMP_FILE_NAME_EXTRA);
+ final Uri localUri = Uri.parse(
+ getFileStreamPath(localFileName).toURI().toString());
+ startImport(localUri, sourceDisplayName);
+ }
+ } else {
+ if (resultCode != Activity.RESULT_CANCELED) {
+ Log.w(LOG_TAG, "Result code was not OK nor CANCELED: " + resultCode);
+ }
+ finish();
+ }
+ } else if (requestCode == REQUEST_OPEN_DOCUMENT) {
+ if (resultCode == Activity.RESULT_OK) {
+ final ClipData clipData = intent.getClipData();
+ if (clipData != null) {
+ final ArrayList<Uri> uris = new ArrayList<>();
+ final ArrayList<String> sourceDisplayNames = new ArrayList<>();
+ for (int i = 0; i < clipData.getItemCount(); i++) {
+ ClipData.Item item = clipData.getItemAt(i);
+ final Uri uri = item.getUri();
+ if (uri != null) {
+ final Uri localUri = readUriToLocalUri(uri);
+ if (localUri != null) {
+ final String sourceDisplayName = getDisplayName(uri);
+ uris.add(localUri);
+ sourceDisplayNames.add(sourceDisplayName);
+ }
+ }
+ }
+ if (uris.isEmpty()) {
+ Log.w(LOG_TAG, "No vCard was selected for import");
+ finish();
+ } else {
+ Log.i(LOG_TAG, "Multiple vCards selected for import: " + uris);
+ importVCard(uris.toArray(new Uri[0]),
+ sourceDisplayNames.toArray(new String[0]));
+ }
+ } else {
+ final Uri uri = intent.getData();
+ if (uri != null) {
+ Log.i(LOG_TAG, "vCard selected for import: " + uri);
+ final Uri localUri = readUriToLocalUri(uri);
+ if (localUri != null) {
+ final String sourceDisplayName = getDisplayName(uri);
+ importVCard(localUri, sourceDisplayName);
+ } else {
+ Log.w(LOG_TAG, "No local URI for vCard import");
+ finish();
+ }
+ } else {
+ Log.w(LOG_TAG, "No vCard was selected for import");
+ finish();
+ }
+ }
+ } else {
+ if (resultCode != Activity.RESULT_CANCELED) {
+ Log.w(LOG_TAG, "Result code was not OK nor CANCELED" + resultCode);
+ }
+ finish();
+ }
+ }
+ }
+
+ private void startImport(Uri uri, String sourceDisplayName) {
+ // Handle inbound files
+ if (uri != null) {
+ Log.i(LOG_TAG, "Starting vCard import using Uri " + uri);
+ importVCard(uri, sourceDisplayName);
+ } else {
+ Log.i(LOG_TAG, "Start vCard without Uri. The user will select vCard manually.");
+ final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType(VCardService.X_VCARD_MIME_TYPE);
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
+ startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int resId, Bundle bundle) {
+ if (resId == R.id.dialog_cache_vcard) {
+ if (mProgressDialogForCachingVCard == null) {
+ final String title = getString(R.string.caching_vcard_title);
+ final String message = getString(R.string.caching_vcard_message);
+ mProgressDialogForCachingVCard = new ProgressDialog(this);
+ mProgressDialogForCachingVCard.setTitle(title);
+ mProgressDialogForCachingVCard.setMessage(message);
+ mProgressDialogForCachingVCard.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+ mProgressDialogForCachingVCard.setOnCancelListener(mVCardCacheThread);
+ startVCardService();
+ }
+ return mProgressDialogForCachingVCard;
+ } else if (resId == R.id.dialog_error_with_message) {
+ String message = mErrorMessage;
+ if (TextUtils.isEmpty(message)) {
+ Log.e(LOG_TAG, "Error message is null while it must not.");
+ message = getString(R.string.fail_reason_unknown);
+ }
+ final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.reading_vcard_failed_title))
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setMessage(message)
+ .setOnCancelListener(mCancelListener)
+ .setPositiveButton(android.R.string.ok, mCancelListener);
+ return builder.create();
+ }
+
+ return super.onCreateDialog(resId, bundle);
+ }
+
+ /* package */ void startVCardService() {
+ mConnection = new ImportRequestConnection();
+
+ Log.i(LOG_TAG, "Bind to VCardService.");
+ // We don't want the service finishes itself just after this connection.
+ Intent intent = new Intent(this, VCardService.class);
+ startService(intent);
+ bindService(new Intent(this, VCardService.class),
+ mConnection, Context.BIND_AUTO_CREATE);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ if (mProgressDialogForCachingVCard != null) {
+ Log.i(LOG_TAG, "Cache thread is still running. Show progress dialog again.");
+ showDialog(R.id.dialog_cache_vcard);
+ }
+ }
+
+ /* package */ void showFailureNotification(int reasonId) {
+ final NotificationManager notificationManager =
+ (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+ final Notification notification =
+ NotificationImportExportListener.constructImportFailureNotification(
+ ImportVCardActivity.this,
+ getString(reasonId));
+ notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
+ FAILURE_NOTIFICATION_ID, notification);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(ImportVCardActivity.this,
+ getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+}
diff --git a/src/com/android/contacts/vcard/ImportVCardDialogFragment.java b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
new file mode 100644
index 000000000..521a610dd
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
@@ -0,0 +1,91 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+
+import com.android.contacts.R;
+
+/** Asks for confirmation before importing contacts from a vcard. */
+public class ImportVCardDialogFragment extends DialogFragment {
+
+ static final String TAG = "importVCardDialog";
+
+ private static final String ARG_SOURCE_URI = "sourceUri";
+ private static final String ARG_SOURCE_DISPLAY_NAME = "sourceDisplayName";
+
+ /** Callbacks for hosts of the {@link ImportVCardDialogFragment}. */
+ public interface Listener {
+
+ /** Invoked after the user has confirmed that contacts should be imported. */
+ void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName);
+
+ /** Invoked after the user has rejected importing contacts. */
+ void onImportVCardDenied();
+ }
+
+ /** Displays the dialog asking for confirmation before importing contacts. */
+ public static void show(Activity activity, Uri sourceUri,
+ String sourceDisplayName) {
+ if (!(activity instanceof Listener)) {
+ throw new IllegalArgumentException(
+ "Activity must implement " + Listener.class.getName());
+ }
+
+ final Bundle args = new Bundle();
+ args.putParcelable(ARG_SOURCE_URI, sourceUri);
+ args.putString(ARG_SOURCE_DISPLAY_NAME, sourceDisplayName);
+
+ final ImportVCardDialogFragment dialog = new ImportVCardDialogFragment();
+ dialog.setArguments(args);
+ dialog.show(activity.getFragmentManager(), TAG);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Uri sourceUri = getArguments().getParcelable(ARG_SOURCE_URI);
+ final String sourceDisplayName = getArguments().getString(ARG_SOURCE_DISPLAY_NAME);
+
+ return new AlertDialog.Builder(getActivity())
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setMessage(R.string.import_from_vcf_file_confirmation_message)
+ .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int whichButton) {
+ final Listener listener = (Listener) getActivity();
+ if (listener != null) {
+ listener.onImportVCardConfirmed(sourceUri, sourceDisplayName);
+ }
+ }
+ })
+ .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int whichButton) {
+ final Listener listener = (Listener) getActivity();
+ if (listener != null) {
+ listener.onImportVCardDenied();
+ }
+ }
+ })
+ .create();
+ }
+}
diff --git a/src/com/android/contacts/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
new file mode 100644
index 000000000..88fa76035
--- /dev/null
+++ b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
@@ -0,0 +1,305 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.Uri;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryCounter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardSourceDetector;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNestedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class NfcImportVCardActivity extends Activity implements ServiceConnection,
+ VCardImportExportListener {
+ private static final String TAG = "NfcImportVCardActivity";
+
+ private static final int SELECT_ACCOUNT = 1;
+
+ private NdefRecord mRecord;
+ private AccountWithDataSet mAccount;
+ private Handler mHandler = new Handler();
+
+ /**
+ * Notification id used when error happened before sending an import request to VCardServer.
+ */
+ private static final int FAILURE_NOTIFICATION_ID = 1;
+
+ /* package */ class ImportTask extends AsyncTask<VCardService, Void, ImportRequest> {
+ @Override
+ public ImportRequest doInBackground(VCardService... services) {
+ ImportRequest request = createImportRequest();
+ if (request == null) {
+ return null;
+ }
+
+ ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
+ requests.add(request);
+ services[0].handleImportRequest(requests, NfcImportVCardActivity.this);
+ return request;
+ }
+
+ @Override
+ public void onCancelled() {
+ unbindService(NfcImportVCardActivity.this);
+ }
+
+ @Override
+ public void onPostExecute(ImportRequest request) {
+ if (request == null) {
+ // Finish the activity in case of error so it doesn't stay in view.
+ finish();
+ }
+ unbindService(NfcImportVCardActivity.this);
+ }
+ }
+
+ /* package */ ImportRequest createImportRequest() {
+ VCardParser parser;
+ VCardEntryCounter counter = null;
+ VCardSourceDetector detector = null;
+ int vcardVersion = ImportVCardActivity.VCARD_VERSION_V21;
+ try {
+ ByteArrayInputStream is = new ByteArrayInputStream(mRecord.getPayload());
+ is.mark(0);
+ parser = new VCardParser_V21();
+ try {
+ counter = new VCardEntryCounter();
+ detector = new VCardSourceDetector();
+ parser.addInterpreter(counter);
+ parser.addInterpreter(detector);
+ parser.parse(is);
+ } catch (VCardVersionException e1) {
+ is.reset();
+ vcardVersion = ImportVCardActivity.VCARD_VERSION_V30;
+ parser = new VCardParser_V30();
+ try {
+ counter = new VCardEntryCounter();
+ detector = new VCardSourceDetector();
+ parser.addInterpreter(counter);
+ parser.addInterpreter(detector);
+ parser.parse(is);
+ } catch (VCardVersionException e2) {
+ FeedbackHelper.sendFeedback(this, TAG, "vcard with unsupported version", e2);
+ showFailureNotification(R.string.fail_reason_not_supported);
+ return null;
+ }
+ } finally {
+ try {
+ if (is != null) is.close();
+ } catch (IOException e) {
+ }
+ }
+ } catch (IOException e) {
+ FeedbackHelper.sendFeedback(this, TAG, "Failed to read vcard data", e);
+ showFailureNotification(R.string.fail_reason_io_error);
+ return null;
+ } catch (VCardNestedException e) {
+ Log.w(TAG, "Nested Exception is found (it may be false-positive).");
+ // Go through without throwing the Exception, as we may be able to detect the
+ // version before it
+ } catch (VCardException e) {
+ FeedbackHelper.sendFeedback(this, TAG, "Failed to parse vcard", e);
+ showFailureNotification(R.string.fail_reason_not_supported);
+ return null;
+ }
+
+ return new ImportRequest(mAccount, mRecord.getPayload(), null,
+ getString(R.string.nfc_vcard_file_name), detector.getEstimatedType(),
+ detector.getEstimatedCharset(), vcardVersion, counter.getCount());
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder binder) {
+ VCardService service = ((VCardService.MyBinder) binder).getService();
+ new ImportTask().execute(service);
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ // Do nothing
+ }
+
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ if (RequestPermissionsActivity.startPermissionActivityIfNeeded(this)) {
+ return;
+ }
+
+ Intent intent = getIntent();
+ if (!NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
+ Log.w(TAG, "Unknowon intent " + intent);
+ finish();
+ return;
+ }
+
+ String type = intent.getType();
+ if (type == null ||
+ (!"text/x-vcard".equals(type) && !"text/vcard".equals(type))) {
+ Log.w(TAG, "Not a vcard");
+ //setStatus(getString(R.string.fail_reason_not_supported));
+ finish();
+ return;
+ }
+ NdefMessage msg = (NdefMessage) intent.getParcelableArrayExtra(
+ NfcAdapter.EXTRA_NDEF_MESSAGES)[0];
+ mRecord = msg.getRecords()[0];
+
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+ final List<AccountWithDataSet> accountList = accountTypes.blockForWritableAccounts();
+ if (accountList.size() == 0) {
+ mAccount = null;
+ } else if (accountList.size() == 1) {
+ mAccount = accountList.get(0);
+ } else {
+ startActivityForResult(new Intent(this, SelectAccountActivity.class), SELECT_ACCOUNT);
+ return;
+ }
+
+ startImport();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ if (requestCode == SELECT_ACCOUNT) {
+ if (resultCode == RESULT_OK) {
+ mAccount = new AccountWithDataSet(
+ intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
+ intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
+ intent.getStringExtra(SelectAccountActivity.DATA_SET));
+ startImport();
+ } else {
+ finish();
+ }
+ }
+ }
+
+ private void startImport() {
+ // We don't want the service finishes itself just after this connection.
+ Intent intent = new Intent(this, VCardService.class);
+ startService(intent);
+ bindService(intent, this, Context.BIND_AUTO_CREATE);
+ }
+
+ @Override
+ public Notification onImportProcessed(ImportRequest request, int jobId, int sequence) {
+ return null;
+ }
+
+ @Override
+ public Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry,
+ int currentCount, int totalCount) {
+ return null;
+ }
+
+ @Override
+ public void onImportFinished(ImportRequest request, int jobId, Uri uri) {
+ if (isFinishing()) {
+ Log.i(TAG, "Late import -- ignoring");
+ return;
+ }
+
+ if (uri != null) {
+ Uri contactUri = RawContacts.getContactLookupUri(getContentResolver(), uri);
+ Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
+ ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
+ finish();
+ }
+ }
+
+ @Override
+ public void onImportFailed(ImportRequest request) {
+ if (isFinishing()) {
+ Log.i(TAG, "Late import failure -- ignoring");
+ return;
+ }
+ showFailureNotification(R.string.vcard_import_request_rejected_message);
+ finish();
+ }
+
+ @Override
+ public void onImportCanceled(ImportRequest request, int jobId) {
+ // do nothing
+ }
+
+ @Override
+ public Notification onExportProcessed(ExportRequest request, int jobId) {
+ return null;
+ }
+
+ @Override
+ public void onExportFailed(ExportRequest request) {
+ // do nothing
+ }
+
+ @Override
+ public void onCancelRequest(CancelRequest request, int type) {
+ // do nothing
+ }
+
+ /* package */ void showFailureNotification(int reasonId) {
+ final NotificationManager notificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ final Notification notification =
+ NotificationImportExportListener.constructImportFailureNotification(
+ this,
+ getString(reasonId));
+ notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
+ FAILURE_NOTIFICATION_ID, notification);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Toast.makeText(NfcImportVCardActivity.this,
+ getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
+ }
+ });
+ }
+}
diff --git a/src/com/android/contacts/vcard/NotificationImportExportListener.java b/src/com/android/contacts/vcard/NotificationImportExportListener.java
new file mode 100644
index 000000000..beabe26bc
--- /dev/null
+++ b/src/com/android/contacts/vcard/NotificationImportExportListener.java
@@ -0,0 +1,320 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.support.v4.app.NotificationCompat;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.util.ContactsNotificationChannelsUtil;
+import com.android.vcard.VCardEntry;
+
+import java.text.NumberFormat;
+
+public class NotificationImportExportListener implements VCardImportExportListener,
+ Handler.Callback {
+ /** The tag used by vCard-related notifications. */
+ /* package */ static final String DEFAULT_NOTIFICATION_TAG = "VCardServiceProgress";
+ /**
+ * The tag used by vCard-related failure notifications.
+ * <p>
+ * Use a different tag from {@link #DEFAULT_NOTIFICATION_TAG} so that failures do not get
+ * replaced by other notifications and vice-versa.
+ */
+ /* package */ static final String FAILURE_NOTIFICATION_TAG = "VCardServiceFailure";
+
+ private final NotificationManager mNotificationManager;
+ private final Activity mContext;
+ private final Handler mHandler;
+
+ public NotificationImportExportListener(Activity activity) {
+ mContext = activity;
+ mNotificationManager = (NotificationManager) activity.getSystemService(
+ Context.NOTIFICATION_SERVICE);
+ mHandler = new Handler(this);
+ }
+
+ @Override
+ public boolean handleMessage(Message msg) {
+ String text = (String) msg.obj;
+ Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
+ return true;
+ }
+
+ @Override
+ public Notification onImportProcessed(ImportRequest request, int jobId, int sequence) {
+ // Show a notification about the status
+ final String displayName;
+ final String message;
+ if (request.displayName != null) {
+ displayName = request.displayName;
+ message = mContext.getString(R.string.vcard_import_will_start_message, displayName);
+ } else {
+ displayName = mContext.getString(R.string.vcard_unknown_filename);
+ message = mContext.getString(
+ R.string.vcard_import_will_start_message_with_default_name);
+ }
+
+ // We just want to show notification for the first vCard.
+ if (sequence == 0) {
+ // TODO: Ideally we should detect the current status of import/export and
+ // show "started" when we can import right now and show "will start" when
+ // we cannot.
+ mHandler.obtainMessage(0, message).sendToTarget();
+ }
+
+ ContactsNotificationChannelsUtil.createDefaultChannel(mContext);
+ return constructProgressNotification(mContext, VCardService.TYPE_IMPORT, message, message,
+ jobId, displayName, -1, 0);
+ }
+
+ @Override
+ public Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+ int totalCount) {
+ if (entry.isIgnorable()) {
+ return null;
+ }
+
+ final String totalCountString = String.valueOf(totalCount);
+ final String tickerText =
+ mContext.getString(R.string.progress_notifier_message,
+ String.valueOf(currentCount),
+ totalCountString,
+ entry.getDisplayName());
+ final String description = mContext.getString(R.string.importing_vcard_description,
+ entry.getDisplayName());
+
+ return constructProgressNotification(mContext.getApplicationContext(),
+ VCardService.TYPE_IMPORT, description, tickerText, jobId, request.displayName,
+ totalCount, currentCount);
+ }
+
+ @Override
+ public void onImportFinished(ImportRequest request, int jobId, Uri createdUri) {
+ final String description = mContext.getString(R.string.importing_vcard_finished_title,
+ request.displayName);
+ final Intent intent;
+ if (createdUri != null) {
+ final long rawContactId = ContentUris.parseId(createdUri);
+ final Uri contactUri = RawContacts.getContactLookupUri(
+ mContext.getContentResolver(), ContentUris.withAppendedId(
+ RawContacts.CONTENT_URI, rawContactId));
+ intent = new Intent(Intent.ACTION_VIEW, contactUri);
+ } else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
+ }
+ intent.setPackage(mContext.getPackageName());
+ final Notification notification =
+ NotificationImportExportListener.constructFinishNotification(mContext,
+ description, null, intent);
+ mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+ jobId, notification);
+ }
+
+ @Override
+ public void onImportFailed(ImportRequest request) {
+ // TODO: a little unkind to show Toast in this case, which is shown just a moment.
+ // Ideally we should show some persistent something users can notice more easily.
+ mHandler.obtainMessage(0,
+ mContext.getString(R.string.vcard_import_request_rejected_message)).sendToTarget();
+ }
+
+ @Override
+ public void onImportCanceled(ImportRequest request, int jobId) {
+ final String description = mContext.getString(R.string.importing_vcard_canceled_title,
+ request.displayName);
+ final Notification notification =
+ NotificationImportExportListener.constructCancelNotification(mContext, description);
+ mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+ jobId, notification);
+ }
+
+ @Override
+ public Notification onExportProcessed(ExportRequest request, int jobId) {
+ final String displayName = ExportVCardActivity.getOpenableUriDisplayName(mContext,
+ request.destUri);
+ final String message = mContext.getString(R.string.contacts_export_will_start_message);
+
+ mHandler.obtainMessage(0, message).sendToTarget();
+ ContactsNotificationChannelsUtil.createDefaultChannel(mContext);
+ return constructProgressNotification(mContext, VCardService.TYPE_EXPORT, message, message,
+ jobId, displayName, -1, 0);
+ }
+
+ @Override
+ public void onExportFailed(ExportRequest request) {
+ mHandler.obtainMessage(0,
+ mContext.getString(R.string.vcard_export_request_rejected_message)).sendToTarget();
+ }
+
+ @Override
+ public void onCancelRequest(CancelRequest request, int type) {
+ final String description = type == VCardService.TYPE_IMPORT ?
+ mContext.getString(R.string.importing_vcard_canceled_title, request.displayName) :
+ mContext.getString(R.string.exporting_vcard_canceled_title, request.displayName);
+ final Notification notification = constructCancelNotification(mContext, description);
+ mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, request.jobId, notification);
+ }
+
+ /**
+ * Constructs a {@link Notification} showing the current status of import/export.
+ * Users can cancel the process with the Notification.
+ *
+ * @param context
+ * @param type import/export
+ * @param description Content of the Notification.
+ * @param tickerText
+ * @param jobId
+ * @param displayName Name to be shown to the Notification (e.g. "finished importing XXXX").
+ * Typycally a file name.
+ * @param totalCount The number of vCard entries to be imported. Used to show progress bar.
+ * -1 lets the system show the progress bar with "indeterminate" state.
+ * @param currentCount The index of current vCard. Used to show progress bar.
+ */
+ /* package */ static Notification constructProgressNotification(
+ Context context, int type, String description, String tickerText,
+ int jobId, String displayName, int totalCount, int currentCount) {
+ // Note: We cannot use extra values here (like setIntExtra()), as PendingIntent doesn't
+ // preserve them across multiple Notifications. PendingIntent preserves the first extras
+ // (when flag is not set), or update them when PendingIntent#getActivity() is called
+ // (See PendingIntent#FLAG_UPDATE_CURRENT). In either case, we cannot preserve extras as we
+ // expect (for each vCard import/export request).
+ //
+ // We use query parameter in Uri instead.
+ // Scheme and Authority is arbitorary, assuming CancelActivity never refers them.
+ final Intent intent = new Intent(context, CancelActivity.class);
+ final Uri uri = (new Uri.Builder())
+ .scheme("invalidscheme")
+ .authority("invalidauthority")
+ .appendQueryParameter(CancelActivity.JOB_ID, String.valueOf(jobId))
+ .appendQueryParameter(CancelActivity.DISPLAY_NAME, displayName)
+ .appendQueryParameter(CancelActivity.TYPE, String.valueOf(type)).build();
+ intent.setData(uri);
+
+ final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
+ builder.setOngoing(true)
+ .setChannelId(ContactsNotificationChannelsUtil.DEFAULT_CHANNEL)
+ .setOnlyAlertOnce(true)
+ .setProgress(totalCount, currentCount, totalCount == - 1)
+ .setTicker(tickerText)
+ .setContentTitle(description)
+ .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(type == VCardService.TYPE_IMPORT
+ ? android.R.drawable.stat_sys_download
+ : android.R.drawable.stat_sys_upload)
+ .setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
+ if (totalCount > 0) {
+ String percentage =
+ NumberFormat.getPercentInstance().format((double) currentCount / totalCount);
+ builder.setContentText(percentage);
+ }
+ return builder.build();
+ }
+
+ /**
+ * Constructs a Notification telling users the process is canceled.
+ *
+ * @param context
+ * @param description Content of the Notification
+ */
+ /* package */ static Notification constructCancelNotification(
+ Context context, String description) {
+ ContactsNotificationChannelsUtil.createDefaultChannel(context);
+ return new NotificationCompat.Builder(context,
+ ContactsNotificationChannelsUtil.DEFAULT_CHANNEL)
+ .setAutoCancel(true)
+ .setSmallIcon(android.R.drawable.stat_notify_error)
+ .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+ .setContentTitle(description)
+ .setContentText(description)
+ // Launch an intent that won't resolve to anything. Restrict the intent to this
+ // app to make sure that no other app can steal this pending-intent b/19296918.
+ .setContentIntent(PendingIntent
+ .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
+ .build();
+ }
+
+ /**
+ * Constructs a Notification telling users the process is finished.
+ *
+ * @param context
+ * @param description Content of the Notification
+ * @param intent Intent to be launched when the Notification is clicked. Can be null.
+ */
+ /* package */ static Notification constructFinishNotification(
+ Context context, String title, String description, Intent intent) {
+ return constructFinishNotificationWithFlags(context, title, description, intent, 0);
+ }
+
+ /**
+ * @param flags use FLAG_ACTIVITY_NEW_TASK to set it as new task, to get rid of cached files.
+ */
+ /* package */ static Notification constructFinishNotificationWithFlags(
+ Context context, String title, String description, Intent intent, int flags) {
+ ContactsNotificationChannelsUtil.createDefaultChannel(context);
+ return new NotificationCompat.Builder(context,
+ ContactsNotificationChannelsUtil.DEFAULT_CHANNEL)
+ .setAutoCancel(true)
+ .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(R.drawable.quantum_ic_done_vd_theme_24)
+ .setContentTitle(title)
+ .setContentText(description)
+ // If no intent provided, include an intent that won't resolve to anything.
+ // Restrict the intent to this app to make sure that no other app can steal this
+ // pending-intent b/19296918.
+ .setContentIntent(PendingIntent.getActivity(context, 0,
+ (intent != null ? intent : new Intent(context.getPackageName(), null)),
+ flags))
+ .build();
+ }
+
+ /**
+ * Constructs a Notification telling the vCard import has failed.
+ *
+ * @param context
+ * @param reason The reason why the import has failed. Shown in description field.
+ */
+ /* package */ static Notification constructImportFailureNotification(
+ Context context, String reason) {
+ ContactsNotificationChannelsUtil.createDefaultChannel(context);
+ return new NotificationCompat.Builder(context,
+ ContactsNotificationChannelsUtil.DEFAULT_CHANNEL)
+ .setAutoCancel(true)
+ .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+ .setSmallIcon(android.R.drawable.stat_notify_error)
+ .setContentTitle(context.getString(R.string.vcard_import_failed))
+ .setContentText(reason)
+ // Launch an intent that won't resolve to anything. Restrict the intent to this
+ // app to make sure that no other app can steal this pending-intent b/19296918.
+ .setContentIntent(PendingIntent
+ .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
+ .build();
+ }
+}
diff --git a/src/com/android/contacts/vcard/ProcessorBase.java b/src/com/android/contacts/vcard/ProcessorBase.java
new file mode 100644
index 000000000..1ce21cfcf
--- /dev/null
+++ b/src/com/android/contacts/vcard/ProcessorBase.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.RunnableFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A base processor class. One instance processes vCard one import/export request (imports a given
+ * vCard or exports a vCard). Expected to be used with {@link ExecutorService}.
+ *
+ * This instance starts itself with {@link #run()} method, and can be cancelled with
+ * {@link #cancel(boolean)}. Users can check the processor's status using {@link #isCancelled()}
+ * and {@link #isDone()} asynchronously.
+ *
+ * {@link #get()} and {@link #get(long, TimeUnit)}, which are form {@link Future}, aren't
+ * supported and {@link UnsupportedOperationException} will be just thrown when they are called.
+ */
+public abstract class ProcessorBase implements RunnableFuture<Object> {
+
+ /**
+ * @return the type of the processor. Must be {@link VCardService#TYPE_IMPORT} or
+ * {@link VCardService#TYPE_EXPORT}.
+ */
+ public abstract int getType();
+
+ @Override
+ public abstract void run();
+
+ /**
+ * Cancels this operation.
+ *
+ * @param mayInterruptIfRunning ignored. When this method is called, the instance
+ * stops processing and finish itself even if the thread is running.
+ *
+ * @see Future#cancel(boolean)
+ */
+ @Override
+ public abstract boolean cancel(boolean mayInterruptIfRunning);
+ @Override
+ public abstract boolean isCancelled();
+ @Override
+ public abstract boolean isDone();
+
+ /**
+ * Just throws {@link UnsupportedOperationException}.
+ */
+ @Override
+ public final Object get() {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Just throws {@link UnsupportedOperationException}.
+ */
+ @Override
+ public final Object get(long timeout, TimeUnit unit) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/com/android/contacts/vcard/SelectAccountActivity.java b/src/com/android/contacts/vcard/SelectAccountActivity.java
new file mode 100644
index 000000000..ac5b3eb71
--- /dev/null
+++ b/src/com/android/contacts/vcard/SelectAccountActivity.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountSelectionUtil;
+
+import java.util.List;
+
+public class SelectAccountActivity extends Activity {
+ private static final String LOG_TAG = "SelectAccountActivity";
+
+ public static final String ACCOUNT_NAME = "account_name";
+ public static final String ACCOUNT_TYPE = "account_type";
+ public static final String DATA_SET = "data_set";
+
+ private class CancelListener
+ implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+ }
+ public void onCancel(DialogInterface dialog) {
+ finish();
+ }
+ }
+
+ private AccountSelectionUtil.AccountSelectedListener mAccountSelectionListener;
+
+ @Override
+ protected void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ // There's three possibilities:
+ // - more than one accounts -> ask the user
+ // - just one account -> use the account without asking the user
+ // - no account -> use phone-local storage without asking the user
+ final int resId = R.string.import_from_vcf_file;
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+ final List<AccountWithDataSet> accountList = accountTypes.blockForWritableAccounts();
+ if (accountList.size() == 0) {
+ Log.w(LOG_TAG, "Account does not exist");
+ finish();
+ return;
+ } else if (accountList.size() == 1) {
+ final AccountWithDataSet account = accountList.get(0);
+ final Intent intent = new Intent();
+ intent.putExtra(ACCOUNT_NAME, account.name);
+ intent.putExtra(ACCOUNT_TYPE, account.type);
+ intent.putExtra(DATA_SET, account.dataSet);
+ setResult(RESULT_OK, intent);
+ finish();
+ return;
+ }
+
+ Log.i(LOG_TAG, "The number of available accounts: " + accountList.size());
+
+ // Multiple accounts. Let users to select one.
+ mAccountSelectionListener =
+ new AccountSelectionUtil.AccountSelectedListener(
+ this, accountList, resId) {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ final AccountWithDataSet account = mAccountList.get(which);
+ final Intent intent = new Intent();
+ intent.putExtra(ACCOUNT_NAME, account.name);
+ intent.putExtra(ACCOUNT_TYPE, account.type);
+ intent.putExtra(DATA_SET, account.dataSet);
+ setResult(RESULT_OK, intent);
+ finish();
+ }
+ };
+ showDialog(resId);
+ return;
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int resId, Bundle bundle) {
+ if (resId == R.string.import_from_vcf_file) {
+ if (mAccountSelectionListener == null) {
+ throw new NullPointerException(
+ "mAccountSelectionListener must not be null.");
+ }
+ return AccountSelectionUtil.getSelectAccountDialog(this, resId,
+ mAccountSelectionListener,
+ new CancelListener());
+ }
+ return super.onCreateDialog(resId, bundle);
+ }
+}
diff --git a/src/com/android/contacts/vcard/ShareVCardActivity.java b/src/com/android/contacts/vcard/ShareVCardActivity.java
new file mode 100644
index 000000000..787ddc63d
--- /dev/null
+++ b/src/com/android/contacts/vcard/ShareVCardActivity.java
@@ -0,0 +1,93 @@
+/*
+ * 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.vcard;
+
+import android.content.ComponentName;
+import android.net.Uri;
+import android.os.IBinder;
+import android.support.v4.content.FileProvider;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contactsbind.FeedbackHelper;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * This activity connects to VCardService, creates a .vcf file in cache directory and send export
+ * request with the file URI so as to write contacts data to the file in background.
+ */
+public class ShareVCardActivity extends ExportVCardActivity {
+ private static final String LOG_TAG = "VCardShare";
+ private final String EXPORT_FILE_PREFIX = "vcards_";
+ private final long A_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
+
+ @Override
+ public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
+ if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
+ mConnected = true;
+ mService = ((VCardService.MyBinder) binder).getService();
+
+ clearExportFiles();
+
+ final File file = getLocalFile();
+ try {
+ file.createNewFile();
+ } catch (IOException e) {
+ FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to create .vcf file", e);
+ finish();
+ return;
+ }
+
+ final Uri contentUri = FileProvider.getUriForFile(this,
+ getString(R.string.contacts_file_provider_authority), file);
+ if (DEBUG) Log.d(LOG_TAG, "exporting to " + contentUri);
+
+ final ExportRequest request = new ExportRequest(contentUri);
+ // The connection object will call finish().
+ mService.handleExportRequest(request, new NotificationImportExportListener(
+ ShareVCardActivity.this));
+ finish();
+ }
+
+ /**
+ * Delete the files (that are untouched for more than 1 day) in the cache directory.
+ * We cannot rely on VCardService to delete export files because it will delete export files
+ * right after finishing writing so no files could be shared. Therefore, our approach to
+ * deleting export files is:
+ * 1. put export files in cache directory so that Android may delete them;
+ * 2. manually delete the files that are older than 1 day when service is connected.
+ */
+ private void clearExportFiles() {
+ for (File file : getCacheDir().listFiles()) {
+ final long ageInMillis = System.currentTimeMillis() - file.lastModified();
+ if (file.getName().startsWith(EXPORT_FILE_PREFIX) && ageInMillis > A_DAY_IN_MILLIS) {
+ file.delete();
+ }
+ }
+ }
+
+ private File getLocalFile() {
+ final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US);
+ final String currentDateString = dateFormat.format(new Date()).toString();
+ final String localFilename = EXPORT_FILE_PREFIX + currentDateString + ".vcf";
+ return new File(getCacheDir(), localFilename);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/contacts/vcard/VCardCommonArguments.java b/src/com/android/contacts/vcard/VCardCommonArguments.java
new file mode 100644
index 000000000..06b49a213
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardCommonArguments.java
@@ -0,0 +1,27 @@
+/*
+ * 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.vcard;
+
+/**
+ * Argument constants used by many activities and services.
+ */
+public class VCardCommonArguments {
+
+ // Argument used to pass calling activities to the target activity or service.
+ // The value should be a string class name (e.g. com.android.contacts.vcard.VCardCommonArgs)
+ public static final String ARG_CALLING_ACTIVITY = "CALLING_ACTIVITY";
+}
diff --git a/src/com/android/contacts/vcard/VCardImportExportListener.java b/src/com/android/contacts/vcard/VCardImportExportListener.java
new file mode 100644
index 000000000..fa256adee
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardImportExportListener.java
@@ -0,0 +1,36 @@
+/*
+ * 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.vcard;
+
+import android.app.Notification;
+import android.net.Uri;
+
+import com.android.vcard.VCardEntry;
+
+interface VCardImportExportListener {
+ Notification onImportProcessed(ImportRequest request, int jobId, int sequence);
+ Notification onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+ int totalCount);
+ void onImportFinished(ImportRequest request, int jobId, Uri uri);
+ void onImportFailed(ImportRequest request);
+ void onImportCanceled(ImportRequest request, int jobId);
+
+ Notification onExportProcessed(ExportRequest request, int jobId);
+ void onExportFailed(ExportRequest request);
+
+ void onCancelRequest(CancelRequest request, int type);
+}
diff --git a/src/com/android/contacts/vcard/VCardService.java b/src/com/android/contacts/vcard/VCardService.java
new file mode 100644
index 000000000..075d6bbaa
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardService.java
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2010 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.vcard;
+
+import android.app.Notification;
+import android.app.Service;
+import android.content.Intent;
+import android.media.MediaScannerConnection;
+import android.media.MediaScannerConnection.MediaScannerConnectionClient;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.IBinder;
+import android.util.Log;
+import android.util.SparseArray;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
+
+/**
+ * The class responsible for handling vCard import/export requests.
+ *
+ * This Service creates one ImportRequest/ExportRequest object (as Runnable) per request and push
+ * it to {@link ExecutorService} with single thread executor. The executor handles each request
+ * one by one, and notifies users when needed.
+ */
+// TODO: Using IntentService looks simpler than using Service + ServiceConnection though this
+// works fine enough. Investigate the feasibility.
+public class VCardService extends Service {
+ private final static String LOG_TAG = "VCardService";
+
+ /* package */ final static boolean DEBUG = false;
+
+ /**
+ * Specifies the type of operation. Used when constructing a notification, canceling
+ * some operation, etc.
+ */
+ /* package */ static final int TYPE_IMPORT = 1;
+ /* package */ static final int TYPE_EXPORT = 2;
+
+ /* package */ static final String CACHE_FILE_PREFIX = "import_tmp_";
+
+ /* package */ static final String X_VCARD_MIME_TYPE = "text/x-vcard";
+
+ private class CustomMediaScannerConnectionClient implements MediaScannerConnectionClient {
+ final MediaScannerConnection mConnection;
+ final String mPath;
+
+ public CustomMediaScannerConnectionClient(String path) {
+ mConnection = new MediaScannerConnection(VCardService.this, this);
+ mPath = path;
+ }
+
+ public void start() {
+ mConnection.connect();
+ }
+
+ @Override
+ public void onMediaScannerConnected() {
+ if (DEBUG) { Log.d(LOG_TAG, "Connected to MediaScanner. Start scanning."); }
+ mConnection.scanFile(mPath, null);
+ }
+
+ @Override
+ public void onScanCompleted(String path, Uri uri) {
+ if (DEBUG) { Log.d(LOG_TAG, "scan completed: " + path); }
+ mConnection.disconnect();
+ removeConnectionClient(this);
+ }
+ }
+
+ // Should be single thread, as we don't want to simultaneously handle import and export
+ // requests.
+ private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
+
+ private int mCurrentJobId = 1;
+
+ // Stores all unfinished import/export jobs which will be executed by mExecutorService.
+ // Key is jobId.
+ private final SparseArray<ProcessorBase> mRunningJobMap = new SparseArray<ProcessorBase>();
+ // Stores ScannerConnectionClient objects until they finish scanning requested files.
+ // Uses List class for simplicity. It's not costly as we won't have multiple objects in
+ // almost all cases.
+ private final List<CustomMediaScannerConnectionClient> mRemainingScannerConnections =
+ new ArrayList<CustomMediaScannerConnectionClient>();
+
+ private MyBinder mBinder;
+
+ private String mCallingActivity;
+
+ // File names currently reserved by some export job.
+ private final Set<String> mReservedDestination = new HashSet<String>();
+ /* ** end of vCard exporter params ** */
+
+ public class MyBinder extends Binder {
+ public VCardService getService() {
+ return VCardService.this;
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mBinder = new MyBinder();
+ if (DEBUG) Log.d(LOG_TAG, "vCard Service is being created.");
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int id) {
+ if (intent != null && intent.getExtras() != null) {
+ mCallingActivity = intent.getExtras().getString(
+ VCardCommonArguments.ARG_CALLING_ACTIVITY);
+ } else {
+ mCallingActivity = null;
+ }
+ return START_STICKY;
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return mBinder;
+ }
+
+ @Override
+ public void onDestroy() {
+ if (DEBUG) Log.d(LOG_TAG, "VCardService is being destroyed.");
+ cancelAllRequestsAndShutdown();
+ clearCache();
+ stopForeground(/* removeNotification */ false);
+ super.onDestroy();
+ }
+
+ public synchronized void handleImportRequest(List<ImportRequest> requests,
+ VCardImportExportListener listener) {
+ if (DEBUG) {
+ final ArrayList<String> uris = new ArrayList<String>();
+ final ArrayList<String> displayNames = new ArrayList<String>();
+ for (ImportRequest request : requests) {
+ uris.add(request.uri.toString());
+ displayNames.add(request.displayName);
+ }
+ Log.d(LOG_TAG,
+ String.format("received multiple import request (uri: %s, displayName: %s)",
+ uris.toString(), displayNames.toString()));
+ }
+ final int size = requests.size();
+ for (int i = 0; i < size; i++) {
+ ImportRequest request = requests.get(i);
+
+ if (tryExecute(new ImportProcessor(this, listener, request, mCurrentJobId))) {
+ if (listener != null) {
+ final Notification notification =
+ listener.onImportProcessed(request, mCurrentJobId, i);
+ if (notification != null) {
+ startForeground(mCurrentJobId, notification);
+ }
+ }
+ mCurrentJobId++;
+ } else {
+ if (listener != null) {
+ listener.onImportFailed(request);
+ }
+ // A rejection means executor doesn't run any more. Exit.
+ break;
+ }
+ }
+ }
+
+ public synchronized void handleExportRequest(ExportRequest request,
+ VCardImportExportListener listener) {
+ if (tryExecute(new ExportProcessor(this, request, mCurrentJobId, mCallingActivity))) {
+ final String path = request.destUri.getEncodedPath();
+ if (DEBUG) Log.d(LOG_TAG, "Reserve the path " + path);
+ if (!mReservedDestination.add(path)) {
+ Log.w(LOG_TAG,
+ String.format("The path %s is already reserved. Reject export request",
+ path));
+ if (listener != null) {
+ listener.onExportFailed(request);
+ }
+ return;
+ }
+
+ if (listener != null) {
+ final Notification notification = listener.onExportProcessed(request,mCurrentJobId);
+ if (notification != null) {
+ startForeground(mCurrentJobId, notification);
+ }
+ }
+ mCurrentJobId++;
+ } else {
+ if (listener != null) {
+ listener.onExportFailed(request);
+ }
+ }
+ }
+
+ /**
+ * Tries to call {@link ExecutorService#execute(Runnable)} toward a given processor.
+ * @return true when successful.
+ */
+ private synchronized boolean tryExecute(ProcessorBase processor) {
+ try {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Executor service status: shutdown: " + mExecutorService.isShutdown()
+ + ", terminated: " + mExecutorService.isTerminated());
+ }
+ mExecutorService.execute(processor);
+ mRunningJobMap.put(mCurrentJobId, processor);
+ return true;
+ } catch (RejectedExecutionException e) {
+ Log.w(LOG_TAG, "Failed to excetute a job.", e);
+ return false;
+ }
+ }
+
+ public synchronized void handleCancelRequest(CancelRequest request,
+ VCardImportExportListener listener) {
+ final int jobId = request.jobId;
+ if (DEBUG) Log.d(LOG_TAG, String.format("Received cancel request. (id: %d)", jobId));
+
+ final ProcessorBase processor = mRunningJobMap.get(jobId);
+ mRunningJobMap.remove(jobId);
+
+ if (processor != null) {
+ processor.cancel(true);
+ final int type = processor.getType();
+ if (listener != null) {
+ listener.onCancelRequest(request, type);
+ }
+ if (type == TYPE_EXPORT) {
+ final String path =
+ ((ExportProcessor)processor).getRequest().destUri.getEncodedPath();
+ Log.i(LOG_TAG,
+ String.format("Cancel reservation for the path %s if appropriate", path));
+ if (!mReservedDestination.remove(path)) {
+ Log.w(LOG_TAG, "Not reserved.");
+ }
+ }
+ } else {
+ Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
+ }
+ stopServiceIfAppropriate();
+ }
+
+ /**
+ * Checks job list and call {@link #stopSelf()} when there's no job and no scanner connection
+ * is remaining.
+ * A new job (import/export) cannot be submitted any more after this call.
+ */
+ private synchronized void stopServiceIfAppropriate() {
+ if (mRunningJobMap.size() > 0) {
+ final int size = mRunningJobMap.size();
+
+ // Check if there are processors which aren't finished yet. If we still have ones to
+ // process, we cannot stop the service yet. Also clean up already finished processors
+ // here.
+
+ // Job-ids to be removed. At first all elements in the array are invalid and will
+ // be filled with real job-ids from the array's top. When we find a not-yet-finished
+ // processor, then we start removing those finished jobs. In that case latter half of
+ // this array will be invalid.
+ final int[] toBeRemoved = new int[size];
+ for (int i = 0; i < size; i++) {
+ final int jobId = mRunningJobMap.keyAt(i);
+ final ProcessorBase processor = mRunningJobMap.valueAt(i);
+ if (!processor.isDone()) {
+ Log.i(LOG_TAG, String.format("Found unfinished job (id: %d)", jobId));
+
+ // Remove processors which are already "done", all of which should be before
+ // processors which aren't done yet.
+ for (int j = 0; j < i; j++) {
+ mRunningJobMap.remove(toBeRemoved[j]);
+ }
+ return;
+ }
+
+ // Remember the finished processor.
+ toBeRemoved[i] = jobId;
+ }
+
+ // We're sure we can remove all. Instead of removing one by one, just call clear().
+ mRunningJobMap.clear();
+ }
+
+ if (!mRemainingScannerConnections.isEmpty()) {
+ Log.i(LOG_TAG, "MediaScanner update is in progress.");
+ return;
+ }
+
+ Log.i(LOG_TAG, "No unfinished job. Stop this service.");
+ mExecutorService.shutdown();
+ stopSelf();
+ }
+
+ /* package */ synchronized void updateMediaScanner(String path) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "MediaScanner is being updated: " + path);
+ }
+
+ if (mExecutorService.isShutdown()) {
+ Log.w(LOG_TAG, "MediaScanner update is requested after executor's being shut down. " +
+ "Ignoring the update request");
+ return;
+ }
+ final CustomMediaScannerConnectionClient client =
+ new CustomMediaScannerConnectionClient(path);
+ mRemainingScannerConnections.add(client);
+ client.start();
+ }
+
+ private synchronized void removeConnectionClient(
+ CustomMediaScannerConnectionClient client) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Removing custom MediaScannerConnectionClient.");
+ }
+ mRemainingScannerConnections.remove(client);
+ stopServiceIfAppropriate();
+ }
+
+ /* package */ synchronized void handleFinishImportNotification(
+ int jobId, boolean successful) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, String.format("Received vCard import finish notification (id: %d). "
+ + "Result: %b", jobId, (successful ? "success" : "failure")));
+ }
+ mRunningJobMap.remove(jobId);
+ stopServiceIfAppropriate();
+ }
+
+ /* package */ synchronized void handleFinishExportNotification(
+ int jobId, boolean successful) {
+ if (DEBUG) {
+ Log.d(LOG_TAG, String.format("Received vCard export finish notification (id: %d). "
+ + "Result: %b", jobId, (successful ? "success" : "failure")));
+ }
+ final ProcessorBase job = mRunningJobMap.get(jobId);
+ mRunningJobMap.remove(jobId);
+ if (job == null) {
+ Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
+ } else if (!(job instanceof ExportProcessor)) {
+ Log.w(LOG_TAG,
+ String.format("Removed job (id: %s) isn't ExportProcessor", jobId));
+ } else {
+ final String path = ((ExportProcessor)job).getRequest().destUri.getEncodedPath();
+ if (DEBUG) Log.d(LOG_TAG, "Remove reserved path " + path);
+ mReservedDestination.remove(path);
+ }
+
+ stopServiceIfAppropriate();
+ }
+
+ /**
+ * Cancels all the import/export requests and calls {@link ExecutorService#shutdown()}, which
+ * means this Service becomes no longer ready for import/export requests.
+ *
+ * Mainly called from onDestroy().
+ */
+ private synchronized void cancelAllRequestsAndShutdown() {
+ for (int i = 0; i < mRunningJobMap.size(); i++) {
+ mRunningJobMap.valueAt(i).cancel(true);
+ }
+ mRunningJobMap.clear();
+ mExecutorService.shutdown();
+ }
+
+ /**
+ * Removes import caches stored locally.
+ */
+ private void clearCache() {
+ for (final String fileName : fileList()) {
+ if (fileName.startsWith(CACHE_FILE_PREFIX)) {
+ // We don't want to keep all the caches so we remove cache files old enough.
+ Log.i(LOG_TAG, "Remove a temporary file: " + fileName);
+ deleteFile(fileName);
+ }
+ }
+ }
+}
diff --git a/src/com/android/contacts/widget/ActivityTouchLinearLayout.java b/src/com/android/contacts/widget/ActivityTouchLinearLayout.java
new file mode 100644
index 000000000..bcedb729e
--- /dev/null
+++ b/src/com/android/contacts/widget/ActivityTouchLinearLayout.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2014 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.LinearLayout;
+
+import com.android.contacts.interactions.TouchPointManager;
+
+/**
+ * Linear layout for an activity that listens to all touch events on the screen and saves the touch
+ * point.
+ * Typically touch events are handled by child views--this class intercepts those touch events
+ * before passing them on to the child.
+ */
+public class ActivityTouchLinearLayout extends LinearLayout {
+ public ActivityTouchLinearLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent (MotionEvent ev) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ TouchPointManager.getInstance().setPoint((int) ev.getRawX(), (int) ev.getRawY());
+ }
+ return false;
+ }
+}
diff --git a/src/com/android/contacts/widget/CompositeListAdapter.java b/src/com/android/contacts/widget/CompositeListAdapter.java
index 4c72ee816..44ff291b5 100644
--- a/src/com/android/contacts/widget/CompositeListAdapter.java
+++ b/src/com/android/contacts/widget/CompositeListAdapter.java
@@ -21,18 +21,13 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
-import com.android.contacts.common.testing.NeededForTesting;
import com.google.common.annotations.VisibleForTesting;
/**
* A general purpose adapter that is composed of multiple sub-adapters. It just
* appends them in the order they are added. It listens to changes from all
* sub-adapters and propagates them to its own listeners.
- *
- * This class not used for now -- but let's keep running the test in case we want to revive it...
- * (So NeededForTesting)
*/
-@NeededForTesting
public class CompositeListAdapter extends BaseAdapter {
private static final int INITIAL_CAPACITY = 2;
diff --git a/src/com/android/contacts/widget/FloatingActionButtonController.java b/src/com/android/contacts/widget/FloatingActionButtonController.java
new file mode 100644
index 000000000..f649808ce
--- /dev/null
+++ b/src/com/android/contacts/widget/FloatingActionButtonController.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2014 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.widget;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import android.widget.ImageButton;
+
+import com.android.contacts.R;
+import com.android.contacts.util.ViewUtil;
+import com.android.phone.common.animation.AnimUtils;
+
+/**
+ * Controls the movement and appearance of the FAB (Floating Action Button).
+ */
+public class FloatingActionButtonController {
+ public static final int ALIGN_MIDDLE = 0;
+ public static final int ALIGN_QUARTER_END = 1;
+ public static final int ALIGN_END = 2;
+
+ private static final int FAB_SCALE_IN_DURATION = 186;
+ private static final int FAB_SCALE_IN_FADE_IN_DELAY = 70;
+ private static final int FAB_ICON_FADE_OUT_DURATION = 46;
+
+ private final int mAnimationDuration;
+ private final int mFloatingActionButtonWidth;
+ private final int mFloatingActionButtonMarginRight;
+ private final View mFloatingActionButtonContainer;
+ private final ImageButton mFloatingActionButton;
+ private final Interpolator mFabInterpolator;
+ private int mScreenWidth;
+
+ public FloatingActionButtonController(Activity activity, View container, ImageButton button) {
+ Resources resources = activity.getResources();
+ mFabInterpolator = AnimationUtils.loadInterpolator(activity,
+ android.R.interpolator.fast_out_slow_in);
+ mFloatingActionButtonWidth = resources.getDimensionPixelSize(
+ R.dimen.floating_action_button_width);
+ mFloatingActionButtonMarginRight = resources.getDimensionPixelOffset(
+ R.dimen.floating_action_button_margin_right);
+ mAnimationDuration = resources.getInteger(
+ R.integer.floating_action_button_animation_duration);
+ mFloatingActionButtonContainer = container;
+ mFloatingActionButton = button;
+ ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, resources);
+ }
+
+ /**
+ * Passes the screen width into the class. Necessary for translation calculations.
+ * Should be called as soon as parent View width is available.
+ *
+ * @param screenWidth The width of the screen in pixels.
+ */
+ public void setScreenWidth(int screenWidth) {
+ mScreenWidth = screenWidth;
+ }
+
+ /**
+ * Sets FAB as View.VISIBLE or View.GONE.
+ *
+ * @param visible Whether or not to make the container visible.
+ */
+ public void setVisible(boolean visible) {
+ mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
+ }
+
+ public boolean isVisible() {
+ return mFloatingActionButtonContainer.getVisibility() == View.VISIBLE;
+ }
+
+ public void changeIcon(Drawable icon, String description) {
+ if (mFloatingActionButton.getDrawable() != icon
+ || !mFloatingActionButton.getContentDescription().equals(description)) {
+ mFloatingActionButton.setImageDrawable(icon);
+ mFloatingActionButton.setContentDescription(description);
+ }
+ }
+
+ /**
+ * Updates the FAB location (middle to right position) as the PageView scrolls.
+ *
+ * @param positionOffset A fraction used to calculate position of the FAB during page scroll.
+ */
+ public void onPageScrolled(float positionOffset) {
+ // As the page is scrolling, if we're on the first tab, update the FAB position so it
+ // moves along with it.
+ mFloatingActionButtonContainer.setTranslationX(
+ (int) (positionOffset * getTranslationXForAlignment(ALIGN_END)));
+ }
+
+ /**
+ * Aligns the FAB to the described location
+ *
+ * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+ * @param animate Whether or not to animate the transition.
+ */
+ public void align(int align, boolean animate) {
+ align(align, 0 /*offsetX */, 0 /* offsetY */, animate);
+ }
+
+ /**
+ * Aligns the FAB to the described location plus specified additional offsets.
+ *
+ * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+ * @param offsetX Additional offsetX to translate by.
+ * @param offsetY Additional offsetY to translate by.
+ * @param animate Whether or not to animate the transition.
+ */
+ public void align(int align, int offsetX, int offsetY, boolean animate) {
+ if (mScreenWidth == 0) {
+ return;
+ }
+
+ int translationX = getTranslationXForAlignment(align);
+
+ // Skip animation if container is not shown; animation causes container to show again.
+ if (animate && mFloatingActionButtonContainer.isShown()) {
+ mFloatingActionButtonContainer.animate()
+ .translationX(translationX + offsetX)
+ .translationY(offsetY)
+ .setInterpolator(mFabInterpolator)
+ .setDuration(mAnimationDuration)
+ .start();
+ } else {
+ mFloatingActionButtonContainer.setTranslationX(translationX + offsetX);
+ mFloatingActionButtonContainer.setTranslationY(offsetY);
+ }
+ }
+
+ /**
+ * Resizes width and height of the floating action bar container.
+ * @param dimension The new dimensions for the width and height.
+ * @param animate Whether to animate this change.
+ */
+ public void resize(int dimension, boolean animate) {
+ if (animate) {
+ AnimUtils.changeDimensions(mFloatingActionButtonContainer, dimension, dimension);
+ } else {
+ mFloatingActionButtonContainer.getLayoutParams().width = dimension;
+ mFloatingActionButtonContainer.getLayoutParams().height = dimension;
+ mFloatingActionButtonContainer.requestLayout();
+ }
+ }
+
+ /**
+ * Scales the floating action button from no height and width to its actual dimensions. This is
+ * an animation for showing the floating action button.
+ * @param delayMs The delay for the effect, in milliseconds.
+ */
+ public void scaleIn(int delayMs) {
+ setVisible(true);
+ AnimUtils.scaleIn(mFloatingActionButtonContainer, FAB_SCALE_IN_DURATION, delayMs);
+ AnimUtils.fadeIn(mFloatingActionButton, FAB_SCALE_IN_DURATION,
+ delayMs + FAB_SCALE_IN_FADE_IN_DELAY, null);
+ }
+
+ /**
+ * Immediately remove the affects of the last call to {@link #scaleOut}.
+ */
+ public void resetIn() {
+ mFloatingActionButton.setAlpha(1f);
+ mFloatingActionButton.setVisibility(View.VISIBLE);
+ mFloatingActionButtonContainer.setScaleX(1);
+ mFloatingActionButtonContainer.setScaleY(1);
+ }
+
+ /**
+ * Scales the floating action button from its actual dimensions to no height and width. This is
+ * an animation for hiding the floating action button.
+ */
+ public void scaleOut() {
+ AnimUtils.scaleOut(mFloatingActionButtonContainer, mAnimationDuration);
+ // Fade out the icon faster than the scale out animation, so that the icon scaling is less
+ // obvious. We don't want it to scale, but the resizing the container is not as performant.
+ AnimUtils.fadeOut(mFloatingActionButton, FAB_ICON_FADE_OUT_DURATION, null);
+ }
+
+ /**
+ * Calculates the X offset of the FAB to the given alignment, adjusted for whether or not the
+ * view is in RTL mode.
+ *
+ * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+ * @return The translationX for the given alignment.
+ */
+ public int getTranslationXForAlignment(int align) {
+ int result = 0;
+ switch (align) {
+ case ALIGN_MIDDLE:
+ // Moves the FAB to exactly center screen.
+ return 0;
+ case ALIGN_QUARTER_END:
+ // Moves the FAB a quarter of the screen width.
+ result = mScreenWidth / 4;
+ break;
+ case ALIGN_END:
+ // Moves the FAB half the screen width. Same as aligning right with a marginRight.
+ result = mScreenWidth / 2
+ - mFloatingActionButtonWidth / 2
+ - mFloatingActionButtonMarginRight;
+ break;
+ }
+ if (isLayoutRtl()) {
+ result *= -1;
+ }
+ return result;
+ }
+
+ private boolean isLayoutRtl() {
+ return mFloatingActionButtonContainer.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
+ }
+}
diff --git a/src/com/android/contacts/widget/LayoutSuppressingImageView.java b/src/com/android/contacts/widget/LayoutSuppressingImageView.java
new file mode 100644
index 000000000..d80aeea07
--- /dev/null
+++ b/src/com/android/contacts/widget/LayoutSuppressingImageView.java
@@ -0,0 +1,39 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+/**
+ * Custom {@link ImageView} that improves layouting performance.
+ *
+ * This improves the performance by not passing requestLayout() to its parent, taking advantage
+ * of knowing that image size won't change once set.
+ */
+public class LayoutSuppressingImageView extends ImageView {
+
+ public LayoutSuppressingImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void requestLayout() {
+ forceLayout();
+ }
+}
diff --git a/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java b/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java
new file mode 100644
index 000000000..3413e53c9
--- /dev/null
+++ b/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java
@@ -0,0 +1,39 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.QuickContactBadge;
+
+/**
+ * Custom {@link QuickContactBadge} that improves layouting performance.
+ *
+ * This improves the performance by not passing requestLayout() to its parent, taking advantage
+ * of knowing that image size won't change once set.
+ */
+public class LayoutSuppressingQuickContactBadge extends QuickContactBadge {
+
+ public LayoutSuppressingQuickContactBadge(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void requestLayout() {
+ forceLayout();
+ }
+}
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index b1deb9014..263617b36 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -1,12 +1,5 @@
package com.android.contacts.widget;
-import com.android.contacts.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.compat.EdgeEffectCompat;
-import com.android.contacts.quickcontact.ExpandingEntryCardView;
-import com.android.contacts.test.NeededForReflection;
-import com.android.contacts.util.SchedulingUtils;
-
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorListenerAdapter;
@@ -31,18 +24,25 @@ import android.view.Gravity;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
-import android.view.ViewGroup;
import android.view.ViewConfiguration;
+import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.EdgeEffect;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
-import android.widget.Scroller;
import android.widget.ScrollView;
+import android.widget.Scroller;
import android.widget.TextView;
import android.widget.Toolbar;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.EdgeEffectCompat;
+import com.android.contacts.quickcontact.ExpandingEntryCardView;
+import com.android.contacts.test.NeededForReflection;
+import com.android.contacts.util.SchedulingUtils;
+
/**
* A custom {@link ViewGroup} that operates similarly to a {@link ScrollView}, except with multiple
* subviews. These subviews are scrolled or shrinked one at a time, until each reaches their
@@ -110,7 +110,7 @@ public class MultiShrinkScroller extends FrameLayout {
private View mPhotoViewContainer;
private View mTransparentView;
private MultiShrinkScrollerListener mListener;
- private TextView mLargeTextView;
+ private TextView mFullNameView;
private TextView mPhoneticNameView;
private View mTitleAndPhoneticNameView;
private View mPhotoTouchInterceptOverlay;
@@ -296,7 +296,7 @@ public class MultiShrinkScroller extends FrameLayout {
mToolbar = findViewById(R.id.toolbar_parent);
mPhotoViewContainer = findViewById(R.id.toolbar_parent);
mTransparentView = findViewById(R.id.transparent_view);
- mLargeTextView = (TextView) findViewById(R.id.large_title);
+ mFullNameView = (TextView) findViewById(R.id.large_title);
mPhoneticNameView = (TextView) findViewById(R.id.phonetic_name);
mTitleAndPhoneticNameView = findViewById(R.id.title_and_phonetic_name);
mInvisiblePlaceholderTextView = (TextView) findViewById(R.id.placeholder_textview);
@@ -351,7 +351,7 @@ public class MultiShrinkScroller extends FrameLayout {
setHeaderHeight(getMaximumScrollableHeaderHeight());
if (shouldUpdateNameViewHeight) {
mMaximumHeaderTextSize = mTitleAndPhoneticNameView.getHeight();
- mMaximumFullNameViewHeight = mLargeTextView.getHeight();
+ mMaximumFullNameViewHeight = mFullNameView.getHeight();
// We cannot rely on mPhoneticNameView.getHeight() since it could be 0
final int phoneticNameSize = getResources().getDimensionPixelSize(
R.dimen.quickcontact_maximum_phonetic_name_size);
@@ -384,9 +384,9 @@ public class MultiShrinkScroller extends FrameLayout {
largeTextLayoutParams.gravity = Gravity.BOTTOM | Gravity.START;
mTitleAndPhoneticNameView.setLayoutParams(largeTextLayoutParams);
} else {
- // Set the width of mLargeTextView as if it was nested inside
+ // Set the width of mFullNameView as if it was nested inside
// mPhotoViewContainer.
- mLargeTextView.setWidth(mPhotoViewContainer.getWidth()
+ mFullNameView.setWidth(mPhotoViewContainer.getWidth()
- 2 * mMaximumTitleMargin);
mPhoneticNameView.setWidth(mPhotoViewContainer.getWidth()
- 2 * mMaximumTitleMargin);
@@ -415,10 +415,10 @@ public class MultiShrinkScroller extends FrameLayout {
}
public void setTitle(String title, boolean isPhoneNumber) {
- mLargeTextView.setText(title);
- // We have a phone number as "mLargeTextView" so make it always LTR.
+ mFullNameView.setText(title);
+ // We have a phone number as "mFullNameView" so make it always LTR.
if (isPhoneNumber) {
- mLargeTextView.setTextDirection(View.TEXT_DIRECTION_LTR);
+ mFullNameView.setTextDirection(View.TEXT_DIRECTION_LTR);
}
mPhotoTouchInterceptOverlay.setContentDescription(title);
}
@@ -433,9 +433,11 @@ public class MultiShrinkScroller extends FrameLayout {
// Every time the phonetic name is changed, set mPhoneticNameView as visible,
// in case it just changed from Visibility=GONE.
mPhoneticNameView.setVisibility(View.VISIBLE);
+ final int maximumHeaderTextSize =
+ mMaximumFullNameViewHeight * mFullNameView.getLineCount()
+ + mMaximumPhoneticNameViewHeight * mPhoneticNameView.getLineCount();
// TODO try not using initialize() to refresh phonetic name view: b/27410518
- initialize(mListener, mIsOpenContactSquare, /* maximumHeaderTextSize */
- (mMaximumFullNameViewHeight + mMaximumPhoneticNameViewHeight),
+ initialize(mListener, mIsOpenContactSquare, maximumHeaderTextSize,
/* shouldUpdateNameViewHeight */ false);
}
@@ -445,10 +447,10 @@ public class MultiShrinkScroller extends FrameLayout {
return;
}
mPhoneticNameView.setVisibility(View.GONE);
- // Initialize to make Visibility work.
+ final int maximumHeaderTextSize =
+ mMaximumFullNameViewHeight * mFullNameView.getLineCount();
// TODO try not using initialize() to refresh phonetic name view: b/27410518
- initialize(mListener, mIsOpenContactSquare,
- /* maximumHeaderTextSize */ mMaximumFullNameViewHeight,
+ initialize(mListener, mIsOpenContactSquare, maximumHeaderTextSize,
/* shouldUpdateNameViewHeight */ false);
}
@@ -1141,6 +1143,10 @@ public class MultiShrinkScroller extends FrameLayout {
// Let's keep an eye on how long this method takes to complete.
Trace.beginSection("updatePhotoTintAndDropShadow");
+ // Tell the photo view what tint we are trying to achieve. Depending on the type of
+ // drawable used, the photo view may or may not use this tint.
+ mPhotoView.setTint(mHeaderTintColor);
+
if (mIsTwoPanel && !mPhotoView.isBasedOffLetterTile()) {
// When in two panel mode, UX considers photo tinting unnecessary for non letter
// tile photos.
@@ -1206,9 +1212,6 @@ public class MultiShrinkScroller extends FrameLayout {
// TODO: remove re-allocation of ColorMatrixColorFilter objects (b/17627000)
mPhotoView.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));
- // Tell the photo view what tint we are trying to achieve. Depending on the type of
- // drawable used, the photo view may or may not use this tint.
- mPhotoView.setTint(mHeaderTintColor);
mTitleGradientDrawable.setAlpha(gradientAlpha);
mActionBarGradientDrawable.setAlpha(gradientAlpha);
diff --git a/src/com/android/contacts/widget/ProportionalLayout.java b/src/com/android/contacts/widget/ProportionalLayout.java
new file mode 100644
index 000000000..79c58eccd
--- /dev/null
+++ b/src/com/android/contacts/widget/ProportionalLayout.java
@@ -0,0 +1,146 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+
+/**
+ * Layout that calculates its height based on its width, or vice versa (depending on the set
+ * {@link #setDirection(Direction)}. The factor is specified in {@link #setRatio(float)}.
+ * <p>For {@link Direction#heightToWidth}: width := height * factor</p>
+ * <p>For {@link Direction#widthToHeight}: height := width * factor</p>
+ * <p>Only one child is allowed; if more are required, another ViewGroup can be used as the direct
+ * child of this layout.</p>
+ */
+public class ProportionalLayout extends ViewGroup {
+ /** Specifies whether the width should be calculated based on the height or vice-versa */
+ public enum Direction {
+ widthToHeight("widthToHeight"),
+ heightToWidth("heightToWidth");
+
+ public final String XmlName;
+
+ private Direction(String xmlName) {
+ XmlName = xmlName;
+ }
+
+ /**
+ * Parses the given direction string and returns the Direction instance. This
+ * should be used when inflating from xml
+ */
+ public static Direction parse(String value) {
+ if (widthToHeight.XmlName.equals(value)) {
+ return Direction.widthToHeight;
+ } else if (heightToWidth.XmlName.equals(value)) {
+ return Direction.heightToWidth;
+ } else {
+ throw new IllegalStateException("direction must be either " +
+ widthToHeight.XmlName + " or " + heightToWidth.XmlName);
+ }
+ }
+ }
+
+ private Direction mDirection;
+ private float mRatio;
+
+ public ProportionalLayout(Context context) {
+ super(context);
+ }
+
+ public ProportionalLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initFromAttributes(context, attrs);
+ }
+
+ public ProportionalLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ initFromAttributes(context, attrs);
+ }
+
+ private void initFromAttributes(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ProportionalLayout);
+
+ mDirection = Direction.parse(a.getString(R.styleable.ProportionalLayout_direction));
+ mRatio = a.getFloat(R.styleable.ProportionalLayout_ratio, 1.0f);
+
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ if (getChildCount() != 1) {
+ throw new IllegalStateException("ProportionalLayout requires exactly one child");
+ }
+
+ final View child = getChildAt(0);
+
+ // Do a first pass to get the optimal size
+ measureChild(child, widthMeasureSpec, heightMeasureSpec);
+ final int childWidth = child.getMeasuredWidth();
+ final int childHeight = child.getMeasuredHeight();
+
+ final int width;
+ final int height;
+ if (mDirection == Direction.heightToWidth) {
+ width = Math.round(childHeight * mRatio);
+ height = childHeight;
+ } else {
+ width = childWidth;
+ height = Math.round(childWidth * mRatio);
+ }
+
+ // Do a second pass so that all children are informed of the new size
+ measureChild(child,
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
+
+ setMeasuredDimension(
+ resolveSize(width, widthMeasureSpec), resolveSize(height, heightMeasureSpec));
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ if (getChildCount() != 1) {
+ throw new IllegalStateException("ProportionalLayout requires exactly one child");
+ }
+
+ final View child = getChildAt(0);
+ child.layout(0, 0, right-left, bottom-top);
+ }
+
+ public Direction getDirection() {
+ return mDirection;
+ }
+
+ public void setDirection(Direction direction) {
+ mDirection = direction;
+ }
+
+ public float getRatio() {
+ return mRatio;
+ }
+
+ public void setRatio(float ratio) {
+ mRatio = ratio;
+ }
+}
diff --git a/src/com/android/contacts/widget/QuickContactImageView.java b/src/com/android/contacts/widget/QuickContactImageView.java
index f85fe1670..2943912c4 100644
--- a/src/com/android/contacts/widget/QuickContactImageView.java
+++ b/src/com/android/contacts/widget/QuickContactImageView.java
@@ -1,7 +1,5 @@
package com.android.contacts.widget;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -9,6 +7,7 @@ import android.util.AttributeSet;
import android.widget.ImageView;
import com.android.contacts.R;
+import com.android.contacts.lettertiles.LetterTileDrawable;
/**
* An {@link ImageView} designed to display QuickContact's contact photo. When requested to draw
diff --git a/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java b/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java
new file mode 100644
index 000000000..da2b468da
--- /dev/null
+++ b/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2014 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.widget;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.PhoneAccountCompat;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog that allows the user to select a phone accounts for a given action. Optionally provides
+ * the choice to set the phone account as default.
+ */
+public class SelectPhoneAccountDialogFragment extends DialogFragment {
+ private static final String ARG_TITLE_RES_ID = "title_res_id";
+ private static final String ARG_CAN_SET_DEFAULT = "can_set_default";
+ private static final String ARG_ACCOUNT_HANDLES = "account_handles";
+ private static final String ARG_IS_DEFAULT_CHECKED = "is_default_checked";
+ private static final String ARG_LISTENER = "listener";
+
+ private int mTitleResId;
+ private boolean mCanSetDefault;
+ private List<PhoneAccountHandle> mAccountHandles;
+ private boolean mIsSelected;
+ private boolean mIsDefaultChecked;
+ private TelecomManager mTelecomManager;
+ private SelectPhoneAccountListener mListener;
+
+ /**
+ * Create new fragment instance with default title and no option to set as default.
+ *
+ * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
+ * @param listener The listener for the results of the account selection.
+ */
+ public static SelectPhoneAccountDialogFragment newInstance(
+ List<PhoneAccountHandle> accountHandles, SelectPhoneAccountListener listener) {
+ return newInstance(R.string.select_account_dialog_title, false,
+ accountHandles, listener);
+ }
+
+ /**
+ * Create new fragment instance.
+ * This method also allows specifying a custom title and "set default" checkbox.
+ *
+ * @param titleResId The resource ID for the string to use in the title of the dialog.
+ * @param canSetDefault {@code true} if the dialog should include an option to set the selection
+ * as the default. False otherwise.
+ * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
+ * @param listener The listener for the results of the account selection.
+ */
+ public static SelectPhoneAccountDialogFragment newInstance(int titleResId,
+ boolean canSetDefault, List<PhoneAccountHandle> accountHandles,
+ SelectPhoneAccountListener listener) {
+ ArrayList<PhoneAccountHandle> accountHandlesCopy = new ArrayList<PhoneAccountHandle>();
+ if (accountHandles != null) {
+ accountHandlesCopy.addAll(accountHandles);
+ }
+ SelectPhoneAccountDialogFragment fragment = new SelectPhoneAccountDialogFragment();
+ final Bundle args = new Bundle();
+ args.putInt(ARG_TITLE_RES_ID, titleResId);
+ args.putBoolean(ARG_CAN_SET_DEFAULT, canSetDefault);
+ args.putParcelableArrayList(ARG_ACCOUNT_HANDLES, accountHandlesCopy);
+ args.putParcelable(ARG_LISTENER, listener);
+ fragment.setArguments(args);
+ fragment.setListener(listener);
+ return fragment;
+ }
+
+ public SelectPhoneAccountDialogFragment() {
+ }
+
+ public void setListener(SelectPhoneAccountListener listener) {
+ mListener = listener;
+ }
+
+ public static class SelectPhoneAccountListener extends ResultReceiver {
+ static final int RESULT_SELECTED = 1;
+ static final int RESULT_DISMISSED = 2;
+
+ static final String EXTRA_SELECTED_ACCOUNT_HANDLE = "extra_selected_account_handle";
+ static final String EXTRA_SET_DEFAULT = "extra_set_default";
+
+ public SelectPhoneAccountListener() {
+ super(new Handler());
+ }
+
+ @Override
+ protected void onReceiveResult(int resultCode, Bundle resultData) {
+ if (resultCode == RESULT_SELECTED) {
+ onPhoneAccountSelected(
+ (PhoneAccountHandle) resultData.getParcelable(
+ EXTRA_SELECTED_ACCOUNT_HANDLE),
+ resultData.getBoolean(EXTRA_SET_DEFAULT));
+ } else if (resultCode == RESULT_DISMISSED) {
+ onDialogDismissed();
+ }
+ }
+
+ public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle,
+ boolean setDefault) {}
+
+ public void onDialogDismissed() {}
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(ARG_IS_DEFAULT_CHECKED, mIsDefaultChecked);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ mTitleResId = getArguments().getInt(ARG_TITLE_RES_ID);
+ mCanSetDefault = getArguments().getBoolean(ARG_CAN_SET_DEFAULT);
+ mAccountHandles = getArguments().getParcelableArrayList(ARG_ACCOUNT_HANDLES);
+ mListener = getArguments().getParcelable(ARG_LISTENER);
+ if (savedInstanceState != null) {
+ mIsDefaultChecked = savedInstanceState.getBoolean(ARG_IS_DEFAULT_CHECKED);
+ }
+ mIsSelected = false;
+ mTelecomManager =
+ (TelecomManager) getActivity().getSystemService(Context.TELECOM_SERVICE);
+
+ final DialogInterface.OnClickListener selectionListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mIsSelected = true;
+ PhoneAccountHandle selectedAccountHandle = mAccountHandles.get(which);
+ final Bundle result = new Bundle();
+ result.putParcelable(SelectPhoneAccountListener.EXTRA_SELECTED_ACCOUNT_HANDLE,
+ selectedAccountHandle);
+ result.putBoolean(SelectPhoneAccountListener.EXTRA_SET_DEFAULT,
+ mIsDefaultChecked);
+ if (mListener != null) {
+ mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_SELECTED, result);
+ }
+ }
+ };
+
+ final CompoundButton.OnCheckedChangeListener checkListener =
+ new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton check, boolean isChecked) {
+ mIsDefaultChecked = isChecked;
+ }
+ };
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ ListAdapter selectAccountListAdapter = new SelectAccountListAdapter(
+ builder.getContext(),
+ R.layout.select_account_list_item,
+ mAccountHandles);
+
+ AlertDialog dialog = builder.setTitle(mTitleResId)
+ .setAdapter(selectAccountListAdapter, selectionListener)
+ .create();
+
+ if (mCanSetDefault) {
+ // Generate custom checkbox view
+ LinearLayout checkboxLayout = (LinearLayout) getActivity()
+ .getLayoutInflater()
+ .inflate(R.layout.default_account_checkbox, null);
+
+ CheckBox cb =
+ (CheckBox) checkboxLayout.findViewById(R.id.default_account_checkbox_view);
+ cb.setOnCheckedChangeListener(checkListener);
+ cb.setChecked(mIsDefaultChecked);
+
+ dialog.getListView().addFooterView(checkboxLayout);
+ }
+
+ return dialog;
+ }
+
+ private class SelectAccountListAdapter extends ArrayAdapter<PhoneAccountHandle> {
+ private int mResId;
+
+ public SelectAccountListAdapter(
+ Context context, int resource, List<PhoneAccountHandle> accountHandles) {
+ super(context, resource, accountHandles);
+ mResId = resource;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LayoutInflater inflater = (LayoutInflater)
+ getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ View rowView;
+ final ViewHolder holder;
+
+ if (convertView == null) {
+ // Cache views for faster scrolling
+ rowView = inflater.inflate(mResId, null);
+ holder = new ViewHolder();
+ holder.labelTextView = (TextView) rowView.findViewById(R.id.label);
+ holder.numberTextView = (TextView) rowView.findViewById(R.id.number);
+ holder.imageView = (ImageView) rowView.findViewById(R.id.icon);
+ rowView.setTag(holder);
+ }
+ else {
+ rowView = convertView;
+ holder = (ViewHolder) rowView.getTag();
+ }
+
+ PhoneAccountHandle accountHandle = getItem(position);
+ PhoneAccount account = mTelecomManager.getPhoneAccount(accountHandle);
+ if (account == null) {
+ return rowView;
+ }
+ holder.labelTextView.setText(account.getLabel());
+ if (account.getAddress() == null ||
+ TextUtils.isEmpty(account.getAddress().getSchemeSpecificPart())) {
+ holder.numberTextView.setVisibility(View.GONE);
+ } else {
+ holder.numberTextView.setVisibility(View.VISIBLE);
+ holder.numberTextView.setText(
+ PhoneNumberUtilsCompat.createTtsSpannable(
+ account.getAddress().getSchemeSpecificPart()));
+ }
+ holder.imageView.setImageDrawable(PhoneAccountCompat.createIconDrawable(account,
+ getContext()));
+ return rowView;
+ }
+
+ private class ViewHolder {
+ TextView labelTextView;
+ TextView numberTextView;
+ ImageView imageView;
+ }
+ }
+
+ @Override
+ public void onStop() {
+ if (!mIsSelected && mListener != null) {
+ mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_DISMISSED, null);
+ }
+ super.onStop();
+ }
+}
diff --git a/tests/Android.mk b/tests/Android.mk
index 4fd947ccf..09c97cd77 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -5,13 +5,10 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := tests
LOCAL_CERTIFICATE := shared
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
-src_dirs := src \
- ../../ContactsCommon/TestCommon/src
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
+res_dirs := res
+LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
LOCAL_PACKAGE_NAME := ContactsTests
@@ -20,4 +17,15 @@ LOCAL_INSTRUMENTATION_FOR := Contacts
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 21
+LOCAL_STATIC_JAVA_LIBRARIES += \
+ android-support-test \
+ hamcrest-library \
+ mockito-target-minus-junit4 \
+ ub-uiautomator
+
+
+LOCAL_AAPT_FLAGS := \
+ --auto-add-overlay \
+ --extra-packages com.android.contacts.common.tests
+
include $(BUILD_PACKAGE)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 65c04bc21..e3d9820d1 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -17,9 +17,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.contacts.tests">
- <uses-sdk
- android:minSdkVersion="21"
- android:targetSdkVersion="25" />
+ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
@@ -36,6 +34,7 @@
<uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
<application
+ android:icon="@mipmap/ic_contacts_launcher"
android:label="@string/applicationLabel">
<uses-library android:name="android.test.runner" />
@@ -49,7 +48,13 @@
</intent-filter>
</activity>
- <activity android:name=".allintents.ResultActivity"/>
+ <activity android:name=".allintents.ResultActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.item/vnd.contactstest.profile" />
+ </intent-filter>
+ </activity>
<activity android:name=".quickcontact.QuickContactTestsActivity"/>
@@ -69,12 +74,23 @@
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/test_basic_authenticator" />
</service>
+ <service android:name=".testauth.TestSyncService$Basic" android:exported="true" >
+ <intent-filter>
+ <action android:name="android.content.SyncAdapter"/>
+ </intent-filter>
+ <meta-data
+ android:name="android.content.SyncAdapter"
+ android:resource="@xml/test_basic_syncadapter" />
+ <meta-data
+ android:name="android.provider.CONTACTS_STRUCTURE"
+ android:resource="@xml/contacts_contactsdatakind" />
+ </service>
<service android:name=".QueryService" />
<service android:name=".PhoneNumberTestService" />
</application>
- <instrumentation android:name="android.test.InstrumentationTestRunner"
+ <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.contacts"
android:label="Contacts app tests">
</instrumentation>
@@ -84,4 +100,10 @@
android:label="Contacts launch performance">
</instrumentation>
+ <instrumentation
+ android:name="com.android.contacts.RunMethodInstrumentation"
+ android:targetPackage="com.android.contacts"
+ android:label="Run Contacts Method">
+ </instrumentation>
+
</manifest>
diff --git a/tests/res/drawable/ic_contact_picture.png b/tests/res/drawable/ic_contact_picture.png
deleted file mode 100644
index 68767774f..000000000
--- a/tests/res/drawable/ic_contact_picture.png
+++ /dev/null
Binary files differ
diff --git a/tests/res/mipmap-hdpi/ic_contacts_launcher.png b/tests/res/mipmap-hdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..0fd1492ba
--- /dev/null
+++ b/tests/res/mipmap-hdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/res/mipmap-mdpi/ic_contacts_launcher.png b/tests/res/mipmap-mdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..e23930b82
--- /dev/null
+++ b/tests/res/mipmap-mdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/res/mipmap-xhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..aff0f3166
--- /dev/null
+++ b/tests/res/mipmap-xhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/res/mipmap-xxhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xxhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..9cd2ebe42
--- /dev/null
+++ b/tests/res/mipmap-xxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/res/mipmap-xxxhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xxxhdpi/ic_contacts_launcher.png
new file mode 100644
index 000000000..74c41792f
--- /dev/null
+++ b/tests/res/mipmap-xxxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index bd30d6ec6..76cf4e479 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -19,7 +19,6 @@
<string-array name="allIntents">
<!-- List modes -->
- <item>VIEW (content uri without any id)</item>
<item>ACTION_PICK: contact</item>
<item>ACTION_PICK: contact (legacy)</item>
<item>ACTION_PICK: phone</item>
@@ -39,13 +38,15 @@
<item>ACTION_INSERT_OR_EDIT</item>
<item>ACTION_INSERT_OR_EDIT_PHONE_NUMBER</item>
<item>ACTION_INSERT_OR_EDIT_EMAIL_ADDRESS</item>
+ <item>ACTION_INSERT_GROUP</item>
<item>ACTION_SEARCH (call button)</item>
<item>ACTION_SEARCH: contact</item>
<item>ACTION_SEARCH: email</item>
<item>ACTION_SEARCH: phone</item>
+ <item>ACTION_SEARCH: general</item>
<item>SEARCH_SUGGESTION_CLICKED: contact</item>
- <!-- Edit Contact -->
+ <!-- Edit -->
<item>EDIT (content uri with only id)</item>
<item>EDIT (lookup uri without id)</item>
<item>EDIT (lookup uri)</item>
@@ -57,16 +58,29 @@
<item>EDIT (create new contact for account with data)</item>
<item>EDIT (create new raw contact)</item>
<item>EDIT (create new legacy)</item>
+ <item>EDIT (group)</item>
- <!-- View Contact -->
+ <!-- View -->
+ <item>VIEW (content uri without any id)</item>
+ <item>VIEW PERSON (content uri without any id)</item>
<item>VIEW (content uri with only id)</item>
<item>VIEW (lookup uri without id)</item>
<item>VIEW (lookup uri)</item>
<item>VIEW (called for raw contact)</item>
<item>VIEW (legacy style uri)</item>
+ <item>VIEW (group)</item>
<!-- Various ways to start Contacts -->
<item>QuickContactTestsActivity</item>
+
+ <!-- Intents accepted by PeopleActivity -->
+ <item>LIST_DEFAULT</item>
+ <item>LIST_CONTACTS</item>
+ <item>LIST_ALL_CONTACTS</item>
+ <item>LIST_CONTACTS_WITH_PHONES</item>
+ <item>LIST_STARRED</item>
+ <item>LIST_FREQUENT</item>
+ <item>LIST_STREQUENT</item>
</string-array>
<string name="pickContact">Pick contact</string>
@@ -90,5 +104,5 @@
<string name="attribution_flicker">Flicker</string>
<string name="attribution_twitter">Twitter</string>
- <string name="authenticator_basic_label">Test adapter</string>
+ <string name="test_string">TEST STRING</string>
</resources>
diff --git a/tests/res/xml/contacts_contactsdatakind.xml b/tests/res/xml/contacts_contactsdatakind.xml
new file mode 100644
index 000000000..20c85adb7
--- /dev/null
+++ b/tests/res/xml/contacts_contactsdatakind.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ contacts.xml to build a "fallback account type" equivalent with
+ an additional test ContactsDataKind
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ accountType="com.android.contacts.tests.testauth.basic"
+ accountTypeLabel="@string/applicationLabel"
+ accountTypeIcon="@mipmap/ic_contacts_launcher"
+ >
+ <EditSchema
+ >
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+ <DataKind kind="photo" maxOccurs="1" />
+ <DataKind kind="phone" >
+ <Type type="mobile" />
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="fax_work" />
+ <Type type="fax_home" />
+ <Type type="pager" />
+ <Type type="other" />
+ <Type type="custom"/>
+ <Type type="callback" />
+ <Type type="car" />
+ <Type type="company_main" />
+ <Type type="isdn" />
+ <Type type="main" />
+ <Type type="other_fax" />
+ <Type type="radio" />
+ <Type type="telex" />
+ <Type type="tty_tdd" />
+ <Type type="work_mobile"/>
+ <Type type="work_pager" />
+ <Type type="assistant" />
+ <Type type="mms" />
+ </DataKind>
+ <DataKind kind="email" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="nickname" maxOccurs="1" />
+ <DataKind kind="im" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="postal" needsStructured="false" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="organization" maxOccurs="1" />
+ <DataKind kind="website" />
+ <DataKind kind="sip_address" maxOccurs="1" />
+ <DataKind kind="note" maxOccurs="1" />
+ <DataKind kind="group_membership" maxOccurs="1" />
+ </EditSchema>
+
+ <ContactsDataKind
+ android:mimeType="vnd.android.cursor.item/vnd.contactstest.profile"
+ android:icon="@mipmap/ic_contacts_launcher"
+ android:summaryColumn="data2"
+ android:detailColumn="data3" />
+
+</ContactsAccountType>
diff --git a/tests/res/xml/contacts_fallback.xml b/tests/res/xml/contacts_fallback.xml
new file mode 100644
index 000000000..7e731f4de
--- /dev/null
+++ b/tests/res/xml/contacts_fallback.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!--
+ contacts.xml to build "fallback account type" equivalent.
+ This is directly used in ExternalAccountTypeTest to test the parser. There's no sync adapter
+ that actually defined with this definition.
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema
+ >
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+ <DataKind kind="photo" maxOccurs="1" />
+ <DataKind kind="phone" >
+ <Type type="mobile" />
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="fax_work" />
+ <Type type="fax_home" />
+ <Type type="pager" />
+ <Type type="other" />
+ <Type type="custom"/>
+ <Type type="callback" />
+ <Type type="car" />
+ <Type type="company_main" />
+ <Type type="isdn" />
+ <Type type="main" />
+ <Type type="other_fax" />
+ <Type type="radio" />
+ <Type type="telex" />
+ <Type type="tty_tdd" />
+ <Type type="work_mobile"/>
+ <Type type="work_pager" />
+ <Type type="assistant" />
+ <Type type="mms" />
+ </DataKind>
+ <DataKind kind="email" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="nickname" maxOccurs="1" />
+ <DataKind kind="im" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="postal" needsStructured="false" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+ <DataKind kind="organization" maxOccurs="1" />
+ <DataKind kind="website" />
+ <DataKind kind="sip_address" maxOccurs="1" />
+ <DataKind kind="note" maxOccurs="1" />
+ <DataKind kind="group_membership" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/contacts_readonly.xml b/tests/res/xml/contacts_readonly.xml
new file mode 100644
index 000000000..df8d9c06e
--- /dev/null
+++ b/tests/res/xml/contacts_readonly.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!--
+ Contacts.xml without EditSchema.
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <ContactsDataKind
+ android:icon="@drawable/android"
+ android:mimeType="vnd.android.cursor.item/a.b.c"
+ android:summaryColumn="data1"
+ android:detailColumn="data2"
+ android:detailSocialSummary="true"
+ >
+ </ContactsDataKind>
+ <ContactsDataKind
+ android:icon="@drawable/default_icon"
+ android:mimeType="vnd.android.cursor.item/d.e.f"
+ android:summaryColumn="data3"
+ android:detailColumn="data4"
+ android:detailSocialSummary="false"
+ >
+ </ContactsDataKind>
+ <ContactsDataKind
+ android:icon="@drawable/android"
+ android:mimeType="vnd.android.cursor.item/xyz"
+ android:summaryColumn="data5"
+ android:detailColumn="data6"
+ android:detailSocialSummary="true"
+ >
+ </ContactsDataKind>
+</ContactsAccountType>
diff --git a/tests/res/xml/iconset.xml b/tests/res/xml/iconset.xml
index b9e419dd9..d1207e798 100644
--- a/tests/res/xml/iconset.xml
+++ b/tests/res/xml/iconset.xml
@@ -1,25 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2012 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
+<!-- Copyright (C) 2009 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
<icon-set
xmlns:android="http://schemas.android.com/apk/res/android">
<icon-default android:icon="@drawable/default_icon" />
- <icon android:mimeType="vnd.android.cursor.item/phone"
+ <icon android:mimeType="vnd.android.cursor.item/phone"
android:icon="@drawable/phone_icon" />
-</icon-set>
+</icon-set> \ No newline at end of file
diff --git a/tests/res/xml/missing_contacts_base.xml b/tests/res/xml/missing_contacts_base.xml
new file mode 100644
index 000000000..66917b36b
--- /dev/null
+++ b/tests/res/xml/missing_contacts_base.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Base definition, which is valid. -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name.xml b/tests/res/xml/missing_contacts_name.xml
new file mode 100644
index 000000000..1ac26be33
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing "name" kind. -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr2.xml b/tests/res/xml/missing_contacts_name_attr2.xml
new file mode 100644
index 000000000..77f25d29a
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr2.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr3.xml b/tests/res/xml/missing_contacts_name_attr3.xml
new file mode 100644
index 000000000..d06c4c187
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr3.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr4.xml b/tests/res/xml/missing_contacts_name_attr4.xml
new file mode 100644
index 000000000..6d597fe0f
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr4.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr5.xml b/tests/res/xml/missing_contacts_name_attr5.xml
new file mode 100644
index 000000000..cf2d5cc4a
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr5.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr6.xml b/tests/res/xml/missing_contacts_name_attr6.xml
new file mode 100644
index 000000000..cfa589bd2
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr6.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticGivenName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_name_attr7.xml b/tests/res/xml/missing_contacts_name_attr7.xml
new file mode 100644
index 000000000..7b087066b
--- /dev/null
+++ b/tests/res/xml/missing_contacts_name_attr7.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing one of the "support*" attributes". -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ />
+ <DataKind kind="photo" maxOccurs="1" />
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/missing_contacts_photo.xml b/tests/res/xml/missing_contacts_photo.xml
new file mode 100644
index 000000000..d73529c8d
--- /dev/null
+++ b/tests/res/xml/missing_contacts_photo.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<!-- XML for must-have checks. Missing "photo" kind. -->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema>
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/test_basic_authenticator.xml b/tests/res/xml/test_basic_authenticator.xml
index ecd100a74..40b9088c3 100644
--- a/tests/res/xml/test_basic_authenticator.xml
+++ b/tests/res/xml/test_basic_authenticator.xml
@@ -18,8 +18,8 @@
-->
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
- android:accountType="com.android.contacts.tests.authtest.basic"
- android:icon="@drawable/ic_contact_picture"
- android:smallIcon="@drawable/ic_contact_picture"
- android:label="@string/authenticator_basic_label"
+ android:accountType="com.android.contacts.tests.testauth.basic"
+ android:icon="@mipmap/ic_contacts_launcher"
+ android:smallIcon="@mipmap/ic_contacts_launcher"
+ android:label="@string/applicationLabel"
/>
diff --git a/tests/res/xml/test_basic_contacts.xml b/tests/res/xml/test_basic_contacts.xml
new file mode 100644
index 000000000..56e6e16d3
--- /dev/null
+++ b/tests/res/xml/test_basic_contacts.xml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ >
+ <EditSchema
+ >
+ <!--
+ Name:
+ - maxOccurs must be 1
+ - No types.
+
+ - Currently all the supportsXxx attributes must be true, but here's the plan for the
+ future:
+ (There's some hardcoded assumptions in the contact editor, which is one reason
+ for the above restriction)
+
+ - "Family name" and "Given name" must be supported.
+ - All sync adapters must support structured name. "display name only" is not
+ supported.
+ -> Supporting this would require relatively large changes to
+ the contact editor.
+
+ - Fields are decided from the attributes:
+ StructuredName.DISPLAY_NAME if supportsDisplayName == true
+ StructuredName.PREFIX if supportsPrefix == true
+ StructuredName.FAMILY_NAME (always)
+ StructuredName.MIDDLE_NAME if supportsPrefix == true
+ StructuredName.GIVEN_NAME (always)
+ StructuredName.SUFFIX if supportsSuffix == true
+ StructuredName.PHONETIC_FAMILY_NAME if supportsPhoneticFamilyName == true
+ StructuredName.PHONETIC_MIDDLE_NAME if supportsPhoneticMiddleName == true
+ StructuredName.PHONETIC_GIVEN_NAME if supportsPhoneticGivenName == true
+
+ - DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME is always added.
+ - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME is added
+ if any of supportsPhoneticXxx == true
+ -->
+ <!-- Fallback/Google definition. Supports all. -->
+ <DataKind kind="name"
+ maxOccurs="1"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="true"
+ supportsPhoneticGivenName="true"
+ >
+ </DataKind>
+
+ <!-- Exchange definition. No display-name, no phonetic-middle.
+ <DataKind kind="name"
+ supportsPrefix="true"
+ supportsMiddleName="true"
+ supportsSuffix="true"
+ supportsPhoneticFamilyName="true"
+ supportsPhoneticMiddleName="false"
+ supportsPhoneticGivenName ="true"
+ >
+ </DataKind>
+ -->
+
+ <!--
+ Photo:
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="photo" maxOccurs="1" />
+
+ <!--
+ Phone definition.
+ - "is secondary?" is inferred from type.
+ -->
+ <!-- Fallback, Google definition. -->
+ <DataKind kind="phone" >
+ <!-- Note: Google type doesn't have obsolete ones -->
+ <Type type="mobile" />
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="fax_work" />
+ <Type type="fax_home" />
+ <Type type="pager" />
+ <Type type="other" />
+ <Type type="custom"/>
+ <Type type="callback" />
+ <Type type="car" />
+ <Type type="company_main" />
+ <Type type="isdn" />
+ <Type type="main" />
+ <Type type="other_fax" />
+ <Type type="radio" />
+ <Type type="telex" />
+ <Type type="tty_tdd" />
+ <Type type="work_mobile"/>
+ <Type type="work_pager" />
+ <Type type="assistant" />
+ <Type type="mms" />
+ </DataKind>
+
+ <!-- Exchange definition.
+ <DataKind kind="phone" >
+ <Type type="home" maxOccurs="2" />
+ <Type type="mobile" maxOccurs="1" />
+ <Type type="work" maxOccurs="2" />
+ <Type type="fax_work" maxOccurs="1" />
+ <Type type="fax_home" maxOccurs="1" />
+ <Type type="pager" maxOccurs="1" />
+ <Type type="car" maxOccurs="1" />
+ <Type type="company_main" maxOccurs="1" />
+ <Type type="mms" maxOccurs="1" />
+ <Type type="radio" maxOccurs="1" />
+ <Type type="assistant" maxOccurs="1" />
+ </DataKind>
+ -->
+
+ <!--
+ Email
+ -->
+ <!-- Fallback/Google definition. -->
+ <DataKind kind="email" >
+ <!-- Note: Google type doesn't have obsolete ones -->
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!--
+ Exchange definition.
+ - Same definition as "fallback" except for maxOccurs=3
+ <DataKind kind="email" maxOccurs="3" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="mobile" />
+ <Type type="custom" />
+ </DataKind>
+ -->
+
+ <!--
+ Nickname
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="nickname" maxOccurs="1" />
+
+ <!--
+ Im:
+ - The TYPE column always stores Im.TYPE_OTHER (defaultValues is always set)
+ - The user-selected type is stored in Im.PROTOCOL
+ -->
+ <!-- Fallback, Google definition. -->
+ <DataKind kind="im" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!-- Exchange definition.
+ <DataKind kind="im" maxOccurs="3" >
+ <Type type="aim" />
+ <Type type="msn" />
+ <Type type="yahoo" />
+ <Type type="skype" />
+ <Type type="qq" />
+ <Type type="google_talk" />
+ <Type type="icq" />
+ <Type type="jabber" />
+ <Type type="custom" />
+ </DataKind>
+ -->
+
+ <!--
+ Postal address.
+ -->
+ <!-- Fallback/Google definition. Not structured. -->
+ <DataKind kind="postal" needsStructured="false" >
+ <Type type="home" />
+ <Type type="work" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!-- Exchange definition. Structured.
+ <DataKind kind="postal" needsStructured="true" >
+ <Type type="work" />
+ <Type type="home" />
+ <Type type="other" />
+ </DataKind>
+ -->
+
+ <!--
+ Organization:
+ - Fields are fixed: COMPANY, TITLE
+ - maxOccurs must be 1
+ - No types.
+ -->
+ <DataKind kind="organization" maxOccurs="1" />
+
+ <!--
+ Website:
+ - No types.
+ -->
+ <DataKind kind="website" />
+
+ <!--
+ Below kinds have nothing configurable.
+ - No types are supported.
+ - maxOccurs must be 1
+ -->
+ <DataKind kind="sip_address" maxOccurs="1" />
+ <DataKind kind="note" maxOccurs="1" />
+
+ <!--
+ Google/Exchange supports it, but fallback doesn't.
+ <DataKind kind="group_membership" maxOccurs="1" />
+ -->
+
+ <!--
+ Event
+ -->
+ <DataKind kind="event" dateWithTime="false">
+ <Type type="birthday" maxOccurs="1" yearOptional="true" />
+ <Type type="anniversary" />
+ <Type type="other" />
+ <Type type="custom" />
+ </DataKind>
+
+ <!--
+ Exchange definition. dateWithTime is needed only for Exchange.
+ <DataKind kind="event" dateWithTime="true">
+ <Type type="birthday" maxOccurs="1" />
+ </DataKind>
+ -->
+
+ <!--
+ Relationship
+ -->
+ <DataKind kind="relationship" >
+ <Type type="assistant" />
+ <Type type="brother" />
+ <Type type="child" />
+ <Type type="domestic_partner" />
+ <Type type="father" />
+ <Type type="friend" />
+ <Type type="manager" />
+ <Type type="mother" />
+ <Type type="parent" />
+ <Type type="partner" />
+ <Type type="referred_by" />
+ <Type type="relative" />
+ <Type type="sister" />
+ <Type type="spouse" />
+ <Type type="custom" />
+ </DataKind>
+ </EditSchema>
+</ContactsAccountType>
diff --git a/tests/res/xml/test_basic_syncadapter.xml b/tests/res/xml/test_basic_syncadapter.xml
new file mode 100644
index 000000000..b897185db
--- /dev/null
+++ b/tests/res/xml/test_basic_syncadapter.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * 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.
+ */
+-->
+
+<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
+ android:contentAuthority="com.android.contacts"
+ android:accountType="com.android.contacts.tests.testauth.basic"
+ android:supportsUploading="true"
+ android:userVisible="true"
+/>
diff --git a/tests/src/com/android/contacts/ContactsLaunchPerformance.java b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
index 894ae2cfc..3aaf483a2 100644
--- a/tests/src/com/android/contacts/ContactsLaunchPerformance.java
+++ b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
@@ -21,7 +21,7 @@ import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
-import com.android.contacts.common.test.LaunchPerformanceBase;
+import com.android.contacts.test.LaunchPerformanceBase;
/**
* Instrumentation class for Address Book launch performance testing.
diff --git a/tests/src/com/android/contacts/ContactsUtilsTests.java b/tests/src/com/android/contacts/ContactsUtilsTests.java
new file mode 100644
index 000000000..114ce67dc
--- /dev/null
+++ b/tests/src/com/android/contacts/ContactsUtilsTests.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts;
+
+import android.content.ContentValues;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Pair;
+
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+
+/**
+ * Tests for {@link ContactsUtils}.
+ */
+@SmallTest
+public class ContactsUtilsTests extends AndroidTestCase {
+
+ private static final String TEST_ADDRESS = "user@example.org";
+ private static final String TEST_PROTOCOL = "prot%col";
+
+ public void testIsGraphicNull() throws Exception {
+ assertFalse(ContactsUtils.isGraphic(null));
+ }
+
+ public void testIsGraphicEmpty() throws Exception {
+ assertFalse(ContactsUtils.isGraphic(""));
+ }
+
+ public void testIsGraphicSpaces() throws Exception {
+ assertFalse(ContactsUtils.isGraphic(" "));
+ }
+
+ public void testIsGraphicPunctuation() throws Exception {
+ assertTrue(ContactsUtils.isGraphic("."));
+ }
+
+ public void testAreObjectsEqual() throws Exception {
+ assertTrue("null:null", ContactsUtils.areObjectsEqual(null, null));
+ assertTrue("1:1", ContactsUtils.areObjectsEqual(1, 1));
+
+ assertFalse("null:1", ContactsUtils.areObjectsEqual(null, 1));
+ assertFalse("1:null", ContactsUtils.areObjectsEqual(1, null));
+ assertFalse("1:2", ContactsUtils.areObjectsEqual(1, 2));
+ }
+
+ public void testAreIntentActionEqual() throws Exception {
+ assertTrue("1", ContactsUtils.areIntentActionEqual(null, null));
+ assertTrue("1", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("a")));
+
+ assertFalse("11", ContactsUtils.areIntentActionEqual(new Intent("a"), null));
+ assertFalse("12", ContactsUtils.areIntentActionEqual(null, new Intent("a")));
+
+ assertFalse("21", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent()));
+ assertFalse("22", ContactsUtils.areIntentActionEqual(new Intent(), new Intent("b")));
+ assertFalse("23", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("b")));
+ }
+
+ public void testImIntentCustom() throws Exception {
+ // Custom IM types have encoded authority. We send the imto Intent here, because
+ // legacy third party apps might not accept xmpp yet
+ final ContentValues values = new ContentValues();
+ values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ values.put(Im.TYPE, Im.TYPE_HOME);
+ values.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+ values.put(Im.CUSTOM_PROTOCOL, TEST_PROTOCOL);
+ values.put(Im.DATA, TEST_ADDRESS);
+ final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+ final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+ final Intent imIntent = intents.first;
+
+ assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+
+ final Uri data = imIntent.getData();
+ assertEquals("imto", data.getScheme());
+ assertEquals(TEST_PROTOCOL, data.getAuthority());
+ assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
+
+ assertNull(intents.second);
+ }
+
+ public void testImIntent() throws Exception {
+ // Test GTalk XMPP URI. No chat capabilities provided
+ final ContentValues values = new ContentValues();
+ values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ values.put(Im.TYPE, Im.TYPE_HOME);
+ values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+ values.put(Im.DATA, TEST_ADDRESS);
+ final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+ final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+ final Intent imIntent = intents.first;
+
+ assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+ assertNull(intents.second);
+ }
+
+ public void testImIntentWithAudio() throws Exception {
+ // Test GTalk XMPP URI. Audio chat capabilities provided
+ final ContentValues values = new ContentValues();
+ values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ values.put(Im.TYPE, Im.TYPE_HOME);
+ values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+ values.put(Im.DATA, TEST_ADDRESS);
+ values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO);
+ final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+ final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+ final Intent imIntent = intents.first;
+
+ assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+ final Intent secondaryIntent = intents.second;
+ assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+ }
+
+ public void testImIntentWithVideo() throws Exception {
+ // Test GTalk XMPP URI. Video chat capabilities provided
+ final ContentValues values = new ContentValues();
+ values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ values.put(Im.TYPE, Im.TYPE_HOME);
+ values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+ values.put(Im.DATA, TEST_ADDRESS);
+ values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
+ Im.CAPABILITY_HAS_VOICE);
+ final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+ final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+ final Intent imIntent = intents.first;
+
+ assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+ final Intent secondaryIntent = intents.second;
+ assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+ }
+
+
+ public void testImEmailIntent() throws Exception {
+ // Email addresses are treated as Google Talk entries
+ // This test only tests the VIDEO+CAMERA case. The other cases have been addressed by the
+ // Im tests
+ final ContentValues values = new ContentValues();
+ values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ values.put(Email.TYPE, Email.TYPE_HOME);
+ values.put(Email.DATA, TEST_ADDRESS);
+ values.put(Email.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
+ Im.CAPABILITY_HAS_VOICE);
+ final ImDataItem im = ImDataItem.createFromEmail(
+ (EmailDataItem) DataItem.createFrom(values));
+
+ final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+ final Intent imIntent = intents.first;
+
+ assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+ final Intent secondaryIntent = intents.second;
+ assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+ assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+ }
+}
diff --git a/tests/src/com/android/contacts/DynamicShortcutsTests.java b/tests/src/com/android/contacts/DynamicShortcutsTests.java
new file mode 100644
index 000000000..3074efba2
--- /dev/null
+++ b/tests/src/com/android/contacts/DynamicShortcutsTests.java
@@ -0,0 +1,374 @@
+/*
+ * 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;
+
+import android.annotation.TargetApi;
+import android.app.job.JobScheduler;
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.ShortcutInfo;
+import android.content.pm.ShortcutManager;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.support.test.filters.SdkSuppress;
+import android.test.AndroidTestCase;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.test.mocks.MockContentProvider;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.Matchers;
+import org.mockito.ArgumentCaptor;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@TargetApi(Build.VERSION_CODES.N_MR1)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.N_MR1)
+@SmallTest
+public class DynamicShortcutsTests extends AndroidTestCase {
+
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+
+ // Clean up the job if it was scheduled by these tests.
+ final JobScheduler scheduler = (JobScheduler) getContext()
+ .getSystemService(Context.JOB_SCHEDULER_SERVICE);
+ scheduler.cancel(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID);
+ }
+
+ // Basic smoke test to make sure the queries executed by DynamicShortcuts are valid as well
+ // as the integration with ShortcutManager. Note that this may change the state of the shortcuts
+ // on the device it is executed on.
+ public void test_refresh_doesntCrash() {
+ final DynamicShortcuts sut = new DynamicShortcuts(getContext());
+ sut.refresh();
+ // Pass because it didn't throw an exception.
+ }
+
+ public void test_createShortcutFromRow_hasCorrectResult() {
+ final DynamicShortcuts sut = createDynamicShortcuts();
+
+ final Cursor row = queryResult(
+ // ID, LOOKUP_KEY, DISPLAY_NAME_PRIMARY
+ 1l, "lookup_key", "John Smith"
+ );
+
+ row.moveToFirst();
+ final ShortcutInfo shortcut = sut.builderForContactShortcut(row).build();
+
+ assertEquals("lookup_key", shortcut.getId());
+ assertEquals(Contacts.getLookupUri(1, "lookup_key"), shortcut.getIntent().getData());
+ assertEquals(ContactsContract.QuickContact.ACTION_QUICK_CONTACT,
+ shortcut.getIntent().getAction());
+ assertEquals("John Smith", shortcut.getShortLabel());
+ assertEquals("John Smith", shortcut.getLongLabel());
+ assertEquals(1l, shortcut.getExtras().getLong(Contacts._ID));
+ }
+
+ public void test_builderForContactShortcut_returnsNullWhenNameIsNull() {
+ final DynamicShortcuts sut = createDynamicShortcuts();
+
+ final ShortcutInfo.Builder shortcut = sut.builderForContactShortcut(1l, "lookup_key", null);
+
+ assertNull(shortcut);
+ }
+
+ public void test_builderForContactShortcut_ellipsizesLongNamesForLabels() {
+ final DynamicShortcuts sut = createDynamicShortcuts();
+ sut.setShortLabelMaxLength(5);
+ sut.setLongLabelMaxLength(10);
+
+ final ShortcutInfo shortcut = sut.builderForContactShortcut(1l, "lookup_key",
+ "123456789 1011").build();
+
+ assertEquals("1234…", shortcut.getShortLabel());
+ assertEquals("123456789…", shortcut.getLongLabel());
+ }
+
+ public void test_updatePinned_disablesShortcutsForRemovedContacts() throws Exception {
+ final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
+ when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
+ Collections.singletonList(makeDynamic(shortcutFor(1l, "key1", "name1"))));
+
+ final DynamicShortcuts sut = createDynamicShortcuts(emptyResolver(), mockShortcutManager);
+
+ sut.updatePinned();
+
+ verify(mockShortcutManager).disableShortcuts(
+ eq(Collections.singletonList("key1")), anyString());
+ }
+
+ public void test_updatePinned_updatesExistingShortcutsWithMatchingKeys() throws Exception {
+ final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
+ when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
+ Arrays.asList(
+ makeDynamic(shortcutFor(1l, "key1", "name1")),
+ makeDynamic(shortcutFor(2l, "key2", "name2")),
+ makeDynamic(shortcutFor(3l, "key3", "name3"))
+ ));
+
+ final DynamicShortcuts sut = createDynamicShortcuts(resolverWithExpectedQueries(
+ queryForSingleRow(Contacts.getLookupUri(1l, "key1"), 11l, "key1", "New Name1"),
+ queryForSingleRow(Contacts.getLookupUri(2l, "key2"), 2l, "key2", "name2"),
+ queryForSingleRow(Contacts.getLookupUri(3l, "key3"), 33l, "key3", "name3")
+ ), mockShortcutManager);
+
+ sut.updatePinned();
+
+ final ArgumentCaptor<List<ShortcutInfo>> updateArgs =
+ ArgumentCaptor.forClass((Class) List.class);
+
+ verify(mockShortcutManager).disableShortcuts(
+ eq(Collections.<String>emptyList()), anyString());
+ verify(mockShortcutManager).updateShortcuts(updateArgs.capture());
+
+ final List<ShortcutInfo> arg = updateArgs.getValue();
+ assertThat(arg.size(), equalTo(3));
+ assertThat(arg.get(0),
+ isShortcutForContact(11l, "key1", "New Name1"));
+ assertThat(arg.get(1),
+ isShortcutForContact(2l, "key2", "name2"));
+ assertThat(arg.get(2),
+ isShortcutForContact(33l, "key3", "name3"));
+ }
+
+ public void test_refresh_setsDynamicShortcutsToStrequentContacts() {
+ final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
+ when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
+ Collections.<ShortcutInfo>emptyList());
+ final DynamicShortcuts sut = createDynamicShortcuts(resolverWithExpectedQueries(
+ queryFor(Contacts.CONTENT_STREQUENT_URI,
+ 1l, "starred_key", "starred name",
+ 2l, "freq_key", "freq name",
+ 3l, "starred_2", "Starred Two")), mockShortcutManager);
+
+ sut.refresh();
+
+ final ArgumentCaptor<List<ShortcutInfo>> updateArgs =
+ ArgumentCaptor.forClass((Class) List.class);
+
+ verify(mockShortcutManager).setDynamicShortcuts(updateArgs.capture());
+
+ final List<ShortcutInfo> arg = updateArgs.getValue();
+ assertThat(arg.size(), equalTo(3));
+ assertThat(arg.get(0), isShortcutForContact(1l, "starred_key", "starred name"));
+ assertThat(arg.get(1), isShortcutForContact(2l, "freq_key", "freq name"));
+ assertThat(arg.get(2), isShortcutForContact(3l, "starred_2", "Starred Two"));
+ }
+
+ public void test_refresh_skipsContactsWithNullName() {
+ final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
+ when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
+ Collections.<ShortcutInfo>emptyList());
+ final DynamicShortcuts sut = createDynamicShortcuts(resolverWithExpectedQueries(
+ queryFor(Contacts.CONTENT_STREQUENT_URI,
+ 1l, "key1", "first",
+ 2l, "key2", "second",
+ 3l, "key3", null,
+ 4l, null, null,
+ 5l, "key5", "fifth",
+ 6l, "key6", "sixth")), mockShortcutManager);
+
+ sut.refresh();
+
+ final ArgumentCaptor<List<ShortcutInfo>> updateArgs =
+ ArgumentCaptor.forClass((Class) List.class);
+
+ verify(mockShortcutManager).setDynamicShortcuts(updateArgs.capture());
+
+ final List<ShortcutInfo> arg = updateArgs.getValue();
+ assertThat(arg.size(), equalTo(3));
+ assertThat(arg.get(0), isShortcutForContact(1l, "key1", "first"));
+ assertThat(arg.get(1), isShortcutForContact(2l, "key2", "second"));
+ assertThat(arg.get(2), isShortcutForContact(5l, "key5", "fifth"));
+
+
+ // Also verify that it doesn't crash if there are fewer than 3 valid strequent contacts
+ createDynamicShortcuts(resolverWithExpectedQueries(
+ queryFor(Contacts.CONTENT_STREQUENT_URI,
+ 1l, "key1", "first",
+ 2l, "key2", "second",
+ 3l, "key3", null,
+ 4l, null, null)), mock(ShortcutManager.class)).refresh();
+ }
+
+
+ public void test_handleFlagDisabled_stopsJob() {
+ final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
+ final JobScheduler mockJobScheduler = mock(JobScheduler.class);
+ final DynamicShortcuts sut = createDynamicShortcuts(emptyResolver(), mockShortcutManager,
+ mockJobScheduler);
+
+ sut.handleFlagDisabled();
+
+ verify(mockJobScheduler).cancel(eq(ContactsJobService.DYNAMIC_SHORTCUTS_JOB_ID));
+ }
+
+
+ public void test_scheduleUpdateJob_schedulesJob() {
+ final DynamicShortcuts sut = new DynamicShortcuts(getContext());
+ sut.scheduleUpdateJob();
+ assertThat(DynamicShortcuts.isJobScheduled(getContext()), Matchers.is(true));
+ }
+
+ private Matcher<ShortcutInfo> isShortcutForContact(final long id,
+ final String lookupKey, final String name) {
+ return new BaseMatcher<ShortcutInfo>() {
+ @Override
+ public boolean matches(Object o) {
+ if (!(o instanceof ShortcutInfo)) return false;
+ final ShortcutInfo other = (ShortcutInfo)o;
+ return id == other.getExtras().getLong(Contacts._ID)
+ && lookupKey.equals(other.getId())
+ && name.equals(other.getLongLabel())
+ && name.equals(other.getShortLabel());
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("Should be a shortcut for contact with _ID=" + id +
+ " lookup=" + lookupKey + " and display_name=" + name);
+ }
+ };
+ }
+
+ private ShortcutInfo shortcutFor(long contactId, String lookupKey, String name) {
+ return new DynamicShortcuts(getContext())
+ .builderForContactShortcut(contactId, lookupKey, name).build();
+ }
+
+ private ContentResolver emptyResolver() {
+ final MockContentProvider provider = new MockContentProvider();
+ provider.expect(MockContentProvider.Query.forAnyUri())
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnEmptyCursor();
+ return resolverWithContactsProvider(provider);
+ }
+
+ private MockContentProvider.Query queryFor(Uri uri, Object... rows) {
+ final MockContentProvider.Query query = MockContentProvider.Query
+ .forUrisMatching(uri.getAuthority(), uri.getPath())
+ .withProjection(DynamicShortcuts.PROJECTION)
+ .withAnySelection()
+ .withAnySortOrder();
+
+ populateQueryRows(query, DynamicShortcuts.PROJECTION.length, rows);
+ return query;
+ }
+
+ private MockContentProvider.Query queryForSingleRow(Uri uri, Object... row) {
+ return new MockContentProvider.Query(uri)
+ .withProjection(DynamicShortcuts.PROJECTION)
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnRow(row);
+ }
+
+ private ContentResolver resolverWithExpectedQueries(MockContentProvider.Query... queries) {
+ final MockContentProvider provider = new MockContentProvider();
+ for (MockContentProvider.Query query : queries) {
+ provider.expect(query);
+ }
+ return resolverWithContactsProvider(provider);
+ }
+
+ private ContentResolver resolverWithContactsProvider(ContentProvider provider) {
+ final MockContentResolver resolver = new MockContentResolver();
+ resolver.addProvider(ContactsContract.AUTHORITY, provider);
+ return resolver;
+ }
+
+ private DynamicShortcuts createDynamicShortcuts() {
+ return createDynamicShortcuts(emptyResolver(), mock(ShortcutManager.class));
+ }
+
+
+ private DynamicShortcuts createDynamicShortcuts(ContentResolver resolver,
+ ShortcutManager shortcutManager) {
+ return createDynamicShortcuts(resolver, shortcutManager, mock(JobScheduler.class));
+ }
+
+ private DynamicShortcuts createDynamicShortcuts(ContentResolver resolver,
+ ShortcutManager shortcutManager, JobScheduler jobScheduler) {
+ final DynamicShortcuts result = new DynamicShortcuts(getContext(), resolver,
+ shortcutManager, jobScheduler);
+ // Use very long label limits to make checking shortcuts easier to understand
+ result.setShortLabelMaxLength(100);
+ result.setLongLabelMaxLength(100);
+ return result;
+ }
+
+ private void populateQueryRows(MockContentProvider.Query query, int numColumns,
+ Object... rows) {
+ for (int i = 0; i < rows.length; i += numColumns) {
+ Object[] row = new Object[numColumns];
+ for (int j = 0; j < numColumns; j++) {
+ row[j] = rows[i + j];
+ }
+ query.returnRow(row);
+ }
+ }
+
+ private Cursor queryResult(Object... values) {
+ return queryResult(DynamicShortcuts.PROJECTION, values);
+ }
+
+ // Ugly hack because the API is hidden. Alternative is to actually set the shortcut on the real
+ // ShortcutManager but this seems simpler for now.
+ private ShortcutInfo makeDynamic(ShortcutInfo shortcutInfo) throws Exception {
+ final Method addFlagsMethod = ShortcutInfo.class.getMethod("addFlags", int.class);
+ // 1 = FLAG_DYNAMIC
+ addFlagsMethod.invoke(shortcutInfo, 1);
+ return shortcutInfo;
+ }
+
+ private Cursor queryResult(String[] columns, Object... values) {
+ MatrixCursor result = new MatrixCursor(new String[] {
+ Contacts._ID, Contacts.LOOKUP_KEY,
+ Contacts.DISPLAY_NAME_PRIMARY
+ });
+ for (int i = 0; i < values.length; i += columns.length) {
+ MatrixCursor.RowBuilder builder = result.newRow();
+ for (int j = 0; j < columns.length; j++) {
+ builder.add(values[i + j]);
+ }
+ }
+ return result;
+ }
+}
diff --git a/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java b/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java
new file mode 100644
index 000000000..4057ee821
--- /dev/null
+++ b/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java
@@ -0,0 +1,306 @@
+/*
+ * 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;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.Data;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.MediumTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests of GroupsDaoImpl that perform DB operations directly against CP2
+ */
+@MediumTest
+public class GroupsDaoIntegrationTests extends InstrumentationTestCase {
+
+ private ContentResolver mResolver;
+ private List<Uri> mTestRecords;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mTestRecords = new ArrayList<>();
+ mResolver = getContext().getContentResolver();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+
+ // Cleanup anything leftover by the tests.
+ cleanupTestRecords();
+ mTestRecords.clear();
+ }
+
+ public void test_createGroup_createsGroupWithCorrectTitle() throws Exception {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri uri = sut.create("Test Create Group", getLocalAccount());
+
+ assertNotNull(uri);
+ assertGroupHasTitle(uri, "Test Create Group");
+ }
+
+ public void test_deleteEmptyGroup_marksRowDeleted() throws Exception {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri uri = sut.create("Test Delete Group", getLocalAccount());
+
+ assertEquals(1, sut.delete(uri));
+
+ final Cursor cursor = mResolver.query(uri, null, null, null, null, null);
+ try {
+ cursor.moveToFirst();
+ assertEquals(1, cursor.getInt(cursor.getColumnIndexOrThrow(
+ ContactsContract.Groups.DELETED)));
+ } finally {
+ cursor.close();
+ }
+ }
+
+ public void test_undoDeleteEmptyGroup_createsGroupWithMatchingTitle() throws Exception {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri uri = sut.create("Test Undo Delete Empty Group", getLocalAccount());
+
+ final Bundle undoData = sut.captureDeletionUndoData(uri);
+
+ assertEquals(1, sut.delete(uri));
+
+ final Uri groupUri = sut.undoDeletion(undoData);
+
+ assertGroupHasTitle(groupUri, "Test Undo Delete Empty Group");
+ }
+
+ public void test_deleteNonEmptyGroup_removesGroupAndMembers() throws Exception {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri groupUri = sut.create("Test delete non-empty group", getLocalAccount());
+
+ final long groupId = ContentUris.parseId(groupUri);
+ addMemberToGroup(ContentUris.parseId(createRawContact()), groupId);
+ addMemberToGroup(ContentUris.parseId(createRawContact()), groupId);
+
+ assertEquals(1, sut.delete(groupUri));
+
+ final Cursor cursor = mResolver.query(Data.CONTENT_URI, null,
+ Data.MIMETYPE + "=? AND " + GroupMembership.GROUP_ROW_ID + "=?",
+ new String[] { GroupMembership.CONTENT_ITEM_TYPE, String.valueOf(groupId) },
+ null, null);
+
+ try {
+ cursor.moveToFirst();
+ // This is more of a characterization test since our code isn't manually deleting
+ // the membership rows just the group but this still helps document the expected
+ // behavior.
+ assertEquals(0, cursor.getCount());
+ } finally {
+ cursor.close();
+ }
+ }
+
+ public void test_undoDeleteNonEmptyGroup_restoresGroupAndMembers() throws Exception {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri groupUri = sut.create("Test undo delete non-empty group", getLocalAccount());
+
+ final long groupId = ContentUris.parseId(groupUri);
+ addMemberToGroup(ContentUris.parseId(createRawContact()), groupId);
+ addMemberToGroup(ContentUris.parseId(createRawContact()), groupId);
+
+ final Bundle undoData = sut.captureDeletionUndoData(groupUri);
+
+ sut.delete(groupUri);
+
+ final Uri recreatedGroup = sut.undoDeletion(undoData);
+
+ final long newGroupId = ContentUris.parseId(recreatedGroup);
+
+ final Cursor cursor = mResolver.query(Data.CONTENT_URI, null,
+ Data.MIMETYPE + "=? AND " + GroupMembership.GROUP_ROW_ID + "=?",
+ new String[] { GroupMembership.CONTENT_ITEM_TYPE, String.valueOf(newGroupId) },
+ null, null);
+
+ try {
+ assertEquals(2, cursor.getCount());
+ } finally {
+ cursor.close();
+ }
+ }
+
+ public void test_captureUndoDataForDeletedGroup_returnsEmptyBundle() {
+ final ContactSaveService.GroupsDao sut = createDao();
+
+ final Uri uri = sut.create("a deleted group", getLocalAccount());
+ sut.delete(uri);
+
+ final Bundle undoData = sut.captureDeletionUndoData(uri);
+
+ assertTrue(undoData.isEmpty());
+ }
+
+ public void test_captureUndoDataForNonExistentGroup_returnsEmptyBundle() {
+ final ContactSaveService.GroupsDao sut = createDao();
+
+ // This test could potentially be flaky if this ID exists for some reason. 10 is subtracted
+ // to reduce the likelihood of this happening; some other test may use Integer.MAX_VALUE
+ // or nearby values to cover some special case or boundary condition.
+ final long nonExistentId = Integer.MAX_VALUE - 10;
+
+ final Bundle undoData = sut.captureDeletionUndoData(ContentUris
+ .withAppendedId(ContactsContract.Groups.CONTENT_URI, nonExistentId));
+
+ assertTrue(undoData.isEmpty());
+ }
+
+ public void test_undoWithEmptyBundle_doesNothing() {
+ final ContactSaveService.GroupsDao sut = createDao();
+
+ final Uri uri = sut.undoDeletion(new Bundle());
+
+ assertNull(uri);
+ }
+
+ public void test_undoDeleteEmptyGroupWithMissingMembersKey_shouldRecreateGroup() {
+ final ContactSaveService.GroupsDao sut = createDao();
+ final Uri groupUri = sut.create("Test undo delete null memberIds", getLocalAccount());
+
+ final Bundle undoData = sut.captureDeletionUndoData(groupUri);
+ undoData.remove(ContactSaveService.GroupsDaoImpl.KEY_GROUP_MEMBERS);
+ sut.delete(groupUri);
+
+ sut.undoDeletion(undoData);
+
+ assertGroupWithTitleExists("Test undo delete null memberIds");
+ }
+
+ private void assertGroupHasTitle(Uri groupUri, String title) {
+ final Cursor cursor = mResolver.query(groupUri,
+ new String[] { ContactsContract.Groups.TITLE },
+ ContactsContract.Groups.DELETED + "=?",
+ new String[] { "0" }, null, null);
+ try {
+ assertTrue("Group does not have title \"" + title + "\"",
+ cursor.getCount() == 1 && cursor.moveToFirst() &&
+ title.equals(cursor.getString(0)));
+ } finally {
+ cursor.close();
+ }
+ }
+
+ private void assertGroupWithTitleExists(String title) {
+ final Cursor cursor = mResolver.query(ContactsContract.Groups.CONTENT_URI, null,
+ ContactsContract.Groups.TITLE + "=? AND " +
+ ContactsContract.Groups.DELETED + "=?",
+ new String[] { title, "0" }, null, null);
+ try {
+ assertTrue("No group exists with title \"" + title + "\"", cursor.getCount() > 0);
+ } finally {
+ cursor.close();
+ }
+ }
+
+ public ContactSaveService.GroupsDao createDao() {
+ return new GroupsDaoWrapper(new ContactSaveService.GroupsDaoImpl(getContext()));
+ }
+
+ private Uri createRawContact() {
+ final ContentValues values = new ContentValues();
+ values.putNull(ContactsContract.RawContacts.ACCOUNT_NAME);
+ values.putNull(ContactsContract.RawContacts.ACCOUNT_TYPE);
+ final Uri result = mResolver.insert(ContactsContract.RawContacts.CONTENT_URI, values);
+ mTestRecords.add(result);
+ return result;
+ }
+
+ private Uri addMemberToGroup(long rawContactId, long groupId) {
+ final ContentValues values = new ContentValues();
+ values.put(Data.RAW_CONTACT_ID, rawContactId);
+ values.put(Data.MIMETYPE,
+ GroupMembership.CONTENT_ITEM_TYPE);
+ values.put(GroupMembership.GROUP_ROW_ID, groupId);
+
+ // Dont' need to add to testRecords because it will be cleaned up when parent raw_contact
+ // is deleted.
+ return mResolver.insert(Data.CONTENT_URI, values);
+ }
+
+ private Context getContext() {
+ return getInstrumentation().getTargetContext();
+ }
+
+ private AccountWithDataSet getLocalAccount() {
+ return new AccountWithDataSet(null, null, null);
+ }
+
+ private void cleanupTestRecords() throws RemoteException, OperationApplicationException {
+ final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+ for (Uri uri : mTestRecords) {
+ if (uri == null) continue;
+ ops.add(ContentProviderOperation
+ .newDelete(uri.buildUpon()
+ .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
+ .build())
+ .build());
+ }
+ mResolver.applyBatch(ContactsContract.AUTHORITY, ops);
+ }
+
+ private class GroupsDaoWrapper implements ContactSaveService.GroupsDao {
+ private final ContactSaveService.GroupsDao mDelegate;
+
+ public GroupsDaoWrapper(ContactSaveService.GroupsDao delegate) {
+ mDelegate = delegate;
+ }
+
+ @Override
+ public Uri create(String title, AccountWithDataSet account) {
+ final Uri result = mDelegate.create(title, account);
+ mTestRecords.add(result);
+ return result;
+ }
+
+ @Override
+ public int delete(Uri groupUri) {
+ return mDelegate.delete(groupUri);
+ }
+
+ @Override
+ public Bundle captureDeletionUndoData(Uri groupUri) {
+ return mDelegate.captureDeletionUndoData(groupUri);
+ }
+
+ @Override
+ public Uri undoDeletion(Bundle undoData) {
+ final Uri result = mDelegate.undoDeletion(undoData);
+ mTestRecords.add(result);
+ return result;
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/MoreContactUtilsTest.java b/tests/src/com/android/contacts/MoreContactUtilsTest.java
new file mode 100644
index 000000000..6c9d54132
--- /dev/null
+++ b/tests/src/com/android/contacts/MoreContactUtilsTest.java
@@ -0,0 +1,176 @@
+package com.android.contacts;
+
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for MoreContactsUtils.
+ */
+@SmallTest
+public class MoreContactUtilsTest extends TestCase {
+
+ public void testShouldCollapse() throws Exception {
+ assertCollapses("1", true, null, null, null, null);
+ assertCollapses("2", true, "a", "b", "a", "b");
+
+ assertCollapses("11", false, "a", null, null, null);
+ assertCollapses("12", false, null, "a", null, null);
+ assertCollapses("13", false, null, null, "a", null);
+ assertCollapses("14", false, null, null, null, "a");
+
+ assertCollapses("21", false, "a", "b", null, null);
+ assertCollapses("22", false, "a", "b", "a", null);
+ assertCollapses("23", false, "a", "b", null, "b");
+ assertCollapses("24", false, "a", "b", "a", "x");
+ assertCollapses("25", false, "a", "b", "x", "b");
+
+ assertCollapses("31", false, null, null, "a", "b");
+ assertCollapses("32", false, "a", null, "a", "b");
+ assertCollapses("33", false, null, "b", "a", "b");
+ assertCollapses("34", false, "a", "x", "a", "b");
+ assertCollapses("35", false, "x", "b", "a", "b");
+
+ assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, null);
+ assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
+
+ assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "2");
+ assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, null);
+ assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, "2");
+
+ // Test phone numbers
+ assertCollapses("60", true, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+ "1234567");
+ assertCollapses("61", false, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+ "1234568");
+ assertCollapses("62", true, Phone.CONTENT_ITEM_TYPE, "1234567;0", Phone.CONTENT_ITEM_TYPE,
+ "1234567;0");
+ assertCollapses("63", false, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;89322");
+ assertCollapses("64", true, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+ Phone.CONTENT_ITEM_TYPE, "1234567;89321");
+ assertCollapses("65", false, Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
+ Phone.CONTENT_ITEM_TYPE, "1234567;");
+ assertCollapses("66", false, Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426");
+ assertCollapses("67", false, Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
+ Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
+ assertCollapses("68", true, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
+ assertCollapses("69", false, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+ Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
+
+ // test some numbers with country and area code
+ assertCollapses("70", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
+ assertCollapses("71", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
+ assertCollapses("72", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
+ assertCollapses("73", false, Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234");
+ assertCollapses("74", false, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+ Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
+
+ // test special handling of collapsing country code for NANP region only
+ // This is non symmetrical, because we prefer the number with the +1.
+ assertEquals("100", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("101", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+ assertEquals("102", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "(415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+ assertEquals("103", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "4155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+ // Require explicit +1 country code declaration to collapse
+ assertEquals("104", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "415-555-1212"));
+ assertEquals("105", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+ assertEquals("106", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, " 1 (415) 555-1212"));
+ assertEquals("107", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "+14155551212", Phone.CONTENT_ITEM_TYPE, " 14155551212"));
+ assertEquals("108", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+ assertEquals("109", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+
+ // test some numbers with wait symbol and area code
+ assertCollapses("200", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+ assertCollapses("201", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
+ assertCollapses("202", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
+ Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+ assertCollapses("203", true, Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
+ Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
+
+ assertCollapses("300", true, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "");
+
+ assertCollapses("301", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "");
+
+ assertCollapses("302", false, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "1");
+
+ assertCollapses("303", true, Phone.CONTENT_ITEM_TYPE, "---", Phone.CONTENT_ITEM_TYPE, "---");
+
+ assertCollapses("304", false, Phone.CONTENT_ITEM_TYPE, "1-/().", Phone.CONTENT_ITEM_TYPE,
+ "--$%1");
+
+ // Test numbers using keypad letters. This is non-symmetrical, because we prefer
+ // the version with letters.
+ assertEquals("400", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "abcdefghijklmnopqrstuvwxyz", Phone.CONTENT_ITEM_TYPE,
+ "22233344455566677778889999"));
+ assertEquals("401", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "22233344455566677778889999", Phone.CONTENT_ITEM_TYPE,
+ "abcdefghijklmnopqrstuvwxyz"));
+
+ assertCollapses("402", false, Phone.CONTENT_ITEM_TYPE, "1;2", Phone.CONTENT_ITEM_TYPE,
+ "12");
+
+ assertCollapses("403", false, Phone.CONTENT_ITEM_TYPE, "1,2", Phone.CONTENT_ITEM_TYPE,
+ "12");
+ }
+
+ public void testShouldCollapse_collapsesSameNumberWithDifferentFormats() {
+ assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "555-1212", Phone.CONTENT_ITEM_TYPE, "5551212"));
+ assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "415-555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("2", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "4155551212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+ assertEquals("3", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+ assertEquals("4", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+ "14155551212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+ }
+
+ private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
+ CharSequence data1, CharSequence mimetype2, CharSequence data2) {
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1, mimetype2,
+ data2));
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2, mimetype1,
+ data1));
+
+ // If data1 and data2 are the same instance, make sure the same test passes with different
+ // instances.
+ if (data1 == data2 && data1 != null) {
+ // Create a different instance
+ final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
+
+ if (data1 == data2_newref) {
+ // In some cases no matter what we do the runtime reuses the same instance, so
+ // we can't do the "different instance" test.
+ return;
+ }
+
+ // we have two different instances, now make sure we get the same result as before
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1,
+ mimetype2, data2_newref));
+ assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2_newref,
+ mimetype1, data1));
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java
new file mode 100644
index 000000000..be545a906
--- /dev/null
+++ b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java
@@ -0,0 +1,99 @@
+package com.android.contacts;
+
+import static com.android.contacts.util.PermissionsUtil.hasPermission;
+
+import static org.junit.Assume.assumeTrue;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.filters.Suppress;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject2;
+import android.support.test.uiautomator.Until;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Make sure the app doesn't crash when it is started without permissions. Note: this won't
+ * run in most environments because permissions will already have been granted.
+ *
+ * To exercise this run:
+ *
+ * $ adb shell pm revoke com.android.contacts android.permission.READ_CONTACTS
+ * $ adb shell pm revoke com.android.contacts android.permission.WRITE_CONTACTS
+ * $ adb shell pm revoke com.android.contacts android.permission.GET_ACCOUNTS
+ * $ adb shell pm revoke com.android.contacts android.permission.READ_PHONE_STATE
+ * $ adb shell pm revoke com.android.contacts android.permission.READ_CALL_LOG
+ * $ adb shell pm revoke com.android.contacts android.permission.CALL_PHONE
+ * $ adb shell am instrument -w \
+ * com.google.android.contacts.tests/android.support.test.runner.AndroidJUnitRunner \
+ * -e class com.android.contacts.NoPermissionsLaunchSmokeTest
+ */
+@MediumTest
+// suppressed because failed assumptions are reported as test failures by the build server
+@Suppress
+@RunWith(AndroidJUnit4.class)
+public class NoPermissionsLaunchSmokeTest {
+ private static final long TIMEOUT = 5000;
+
+ private Context mTargetContext;
+
+ @Before
+ public void setUp() throws Exception {
+ mTargetContext = InstrumentationRegistry.getTargetContext();
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.READ_CONTACTS));
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.WRITE_CONTACTS));
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.GET_ACCOUNTS));
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.READ_PHONE_STATE));
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.READ_CALL_LOG));
+ assumeTrue(!hasPermission(mTargetContext, Manifest.permission.CALL_PHONE));
+
+ // remove state that might exist outside of the app
+ // (e.g. launcher shortcuts and scheduled jobs)
+ DynamicShortcuts.reset(mTargetContext);
+ }
+
+ @Test
+ public void launchingMainActivityDoesntCrash() throws Exception {
+ final UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+
+ // Launch the main activity
+ InstrumentationRegistry.getContext().startActivity(
+ new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_DEFAULT)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ .setPackage(InstrumentationRegistry.getTargetContext().getPackageName()));
+
+ device.waitForIdle();
+
+ device.wait(Until.hasObject(By.textStartsWith("Allow Contacts")), TIMEOUT);
+ final UiObject2 grantContactsPermissionButton = device.findObject(By.text("ALLOW"));
+
+ grantContactsPermissionButton.click();
+
+ device.wait(Until.hasObject(By.textEndsWith("make and manage phone calls?")), TIMEOUT);
+
+ final PackageManager packageManager = mTargetContext.getPackageManager();
+ if (!packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+ device.waitForIdle();
+ return;
+ }
+
+ final UiObject2 grantPhonePermissionButton = device.findObject(By.text("ALLOW"));
+
+ grantPhonePermissionButton.clickAndWait(Until.newWindow(), TIMEOUT);
+
+ // Not sure if this actually waits for the load to complete or not.
+ device.waitForIdle();
+ }
+
+ // TODO: it would be good to have similar tests for other entry points that might be reached
+ // without required permissions.
+}
diff --git a/tests/src/com/android/contacts/RunMethodInstrumentation.java b/tests/src/com/android/contacts/RunMethodInstrumentation.java
new file mode 100644
index 000000000..1e4bcf5f9
--- /dev/null
+++ b/tests/src/com/android/contacts/RunMethodInstrumentation.java
@@ -0,0 +1,151 @@
+/*
+ * 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;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Debug;
+import android.support.test.InstrumentationRegistry;
+import android.util.Log;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Runs a single static method specified via the arguments.
+ *
+ * Useful for manipulating the app state during manual testing. If the class argument is omitted
+ * this class will attempt to invoke a method in
+ * {@link com.android.contacts.tests.AdbHelpers}
+ *
+ * Valid signatures: void f(Context, Bundle), void f(Context), void f()
+ *
+ * Example usage:
+ * $ adb shell am instrument -e class com.android.contacts.Foo -e method bar -e someArg someValue\
+ * -w com.google.android.contacts.tests/com.android.contacts.RunMethodInstrumentation
+ */
+public class RunMethodInstrumentation extends Instrumentation {
+
+ private static final String TAG = "RunMethod";
+
+ private static final String DEFAULT_CLASS = "AdbHelpers";
+
+ private String className;
+ private String methodName;
+ private Bundle args;
+
+ @Override
+ public void onCreate(Bundle arguments) {
+ super.onCreate(arguments);
+
+ InstrumentationRegistry.registerInstance(this, arguments);
+
+ className = arguments.getString("class", getContext().getPackageName() + "." +
+ DEFAULT_CLASS);
+ methodName = arguments.getString("method");
+ args = arguments;
+
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Running " + className + "." + methodName);
+ Log.d(TAG, "args=" + args);
+ }
+
+ if (arguments.containsKey("debug") && Boolean.parseBoolean(arguments.getString("debug"))) {
+ Debug.waitForDebugger();
+ }
+ start();
+ }
+
+ @Override
+ public void onStart() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onStart");
+ }
+ super.onStart();
+
+ if (className == null || methodName == null) {
+ Log.e(TAG, "Must supply class and method");
+ finish(Activity.RESULT_CANCELED, null);
+ return;
+ }
+
+ // Wait for the Application to finish creating.
+ runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "acquired main thread from instrumentation");
+ }
+ }
+ });
+
+ try {
+ invokeMethod(args, className, methodName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ finish(Activity.RESULT_CANCELED, null);
+ return;
+ }
+ // Maybe should let the method determine when this is called.
+ finish(Activity.RESULT_OK, null);
+ }
+
+ private void invokeMethod(Bundle args, String className, String methodName) throws
+ InvocationTargetException, IllegalAccessException, NoSuchMethodException,
+ ClassNotFoundException {
+ Context context;
+ Class<?> clazz = null;
+ try {
+ // Try to load from App's code
+ clazz = getTargetContext().getClassLoader().loadClass(className);
+ context = getTargetContext();
+ } catch (Exception e) {
+ // Try to load from Test App's code
+ clazz = getContext().getClassLoader().loadClass(className);
+ context = getContext();
+ }
+
+ Object[] methodArgs = null;
+ Method method = null;
+
+ try {
+ method = clazz.getMethod(methodName, Context.class, Bundle.class);
+ methodArgs = new Object[] { context, args };
+ } catch (NoSuchMethodException e) {
+ }
+
+ if (method != null) {
+ method.invoke(clazz, methodArgs);
+ return;
+ }
+
+ try {
+ method = clazz.getMethod(methodName, Context.class);
+ methodArgs = new Object[] { context };
+ } catch (NoSuchMethodException e) {
+ }
+
+ if (method != null) {
+ method.invoke(clazz, methodArgs);
+ return;
+ }
+
+ method = clazz.getMethod(methodName);
+ method.invoke(clazz);
+ }
+}
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index bb463e877..4e5796993 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -18,37 +18,28 @@ package com.android.contacts.activities;
import android.content.ContentUris;
import android.content.ContentValues;
-import android.content.Intent;
-import android.content.Loader;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.ProviderStatus;
-import android.provider.Settings;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
-import android.widget.TextView;
+import com.android.contacts.ContactPhotoManager;
import com.android.contacts.ContactsApplication;
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.interactions.TestLoaderManager;
-import com.android.contacts.list.ContactBrowseListFragment;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.BaseAccountType;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContactPhotoManager;
-import com.android.contacts.common.test.mocks.MockSharedPreferences;
-import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContactPhotoManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider.Query;
+import com.android.contacts.test.mocks.MockSharedPreferences;
+import com.android.contacts.testing.InjectedServices;
/**
* This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it.
diff --git a/tests/src/com/android/contacts/activities/SimImportActivityTest.java b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
new file mode 100644
index 000000000..ae8fb78ce
--- /dev/null
+++ b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
@@ -0,0 +1,357 @@
+/*
+ * 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.activities;
+
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasMimeType;
+import static com.android.contacts.tests.ContactsMatchers.hasRowMatching;
+import static com.android.contacts.tests.ContactsMatchers.hasValueForColumn;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.BroadcastReceiver;
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.database.Cursor;
+import android.os.Build;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.Until;
+import android.support.v4.content.LocalBroadcastManager;
+import android.telephony.TelephonyManager;
+import android.test.mock.MockContentResolver;
+
+import com.android.contacts.SimImportService;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.database.SimContactDaoImpl;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.ForwardingContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.AccountsTestHelper;
+import com.android.contacts.tests.ContactsMatchers;
+import com.android.contacts.tests.FakeSimContactDao;
+import com.android.contacts.tests.StringableCursor;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Collections;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * UI Tests for {@link SimImportActivity}
+ *
+ * These should probably be converted to espresso tests because espresso does a better job of
+ * waiting for the app to be idle once espresso library is added
+ */
+//@Suppress
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
+@TargetApi(Build.VERSION_CODES.M)
+public class SimImportActivityTest {
+
+ public static final int TIMEOUT = 100000;
+ private Context mContext;
+ private UiDevice mDevice;
+ private Instrumentation mInstrumentation;
+ private FakeSimContactDao mDao;
+ private AccountsTestHelper mAccountHelper;
+ private Activity mActivity;
+
+ @Before
+ public void setUp() throws Exception {
+ mContext = InstrumentationRegistry.getTargetContext();
+ mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mDao = new FakeSimContactDao();
+ SimContactDao.setFactoryForTest(Functions.<SimContactDao>constant(mDao));
+ mDevice = UiDevice.getInstance(mInstrumentation);
+
+ // Add some test accounts so that account picker is exercised
+ mAccountHelper = new AccountsTestHelper();
+ mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity1_"));
+ mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity2_"));
+ mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity3_"));
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ SimContactDao.setFactoryForTest(SimContactDao.DEFAULT_FACTORY);
+ mAccountHelper.cleanup();
+ if (mActivity != null) {
+ mActivity.finish();
+ mInstrumentation.waitForIdleSync();
+ }
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ AccountsTestHelper.removeAccountsWithPrefix(
+ InstrumentationRegistry.getTargetContext(), "SimImportActivity");
+ }
+
+ @Test
+ public void shouldDisplaySimContacts() {
+ mDao.addSim(someSimCard(),
+ new SimContact(1, "Sim One", "5550101"),
+ new SimContact(2, "Sim Two", null),
+ new SimContact(3, null, "5550103")
+ );
+ mActivity = mInstrumentation.startActivitySync(new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.text("Sim One")), TIMEOUT));
+
+ assertTrue(mDevice.hasObject(By.text("Sim One")));
+ assertTrue(mDevice.hasObject(By.text("Sim Two")));
+ assertTrue(mDevice.hasObject(By.text("5550103")));
+ }
+
+ @Test
+ public void shouldHaveEmptyState() {
+ mDao.addSim(someSimCard());
+
+ mInstrumentation.startActivitySync(new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+ }
+
+ @Test
+ public void smokeRotateInEmptyState() {
+ mDao.addSim(someSimCard());
+
+ mActivity = mInstrumentation.startActivitySync(
+ new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+ }
+
+ @Test
+ public void smokeRotateInNonEmptyState() throws Exception {
+ mDao.addSim(someSimCard(), new SimContact(1, "Name One", "5550101"),
+ new SimContact(2, "Name Two", "5550102"));
+
+ mActivity = mInstrumentation.startActivitySync(
+ new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("Name One")), TIMEOUT));
+
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("Name One")), TIMEOUT));
+ }
+
+ /**
+ * Tests a complete import flow
+ *
+ * <p>Test case outline:</p>
+ * <ul>
+ * <li>Load SIM contacts
+ * <li>Change to a specific target account
+ * <li>Deselect 3 specific SIM contacts
+ * <li>Rotate the screen to landscape
+ * <li>Rotate the screen back to portrait
+ * <li>Press the import button
+ * <li>Wait for import to complete
+ * <li>Query contacts in target account and verify that they match selected contacts
+ * <li>Start import activity again
+ * <li>Switch to target account
+ * <li>Verify that previously imported contacts are disabled and not checked
+ * </ul>
+ *
+ * <p>This mocks out the IccProvider and stubs the canReadSimContacts method to make it work on
+ * an emulator but otherwise uses real dependency.
+ * </p>
+ */
+ @Test
+ public void selectionsAreImportedAndDisabledOnSubsequentImports() throws Exception {
+ final AccountWithDataSet targetAccount = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("SimImportActivity0_targetAccount_"));
+
+ final MockContentProvider iccProvider = new MockContentProvider();
+ iccProvider.expect(MockContentProvider.Query.forAnyUri())
+ .withDefaultProjection(new String[] {SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS })
+ .anyNumberOfTimes()
+ .returnRow(toCursorRow(new SimContact(1, "Import One", "5550101")))
+ .returnRow(toCursorRow(new SimContact(2, "Skip Two", "5550102")))
+ .returnRow(toCursorRow(new SimContact(3, "Import Three", "5550103")))
+ .returnRow(toCursorRow(new SimContact(4, "Skip Four", "5550104")))
+ .returnRow(toCursorRow(new SimContact(5, "Skip Five", "5550105")))
+ .returnRow(toCursorRow(new SimContact(6, "Import Six", "5550106")));
+ final MockContentResolver mockResolver = new MockContentResolver();
+ mockResolver.addProvider("icc", iccProvider);
+ final ContentProviderClient contactsProviderClient = mContext.getContentResolver()
+ .acquireContentProviderClient(ContactsContract.AUTHORITY);
+ mockResolver.addProvider(ContactsContract.AUTHORITY, new ForwardingContentProvider(
+ contactsProviderClient));
+
+ SimContactDao.setFactoryForTest(new Function<Context, SimContactDao>() {
+ @Override
+ public SimContactDao apply(Context input) {
+ final SimContactDaoImpl spy = spy(new SimContactDaoImpl(
+ mContext, mockResolver,
+ (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)));
+ final SimCard sim = someSimCard();
+ doReturn(true).when(spy).canReadSimContacts();
+ doReturn(Collections.singletonList(sim)).when(spy).getSimCards();
+ doReturn(sim).when(spy).getSimBySubscriptionId(anyInt());
+ return spy;
+ }
+ });
+
+ mActivity = mInstrumentation.startActivitySync(
+ new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ assertTrue(mDevice.wait(Until.hasObject(By.desc("Show more")), TIMEOUT));
+
+ mDevice.findObject(By.desc("Show more")).clickAndWait(Until.newWindow(), TIMEOUT);
+ mDevice.findObject(By.textContains("_targetAccount_")).click();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.text("Skip Two")), TIMEOUT));
+
+ mDevice.findObject(By.text("Skip Two")).click();
+ mDevice.findObject(By.text("Skip Four")).click();
+ mDevice.findObject(By.text("Skip Five")).click();
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.hasObject(By.text("Skip Two").checked(false)));
+ assertTrue(mDevice.hasObject(By.text("Skip Five").checked(false)));
+
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT);
+ mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
+ mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT);
+
+ ListenableFuture<?> nextImportFuture = nextImportCompleteBroadcast();
+
+ mDevice.findObject(By.text("IMPORT").clickable(true)).click();
+
+ // Block until import completes
+ nextImportFuture.get(TIMEOUT, TimeUnit.MILLISECONDS);
+
+ final Cursor cursor = new StringableCursor(
+ mContext.getContentResolver().query(Data.CONTENT_URI, null,
+ ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+ ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+ new String[] {
+ targetAccount.name,
+ targetAccount.type
+ }, null));
+ // 3 contacts imported with one row for name and one for phone
+ assertThat(cursor, ContactsMatchers.hasCount(3 * 2));
+
+ assertThat(cursor, hasRowMatching(allOf(
+ hasMimeType(Phone.CONTENT_ITEM_TYPE),
+ hasValueForColumn(Phone.DISPLAY_NAME, "Import One"),
+ hasValueForColumn(Phone.NUMBER, "5550101")
+ )));
+ assertThat(cursor, hasRowMatching(allOf(
+ hasMimeType(Phone.CONTENT_ITEM_TYPE),
+ hasValueForColumn(Phone.DISPLAY_NAME, "Import Three"),
+ hasValueForColumn(Phone.NUMBER, "5550103")
+ )));
+ assertThat(cursor, hasRowMatching(allOf(
+ hasMimeType(Phone.CONTENT_ITEM_TYPE),
+ hasValueForColumn(Phone.DISPLAY_NAME, "Import Six"),
+ hasValueForColumn(Phone.NUMBER, "5550106")
+ )));
+
+ cursor.close();
+
+
+ mActivity = mInstrumentation.startActivitySync(
+ new Intent(mContext, SimImportActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+ assertTrue(mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT));
+
+ mDevice.findObject(By.descStartsWith("Show more")).clickAndWait(Until.newWindow(), TIMEOUT);
+ mDevice.findObject(By.textContains(targetAccount.name)).click();
+ mDevice.waitForIdle();
+
+ assertTrue(mDevice.wait(Until.hasObject(By.text("Import One").checked(false).enabled(false)), TIMEOUT));
+ assertTrue(mDevice.hasObject(By.text("Import Three").checked(false).enabled(false)));
+ assertTrue(mDevice.hasObject(By.text("Import Six").checked(false).enabled(false)));
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ contactsProviderClient.close();
+ }
+ }
+
+ private ListenableFuture<Intent> nextImportCompleteBroadcast() {
+ final SettableFuture<Intent> result = SettableFuture.create();
+ final BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ result.set(intent);
+ LocalBroadcastManager.getInstance(mContext).unregisterReceiver(this);
+ }
+ };
+ LocalBroadcastManager.getInstance(mContext).registerReceiver(receiver, new IntentFilter(
+ SimImportService.BROADCAST_SIM_IMPORT_COMPLETE));
+ return result;
+ }
+
+ private Object[] toCursorRow(SimContact contact) {
+ return new Object[] { contact.getId(), contact.getName(), contact.getPhone(), null };
+ }
+
+ private SimCard someSimCard() {
+ return new SimCard("id", 1, "Carrier", "SIM", "18005550101", "us");
+ }
+}
diff --git a/tests/src/com/android/contacts/compat/CompatUtilsTest.java b/tests/src/com/android/contacts/compat/CompatUtilsTest.java
new file mode 100644
index 000000000..22694cb9f
--- /dev/null
+++ b/tests/src/com/android/contacts/compat/CompatUtilsTest.java
@@ -0,0 +1,139 @@
+/*
+ * 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.compat;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+@SmallTest
+public class CompatUtilsTest extends AndroidTestCase {
+
+ public void testIsClassAvailable_NullClassName() {
+ assertFalse(CompatUtils.isClassAvailable(null));
+ }
+
+ public void testIsClassAvailable_EmptyClassName() {
+ assertFalse(CompatUtils.isClassAvailable(""));
+ }
+
+ public void testIsClassAvailable_NonexistentClass() {
+ assertFalse(CompatUtils.isClassAvailable("com.android.contacts.common.NonexistentClass"));
+ }
+
+ public void testIsClassAvailable() {
+ assertTrue(CompatUtils.isClassAvailable(BaseClass.class.getName()));
+ }
+
+ public void testIsMethodAvailable_NullClassName() {
+ assertFalse(CompatUtils.isMethodAvailable(null, "methodName"));
+ }
+
+ public void testIsMethodAvailable_EmptyClassName() {
+ assertFalse(CompatUtils.isMethodAvailable("", "methodName"));
+ }
+
+ public void testIsMethodAvailable_NullMethodName() {
+ assertFalse(CompatUtils.isMethodAvailable("className", null));
+ }
+
+ public void testIsMethodAvailable_EmptyMethodName() {
+ assertFalse(CompatUtils.isMethodAvailable("className", ""));
+ }
+
+ public void testIsMethodAvailable_NonexistentClass() {
+ assertFalse(CompatUtils.isMethodAvailable("com.android.contacts.common.NonexistentClass",
+ ""));
+ }
+
+ public void testIsMethodAvailable_NonexistentMethod() {
+ assertFalse(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "derivedMethod"));
+ }
+
+ public void testIsMethodAvailable() {
+ assertTrue(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "baseMethod"));
+ }
+
+ public void testIsMethodAvailable_InheritedMethod() {
+ assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "baseMethod"));
+ }
+
+ public void testIsMethodAvailable_OverloadedMethod() {
+ assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod"));
+ assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
+ Integer.TYPE));
+ }
+
+ public void testIsMethodAvailable_NonexistentOverload() {
+ assertFalse(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
+ Boolean.TYPE));
+ }
+
+ public void testInvokeMethod_NullMethodName() {
+ assertNull(CompatUtils.invokeMethod(new BaseClass(), null, null, null));
+ }
+
+ public void testInvokeMethod_EmptyMethodName() {
+ assertNull(CompatUtils.invokeMethod(new BaseClass(), "", null, null));
+ }
+
+ public void testInvokeMethod_NullClassInstance() {
+ assertNull(CompatUtils.invokeMethod(null, "", null, null));
+ }
+
+ public void testInvokeMethod_NonexistentMethod() {
+ assertNull(CompatUtils.invokeMethod(new BaseClass(), "derivedMethod", null, null));
+ }
+
+ public void testInvokeMethod_MethodWithNoParameters() {
+ assertEquals(1, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", null, null));
+ }
+
+ public void testInvokeMethod_MethodWithNoParameters_WithParameters() {
+ assertNull(CompatUtils.invokeMethod(new DerivedClass(), "derivedMethod",
+ new Class<?>[] {Integer.TYPE}, new Object[] {1}));
+ }
+
+ public void testInvokeMethod_MethodWithParameters_WithEmptyParameterList() {
+ assertNull(CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
+ new Class<?>[] {Integer.TYPE}, new Object[] {}));
+ }
+
+ public void testInvokeMethod_InvokeSimpleMethod() {
+ assertEquals(2, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
+ new Class<?>[] {Integer.TYPE}, new Object[] {2}));
+ }
+
+ private class BaseClass {
+ public void baseMethod() {}
+ }
+
+ private class DerivedClass extends BaseClass {
+ public int derivedMethod() {
+ // This method needs to return something to differentiate a successful invocation from
+ // an unsuccessful one.
+ return 0;
+ }
+
+ public int overloadedMethod() {
+ return 1;
+ }
+
+ public int overloadedMethod(int i) {
+ return i;
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java b/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java
new file mode 100644
index 000000000..987882b62
--- /dev/null
+++ b/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.database;
+
+import android.database.Cursor;
+import android.net.Uri;
+import android.test.InstrumentationTestCase;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit test for {@link NoNullCursorAsyncQueryHandler}
+ */
+@SmallTest
+public class NoNullCursorAsyncQueryHandlerTest extends InstrumentationTestCase {
+
+ private MockContentResolver mMockContentResolver;
+
+ private static final String AUTHORITY = "com.android.contacts.common.unittest";
+ private static final Uri URI = Uri.parse("content://" + AUTHORITY);
+ private static final String[] PROJECTION = new String[]{"column1", "column2"};
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ mMockContentResolver = new MockContentResolver();
+ final MockContentProvider mMockContentProvider = new MockContentProvider() {
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection,
+ String[] selectionArgs,
+ String sortOrder) {
+ return null;
+ }
+ };
+
+ mMockContentResolver.addProvider(AUTHORITY, mMockContentProvider);
+ }
+
+ public void testCursorIsNotNull() throws Throwable {
+
+ final CountDownLatch latch = new CountDownLatch(1);
+ final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
+ final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+
+ runTestOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+
+ NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+ mMockContentResolver) {
+ @Override
+ protected void onNotNullableQueryComplete(int token, Object cookie,
+ Cursor cursor) {
+ cursorHolder.obj = cursor;
+ ranHolder.obj = true;
+ latch.countDown();
+ }
+ };
+ handler.startQuery(1, null, URI, PROJECTION, null, null, null);
+ }
+ });
+
+ latch.await(5, TimeUnit.SECONDS);
+ assertFalse(cursorHolder.obj == null);
+ assertTrue(ranHolder.obj);
+ }
+
+ public void testCursorContainsCorrectCookies() throws Throwable {
+ final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+ final CountDownLatch latch = new CountDownLatch(1);
+ final ObjectHolder<Object> cookieHolder = ObjectHolder.newInstance();
+ final String cookie = "TEST COOKIE";
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+ mMockContentResolver) {
+ @Override
+ protected void onNotNullableQueryComplete(int token, Object cookie,
+ Cursor cursor) {
+ ranHolder.obj = true;
+ cookieHolder.obj = cookie;
+ latch.countDown();
+ }
+ };
+ handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
+ }
+ });
+
+ latch.await(5, TimeUnit.SECONDS);
+ assertSame(cookie, cookieHolder.obj);
+ assertTrue(ranHolder.obj);
+ }
+
+ public void testCursorContainsCorrectColumns() throws Throwable {
+ final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+ final CountDownLatch latch = new CountDownLatch(1);
+ final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
+ final String cookie = "TEST COOKIE";
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+ mMockContentResolver) {
+ @Override
+ protected void onNotNullableQueryComplete(int token, Object cookie,
+ Cursor cursor) {
+ ranHolder.obj = true;
+ cursorHolder.obj = cursor;
+ latch.countDown();
+ }
+ };
+ handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
+ }
+ });
+
+ latch.await(5, TimeUnit.SECONDS);
+ assertSame(PROJECTION, cursorHolder.obj.getColumnNames());
+ assertTrue(ranHolder.obj);
+ }
+
+ private static class ObjectHolder<T> {
+ public T obj;
+
+ public static <E> ObjectHolder<E> newInstance() {
+ return new ObjectHolder<E>();
+ }
+
+ public static <E> ObjectHolder<E> newInstance(E value) {
+ ObjectHolder<E> holder = new ObjectHolder<E>();
+ holder.obj = value;
+ return holder;
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/database/SimContactDaoTests.java b/tests/src/com/android/contacts/database/SimContactDaoTests.java
new file mode 100644
index 000000000..18a3f0915
--- /dev/null
+++ b/tests/src/com/android/contacts/database/SimContactDaoTests.java
@@ -0,0 +1,788 @@
+/*
+ * 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.database;
+
+import static android.os.Build.VERSION_CODES;
+
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasEmail;
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasName;
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasPhone;
+import static com.android.contacts.tests.ContactsMatchers.isSimContactWithNameAndPhone;
+
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentProvider;
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.CancellationSignal;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
+import android.support.annotation.RequiresApi;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.support.test.filters.Suppress;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.mock.MockContentResolver;
+import android.test.mock.MockContext;
+
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.AccountsTestHelper;
+import com.android.contacts.tests.ContactsMatchers;
+import com.android.contacts.tests.SimContactsTestHelper;
+import com.android.contacts.tests.StringableCursor;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
+@RunWith(Enclosed.class)
+public class SimContactDaoTests {
+
+ // Some random area codes for generating realistic US phones when
+ // generating fake data for the SIM contacts or CP2
+ private static final String[] AREA_CODES =
+ {"360", "509", "416", "831", "212", "208"};
+ private static final Random sRandom = new Random();
+
+ // Approximate maximum number of contacts that can be stored on a SIM card for testing
+ // boundary cases
+ public static final int MAX_SIM_CONTACTS = 600;
+
+ // On pre-M addAccountExplicitly (which we call via AccountsTestHelper) causes a
+ // SecurityException to be thrown unless we add AUTHENTICATE_ACCOUNTS permission to the app
+ // manifest. Instead of adding the extra permission just for tests we'll just only run them
+ // on M or newer
+ @SdkSuppress(minSdkVersion = VERSION_CODES.M)
+ // Lollipop MR1 is required for removeAccountExplicitly
+ @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
+ @LargeTest
+ @RunWith(AndroidJUnit4.class)
+ public static class ImportIntegrationTest {
+ private AccountWithDataSet mAccount;
+ private AccountsTestHelper mAccountsHelper;
+ private ContentResolver mResolver;
+
+ @Before
+ public void setUp() throws Exception {
+ mAccountsHelper = new AccountsTestHelper();
+ mAccount = mAccountsHelper.addTestAccount();
+ mResolver = getContext().getContentResolver();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ mAccountsHelper.cleanup();
+ }
+
+ @Test
+ public void importFromSim() throws Exception {
+ final SimContactDao sut = SimContactDao.create(getContext());
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(1, "Test One", "15095550101"),
+ new SimContact(2, "Test Two", "15095550102"),
+ new SimContact(3, "Test Three", "15095550103", new String[] {
+ "user@example.com", "user2@example.com"
+ })
+ ), mAccount);
+
+ Cursor cursor = queryContactWithName("Test One");
+ assertThat(cursor, ContactsMatchers.hasCount(2));
+ assertThat(cursor, hasName("Test One"));
+ assertThat(cursor, hasPhone("15095550101"));
+ cursor.close();
+
+ cursor = queryContactWithName("Test Two");
+ assertThat(cursor, ContactsMatchers.hasCount(2));
+ assertThat(cursor, hasName("Test Two"));
+ assertThat(cursor, hasPhone("15095550102"));
+ cursor.close();
+
+ cursor = queryContactWithName("Test Three");
+ assertThat(cursor, ContactsMatchers.hasCount(4));
+ assertThat(cursor, hasName("Test Three"));
+ assertThat(cursor, hasPhone("15095550103"));
+ assertThat(cursor, allOf(hasEmail("user@example.com"), hasEmail("user2@example.com")));
+ cursor.close();
+ }
+
+ @Test
+ public void importContactWhichOnlyHasName() throws Exception {
+ final SimContactDao sut = SimContactDao.create(getContext());
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(1, "Test importJustName", null, null)
+ ), mAccount);
+
+ Cursor cursor = queryAllDataInAccount();
+
+ assertThat(cursor, ContactsMatchers.hasCount(1));
+ assertThat(cursor, hasName("Test importJustName"));
+ cursor.close();
+ }
+
+ @Test
+ public void importContactWhichOnlyHasPhone() throws Exception {
+ final SimContactDao sut = SimContactDao.create(getContext());
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(1, null, "15095550111", null)
+ ), mAccount);
+
+ Cursor cursor = queryAllDataInAccount();
+
+ assertThat(cursor, ContactsMatchers.hasCount(1));
+ assertThat(cursor, hasPhone("15095550111"));
+ cursor.close();
+ }
+
+ @Test
+ public void ignoresEmptyContacts() throws Exception {
+ final SimContactDao sut = SimContactDao.create(getContext());
+
+ // This probably isn't possible but we'll test it to demonstrate expected behavior and
+ // just in case it does occur
+ sut.importContacts(Arrays.asList(
+ new SimContact(1, null, null, null),
+ new SimContact(2, null, null, null),
+ new SimContact(3, null, null, null),
+ new SimContact(4, "Not null", null, null)
+ ), mAccount);
+
+ final Cursor contactsCursor = queryAllRawContactsInAccount();
+ assertThat(contactsCursor, ContactsMatchers.hasCount(1));
+ contactsCursor.close();
+
+ final Cursor dataCursor = queryAllDataInAccount();
+ assertThat(dataCursor, ContactsMatchers.hasCount(1));
+
+ dataCursor.close();
+ }
+
+ /**
+ * Tests importing a large number of contacts
+ *
+ * Make sure that {@link android.os.TransactionTooLargeException} is not thrown
+ */
+ @Test
+ public void largeImport() throws Exception {
+ final SimContactDao sut = SimContactDao.create(getContext());
+
+ final List<SimContact> contacts = new ArrayList<>();
+
+ for (int i = 0; i < MAX_SIM_CONTACTS; i++) {
+ contacts.add(new SimContact(i + 1, "Contact " + (i + 1), randomPhone(),
+ new String[] { randomEmail("contact" + (i + 1) + "_")}));
+ }
+
+ sut.importContacts(contacts, mAccount);
+
+ final Cursor contactsCursor = queryAllRawContactsInAccount();
+ assertThat(contactsCursor, ContactsMatchers.hasCount(MAX_SIM_CONTACTS));
+ contactsCursor.close();
+
+ final Cursor dataCursor = queryAllDataInAccount();
+ // Each contact has one data row for each of name, phone and email
+ assertThat(dataCursor, ContactsMatchers.hasCount(MAX_SIM_CONTACTS * 3));
+
+ dataCursor.close();
+ }
+
+ private Cursor queryAllRawContactsInAccount() {
+ return new StringableCursor(mResolver.query(ContactsContract.RawContacts.CONTENT_URI,
+ null, ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+ ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+ new String[] {
+ mAccount.name,
+ mAccount.type
+ }, null));
+ }
+
+ private Cursor queryAllDataInAccount() {
+ return new StringableCursor(mResolver.query(Data.CONTENT_URI, null,
+ ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+ ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+ new String[] {
+ mAccount.name,
+ mAccount.type
+ }, null));
+ }
+
+ private Cursor queryContactWithName(String name) {
+ return new StringableCursor(mResolver.query(Data.CONTENT_URI, null,
+ ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+ ContactsContract.RawContacts.ACCOUNT_TYPE+ "=? AND " +
+ Data.DISPLAY_NAME + "=?",
+ new String[] {
+ mAccount.name,
+ mAccount.type,
+ name
+ }, null));
+ }
+ }
+
+ /**
+ * Tests for {@link SimContactDao#findAccountsOfExistingSimContacts(List)}
+ *
+ * These are integration tests that query CP2 so that the SQL will be validated in addition
+ * to the detection algorithm
+ */
+ @SdkSuppress(minSdkVersion = VERSION_CODES.M)
+ // Lollipop MR1 is required for removeAccountExplicitly
+ @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
+ @LargeTest
+ @RunWith(AndroidJUnit4.class)
+ public static class FindAccountsIntegrationTests {
+
+ private Context mContext;
+ private AccountsTestHelper mAccountHelper;
+ private List<AccountWithDataSet> mAccounts;
+ // We need to generate something distinct to prevent flakiness on devices that may not
+ // start with an empty CP2 DB
+ private String mNameSuffix;
+
+ private static AccountWithDataSet sSeedAccount;
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ final AccountsTestHelper helper = new AccountsTestHelper(
+ InstrumentationRegistry.getContext());
+ sSeedAccount = helper.addTestAccount(helper.generateAccountName("seedAccount"));
+
+ seedCp2();
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ final AccountsTestHelper helper = new AccountsTestHelper(
+ InstrumentationRegistry.getContext());
+ helper.removeTestAccount(sSeedAccount);
+ sSeedAccount = null;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ mContext = InstrumentationRegistry.getTargetContext();
+ mAccountHelper = new AccountsTestHelper(InstrumentationRegistry.getContext());
+ mAccounts = new ArrayList<>();
+ mNameSuffix = getClass().getSimpleName() + "At" + System.nanoTime();
+
+ seedCp2();
+ }
+
+ @After
+ public void tearDown() {
+ for (AccountWithDataSet account : mAccounts) {
+ mAccountHelper.removeTestAccount(account);
+ }
+ }
+
+ @Test
+ public void returnsEmptyMapWhenNoMatchingContactsExist() {
+ mAccounts.add(mAccountHelper.addTestAccount());
+
+ final SimContactDao sut = createDao();
+
+ final List<SimContact> contacts = Arrays.asList(
+ new SimContact(1, "Name 1 " + mNameSuffix, "5550101"),
+ new SimContact(2, "Name 2 " + mNameSuffix, "5550102"),
+ new SimContact(3, "Name 3 " + mNameSuffix, "5550103"),
+ new SimContact(4, "Name 4 " + mNameSuffix, "5550104"));
+
+ final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+ .findAccountsOfExistingSimContacts(contacts);
+
+ assertTrue(existing.isEmpty());
+ }
+
+ @Test
+ public void hasAccountWithMatchingContactsWhenSingleMatchingContactExists()
+ throws Exception {
+ final SimContactDao sut = createDao();
+
+ final AccountWithDataSet account = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("primary_"));
+ mAccounts.add(account);
+
+ final SimContact existing1 =
+ new SimContact(2, "Exists 2 " + mNameSuffix, "5550102");
+ final SimContact existing2 =
+ new SimContact(4, "Exists 4 " + mNameSuffix, "5550104");
+
+ final List<SimContact> contacts = Arrays.asList(
+ new SimContact(1, "Missing 1 " + mNameSuffix, "5550101"),
+ new SimContact(existing1),
+ new SimContact(3, "Missing 3 " + mNameSuffix, "5550103"),
+ new SimContact(existing2));
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(existing1),
+ new SimContact(existing2)
+ ), account);
+
+
+ final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+ .findAccountsOfExistingSimContacts(contacts);
+
+ assertThat(existing.size(), equalTo(1));
+ assertThat(existing.get(account),
+ Matchers.<Set<SimContact>>equalTo(ImmutableSet.of(existing1, existing2)));
+ }
+
+ @Test
+ public void hasMultipleAccountsWhenMultipleMatchingContactsExist() throws Exception {
+ final SimContactDao sut = createDao();
+
+ final AccountWithDataSet account1 = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("account1_"));
+ mAccounts.add(account1);
+ final AccountWithDataSet account2 = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("account2_"));
+ mAccounts.add(account2);
+
+ final SimContact existsInBoth =
+ new SimContact(2, "Exists Both " + mNameSuffix, "5550102");
+ final SimContact existsInAccount1 =
+ new SimContact(4, "Exists 1 " + mNameSuffix, "5550104");
+ final SimContact existsInAccount2 =
+ new SimContact(5, "Exists 2 " + mNameSuffix, "5550105");
+
+ final List<SimContact> contacts = Arrays.asList(
+ new SimContact(1, "Missing 1 " + mNameSuffix, "5550101"),
+ new SimContact(existsInBoth),
+ new SimContact(3, "Missing 3 " + mNameSuffix, "5550103"),
+ new SimContact(existsInAccount1),
+ new SimContact(existsInAccount2));
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(existsInBoth),
+ new SimContact(existsInAccount1)
+ ), account1);
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(existsInBoth),
+ new SimContact(existsInAccount2)
+ ), account2);
+
+
+ final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+ .findAccountsOfExistingSimContacts(contacts);
+
+ assertThat(existing.size(), equalTo(2));
+ assertThat(existing, Matchers.<Map<AccountWithDataSet, Set<SimContact>>>equalTo(
+ ImmutableMap.<AccountWithDataSet, Set<SimContact>>of(
+ account1, ImmutableSet.of(existsInBoth, existsInAccount1),
+ account2, ImmutableSet.of(existsInBoth, existsInAccount2))));
+ }
+
+ @Test
+ public void matchesByNameIfSimContactHasNoPhone() throws Exception {
+ final SimContactDao sut = createDao();
+
+ final AccountWithDataSet account = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("account_"));
+ mAccounts.add(account);
+
+ final SimContact noPhone = new SimContact(1, "Nophone " + mNameSuffix, null);
+ final SimContact otherExisting = new SimContact(
+ 5, "Exists 1 " + mNameSuffix, "5550105");
+
+ final List<SimContact> contacts = Arrays.asList(
+ new SimContact(noPhone),
+ new SimContact(2, "Name 2 " + mNameSuffix, "5550102"),
+ new SimContact(3, "Name 3 " + mNameSuffix, "5550103"),
+ new SimContact(4, "Name 4 " + mNameSuffix, "5550104"),
+ new SimContact(otherExisting));
+
+ sut.importContacts(Arrays.asList(
+ new SimContact(noPhone),
+ new SimContact(otherExisting)
+ ), account);
+
+ final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+ .findAccountsOfExistingSimContacts(contacts);
+
+ assertThat(existing.size(), equalTo(1));
+ assertThat(existing.get(account), Matchers.<Set<SimContact>>equalTo(
+ ImmutableSet.of(noPhone, otherExisting)));
+ }
+
+ @Test
+ public void largeNumberOfSimContacts() throws Exception {
+ final SimContactDao sut = createDao();
+
+ final List<SimContact> contacts = new ArrayList<>();
+ for (int i = 0; i < MAX_SIM_CONTACTS; i++) {
+ contacts.add(new SimContact(
+ i + 1, "Contact " + (i + 1) + " " + mNameSuffix, randomPhone()));
+ }
+ // The work has to be split into batches to avoid hitting SQL query parameter limits
+ // so test contacts that will be at boundary points
+ final SimContact imported1 = contacts.get(0);
+ final SimContact imported2 = contacts.get(99);
+ final SimContact imported3 = contacts.get(100);
+ final SimContact imported4 = contacts.get(101);
+ final SimContact imported5 = contacts.get(MAX_SIM_CONTACTS - 1);
+
+ final AccountWithDataSet account = mAccountHelper.addTestAccount(
+ mAccountHelper.generateAccountName("account_"));
+ mAccounts.add(account);
+
+ sut.importContacts(Arrays.asList(imported1, imported2, imported3, imported4, imported5),
+ account);
+
+ mAccounts.add(account);
+
+ final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+ .findAccountsOfExistingSimContacts(contacts);
+
+ assertThat(existing.size(), equalTo(1));
+ assertThat(existing.get(account), Matchers.<Set<SimContact>>equalTo(
+ ImmutableSet.of(imported1, imported2, imported3, imported4, imported5)));
+
+ }
+
+ private SimContactDao createDao() {
+ return SimContactDao.create(mContext);
+ }
+
+ /**
+ * Adds a bunch of random contact data to CP2 to make the test environment more realistic
+ */
+ private static void seedCp2() throws RemoteException, OperationApplicationException {
+
+ final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+
+ appendCreateContact("John Smith", sSeedAccount, ops);
+ appendCreateContact("Marcus Seed", sSeedAccount, ops);
+ appendCreateContact("Gary Seed", sSeedAccount, ops);
+ appendCreateContact("Michael Seed", sSeedAccount, ops);
+ appendCreateContact("Isaac Seed", sSeedAccount, ops);
+ appendCreateContact("Sean Seed", sSeedAccount, ops);
+ appendCreateContact("Nate Seed", sSeedAccount, ops);
+ appendCreateContact("Andrey Seed", sSeedAccount, ops);
+ appendCreateContact("Cody Seed", sSeedAccount, ops);
+ appendCreateContact("John Seed", sSeedAccount, ops);
+ appendCreateContact("Alex Seed", sSeedAccount, ops);
+
+ InstrumentationRegistry.getTargetContext()
+ .getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+ }
+
+ private static void appendCreateContact(String name, AccountWithDataSet account,
+ ArrayList<ContentProviderOperation> ops) {
+ final int emailCount = sRandom.nextInt(10);
+ final int phoneCount = sRandom.nextInt(5);
+
+ final List<String> phones = new ArrayList<>();
+ for (int i = 0; i < phoneCount; i++) {
+ phones.add(randomPhone());
+ }
+ final List<String> emails = new ArrayList<>();
+ for (int i = 0; i < emailCount; i++) {
+ emails.add(randomEmail(name));
+ }
+ appendCreateContact(name, phones, emails, account, ops);
+ }
+
+
+ private static void appendCreateContact(String name, List<String> phoneNumbers,
+ List<String> emails, AccountWithDataSet account, List<ContentProviderOperation> ops) {
+ int index = ops.size();
+
+ ops.add(account.newRawContactOperation());
+ ops.add(insertIntoData(name, StructuredName.CONTENT_ITEM_TYPE, index));
+ for (String phone : phoneNumbers) {
+ ops.add(insertIntoData(phone, Phone.CONTENT_ITEM_TYPE, Phone.TYPE_MOBILE, index));
+ }
+ for (String email : emails) {
+ ops.add(insertIntoData(email, Email.CONTENT_ITEM_TYPE, Email.TYPE_HOME, index));
+ }
+ }
+
+ private static ContentProviderOperation insertIntoData(String value, String mimeType,
+ int idBackReference) {
+ return ContentProviderOperation.newInsert(Data.CONTENT_URI)
+ .withValue(Data.DATA1, value)
+ .withValue(Data.MIMETYPE, mimeType)
+ .withValueBackReference(Data.RAW_CONTACT_ID, idBackReference).build();
+ }
+
+ private static ContentProviderOperation insertIntoData(String value, String mimeType,
+ int type, int idBackReference) {
+ return ContentProviderOperation.newInsert(Data.CONTENT_URI)
+ .withValue(Data.DATA1, value)
+ .withValue(ContactsContract.Data.DATA2, type)
+ .withValue(Data.MIMETYPE, mimeType)
+ .withValueBackReference(Data.RAW_CONTACT_ID, idBackReference).build();
+ }
+ }
+
+ /**
+ * Tests for {@link SimContactDao#loadContactsForSim(SimCard)}
+ *
+ * These are unit tests that verify that {@link SimContact}s are created correctly from
+ * the cursors that are returned by queries to the IccProvider
+ */
+ @SmallTest
+ @RunWith(AndroidJUnit4.class)
+ public static class LoadContactsUnitTests {
+
+ private MockContentProvider mMockIccProvider;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = mock(MockContext.class);
+ final MockContentResolver mockResolver = new MockContentResolver();
+ mMockIccProvider = new MockContentProvider();
+ mockResolver.addProvider("icc", mMockIccProvider);
+ when(mContext.getContentResolver()).thenReturn(mockResolver);
+ }
+
+
+ @Test
+ public void createsContactsFromCursor() {
+ mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+ .withDefaultProjection(
+ SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnRow(1, "Name One", "5550101", null)
+ .returnRow(2, "Name Two", "5550102", null)
+ .returnRow(3, "Name Three", null, null)
+ .returnRow(4, null, "5550104", null)
+ .returnRow(5, "Name Five", "5550105",
+ "five@example.com,nf@example.com,name.five@example.com")
+ .returnRow(6, "Name Six", "5550106", "thesix@example.com");
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ final List<SimContact> contacts = sut
+ .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+
+ assertThat(contacts, equalTo(
+ Arrays.asList(
+ new SimContact(1, "Name One", "5550101", null),
+ new SimContact(2, "Name Two", "5550102", null),
+ new SimContact(3, "Name Three", null, null),
+ new SimContact(4, null, "5550104", null),
+ new SimContact(5, "Name Five", "5550105", new String[] {
+ "five@example.com", "nf@example.com", "name.five@example.com"
+ }),
+ new SimContact(6, "Name Six", "5550106", new String[] {
+ "thesix@example.com"
+ })
+ )));
+ }
+
+ @Test
+ public void excludesEmptyContactsFromResult() {
+ mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+ .withDefaultProjection(
+ SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnRow(1, "Non Empty1", "5550101", null)
+ .returnRow(2, "", "", "")
+ .returnRow(3, "Non Empty2", null, null)
+ .returnRow(4, null, null, null)
+ .returnRow(5, "", null, null)
+ .returnRow(6, null, "5550102", null)
+ .returnRow(7, null, null, "user@example.com");
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ final List<SimContact> contacts = sut
+ .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+
+ assertThat(contacts, equalTo(
+ Arrays.asList(
+ new SimContact(1, "Non Empty1", "5550101", null),
+ new SimContact(3, "Non Empty2", null, null),
+ new SimContact(6, null, "5550102", null),
+ new SimContact(7, null, null, new String[] { "user@example.com" })
+ )));
+ }
+
+ @Test
+ public void usesSimCardSubscriptionIdIfAvailable() {
+ mMockIccProvider.expectQuery(SimContactDaoImpl.ICC_CONTENT_URI.buildUpon()
+ .appendPath("subId").appendPath("2").build())
+ .withDefaultProjection(
+ SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnEmptyCursor();
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ sut.loadContactsForSim(new SimCard("123", 2, "carrier", "sim", null, "us"));
+ mMockIccProvider.verify();
+ }
+
+ @Test
+ public void omitsSimCardSubscriptionIdIfUnavailable() {
+ mMockIccProvider.expectQuery(SimContactDaoImpl.ICC_CONTENT_URI)
+ .withDefaultProjection(
+ SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnEmptyCursor();
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ sut.loadContactsForSim(new SimCard("123", SimCard.NO_SUBSCRIPTION_ID,
+ "carrier", "sim", null, "us"));
+ mMockIccProvider.verify();
+ }
+
+ @Test
+ public void returnsEmptyListForEmptyCursor() {
+ mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+ .withDefaultProjection(
+ SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+ SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+ .withAnyProjection()
+ .withAnySelection()
+ .withAnySortOrder()
+ .returnEmptyCursor();
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ List<SimContact> result = sut
+ .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+ assertTrue(result.isEmpty());
+ }
+
+ @Test
+ public void returnsEmptyListForNullCursor() {
+ mContext = mock(MockContext.class);
+ final MockContentResolver mockResolver = new MockContentResolver();
+ final ContentProvider mockProvider = mock(android.test.mock.MockContentProvider.class);
+ when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
+ any(String[].class), anyString()))
+ .thenReturn(null);
+ when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
+ any(String[].class), anyString(), any(CancellationSignal.class)))
+ .thenReturn(null);
+
+ mockResolver.addProvider("icc", mockProvider);
+ when(mContext.getContentResolver()).thenReturn(mockResolver);
+
+ final SimContactDao sut = SimContactDao.create(mContext);
+ final List<SimContact> result = sut
+ .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+ assertTrue(result.isEmpty());
+ }
+ }
+
+ @LargeTest
+ // suppressed because failed assumptions are reported as test failures by the build server
+ @Suppress
+ @RunWith(AndroidJUnit4.class)
+ public static class LoadContactsIntegrationTest {
+ private SimContactsTestHelper mSimTestHelper;
+ private ArrayList<ContentProviderOperation> mSimSnapshot;
+
+ @Before
+ public void setUp() throws Exception {
+ mSimTestHelper = new SimContactsTestHelper();
+
+ mSimTestHelper.assumeSimWritable();
+ if (!mSimTestHelper.isSimWritable()) return;
+
+ mSimSnapshot = mSimTestHelper.captureRestoreSnapshot();
+ mSimTestHelper.deleteAllSimContacts();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ mSimTestHelper.restore(mSimSnapshot);
+ }
+
+ @Test
+ public void readFromSim() {
+ mSimTestHelper.addSimContact("Test Simone", "15095550101");
+ mSimTestHelper.addSimContact("Test Simtwo", "15095550102");
+ mSimTestHelper.addSimContact("Test Simthree", "15095550103");
+
+ final SimContactDao sut = SimContactDao.create(getContext());
+ final SimCard sim = sut.getSimCards().get(0);
+ final ArrayList<SimContact> contacts = sut.loadContactsForSim(sim);
+
+ assertThat(contacts.get(0), isSimContactWithNameAndPhone("Test Simone", "15095550101"));
+ assertThat(contacts.get(1), isSimContactWithNameAndPhone("Test Simtwo", "15095550102"));
+ assertThat(contacts.get(2),
+ isSimContactWithNameAndPhone("Test Simthree", "15095550103"));
+ }
+ }
+
+ private static String randomPhone() {
+ return String.format(Locale.US, "1%s55501%02d",
+ AREA_CODES[sRandom.nextInt(AREA_CODES.length)],
+ sRandom.nextInt(100));
+ }
+
+ private static String randomEmail(String name) {
+ return String.format("%s%d@example.com", name.replace(" ", ".").toLowerCase(Locale.US),
+ 1000 + sRandom.nextInt(1000));
+ }
+
+
+ static Context getContext() {
+ return InstrumentationRegistry.getTargetContext();
+ }
+}
diff --git a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
index 2b6c667f6..a7d5c208d 100644
--- a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
@@ -16,294 +16,217 @@
package com.android.contacts.editor;
-import android.test.AndroidTestCase;
-import android.test.MoreAsserts;
-import android.test.suitebuilder.annotation.SmallTest;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.google.common.collect.Sets;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
-import java.util.Collection;
-import java.util.Set;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
/**
* Test case for {@link ContactEditorUtils}.
*
* adb shell am instrument -w -e class com.android.contacts.editor.ContactEditorUtilsTest \
com.android.contacts.tests/android.test.InstrumentationTestRunner
+
+ * <p>It may make sense to just delete or move these tests since the code under test just forwards
+ * calls to {@link com.android.contacts.preference.ContactsPreferences} and that logic is already
+ * covered by {@link com.android.contacts.preference.ContactsPreferencesTest}
+ * </p>
*/
@SmallTest
-public class ContactEditorUtilsTest extends AndroidTestCase {
- private MockAccountTypeManager mAccountTypes;
+@RunWith(AndroidJUnit4.class)
+public class ContactEditorUtilsTest {
private ContactEditorUtils mTarget;
- private static final MockAccountType TYPE1 = new MockAccountType("type1", null, true);
- private static final MockAccountType TYPE2 = new MockAccountType("type2", null, true);
- private static final MockAccountType TYPE2EX = new MockAccountType("type2", "ext", true);
-
- // Only type 3 is "readonly".
- private static final MockAccountType TYPE3 = new MockAccountType("type3", null, false);
+ private static final String TYPE1 = "type1";
+ private static final String TYPE2 = "type2";
+ private static final String TYPE2_EXT = "ext";
- private static final AccountWithDataSet ACCOUNT_1_A = new AccountWithDataSet(
- "a", TYPE1.accountType, TYPE1.dataSet);
- private static final AccountWithDataSet ACCOUNT_1_B = new AccountWithDataSet(
- "b", TYPE1.accountType, TYPE1.dataSet);
+ private static final AccountWithDataSet ACCOUNT_1_A = new AccountWithDataSet("a", TYPE1, null);
+ private static final AccountWithDataSet ACCOUNT_1_B = new AccountWithDataSet("b", TYPE1, null);
- private static final AccountWithDataSet ACCOUNT_2_A = new AccountWithDataSet(
- "a", TYPE2.accountType, TYPE2.dataSet);
+ private static final AccountWithDataSet ACCOUNT_2_A = new AccountWithDataSet("a", TYPE2, null);
private static final AccountWithDataSet ACCOUNT_2EX_A = new AccountWithDataSet(
- "a", TYPE2EX.accountType, TYPE2EX.dataSet);
+ "a", TYPE2, TYPE2_EXT);
- private static final AccountWithDataSet ACCOUNT_3_C = new AccountWithDataSet(
- "c", TYPE3.accountType, TYPE3.dataSet);
-
- @Override
- protected void setUp() throws Exception {
- // Initialize with 0 types, 0 accounts.
- mAccountTypes = new MockAccountTypeManager(new AccountType[] {},
- new AccountWithDataSet[] {});
- mTarget = new ContactEditorUtils(getContext(), mAccountTypes);
+ @Before
+ public void setUp() throws Exception {
+ mTarget = ContactEditorUtils.create(InstrumentationRegistry.getTargetContext());
// Clear the preferences.
mTarget.cleanupForTest();
}
- private void setAccountTypes(AccountType... types) {
- mAccountTypes.mTypes = types;
- }
-
- private void setAccounts(AccountWithDataSet... accounts) {
- mAccountTypes.mAccounts = accounts;
- }
-
- public void testGetWritableAccountTypeStrings() {
- String[] types;
-
- // 0 writable types
- setAccountTypes();
-
- types = mTarget.getWritableAccountTypeStrings();
- MoreAsserts.assertEquals(types, new String[0]);
-
- // 1 writable type
- setAccountTypes(TYPE1);
-
- types = mTarget.getWritableAccountTypeStrings();
- MoreAsserts.assertEquals(Sets.newHashSet(TYPE1.accountType), Sets.newHashSet(types));
-
- // 2 writable types
- setAccountTypes(TYPE1, TYPE2EX);
-
- types = mTarget.getWritableAccountTypeStrings();
- MoreAsserts.assertEquals(Sets.newHashSet(TYPE1.accountType, TYPE2EX.accountType),
- Sets.newHashSet(types));
-
- // 3 writable types + 1 readonly type
- setAccountTypes(TYPE1, TYPE2, TYPE2EX, TYPE3);
-
- types = mTarget.getWritableAccountTypeStrings();
- MoreAsserts.assertEquals(
- Sets.newHashSet(TYPE1.accountType, TYPE2.accountType, TYPE2EX.accountType),
- Sets.newHashSet(types));
- }
-
/**
* Test for
- * - {@link ContactEditorUtils#saveDefaultAndAllAccounts}
- * - {@link ContactEditorUtils#getDefaultAccount}
- * - {@link ContactEditorUtils#getSavedAccounts()}
+ * - {@link ContactEditorUtils#saveDefaultAccount}
+ * - {@link ContactEditorUtils#getOnlyOrDefaultAccount}
*/
- public void testSaveDefaultAndAllAccounts() {
- // Use these account types here.
- setAccountTypes(TYPE1, TYPE2);
-
- // If none has been saved, it should return an empty list.
- assertEquals(0, mTarget.getSavedAccounts().size());
-
- // Save 0 accounts.
- mAccountTypes.mAccounts = new AccountWithDataSet[]{};
- mTarget.saveDefaultAndAllAccounts(null);
- assertNull(mTarget.getDefaultAccount());
- MoreAsserts.assertEquals(
- Sets.newHashSet(mAccountTypes.mAccounts),
- toSet(mTarget.getSavedAccounts()));
-
- // 1 account
- mAccountTypes.mAccounts = new AccountWithDataSet[]{ACCOUNT_1_A};
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_A);
- assertEquals(ACCOUNT_1_A, mTarget.getDefaultAccount());
- MoreAsserts.assertEquals(
- Sets.newHashSet(mAccountTypes.mAccounts),
- toSet(mTarget.getSavedAccounts()));
-
- // 2 accounts
- mAccountTypes.mAccounts = new AccountWithDataSet[]{ACCOUNT_1_A, ACCOUNT_1_B};
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_B);
- assertEquals(ACCOUNT_1_B, mTarget.getDefaultAccount());
- MoreAsserts.assertEquals(
- Sets.newHashSet(mAccountTypes.mAccounts),
- toSet(mTarget.getSavedAccounts()));
-
- // 2 accounts, and save null as the default. Even though there are accounts, the saved
- // account list should be empty in this case.
- mTarget.saveDefaultAndAllAccounts(null);
- assertNull(mTarget.getDefaultAccount());
- assertEquals(0, mTarget.getSavedAccounts().size());
- }
-
- public void testIsAccountValid() {
- // Use these account types here.
- setAccountTypes(TYPE1, TYPE2);
-
- // 0 accounts
- mAccountTypes.mAccounts = new AccountWithDataSet[]{};
- assertFalse(mTarget.isValidAccount(ACCOUNT_1_A));
- assertTrue(mTarget.isValidAccount(null)); // null is always valid
-
- // 2 accounts
- mAccountTypes.mAccounts = new AccountWithDataSet[]{ACCOUNT_1_A, ACCOUNT_2_A};
- assertTrue(mTarget.isValidAccount(ACCOUNT_1_A));
- assertTrue(mTarget.isValidAccount(ACCOUNT_2_A));
- assertFalse(mTarget.isValidAccount(ACCOUNT_2EX_A));
- assertTrue(mTarget.isValidAccount(null)); // null is always valid
+ @Test
+ public void testSaveDefaultAccount() {
+ mTarget.saveDefaultAccount(null);
+ assertNull(mTarget.getOnlyOrDefaultAccount(Collections.<AccountWithDataSet>emptyList()));
+
+ mTarget.saveDefaultAccount(ACCOUNT_1_A);
+ assertEquals(ACCOUNT_1_A, mTarget.getOnlyOrDefaultAccount(Collections.
+ <AccountWithDataSet>emptyList()));
}
/**
- * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
- * 0 accounts.
+ * Tests for
+ * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+ * starting with 0 accounts.
*/
+ @Test
public void testShouldShowAccountChangedNotification_0Accounts() {
- // There's always at least one writable type...
- setAccountTypes(TYPE1);
-
- // First launch -- always true.
- assertTrue(mTarget.shouldShowAccountChangedNotification());
+ List<AccountWithDataSet> currentAccounts = new ArrayList<>();
+ assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// We show the notification here, and user clicked "add account"
- setAccounts(ACCOUNT_1_A);
+ currentAccounts.add(ACCOUNT_1_A);
// Now we open the contact editor with the new account.
// When closing the editor, we save the default account.
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_A);
+ mTarget.saveDefaultAccount(ACCOUNT_1_A);
// Next time the user creates a contact, we don't show the notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// User added a new writable account, ACCOUNT_1_B.
- setAccounts(ACCOUNT_1_A, ACCOUNT_1_B);
+ currentAccounts.add(ACCOUNT_1_B);
// Since default account is still ACCOUNT_1_A, we don't show the notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// User saved a new contact. We update the account list and the default account.
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_B);
+ mTarget.saveDefaultAccount(ACCOUNT_1_B);
// User created another contact. Now we don't show the notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// User installed a new contact sync adapter...
- // Added a new account type: TYPE2, and the TYPE2EX extension.
- setAccountTypes(TYPE1, TYPE2, TYPE2EX);
// Add new accounts: ACCOUNT_2_A, ACCOUNT_2EX_A.
- setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2_A, ACCOUNT_2EX_A);
+ currentAccounts.add(ACCOUNT_2_A);
+ currentAccounts.add(ACCOUNT_2EX_A);
// New added account but default account is still not changed, so no notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// User saves a new contact, with a different default account.
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_2_A);
+ mTarget.saveDefaultAccount(ACCOUNT_2_A);
// Next time user creates a contact, no notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// Remove ACCOUNT_2EX_A.
- setAccountTypes(TYPE1, TYPE2, TYPE2EX);
- setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2_A);
+ currentAccounts.remove(ACCOUNT_2EX_A);
// ACCOUNT_2EX_A was not default, so no notification either.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
- // Remove ACCOUNT_1_B, which is default.
- setAccountTypes(TYPE1, TYPE2, TYPE2EX);
- setAccounts(ACCOUNT_1_A, ACCOUNT_1_B);
+ // Remove ACCOUNT_2_A, which is default.
+ currentAccounts.remove(ACCOUNT_2_A);
// Now we show the notification.
- assertTrue(mTarget.shouldShowAccountChangedNotification());
+ assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
// Do not save the default account, and add a new account now.
- setAccountTypes(TYPE1, TYPE2, TYPE2EX);
- setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2EX_A);
+ currentAccounts.add(ACCOUNT_2EX_A);
// No default account, so show notification.
- assertTrue(mTarget.shouldShowAccountChangedNotification());
+ assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
}
/**
- * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
- * 1 accounts.
+ * Tests for
+ * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+ * starting with 1 accounts.
*/
+ @Test
public void testShouldShowAccountChangedNotification_1Account() {
- setAccountTypes(TYPE1, TYPE2);
- setAccounts(ACCOUNT_1_A);
-
- // First launch -- always true.
- assertTrue(mTarget.shouldShowAccountChangedNotification());
+ // Always returns false when 1 writable account.
+ assertFalse(mTarget.shouldShowAccountChangedNotification(
+ Collections.singletonList(ACCOUNT_1_A)));
// User saves a new contact.
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_A);
+ mTarget.saveDefaultAccount(ACCOUNT_1_A);
// Next time, no notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(
+ Collections.singletonList(ACCOUNT_1_A)));
// The rest is the same...
}
/**
- * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
- * 0 accounts, and the user selected "local only".
+ * Tests for
+ * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+ * starting with 0 accounts, and the user selected "local only".
*/
+ @Test
public void testShouldShowAccountChangedNotification_0Account_localOnly() {
- // There's always at least one writable type...
- setAccountTypes(TYPE1);
-
// First launch -- always true.
- assertTrue(mTarget.shouldShowAccountChangedNotification());
+ assertTrue(mTarget.shouldShowAccountChangedNotification(Collections.
+ <AccountWithDataSet>emptyList()));
// We show the notification here, and user clicked "keep local" and saved an contact.
- mTarget.saveDefaultAndAllAccounts(null);
+ mTarget.saveDefaultAccount(AccountWithDataSet.getNullAccount());
// Now there are no accounts, and default account is null.
// The user created another contact, but this we shouldn't show the notification.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(Collections.
+ <AccountWithDataSet>emptyList()));
}
+ @Test
public void testShouldShowAccountChangedNotification_sanity_check() {
// Prepare 1 account and save it as the default.
- setAccountTypes(TYPE1);
- setAccounts(ACCOUNT_1_A);
-
- mTarget.saveDefaultAndAllAccounts(ACCOUNT_1_A);
+ mTarget.saveDefaultAccount(ACCOUNT_1_A);
// Right after a save, the dialog shouldn't show up.
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(
+ Collections.singletonList(ACCOUNT_1_A)));
// Remove the default account to emulate broken preferences.
mTarget.removeDefaultAccountForTest();
// The dialog shouldn't show up.
// The logic is, if there's a writable account, we'll pick it as default
- assertFalse(mTarget.shouldShowAccountChangedNotification());
+ assertFalse(mTarget.shouldShowAccountChangedNotification(
+ Collections.singletonList(ACCOUNT_1_A)));
}
- private static <T> Set<T> toSet(Collection<T> collection) {
- Set<T> ret = Sets.newHashSet();
- ret.addAll(collection);
- return ret;
+ @Test
+ public void testShouldShowAccountChangedNotification_nullAccount() {
+ final List<AccountWithDataSet> currentAccounts = new ArrayList<>();
+ final AccountWithDataSet nullAccount = AccountWithDataSet.getNullAccount();
+ currentAccounts.add(nullAccount);
+
+ assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
+
+ // User chooses to keep the "device" account as the default
+ mTarget.saveDefaultAccount(nullAccount);
+
+ // Right after a save, the dialog shouldn't show up.
+ assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
}
private static class MockAccountType extends AccountType {
diff --git a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
index 1fb5cb708..9eea4d1e1 100644
--- a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
@@ -16,10 +16,6 @@
package com.android.contacts.editor;
-import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-
import android.content.Context;
import android.media.RingtoneManager;
import android.net.Uri;
@@ -27,7 +23,14 @@ import android.os.Build;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import android.util.Pair;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.DeviceLocalAccountType;
+import com.android.contacts.tests.FakeAccountType;
/**
* Tests {@link EditorUiUtils}.
@@ -43,6 +46,11 @@ public class EditorUiUtilsTest extends AndroidTestCase {
private static final String RINGTONE = "content://media/external/audio/media/31";
+ private static final AccountWithDataSet ACCOUNT =
+ new AccountWithDataSet(ACCOUNT_NAME, "some.account.type", null);
+ private static final AccountWithDataSet GOOGLE_ACCOUNT =
+ new AccountWithDataSet(ACCOUNT_NAME, "com.google", null);
+
private static final class MockAccountType extends AccountType {
private final String mDisplayLabel;
@@ -67,84 +75,66 @@ public class EditorUiUtilsTest extends AndroidTestCase {
}
}
- public void testGetProfileAccountInfo_AccountName() {
- final Pair pair = EditorUiUtils.getLocalAccountInfo(getContext(),
- ACCOUNT_NAME, new MockAccountType(DISPLAY_LABEL));
+ public void testGetProfileAccountInfo_NonLocalAccount() {
+ final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME,
+ DISPLAY_LABEL, null, /* isDeviceAccount */ false),
+ new FakeAccountType("com.example.account"));
+
+ final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(),
+ account);
- assertNotNull(pair);
- assertEquals(ACCOUNT_NAME, pair.first);
- assertEquals(getContext().getString(R.string.external_profile_title, DISPLAY_LABEL),
- pair.second); // My LunkedIn profile
+ // My LunkedIn profile
+ final String expected = getContext()
+ .getString(R.string.external_profile_title, DISPLAY_LABEL);
+ assertEquals(expected, label);
}
- public void testGetProfileAccountInfo_NoAccountName() {
- final Pair pair = EditorUiUtils.getLocalAccountInfo(getContext(),
- /* accountName =*/ null, new MockAccountType(DISPLAY_LABEL));
- assertNotNull(pair);
- assertNull(pair.first);
- assertEquals(getContext().getString(R.string.local_profile_title),
- pair.second); // "My local profile
- }
+ public void testGetProfileAccountInfo_DeviceLocalAccount() {
+ final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, "Device",
+ "Device", null, true), new DeviceLocalAccountType(mContext));
- public void testGetAccountInfo_AccountName_DisplayLabel() {
- final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
- ACCOUNT_NAME, new MockAccountType(DISPLAY_LABEL));
+ final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(),
+ account);
- assertNotNull(pair);
- assertEquals(getContext().getString(R.string.from_account_format, ACCOUNT_NAME),
- pair.first); // somebody@lunkedin.com
- assertEquals(getContext().getString(R.string.account_type_format, DISPLAY_LABEL),
- pair.second); // LunkedIn Contact
+ // "My local profile"
+ final String expected = getContext().getString(R.string.local_profile_title);
+ assertEquals(expected, label);
}
- public void testGetAccountInfo_AccountName_DisplayLabel_GoogleAccountType() {
- final AccountType accountType = new MockAccountType(GOOGLE_DISPLAY_LABEL);
- accountType.accountType = GoogleAccountType.ACCOUNT_TYPE;
- final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
- GOOGLE_ACCOUNT_NAME, accountType);
-
- assertNotNull(pair);
- assertEquals(getContext().getString(R.string.from_account_format, GOOGLE_ACCOUNT_NAME),
- pair.first); // somebody@gmail.com
- assertEquals(
- getContext().getString(R.string.google_account_type_format, GOOGLE_DISPLAY_LABEL),
- pair.second); // Google Account
- }
+ public void testGetAccountInfo_AccountType_NonGoogle() {
+ final AccountDisplayInfo account = new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME,
+ DISPLAY_LABEL, /*icon*/ null, /*isDeviceAccount*/ false);
+
+ final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account);
- public void testGetAccountInfo_AccountName_NoDisplayLabel() {
- final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
- ACCOUNT_NAME, new MockAccountType(/* displayLabel =*/ null));
-
- assertNotNull(pair);
- assertEquals(getContext().getString(R.string.from_account_format, ACCOUNT_NAME),
- pair.first); // somebody@lunkedin.com
- assertEquals(
- getContext().getString(R.string.account_type_format,
- getContext().getString(R.string.account_phone)),
- pair.second); // "Phone-only, unsynced contact"
+ // LunkedIn Contact
+ final String expected = getContext().getString(R.string.account_type_format, DISPLAY_LABEL);
+ assertEquals(expected, label);
}
- public void testGetAccountInfo_NoAccountName_DisplayLabel() {
- final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
- /* accountName =*/ null, new MockAccountType(DISPLAY_LABEL));
+ public void testGetAccountInfo_AccountType_Google() {
+ final AccountDisplayInfo account = new AccountDisplayInfo(GOOGLE_ACCOUNT, ACCOUNT_NAME,
+ GOOGLE_DISPLAY_LABEL, /*icon*/ null, /*isDeviceAccount*/ false);
+
+ final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account);
- assertNotNull(pair);
- assertNull(pair.first);
- assertEquals(getContext().getString(R.string.account_type_format, DISPLAY_LABEL),
- pair.second); // LunkedIn contact
+ // Google Account
+ final String expected = getContext().getString(R.string.google_account_type_format,
+ GOOGLE_DISPLAY_LABEL);
+ assertEquals(expected, label);
}
- public void testGetAccountInfo_NoAccountName_NoDisplayLabel() {
- final Pair pair = EditorUiUtils.getAccountInfo(getContext(),
- /* accountName =*/ null, new MockAccountType(/* displayLabel =*/ null));
+ public void testGetAccountInfo_AccountType_DeviceAccount() {
+ final AccountWithDataSet deviceAccount = AccountWithDataSet.getNullAccount();
+ final AccountDisplayInfo account = new AccountDisplayInfo(deviceAccount, "Device",
+ "Device", /*icon*/ null, /*isDeviceAccount*/ true);
- assertNotNull(pair);
- assertNull(pair.first);
- assertEquals(
- getContext().getString(R.string.account_type_format,
- getContext().getString(R.string.account_phone)),
- pair.second); // "Phone-only, unsynced contact"
+ final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account);
+
+ // "Device"
+ final String expected = getContext().getString(R.string.account_phone);
+ assertEquals(expected, label);
}
public void testGetRingtongStrFromUri_lessThanOrEqualsToM() {
@@ -183,4 +173,8 @@ public class EditorUiUtilsTest extends AndroidTestCase {
currentVersion));
}
+ private AccountDisplayInfo createDisplayableAccount() {
+ return new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME, DISPLAY_LABEL, null, false);
+ }
+
}
diff --git a/tests/src/com/android/contacts/format/FormatUtilsTests.java b/tests/src/com/android/contacts/format/FormatUtilsTests.java
new file mode 100644
index 000000000..febed74a3
--- /dev/null
+++ b/tests/src/com/android/contacts/format/FormatUtilsTests.java
@@ -0,0 +1,114 @@
+/*
+ * 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.format;
+
+import android.database.CharArrayBuffer;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * Test cases for format utility methods.
+ */
+@SmallTest
+public class FormatUtilsTests extends AndroidTestCase {
+
+ public void testOverlapPoint() throws Exception {
+ assertEquals(2, FormatUtils.overlapPoint("abcde", "cdefg"));
+ assertEquals(-1, FormatUtils.overlapPoint("John Doe", "John Doe"));
+ assertEquals(5, FormatUtils.overlapPoint("John Doe", "Doe, John"));
+ assertEquals(-1, FormatUtils.overlapPoint("Mr. John Doe", "Mr. Doe, John"));
+ assertEquals(13, FormatUtils.overlapPoint("John Herbert Doe", "Doe, John Herbert"));
+ }
+
+ public void testCopyToCharArrayBuffer() {
+ CharArrayBuffer charArrayBuffer = new CharArrayBuffer(20);
+ checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
+ checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
+ checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
+ // Check that it works after copying something into it.
+ checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
+ checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
+ checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
+ // This requires a resize of the actual buffer.
+ checkCopyToCharArrayBuffer(charArrayBuffer, "test test test test test", 24);
+ }
+
+ public void testCharArrayBufferToString() {
+ checkCharArrayBufferToString("");
+ checkCharArrayBufferToString("test");
+ checkCharArrayBufferToString("test test test test test");
+ }
+
+ /** Checks that copying a string into a {@link CharArrayBuffer} and back works correctly. */
+ private void checkCharArrayBufferToString(String text) {
+ CharArrayBuffer buffer = new CharArrayBuffer(20);
+ FormatUtils.copyToCharArrayBuffer(text, buffer);
+ assertEquals(text, FormatUtils.charArrayBufferToString(buffer));
+ }
+
+ /**
+ * Checks that copying into the char array buffer copies the values correctly.
+ */
+ private void checkCopyToCharArrayBuffer(CharArrayBuffer buffer, String value, int length) {
+ FormatUtils.copyToCharArrayBuffer(value, buffer);
+ assertEquals(length, buffer.sizeCopied);
+ for (int index = 0; index < length; ++index) {
+ assertEquals(value.charAt(index), buffer.data[index]);
+ }
+ }
+
+ public void testIndexOfWordPrefix_NullPrefix() {
+ assertEquals(-1, FormatUtils.indexOfWordPrefix("test", null));
+ }
+
+ public void testIndexOfWordPrefix_NullText() {
+ assertEquals(-1, FormatUtils.indexOfWordPrefix(null, "TE"));
+ }
+
+ public void testIndexOfWordPrefix_MatchingPrefix() {
+ checkIndexOfWordPrefix("test", "TE", 0);
+ checkIndexOfWordPrefix("Test", "TE", 0);
+ checkIndexOfWordPrefix("TEst", "TE", 0);
+ checkIndexOfWordPrefix("TEST", "TE", 0);
+ checkIndexOfWordPrefix("a test", "TE", 2);
+ checkIndexOfWordPrefix("test test", "TE", 0);
+ checkIndexOfWordPrefix("a test test", "TE", 2);
+ }
+
+ public void testIndexOfWordPrefix_NotMatchingPrefix() {
+ checkIndexOfWordPrefix("test", "TA", -1);
+ checkIndexOfWordPrefix("test type theme", "TA", -1);
+ checkIndexOfWordPrefix("atest retest pretest", "TEST", -1);
+ checkIndexOfWordPrefix("tes", "TEST", -1);
+ }
+
+ public void testIndexOfWordPrefix_LowerCase() {
+ // The prefix match only works if the prefix is un upper case.
+ checkIndexOfWordPrefix("test", "te", -1);
+ }
+
+ /**
+ * Checks that getting the index of a word prefix in the given text returns the expected index.
+ *
+ * @param text the text in which to look for the word
+ * @param wordPrefix the word prefix to look for
+ * @param expectedIndex the expected value to be returned by the function
+ */
+ private void checkIndexOfWordPrefix(String text, String wordPrefix, int expectedIndex) {
+ assertEquals(expectedIndex, FormatUtils.indexOfWordPrefix(text, wordPrefix));
+ }
+}
diff --git a/tests/src/com/android/contacts/format/SpannedTestUtils.java b/tests/src/com/android/contacts/format/SpannedTestUtils.java
new file mode 100644
index 000000000..0edafbe04
--- /dev/null
+++ b/tests/src/com/android/contacts/format/SpannedTestUtils.java
@@ -0,0 +1,86 @@
+/*
+ * 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.format;
+
+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.
+ */
+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 <p></p> bits to it.
+ Assert.assertEquals("", actualHtmlText);
+ } else {
+ Assert.assertEquals("<p dir=ltr>" + expectedHtmlText + "</p>\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/tests/src/com/android/contacts/format/TextHighlighterTest.java b/tests/src/com/android/contacts/format/TextHighlighterTest.java
new file mode 100644
index 000000000..211d9440b
--- /dev/null
+++ b/tests/src/com/android/contacts/format/TextHighlighterTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.format;
+
+import android.graphics.Typeface;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.SpannableString;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link TextHighlighter}.
+ */
+@SmallTest
+public class TextHighlighterTest extends TestCase {
+ private static final int TEST_PREFIX_HIGHLIGHT_COLOR = 0xFF0000;
+
+ /** The object under test. */
+ private TextHighlighter mTextHighlighter;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+ }
+
+ public void testApply_EmptyPrefix() {
+ CharSequence seq = mTextHighlighter.applyPrefixHighlight("", "");
+ SpannedTestUtils.assertNotSpanned(seq, "");
+
+ seq = mTextHighlighter.applyPrefixHighlight("test", "");
+ SpannedTestUtils.assertNotSpanned(seq, "test");
+ }
+
+ public void testSetText_MatchingPrefix() {
+ final String prefix = "TE";
+
+ CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", prefix);
+ SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+ seq = mTextHighlighter.applyPrefixHighlight("Test", prefix);
+ SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+ seq = mTextHighlighter.applyPrefixHighlight("TEst", prefix);
+ SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+ seq = mTextHighlighter.applyPrefixHighlight("a test", prefix);
+ SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
+ }
+
+ public void testSetText_NotMatchingPrefix() {
+ final CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", "TA");
+ SpannedTestUtils.assertNotSpanned(seq, "test");
+ }
+
+ public void testSetText_FirstMatch() {
+ final CharSequence seq = mTextHighlighter.applyPrefixHighlight(
+ "a test's tests are not tests", "TE");
+ SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
+ }
+
+ public void testSetText_NoMatchingMiddleOfWord() {
+ final String prefix = "TE";
+ CharSequence seq = mTextHighlighter.applyPrefixHighlight("atest", prefix);
+ SpannedTestUtils.assertNotSpanned(seq, "atest");
+
+ seq = mTextHighlighter.applyPrefixHighlight("atest otest", prefix);
+ SpannedTestUtils.assertNotSpanned(seq, "atest otest");
+
+ seq = mTextHighlighter.applyPrefixHighlight("atest test", prefix);
+ SpannedTestUtils.assertPrefixSpan(seq, 6, 7);
+ }
+
+ public void testSetMask_Highlight() {
+ final SpannableString testString1 = new SpannableString("alongtest");
+ mTextHighlighter.applyMaskingHighlight(testString1, 2, 4);
+ assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
+ assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 2));
+
+ mTextHighlighter.applyMaskingHighlight(testString1, 3, 6);
+ assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
+ assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 3));
+
+ mTextHighlighter.applyMaskingHighlight(testString1, 4, 5);
+ assertEquals(3, SpannedTestUtils.getNextTransition(testString1, 2));
+
+ mTextHighlighter.applyMaskingHighlight(testString1, 7, 8);
+ assertEquals(6, SpannedTestUtils.getNextTransition(testString1, 5));
+ assertEquals(7, SpannedTestUtils.getNextTransition(testString1, 6));
+ assertEquals(8, SpannedTestUtils.getNextTransition(testString1, 7));
+ }
+}
diff --git a/tests/src/com/android/contacts/group/GroupUtilTest.java b/tests/src/com/android/contacts/group/GroupUtilTest.java
new file mode 100644
index 000000000..5f72e9d14
--- /dev/null
+++ b/tests/src/com/android/contacts/group/GroupUtilTest.java
@@ -0,0 +1,120 @@
+/*
+ * 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.group;
+
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.test.AndroidTestCase;
+import android.test.MoreAsserts;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.list.ContactsSectionIndexer;
+
+import java.util.Arrays;
+import java.util.List;
+
+@SmallTest
+public class GroupUtilTest extends AndroidTestCase {
+
+ public void testNeedTrimming() {
+ final int zeroCount = 0;
+ final int emptyPositions[] = new int[]{};
+ final int emptyCounts[] = new int[]{};
+ assertFalse(GroupUtil.needTrimming(zeroCount, emptyPositions, emptyCounts));
+
+ final int count = 22;
+ int positions[] = new int[]{0, 1, 3, 5, 8, 9};
+ int counts[] = new int[]{1, 2, 2, 3, 1, 2};
+ assertFalse(GroupUtil.needTrimming(count, positions, counts));
+
+ positions = new int[]{0, 1, 7, 9, 16, 17, 19, 20};
+ counts = new int[]{1, 6, 2, 7, 1, 2, 1, 2};
+ assertTrue(GroupUtil.needTrimming(count, positions, counts));
+ }
+
+ public void testUpdateBundle_smallSet() {
+ final Bundle bundle = new Bundle();
+ final String[] sections = new String[]{"…", "A", "I", "T", "W", "Y", "Z", "#"};
+ final int[] counts = new int[]{1, 6, 2, 7, 1, 2, 1, 2};
+ final Integer[] subscripts = new Integer[]{1, 2, 5, 7, 8, 10, 11, 15, 16, 17, 18};
+ final List<Integer> subscriptsList = Arrays.asList(subscripts);
+ final ContactsSectionIndexer indexer = new ContactsSectionIndexer(sections, counts);
+
+ GroupUtil.updateBundle(bundle, indexer, subscriptsList, sections, counts);
+
+ final String[] newSections = new String[]{"…", "A", "T", "Z", "#"};
+ final int[] newCounts = new int[]{1, 3, 4, 1, 2};
+
+ assertNotNull(bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES));
+ MoreAsserts.assertEquals("Wrong sections!", newSections, bundle.getStringArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_TITLES));
+
+ assertNotNull(bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
+ MoreAsserts.assertEquals("Wrong counts!", newCounts, bundle.getIntArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
+ }
+
+ public void testUpdateBundle_mediumSet() {
+ final Bundle bundle = new Bundle();
+ final String[] sections = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "J",
+ "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z"};
+ final int[] counts = new int[]{81, 36, 84, 55, 28, 15, 18, 38, 145, 60, 41, 73, 15, 2, 56,
+ 1, 74, 73, 45, 14, 28, 9, 18, 21};
+ final Integer[] subscripts = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
+ 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
+ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
+ 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
+ 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 344, 347, 348, 349, 350, 351, 352, 353, 354, 495, 496, 497, 498, 499, 558, 559,
+ 597, 598, 599, 600, 601, 602, 668, 669, 670, 671, 672, 673, 746, 747, 820, 821, 885,
+ 886, 887, 888, 889, 890, 891, 892, 893, 894, 939, 979, 980, 981, 982, 983, 984, 985,
+ 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001,
+ 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015,
+ 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029};
+ final List<Integer> subscriptsList = Arrays.asList(subscripts);
+ final ContactsSectionIndexer indexer = new ContactsSectionIndexer(sections, counts);
+
+ GroupUtil.updateBundle(bundle, indexer, subscriptsList, sections, counts);
+
+ final String[] newSections = new String[]{"A", "H", "J", "K", "L", "M", "N", "O", "P",
+ "R", "S", "T", "V", "W"};
+ final int[] newCounts = new int[]{1, 8, 140, 58, 37, 65, 15, 2, 55, 72, 63, 44, 14, 25};
+
+ assertNotNull(bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES));
+ MoreAsserts.assertEquals("Wrong sections!", newSections, bundle.getStringArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_TITLES));
+
+ assertNotNull(bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
+ MoreAsserts.assertEquals("Wrong counts!", newCounts, bundle.getIntArray(Contacts
+ .EXTRA_ADDRESS_BOOK_INDEX_COUNTS));
+ }
+
+}
diff --git a/tests/src/com/android/contacts/interactions/CallLogInteractionsLoaderTest.java b/tests/src/com/android/contacts/interactions/CallLogInteractionsLoaderTest.java
index 079411f70..b51affd44 100644
--- a/tests/src/com/android/contacts/interactions/CallLogInteractionsLoaderTest.java
+++ b/tests/src/com/android/contacts/interactions/CallLogInteractionsLoaderTest.java
@@ -3,6 +3,7 @@ package com.android.contacts.interactions;
import android.content.ContentValues;
import android.provider.CallLog.Calls;
import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
import java.util.ArrayList;
import java.util.List;
@@ -10,6 +11,7 @@ import java.util.List;
/**
* Tests {@link CallLogInteractionsLoader}
*/
+@SmallTest
public class CallLogInteractionsLoaderTest extends AndroidTestCase {
public void testCallLogInteractions_pruneDuplicates_containsDuplicates() {
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index 0d623760d..258b81895 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -21,20 +21,20 @@ import android.net.Uri;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Contacts.Entity;
import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.test.suitebuilder.annotation.MediumTest;
import com.android.contacts.ContactsApplication;
import com.android.contacts.R;
-import com.android.contacts.common.test.FragmentTestActivity;
-import com.android.contacts.common.test.IntegrationTestUtils;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.BaseAccountType;
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.FragmentTestActivity;
+import com.android.contacts.test.IntegrationTestUtils;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider.Query;
+import com.android.contacts.testing.InjectedServices;
/**
* Tests for {@link ContactDeletionInteraction}.
@@ -46,7 +46,7 @@ import com.android.contacts.common.test.mocks.MockAccountTypeManager;
* adb shell am instrument \
* -w com.android.contacts.tests/android.test.InstrumentationTestRunner
*/
-@SmallTest
+@MediumTest
public class ContactDeletionInteractionTest
extends ActivityInstrumentationTestCase2<FragmentTestActivity> {
private static final Uri CONTACT_URI = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
@@ -107,33 +107,33 @@ public class ContactDeletionInteractionTest
}
public void testSingleWritableRawContact() {
- expectQuery().returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo");
+ expectQuery().returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
assertWithMessageId(R.string.deleteConfirmation);
}
public void testReadOnlyRawContacts() {
- expectQuery().returnRow(1, READONLY_ACCOUNT_TYPE, null, 13, "foo");
+ expectQuery().returnRow(1, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
assertWithMessageId(R.string.readOnlyContactWarning);
}
public void testMixOfWritableAndReadOnlyRawContacts() {
expectQuery()
- .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo")
- .returnRow(2, READONLY_ACCOUNT_TYPE, null, 13, "foo");
+ .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt")
+ .returnRow(2, READONLY_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
assertWithMessageId(R.string.readOnlyContactDeleteConfirmation);
}
public void testMultipleWritableRawContacts() {
expectQuery()
- .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo")
- .returnRow(2, WRITABLE_ACCOUNT_TYPE, null, 13, "foo");
+ .returnRow(1, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt")
+ .returnRow(2, WRITABLE_ACCOUNT_TYPE, null, 13, "foo", "baz", "bazAlt");
assertWithMessageId(R.string.multipleContactDeleteConfirmation);
}
private Query expectQuery() {
return mContactsProvider.expectQuery(ENTITY_URI).withProjection(
Entity.RAW_CONTACT_ID, Entity.ACCOUNT_TYPE, Entity.DATA_SET, Entity.CONTACT_ID,
- Entity.LOOKUP_KEY);
+ Entity.LOOKUP_KEY, Entity.DISPLAY_NAME, Entity.DISPLAY_NAME_ALTERNATIVE);
}
private void assertWithMessageId(int messageId) {
diff --git a/tests/src/com/android/contacts/interactions/ContactInteractionUtilTest.java b/tests/src/com/android/contacts/interactions/ContactInteractionUtilTest.java
index 4802b46e6..5f95a1b0d 100644
--- a/tests/src/com/android/contacts/interactions/ContactInteractionUtilTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactInteractionUtilTest.java
@@ -15,12 +15,10 @@
*/
package com.android.contacts.interactions;
-import com.android.contacts.common.R;
-
import android.content.res.Configuration;
import android.content.res.Resources;
import android.test.AndroidTestCase;
-import android.text.format.DateUtils;
+import android.test.suitebuilder.annotation.SmallTest;
import java.util.Calendar;
import java.util.Locale;
@@ -28,6 +26,7 @@ import java.util.Locale;
/**
* Tests for utility functions in {@link ContactInteractionUtil}
*/
+@SmallTest
public class ContactInteractionUtilTest extends AndroidTestCase {
private Locale mOriginalLocale;
@@ -80,52 +79,42 @@ public class ContactInteractionUtilTest extends AndroidTestCase {
getContext()));
}
- public void testFormatDateStringFromTimestamp_yesterday() {
- // Test yesterday and tomorrow (Yesterday or Tomorrow shown)
- calendar.add(Calendar.DAY_OF_YEAR, -1);
- assertEquals(getContext().getResources().getString(R.string.yesterday),
+ public void testFormatDateStringFromTimestamp_other() {
+ // Test other (Month Date)
+ calendar.set(
+ /* year = */ 1991,
+ /* month = */ Calendar.MONTH,
+ /* day = */ 11,
+ /* hourOfDay = */ 8,
+ /* minute = */ 8);
+ assertEquals("Monday, March 11, 1991, 8:08 AM",
ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
getContext()));
}
- public void testFormatDateStringFromTimestamp_yesterdayLastYear() {
- // Set to non leap year
- calendar.set(Calendar.YEAR, 1999);
- calendar.set(Calendar.DAY_OF_YEAR, 365);
- long lastYear = calendar.getTimeInMillis();
- calendar.add(Calendar.DAY_OF_YEAR, 1);
-
- assertEquals(getContext().getResources().getString(R.string.yesterday),
- ContactInteractionUtil.formatDateStringFromTimestamp(lastYear,
- getContext(), calendar));
+ public void testFormatDuration_zero() {
+ assertEquals("0 sec",
+ ContactInteractionUtil.formatDuration(0, getContext()));
}
- public void testFormatDateStringFromTimestamp_tomorrow() {
- calendar.add(Calendar.DAY_OF_YEAR, 1);
- assertEquals(getContext().getResources().getString(R.string.tomorrow),
- ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
- getContext()));
+ public void testFormatDuration_minZeroSec() {
+ assertEquals("1 min 0 sec",
+ ContactInteractionUtil.formatDuration(60, getContext()));
}
- public void testFormatDateStringFromTimestamp_tomorrowNewYear() {
- calendar.set(Calendar.DAY_OF_YEAR, 1);
- long thisYear = calendar.getTimeInMillis();
- calendar.add(Calendar.DAY_OF_YEAR, -1);
+ public void testFormatDuration_minSec() {
+ assertEquals("30 min 9 sec",
+ ContactInteractionUtil.formatDuration(1809, getContext()));
+ }
- assertEquals(getContext().getResources().getString(R.string.tomorrow),
- ContactInteractionUtil.formatDateStringFromTimestamp(thisYear,
- getContext(), calendar));
+ public void testFormatDuration_hrZeroMinZeroSec() {
+ assertEquals("1 hr 0 min 0 sec",
+ ContactInteractionUtil.formatDuration(3600, getContext()));
}
- public void testFormatDateStringFromTimestamp_other() {
- // Test other (Month Date)
- calendar.set(
- /* year = */ 1991,
- /* month = */ Calendar.MONTH,
- /* day = */ 11);
- assertEquals("March 11",
- ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
- getContext()));
+ public void testFormatDuration_hrMinSec() {
+ assertEquals("2 hr 44 min 36 sec",
+ ContactInteractionUtil.formatDuration(9876, getContext()));
}
private void setLocale(Locale locale) {
diff --git a/tests/src/com/android/contacts/list/ContactListItemViewTest.java b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
new file mode 100644
index 000000000..09c2f36a7
--- /dev/null
+++ b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.list;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.widget.TextView;
+
+import com.android.contacts.format.SpannedTestUtils;
+import com.android.contacts.preference.ContactsPreferences;
+
+/**
+ * Unit tests for {@link com.android.contacts.list.ContactListItemView}.
+ *
+ * It uses an {@link ActivityInstrumentationTestCase2} for {@link PeopleActivity} because we need
+ * to have the style properly setup.
+ */
+@LargeTest
+public class ContactListItemViewTest extends AndroidTestCase {
+
+ //private IntegrationTestUtils mUtils;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ // This test requires that the screen be turned on.
+ //mUtils = new IntegrationTestUtils(getInstrumentation());
+ //mUtils.acquireScreenWakeLock(getInstrumentation().getTargetContext());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ //mUtils.releaseScreenWakeLock();
+ super.tearDown();
+ }
+
+ public void testShowDisplayName_Simple() {
+ Cursor cursor = createCursor("John Doe", "Doe John");
+ ContactListItemView view = createView();
+
+ view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+ assertEquals(view.getNameTextView().getText().toString(), "John Doe");
+ }
+
+ public void testShowDisplayName_Unknown() {
+ Cursor cursor = createCursor("", "");
+ ContactListItemView view = createView();
+
+ view.setUnknownNameText("unknown");
+ view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+ assertEquals(view.getNameTextView().getText().toString(), "unknown");
+ }
+
+ public void testShowDisplayName_WithPrefix() {
+ Cursor cursor = createCursor("John Doe", "Doe John");
+ ContactListItemView view = createView();
+
+ view.setHighlightedPrefix("DOE");
+ view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+ CharSequence seq = view.getNameTextView().getText();
+ assertEquals("John Doe", seq.toString());
+ SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
+ // Talback should be without span tags.
+ assertEquals("John Doe", view.getNameTextView().getContentDescription());
+ assertFalse("John Doe".equals(seq));
+ }
+
+ public void testShowDisplayName_WithPrefixReversed() {
+ Cursor cursor = createCursor("John Doe", "Doe John");
+ ContactListItemView view = createView();
+
+ view.setHighlightedPrefix("DOE");
+ view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+
+ CharSequence seq = view.getNameTextView().getText();
+ assertEquals("John Doe", seq.toString());
+ SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
+ }
+
+ public void testSetSnippet_Prefix() {
+ ContactListItemView view = createView();
+ view.setHighlightedPrefix("TEST");
+ view.setSnippet("This is a test");
+
+ CharSequence seq = view.getSnippetView().getText();
+
+ assertEquals("This is a test", seq.toString());
+ SpannedTestUtils.assertPrefixSpan(seq, 10, 13);
+ }
+
+ /** Creates the view to be tested. */
+ private ContactListItemView createView() {
+ ContactListItemView view = new ContactListItemView(getContext());
+ // Set the name view to use a Spannable to represent its content.
+ view.getNameTextView().setText("", TextView.BufferType.SPANNABLE);
+ return view;
+ }
+
+ /**
+ * Creates a cursor containing a pair of values.
+ *
+ * @param name the name to insert in the first column of the cursor
+ * @param alternateName the alternate name to insert in the second column of the cursor
+ * @return the newly created cursor
+ */
+ private Cursor createCursor(String name, String alternateName) {
+ MatrixCursor cursor = new MatrixCursor(new String[]{"Name", "AlternateName"});
+ cursor.moveToFirst();
+ cursor.addRow(new Object[]{name, alternateName});
+ return cursor;
+ }
+}
diff --git a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
new file mode 100644
index 000000000..982517b1b
--- /dev/null
+++ b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.SharedPreferences;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.mockito.Mockito.when;
+
+/**
+ * Test case for {@link com.android.contacts.model.AccountTypeManager}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeManagerTest \
+ com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountTypeManagerTest extends AndroidTestCase {
+
+ private static final Account[] ACCOUNTS = new Account[2];
+ static {
+ ACCOUNTS[0] = new Account("name1", GoogleAccountType.ACCOUNT_TYPE);
+ ACCOUNTS[1] = new Account("name2", GoogleAccountType.ACCOUNT_TYPE);
+ }
+
+ @Mock private AccountManager mAccountManager;
+ @Mock private SharedPreferences mPrefs;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
+ MockitoAnnotations.initMocks(this);
+ }
+
+ private static AccountWithDataSet createAccountWithDataSet(String name, AccountType type) {
+ return new AccountWithDataSet(name, type.accountType, type.dataSet);
+ }
+
+ /**
+ * Array of {@link AccountType} -> {@link Map}
+ */
+ private static Map<AccountTypeWithDataSet, AccountType> buildAccountTypes(AccountType... types) {
+ final HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
+ for (AccountType type : types) {
+ result.put(type.getAccountTypeAndDataSet(), type);
+ }
+ return result;
+ }
+
+ /**
+ * Array of {@link AccountWithDataSet} -> {@link Collection}
+ */
+ private static Collection<AccountWithDataSet> buildAccounts(AccountWithDataSet... accounts) {
+ final List<AccountWithDataSet> result = Lists.newArrayList();
+ for (AccountWithDataSet account : accounts) {
+ result.add(account);
+ }
+ return result;
+ }
+
+ public void testGetDefaultAccount_NoAccounts() {
+ assertNull(getDefaultGoogleAccountName());
+ }
+
+ public void testGetDefaultAccount_NoAccounts_DefaultPreferenceSet() {
+ when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+ getDefaultAccountPreference("name1", GoogleAccountType.ACCOUNT_TYPE));
+ assertNull(getDefaultGoogleAccountName());
+ }
+
+ public void testGetDefaultAccount_NoDefaultAccountPreferenceSet() {
+ when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+ assertEquals("name1", getDefaultGoogleAccountName());
+ }
+
+ public void testGetDefaultAccount_DefaultAccountPreferenceSet() {
+ when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+ when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+ getDefaultAccountPreference("name2", GoogleAccountType.ACCOUNT_TYPE));
+ assertEquals("name2", getDefaultGoogleAccountName());
+ }
+
+ public void testGetDefaultAccount_DefaultAccountPreferenceSet_NonGoogleAccountType() {
+ when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+ when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+ getDefaultAccountPreference("name3", "type3"));
+ assertEquals("name1", getDefaultGoogleAccountName());
+ }
+
+ public void testGetDefaultAccount_DefaultAccountPreferenceSet_UnknownName() {
+ when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+ when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+ getDefaultAccountPreference("name4",GoogleAccountType.ACCOUNT_TYPE));
+ assertEquals("name1", getDefaultGoogleAccountName());
+ }
+
+ private final String getDefaultGoogleAccountName() {
+ // We don't need the real preference key value since it's mocked
+ final Account account = AccountTypeManager.getDefaultGoogleAccount(
+ mAccountManager, mPrefs, "contact_editor_default_account_key");
+ return account == null ? null : account.name;
+ }
+
+ private static final String getDefaultAccountPreference(String name, String type) {
+ return new AccountWithDataSet(name, type, /* dataSet */ null).stringify();
+ }
+}
diff --git a/tests/src/com/android/contacts/model/AccountWithDataSetTest.java b/tests/src/com/android/contacts/model/AccountWithDataSetTest.java
new file mode 100644
index 000000000..7d6dfa397
--- /dev/null
+++ b/tests/src/com/android/contacts/model/AccountWithDataSetTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.model;
+
+import android.os.Bundle;
+import android.test.AndroidTestCase;
+import android.test.MoreAsserts;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * Test case for {@link AccountWithDataSet}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountWithDataSetTest \
+ com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountWithDataSetTest extends AndroidTestCase {
+ public void testStringifyAndUnstringify() {
+ AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+ AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+ AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+ // stringify() & unstringify
+ AccountWithDataSet a1r = AccountWithDataSet.unstringify(a1.stringify());
+ AccountWithDataSet a2r = AccountWithDataSet.unstringify(a2.stringify());
+ AccountWithDataSet a3r = AccountWithDataSet.unstringify(a3.stringify());
+
+ assertEquals(a1, a1r);
+ assertEquals(a2, a2r);
+ assertEquals(a3, a3r);
+
+ MoreAsserts.assertNotEqual(a1, a2r);
+ MoreAsserts.assertNotEqual(a1, a3r);
+
+ MoreAsserts.assertNotEqual(a2, a1r);
+ MoreAsserts.assertNotEqual(a2, a3r);
+
+ MoreAsserts.assertNotEqual(a3, a1r);
+ MoreAsserts.assertNotEqual(a3, a2r);
+ }
+
+ public void testStringifyAndUnstringifyLocalAccount() {
+ final String stringified = AccountWithDataSet.getNullAccount().stringify();
+
+ final AccountWithDataSet restored = AccountWithDataSet.unstringify(stringified);
+
+ assertEquals(AccountWithDataSet.getNullAccount(), restored);
+ }
+
+ public void testStringifyListAndUnstringify() {
+ AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+ AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+ AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+ // Empty list
+ assertEquals(0, stringifyListAndUnstringify().size());
+
+ // 1 element
+ final List<AccountWithDataSet> listA = stringifyListAndUnstringify(a1);
+ assertEquals(1, listA.size());
+ assertEquals(a1, listA.get(0));
+
+ // 2 elements
+ final List<AccountWithDataSet> listB = stringifyListAndUnstringify(a2, a1);
+ assertEquals(2, listB.size());
+ assertEquals(a2, listB.get(0));
+ assertEquals(a1, listB.get(1));
+
+ // 3 elements
+ final List<AccountWithDataSet> listC = stringifyListAndUnstringify(a3, a2, a1);
+ assertEquals(3, listC.size());
+ assertEquals(a3, listC.get(0));
+ assertEquals(a2, listC.get(1));
+ assertEquals(a1, listC.get(2));
+ }
+
+ private static List<AccountWithDataSet> stringifyListAndUnstringify(
+ AccountWithDataSet... accounts) {
+
+ List<AccountWithDataSet> list = Lists.newArrayList(accounts);
+ return AccountWithDataSet.unstringifyList(AccountWithDataSet.stringifyList(list));
+ }
+
+ public void testParcelable() {
+ AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+ AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+ AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+ // Parcel them & unpercel.
+ final Bundle b = new Bundle();
+ b.putParcelable("a1", a1);
+ b.putParcelable("a2", a2);
+ b.putParcelable("a3", a3);
+
+ AccountWithDataSet a1r = b.getParcelable("a1");
+ AccountWithDataSet a2r = b.getParcelable("a2");
+ AccountWithDataSet a3r = b.getParcelable("a3");
+
+ assertEquals(a1, a1r);
+ assertEquals(a2, a2r);
+ assertEquals(a3, a3r);
+
+ MoreAsserts.assertNotEqual(a1, a2r);
+ MoreAsserts.assertNotEqual(a1, a3r);
+
+ MoreAsserts.assertNotEqual(a2, a1r);
+ MoreAsserts.assertNotEqual(a2, a3r);
+
+ MoreAsserts.assertNotEqual(a3, a1r);
+ MoreAsserts.assertNotEqual(a3, a2r);
+ }
+}
diff --git a/tests/src/com/android/contacts/model/ContactLoaderTest.java b/tests/src/com/android/contacts/model/ContactLoaderTest.java
new file mode 100644
index 000000000..91873e9df
--- /dev/null
+++ b/tests/src/com/android/contacts/model/ContactLoaderTest.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2010 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.model;
+
+import android.content.ContentUris;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.DisplayNameSources;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.StatusUpdates;
+import android.test.LoaderTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.testing.InjectedServices;
+import com.android.contacts.util.Constants;
+
+import com.google.common.collect.Lists;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+/**
+ * Runs ContactLoader tests for the the contact-detail and editor view.
+ */
+@LargeTest
+public class ContactLoaderTest extends LoaderTestCase {
+ private static final long CONTACT_ID = 1;
+ private static final long RAW_CONTACT_ID = 11;
+ private static final long DATA_ID = 21;
+ private static final String LOOKUP_KEY = "aa%12%@!";
+
+ private ContactsMockContext mMockContext;
+ private MockContentProvider mContactsProvider;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mMockContext = new ContactsMockContext(getContext());
+ mContactsProvider = mMockContext.getContactsProvider();
+
+ InjectedServices services = new InjectedServices();
+ AccountType accountType = new BaseAccountType() {
+ @Override
+ public boolean areContactsWritable() {
+ return false;
+ }
+ };
+ accountType.accountType = "mockAccountType";
+
+ AccountWithDataSet account =
+ new AccountWithDataSet("mockAccountName", "mockAccountType", null);
+
+ AccountTypeManager.setInstanceForTest(
+ new MockAccountTypeManager(
+ new AccountType[]{accountType}, new AccountWithDataSet[]{account}));
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mMockContext = null;
+ mContactsProvider = null;
+ super.tearDown();
+ }
+
+ private Contact assertLoadContact(Uri uri) {
+ final ContactLoader loader = new ContactLoader(mMockContext, uri, true);
+ return getLoaderResultSynchronously(loader);
+ }
+
+ public void testNullUri() {
+ Contact result = assertLoadContact(null);
+ assertTrue(result.isError());
+ }
+
+ public void testEmptyUri() {
+ Contact result = assertLoadContact(Uri.EMPTY);
+ assertTrue(result.isError());
+ }
+
+ public void testInvalidUri() {
+ Contact result = assertLoadContact(Uri.parse("content://wtf"));
+ assertTrue(result.isError());
+ }
+
+ public void testLoadContactWithContactIdUri() {
+ // Use content Uris that only contain the ID
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri entityUri = Uri.withAppendedPath(baseUri, Contacts.Entity.CONTENT_DIRECTORY);
+ final Uri lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ CONTACT_ID);
+
+ ContactQueries queries = new ContactQueries();
+ mContactsProvider.expectTypeQuery(baseUri, Contacts.CONTENT_ITEM_TYPE);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(baseUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactWithOldStyleUri() {
+ // Use content Uris that only contain the ID but use the format used in Donut
+ final Uri legacyUri = ContentUris.withAppendedId(
+ Uri.parse("content://contacts"), RAW_CONTACT_ID);
+ final Uri rawContactUri = ContentUris.withAppendedId(
+ RawContacts.CONTENT_URI, RAW_CONTACT_ID);
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ CONTACT_ID);
+ final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+ ContactQueries queries = new ContactQueries();
+ queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(legacyUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+ if (CompatUtils.isMarshmallowCompatible()) {
+ assertEquals(
+ 1, contact.getRawContacts().get(0).getDataItems().get(0).getCarrierPresence());
+ }
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactWithRawContactIdUri() {
+ // Use content Uris that only contain the ID but use the format used in Donut
+ final Uri rawContactUri = ContentUris.withAppendedId(
+ RawContacts.CONTENT_URI, RAW_CONTACT_ID);
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ CONTACT_ID);
+ final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+ ContactQueries queries = new ContactQueries();
+ mContactsProvider.expectTypeQuery(rawContactUri, RawContacts.CONTENT_ITEM_TYPE);
+ queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(rawContactUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactWithContactLookupUri() {
+ // Use lookup-style Uris that do not contain the Contact-ID
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri lookupNoIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY);
+ final Uri lookupUri = ContentUris.withAppendedId(lookupNoIdUri, CONTACT_ID);
+ final Uri entityUri = Uri.withAppendedPath(
+ lookupNoIdUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+ ContactQueries queries = new ContactQueries();
+ mContactsProvider.expectTypeQuery(lookupNoIdUri, Contacts.CONTENT_ITEM_TYPE);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(lookupNoIdUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactWithContactLookupAndIdUri() {
+ // Use lookup-style Uris that also contain the Contact-ID
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ CONTACT_ID);
+ final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+ ContactQueries queries = new ContactQueries();
+ mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(lookupUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactWithContactLookupWithIncorrectIdUri() {
+ // Use lookup-style Uris that contain incorrect Contact-ID
+ // (we want to ensure that still the correct contact is chosen)
+ final long wrongContactId = 2;
+ final long wrongRawContactId = 12;
+
+ final String wrongLookupKey = "ab%12%@!";
+ final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+ final Uri wrongBaseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, wrongContactId);
+ final Uri lookupUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ CONTACT_ID);
+ final Uri lookupWithWrongIdUri = ContentUris.withAppendedId(
+ Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+ wrongContactId);
+ final Uri entityUri = Uri.withAppendedPath(lookupWithWrongIdUri,
+ Contacts.Entity.CONTENT_DIRECTORY);
+
+ ContactQueries queries = new ContactQueries();
+ mContactsProvider.expectTypeQuery(lookupWithWrongIdUri, Contacts.CONTENT_ITEM_TYPE);
+ queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+ Contact contact = assertLoadContact(lookupWithWrongIdUri);
+
+ assertEquals(CONTACT_ID, contact.getId());
+ assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals(LOOKUP_KEY, contact.getLookupKey());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ assertEquals(1, contact.getStatuses().size());
+
+ mContactsProvider.verify();
+ }
+
+ public void testLoadContactReturnDirectoryContactWithoutDisplayName() throws JSONException {
+ // Use lookup-style Uri that contains encoded json object which encapsulates the
+ // directory contact. The test json object is:
+ // {
+ // display_name_source": 40,
+ // "vnd.android.cursor.item\/contact":{"email":{"data1":"test@google.com" }}
+ // }
+ JSONObject itemJson = new JSONObject();
+ itemJson.put("email", new JSONObject().put("data1", "test@google.com"));
+ JSONObject json = new JSONObject();
+ json.put(Contacts.NAME_RAW_CONTACT_ID, CONTACT_ID);
+ json.put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.STRUCTURED_NAME);
+ json.put(Contacts.CONTENT_ITEM_TYPE, itemJson);
+
+ final Uri lookupUri = Contacts.CONTENT_LOOKUP_URI.buildUpon()
+ .encodedFragment(json.toString())
+ .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, "1")
+ .appendPath(Constants.LOOKUP_URI_ENCODED).build();
+
+ mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
+ Contact contact = assertLoadContact(lookupUri);
+
+ assertEquals(-1, contact.getId());
+ assertEquals(-1, contact.getNameRawContactId());
+ assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+ assertEquals("", contact.getDisplayName());
+ assertEquals(lookupUri, contact.getLookupUri());
+ assertEquals(1, contact.getRawContacts().size());
+ mContactsProvider.verify();
+ }
+
+ class ContactQueries {
+ public void fetchAllData(
+ Uri baseUri, long contactId, long rawContactId, long dataId, String encodedLookup) {
+ final String[] COLUMNS_INTERNAL = new String[] {
+ Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE,
+ Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME,
+ Contacts.DISPLAY_NAME_ALTERNATIVE, Contacts.PHONETIC_NAME,
+ Contacts.PHOTO_ID, Contacts.STARRED, Contacts.CONTACT_PRESENCE,
+ Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_TIMESTAMP,
+ Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_LABEL,
+
+ Contacts.Entity.CONTACT_ID,
+ Contacts.Entity.RAW_CONTACT_ID,
+
+ RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
+ RawContacts.DATA_SET,
+ RawContacts.DIRTY, RawContacts.VERSION, RawContacts.SOURCE_ID,
+ RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4,
+ RawContacts.DELETED,
+
+ Contacts.Entity.DATA_ID,
+
+ Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5,
+ Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10,
+ Data.DATA11, Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15,
+ Data.SYNC1, Data.SYNC2, Data.SYNC3, Data.SYNC4,
+ Data.DATA_VERSION, Data.IS_PRIMARY,
+ Data.IS_SUPER_PRIMARY, Data.MIMETYPE,
+
+ GroupMembership.GROUP_SOURCE_ID,
+
+ Data.PRESENCE, Data.CHAT_CAPABILITY,
+ Data.STATUS, Data.STATUS_RES_PACKAGE, Data.STATUS_ICON,
+ Data.STATUS_LABEL, Data.STATUS_TIMESTAMP,
+
+ Contacts.PHOTO_URI,
+
+ Contacts.SEND_TO_VOICEMAIL,
+ Contacts.CUSTOM_RINGTONE,
+ Contacts.IS_USER_PROFILE,
+
+ Data.TIMES_USED,
+ Data.LAST_TIME_USED
+ };
+
+ List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ projectionList.add(Data.CARRIER_PRESENCE);
+ }
+ final String[] COLUMNS = projectionList.toArray(new String[projectionList.size()]);
+
+ final Object[] ROWS_INTERNAL = new Object[] {
+ rawContactId, 40,
+ "aa%12%@!", "John Doe", "Doe, John", "jdo",
+ 0, 0, StatusUpdates.AVAILABLE,
+ "Having lunch", 0,
+ "mockPkg1", 10,
+
+ contactId,
+ rawContactId,
+
+ "mockAccountName", "mockAccountType", null,
+ 0, 1, 0,
+ "sync1", "sync2", "sync3", "sync4",
+ 0,
+
+ dataId,
+
+ "dat1", "dat2", "dat3", "dat4", "dat5",
+ "dat6", "dat7", "dat8", "dat9", "dat10",
+ "dat11", "dat12", "dat13", "dat14", "dat15",
+ "syn1", "syn2", "syn3", "syn4",
+
+ 0, 0,
+ 0, StructuredName.CONTENT_ITEM_TYPE,
+
+ "groupId",
+
+ StatusUpdates.INVISIBLE, null,
+ "Having dinner", "mockPkg3", 0,
+ 20, 0,
+
+ "content:some.photo.uri",
+
+ 0,
+ null,
+ 0,
+
+ 0,
+ 0
+ };
+
+ List<Object> rowsList = Lists.newArrayList(ROWS_INTERNAL);
+ if (CompatUtils.isMarshmallowCompatible()) {
+ rowsList.add(Data.CARRIER_PRESENCE_VT_CAPABLE);
+ }
+ final Object[] ROWS = rowsList.toArray(new Object[rowsList.size()]);
+
+ mContactsProvider.expectQuery(baseUri)
+ .withProjection(COLUMNS)
+ .withSortOrder(Contacts.Entity.RAW_CONTACT_ID)
+ .returnRow(ROWS);
+ }
+
+ void fetchLookupAndId(final Uri sourceUri, final long expectedContactId,
+ final String expectedEncodedLookup) {
+ mContactsProvider.expectQuery(sourceUri)
+ .withProjection(Contacts.LOOKUP_KEY, Contacts._ID)
+ .returnRow(expectedEncodedLookup, expectedContactId);
+ }
+
+ void fetchContactIdAndLookupFromRawContactUri(final Uri rawContactUri,
+ final long expectedContactId, final String expectedEncodedLookup) {
+ // TODO: use a lighter query by joining rawcontacts with contacts in provider
+ // (See ContactContracts.java)
+ final Uri dataUri = Uri.withAppendedPath(rawContactUri,
+ RawContacts.Data.CONTENT_DIRECTORY);
+ mContactsProvider.expectQuery(dataUri)
+ .withProjection(RawContacts.CONTACT_ID, Contacts.LOOKUP_KEY)
+ .returnRow(expectedContactId, expectedEncodedLookup);
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java b/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java
new file mode 100644
index 000000000..12365a2c2
--- /dev/null
+++ b/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java
@@ -0,0 +1,218 @@
+/*
+ * 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.model;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.CancellationSignal;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.support.annotation.Nullable;
+import android.test.AndroidTestCase;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+@SmallTest
+public class Cp2DeviceLocalAccountLocatorTests extends AndroidTestCase {
+
+ // Basic smoke test that just checks that it doesn't throw when loading from CP2. We don't
+ // care what CP2 actually contains for this.
+ public void testShouldNotCrash() {
+ final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
+ getContext().getContentResolver(),
+ new DeviceLocalAccountTypeFactory.Default(getContext()),
+ Collections.<String>emptySet());
+ sut.getDeviceLocalAccounts();
+ // We didn't throw so it passed
+ }
+
+ public void test_getDeviceLocalAccounts_returnsEmptyListWhenQueryReturnsNull() {
+ final DeviceLocalAccountLocator sut = createWithQueryResult(null);
+ assertTrue(sut.getDeviceLocalAccounts().isEmpty());
+ }
+
+ public void test_getDeviceLocalAccounts_returnsEmptyListWhenNoRawContactsHaveDeviceType() {
+ final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
+ "user", "com.example",
+ "user", "com.example",
+ "user", "com.example"));
+ assertTrue(sut.getDeviceLocalAccounts().isEmpty());
+ }
+
+ public void test_getDeviceLocalAccounts_returnsListWithItemForNullAccount() {
+ final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
+ "user", "com.example",
+ null, null,
+ "user", "com.example",
+ null, null));
+
+ assertEquals(1, sut.getDeviceLocalAccounts().size());
+ }
+
+ public void test_getDeviceLocalAccounts_containsItemForEachDeviceAccount() {
+ final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+ .withDeviceTypes(null, "vnd.sec.contact.phone")
+ .withSimTypes("vnd.sec.contact.sim");
+ final DeviceLocalAccountLocator sut = createLocator(queryResult(
+ "user", "com.example",
+ "user", "com.example",
+ "phone_account", "vnd.sec.contact.phone",
+ null, null,
+ "phone_account", "vnd.sec.contact.phone",
+ "user", "com.example",
+ null, null,
+ "sim_account", "vnd.sec.contact.sim",
+ "sim_account_2", "vnd.sec.contact.sim"
+ ), stubFactory);
+
+
+ assertEquals(4, sut.getDeviceLocalAccounts().size());
+ }
+
+ public void test_getDeviceLocalAccounts_doesNotContainItemsForKnownAccountTypes() {
+ final Cp2DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
+ getContext().getContentResolver(), new FakeDeviceAccountTypeFactory(),
+ new HashSet<>(Arrays.asList("com.example", "com.example.1")));
+
+ assertTrue("Selection should filter known accounts",
+ sut.getSelection().contains("NOT IN (?,?)"));
+
+ final List<String> args = Arrays.asList(sut.getSelectionArgs());
+ assertEquals(2, args.size());
+ assertTrue("Selection args is missing an expected value", args.contains("com.example"));
+ assertTrue("Selection args is missing an expected value", args.contains("com.example.1"));
+ }
+
+ public void test_getDeviceLocalAccounts_includesAccountsFromSettings() {
+ final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+ .withDeviceTypes(null, "vnd.sec.contact.phone")
+ .withSimTypes("vnd.sec.contact.sim");
+ final DeviceLocalAccountLocator sut = createLocator(new FakeContactsProvider()
+ .withQueryResult(ContactsContract.Settings.CONTENT_URI, queryResult(
+ "phone_account", "vnd.sec.contact.phone",
+ "sim_account", "vnd.sec.contact.sim"
+ )), stubFactory);
+
+ assertEquals(2, sut.getDeviceLocalAccounts().size());
+ }
+
+ public void test_getDeviceLocalAccounts_includesAccountsFromGroups() {
+ final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+ .withDeviceTypes(null, "vnd.sec.contact.phone")
+ .withSimTypes("vnd.sec.contact.sim");
+ final DeviceLocalAccountLocator sut = createLocator(new FakeContactsProvider()
+ .withQueryResult(ContactsContract.Groups.CONTENT_URI, queryResult(
+ "phone_account", "vnd.sec.contact.phone",
+ "sim_account", "vnd.sec.contact.sim"
+ )), stubFactory);
+
+ assertEquals(2, sut.getDeviceLocalAccounts().size());
+ }
+
+ private DeviceLocalAccountLocator createWithQueryResult(
+ Cursor cursor) {
+ return createLocator(cursor, new DeviceLocalAccountTypeFactory.Default(mContext));
+ }
+
+ private DeviceLocalAccountLocator createLocator(ContentProvider contactsProvider,
+ DeviceLocalAccountTypeFactory localAccountTypeFactory) {
+ final DeviceLocalAccountLocator locator = new Cp2DeviceLocalAccountLocator(
+ createContentResolverWithProvider(contactsProvider),
+ localAccountTypeFactory, Collections.<String>emptySet());
+ return locator;
+ }
+
+ private DeviceLocalAccountLocator createLocator(Cursor cursor,
+ DeviceLocalAccountTypeFactory localAccountTypeFactory) {
+ final DeviceLocalAccountLocator locator = new Cp2DeviceLocalAccountLocator(
+ createStubResolverWithContentQueryResult(cursor),
+ localAccountTypeFactory,
+ Collections.<String>emptySet());
+ return locator;
+ }
+
+ private ContentResolver createContentResolverWithProvider(ContentProvider contactsProvider) {
+ final MockContentResolver resolver = new MockContentResolver();
+ resolver.addProvider(ContactsContract.AUTHORITY, contactsProvider);
+ return resolver;
+ }
+
+ private ContentResolver createStubResolverWithContentQueryResult(Cursor cursor) {
+ final MockContentResolver resolver = new MockContentResolver();
+ resolver.addProvider(ContactsContract.AUTHORITY, new FakeContactsProvider()
+ .withDefaultQueryResult(cursor));
+ return resolver;
+ }
+
+ private Cursor queryResult(String... nameTypePairs) {
+ final MatrixCursor cursor = new MatrixCursor(new String[]
+ { RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.DATA_SET });
+ for (int i = 0; i < nameTypePairs.length; i+=2) {
+ cursor.newRow().add(nameTypePairs[i]).add(nameTypePairs[i+1])
+ .add(null);
+ }
+ return cursor;
+ }
+
+ private static class FakeContactsProvider extends MockContentProvider {
+ public Cursor mNextQueryResult;
+ public Map<Uri, Cursor> mNextResultMapping = new HashMap<>();
+
+ public FakeContactsProvider() {}
+
+ public FakeContactsProvider withDefaultQueryResult(Cursor cursor) {
+ mNextQueryResult = cursor;
+ return this;
+ }
+
+ public FakeContactsProvider withQueryResult(Uri uri, Cursor cursor) {
+ mNextResultMapping.put(uri, cursor);
+ return this;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+ return query(uri, projection, selection, selectionArgs, sortOrder, null);
+ }
+
+ @Nullable
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder, CancellationSignal cancellationSignal) {
+ final Cursor result = mNextResultMapping.get(uri);
+ if (result == null) {
+ return mNextQueryResult;
+ } else {
+ return result;
+ }
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactDeltaListTests.java b/tests/src/com/android/contacts/model/RawContactDeltaListTests.java
new file mode 100644
index 000000000..03e1d4f8f
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactDeltaListTests.java
@@ -0,0 +1,599 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+
+import com.google.common.collect.Lists;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * Tests for {@link RawContactDeltaList} which focus on "diff" operations that should
+ * create {@link AggregationExceptions} in certain cases.
+ */
+@LargeTest
+public class RawContactDeltaListTests extends AndroidTestCase {
+ // From android.content.ContentProviderOperation
+ public static final int TYPE_INSERT = 1;
+ public static final int TYPE_UPDATE = 2;
+ public static final int TYPE_DELETE = 3;
+ public static final int TYPE_ASSERT = 4;
+
+ private static final long CONTACT_FIRST = 1;
+ private static final long CONTACT_SECOND = 2;
+
+ public static final long CONTACT_BOB = 10;
+ public static final long CONTACT_MARY = 11;
+
+ public static final long PHONE_RED = 20;
+ public static final long PHONE_GREEN = 21;
+ public static final long PHONE_BLUE = 22;
+
+ public static final long EMAIL_YELLOW = 25;
+
+ public static final long VER_FIRST = 100;
+ public static final long VER_SECOND = 200;
+
+ public static final String TEST_PHONE = "555-1212";
+ public static final String TEST_ACCOUNT = "org.example.test";
+
+ public RawContactDeltaListTests() {
+ super();
+ }
+
+ @Override
+ public void setUp() {
+ mContext = getContext();
+ }
+
+ /**
+ * Build a {@link AccountType} that has various odd constraints for
+ * testing purposes.
+ */
+ protected AccountType getAccountType() {
+ return new RawContactModifierTests.MockContactsSource();
+ }
+
+ static ContentValues getValues(ContentProviderOperation operation)
+ throws NoSuchFieldException, IllegalAccessException {
+ final Field field = ContentProviderOperation.class.getDeclaredField("mValues");
+ field.setAccessible(true);
+ return (ContentValues) field.get(operation);
+ }
+
+ static RawContactDelta getUpdate(Context context, long rawContactId) {
+ final RawContact before = RawContactDeltaTests.getRawContact(context, rawContactId,
+ RawContactDeltaTests.TEST_PHONE_ID);
+ return RawContactDelta.fromBefore(before);
+ }
+
+ static RawContactDelta getInsert() {
+ final ContentValues after = new ContentValues();
+ after.put(RawContacts.ACCOUNT_NAME, RawContactDeltaTests.TEST_ACCOUNT_NAME);
+ after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+ final ValuesDelta values = ValuesDelta.fromAfter(after);
+ return new RawContactDelta(values);
+ }
+
+ static RawContactDeltaList buildSet(RawContactDelta... deltas) {
+ final RawContactDeltaList set = new RawContactDeltaList();
+ Collections.addAll(set, deltas);
+ return set;
+ }
+
+ static RawContactDelta buildBeforeEntity(Context context, long rawContactId, long version,
+ ContentValues... entries) {
+ // Build an existing contact read from database
+ final ContentValues contact = new ContentValues();
+ contact.put(RawContacts.VERSION, version);
+ contact.put(RawContacts._ID, rawContactId);
+ final RawContact before = new RawContact(contact);
+ for (ContentValues entry : entries) {
+ before.addDataItemValues(entry);
+ }
+ return RawContactDelta.fromBefore(before);
+ }
+
+ static RawContactDelta buildAfterEntity(ContentValues... entries) {
+ // Build an existing contact read from database
+ final ContentValues contact = new ContentValues();
+ contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT);
+ final RawContactDelta after = new RawContactDelta(ValuesDelta.fromAfter(contact));
+ for (ContentValues entry : entries) {
+ after.addEntry(ValuesDelta.fromAfter(entry));
+ }
+ return after;
+ }
+
+ static ContentValues buildPhone(long phoneId) {
+ return buildPhone(phoneId, Long.toString(phoneId));
+ }
+
+ static ContentValues buildPhone(long phoneId, String value) {
+ final ContentValues values = new ContentValues();
+ values.put(Data._ID, phoneId);
+ values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ values.put(Phone.NUMBER, value);
+ values.put(Phone.TYPE, Phone.TYPE_HOME);
+ return values;
+ }
+
+ static ContentValues buildEmail(long emailId) {
+ final ContentValues values = new ContentValues();
+ values.put(Data._ID, emailId);
+ values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ values.put(Email.DATA, Long.toString(emailId));
+ values.put(Email.TYPE, Email.TYPE_HOME);
+ return values;
+ }
+
+ static void insertPhone(RawContactDeltaList set, long rawContactId, ContentValues values) {
+ final RawContactDelta match = set.getByRawContactId(rawContactId);
+ match.addEntry(ValuesDelta.fromAfter(values));
+ }
+
+ static ValuesDelta getPhone(RawContactDeltaList set, long rawContactId, long dataId) {
+ final RawContactDelta match = set.getByRawContactId(rawContactId);
+ return match.getEntry(dataId);
+ }
+
+ static void assertDiffPattern(RawContactDelta delta, CPOWrapper... pattern) {
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ delta.buildAssertWrapper(diff);
+ delta.buildDiffWrapper(diff);
+ assertDiffPattern(diff, pattern);
+ }
+
+ static void assertDiffPattern(RawContactDeltaList set, CPOWrapper... pattern) {
+ assertDiffPattern(set.buildDiffWrapper(), pattern);
+ }
+
+ static void assertDiffPattern(ArrayList<CPOWrapper> diff, CPOWrapper... pattern) {
+ assertEquals("Unexpected operations", pattern.length, diff.size());
+ for (int i = 0; i < pattern.length; i++) {
+ final CPOWrapper expected = pattern[i];
+ final CPOWrapper found = diff.get(i);
+
+ assertEquals("Unexpected uri",
+ expected.getOperation().getUri(), found.getOperation().getUri());
+
+ final String expectedType = getTypeString(expected);
+ final String foundType = getTypeString(found);
+ assertEquals("Unexpected type", expectedType, foundType);
+
+ if (CompatUtils.isDeleteCompat(expected)) continue;
+
+ try {
+ final ContentValues expectedValues = getValues(expected.getOperation());
+ final ContentValues foundValues = getValues(found.getOperation());
+
+ expectedValues.remove(BaseColumns._ID);
+ foundValues.remove(BaseColumns._ID);
+
+ assertEquals("Unexpected values", expectedValues, foundValues);
+ } catch (NoSuchFieldException e) {
+ fail(e.toString());
+ } catch (IllegalAccessException e) {
+ fail(e.toString());
+ }
+ }
+ }
+
+ static String getTypeString(CPOWrapper cpoWrapper) {
+ if (CompatUtils.isAssertQueryCompat(cpoWrapper)) {
+ return "TYPE_ASSERT";
+ } else if (CompatUtils.isInsertCompat(cpoWrapper)) {
+ return "TYPE_INSERT";
+ } else if (CompatUtils.isUpdateCompat(cpoWrapper)) {
+ return "TYPE_UPDATE";
+ } else if (CompatUtils.isDeleteCompat(cpoWrapper)) {
+ return "TYPE_DELETE";
+ }
+ return "TYPE_UNKNOWN";
+ }
+
+ static CPOWrapper buildAssertVersion(long version) {
+ final ContentValues values = new ContentValues();
+ values.put(RawContacts.VERSION, version);
+ return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_ASSERT, values);
+ }
+
+ static CPOWrapper buildAggregationModeUpdate(int mode) {
+ final ContentValues values = new ContentValues();
+ values.put(RawContacts.AGGREGATION_MODE, mode);
+ return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_UPDATE, values);
+ }
+
+ static CPOWrapper buildUpdateAggregationSuspended() {
+ return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_SUSPENDED);
+ }
+
+ static CPOWrapper buildUpdateAggregationDefault() {
+ return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT);
+ }
+
+ static CPOWrapper buildUpdateAggregationKeepTogether(long rawContactId) {
+ final ContentValues values = new ContentValues();
+ values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
+ values.put(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
+ return buildCPOWrapper(AggregationExceptions.CONTENT_URI, TYPE_UPDATE, values);
+ }
+
+ static ContentValues buildDataInsert(ValuesDelta values, long rawContactId) {
+ final ContentValues insertValues = values.getCompleteValues();
+ insertValues.put(Data.RAW_CONTACT_ID, rawContactId);
+ return insertValues;
+ }
+
+ static CPOWrapper buildDelete(Uri uri) {
+ return buildCPOWrapper(uri, TYPE_DELETE, (ContentValues) null);
+ }
+
+ static ContentProviderOperation buildOper(Uri uri, int type, ValuesDelta values) {
+ return buildOper(uri, type, values.getCompleteValues());
+ }
+
+ static ContentProviderOperation buildOper(Uri uri, int type, ContentValues values) {
+ switch (type) {
+ case TYPE_ASSERT:
+ return ContentProviderOperation.newAssertQuery(uri).withValues(values).build();
+ case TYPE_INSERT:
+ return ContentProviderOperation.newInsert(uri).withValues(values).build();
+ case TYPE_UPDATE:
+ return ContentProviderOperation.newUpdate(uri).withValues(values).build();
+ case TYPE_DELETE:
+ return ContentProviderOperation.newDelete(uri).build();
+ }
+ return null;
+ }
+
+ static CPOWrapper buildCPOWrapper(Uri uri, int type, ContentValues values) {
+ if (type == TYPE_ASSERT || type == TYPE_INSERT || type == TYPE_UPDATE
+ || type == TYPE_DELETE) {
+ return new CPOWrapper(buildOper(uri, type, values), type);
+ }
+ return null;
+ }
+
+ static Long getVersion(RawContactDeltaList set, Long rawContactId) {
+ return set.getByRawContactId(rawContactId).getValues().getAsLong(RawContacts.VERSION);
+ }
+
+ /**
+ * Count number of {@link AggregationExceptions} updates contained in the
+ * given list of {@link CPOWrapper}.
+ */
+ static int countExceptionUpdates(ArrayList<CPOWrapper> diff) {
+ int updateCount = 0;
+ for (CPOWrapper cpoWrapper : diff) {
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ if (AggregationExceptions.CONTENT_URI.equals(oper.getUri())
+ && CompatUtils.isUpdateCompat(cpoWrapper)) {
+ updateCount++;
+ }
+ }
+ return updateCount;
+ }
+
+ public void testInsert() {
+ final RawContactDelta insert = getInsert();
+ final RawContactDeltaList set = buildSet(insert);
+
+ // Inserting single shouldn't create rules
+ final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+ final int exceptionCount = countExceptionUpdates(diff);
+ assertEquals("Unexpected exception updates", 0, exceptionCount);
+ }
+
+ public void testUpdateUpdate() {
+ final RawContactDelta updateFirst = getUpdate(mContext, CONTACT_FIRST);
+ final RawContactDelta updateSecond = getUpdate(mContext, CONTACT_SECOND);
+ final RawContactDeltaList set = buildSet(updateFirst, updateSecond);
+
+ // Updating two existing shouldn't create rules
+ final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+ final int exceptionCount = countExceptionUpdates(diff);
+ assertEquals("Unexpected exception updates", 0, exceptionCount);
+ }
+
+ public void testUpdateInsert() {
+ final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
+ final RawContactDelta insert = getInsert();
+ final RawContactDeltaList set = buildSet(update, insert);
+
+ // New insert should only create one rule
+ final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+ final int exceptionCount = countExceptionUpdates(diff);
+ assertEquals("Unexpected exception updates", 1, exceptionCount);
+ }
+
+ public void testInsertUpdateInsert() {
+ final RawContactDelta insertFirst = getInsert();
+ final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
+ final RawContactDelta insertSecond = getInsert();
+ final RawContactDeltaList set = buildSet(insertFirst, update, insertSecond);
+
+ // Two inserts should create two rules to bind against single existing
+ final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+ final int exceptionCount = countExceptionUpdates(diff);
+ assertEquals("Unexpected exception updates", 2, exceptionCount);
+ }
+
+ public void testInsertInsertInsert() {
+ final RawContactDelta insertFirst = getInsert();
+ final RawContactDelta insertSecond = getInsert();
+ final RawContactDelta insertThird = getInsert();
+ final RawContactDeltaList set = buildSet(insertFirst, insertSecond, insertThird);
+
+ // Three new inserts should create only two binding rules
+ final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+ final int exceptionCount = countExceptionUpdates(diff);
+ assertEquals("Unexpected exception updates", 2, exceptionCount);
+ }
+
+ public void testMergeDataRemoteInsert() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+ // Merge in second version, verify they match
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertEquals("Unexpected change when merging", second, merged);
+ }
+
+ public void testMergeDataLocalUpdateRemoteInsert() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+ // Change the local number to trigger update
+ final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+ phone.put(Phone.NUMBER, TEST_PHONE);
+
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+ buildUpdateAggregationDefault());
+
+ // Merge in the second version, verify diff matches
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+ buildUpdateAggregationDefault());
+ }
+
+ public void testMergeDataLocalUpdateRemoteDelete() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_GREEN)));
+
+ // Change the local number to trigger update
+ final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+ phone.put(Phone.NUMBER, TEST_PHONE);
+
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+ buildUpdateAggregationDefault());
+
+ // Merge in the second version, verify that our update changed to
+ // insert, since RED was deleted on remote side
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(phone, CONTACT_BOB)),
+ buildUpdateAggregationDefault());
+ }
+
+ public void testMergeDataLocalDeleteRemoteUpdate() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED, TEST_PHONE)));
+
+ // Delete phone locally
+ final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+ phone.markDeleted();
+
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildDelete(Data.CONTENT_URI),
+ buildUpdateAggregationDefault());
+
+ // Merge in the second version, verify that our delete remains
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildUpdateAggregationSuspended(),
+ buildDelete(Data.CONTENT_URI),
+ buildUpdateAggregationDefault());
+ }
+
+ public void testMergeDataLocalInsertRemoteInsert() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+ // Insert new phone locally
+ final ValuesDelta bluePhone = ValuesDelta.fromAfter(buildPhone(PHONE_BLUE));
+ first.getByRawContactId(CONTACT_BOB).addEntry(bluePhone);
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
+ buildUpdateAggregationDefault());
+
+ // Merge in the second version, verify that our insert remains
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
+ buildUpdateAggregationDefault());
+ }
+
+ public void testMergeRawContactLocalInsertRemoteInsert() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED)), buildBeforeEntity(mContext, CONTACT_MARY,
+ VER_SECOND, buildPhone(PHONE_RED)));
+
+ // Add new contact locally, should remain insert
+ final ContentValues joePhoneInsert = buildPhone(PHONE_BLUE);
+ final RawContactDelta joeContact = buildAfterEntity(joePhoneInsert);
+ final ContentValues joeContactInsert = joeContact.getValues().getCompleteValues();
+ joeContactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+ first.add(joeContact);
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+ buildUpdateAggregationKeepTogether(CONTACT_BOB));
+
+ // Merge in the second version, verify that our insert remains
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildAssertVersion(VER_SECOND),
+ buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+ buildUpdateAggregationKeepTogether(CONTACT_BOB));
+ }
+
+ public void testMergeRawContactLocalDeleteRemoteDelete() {
+ final RawContactDeltaList first = buildSet(
+ buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
+ buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(
+ buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
+
+ // Remove contact locally
+ first.getByRawContactId(CONTACT_MARY).markDeleted();
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildAssertVersion(VER_FIRST),
+ buildDelete(RawContacts.CONTENT_URI));
+
+ // Merge in the second version, verify that our delete isn't needed
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged);
+ }
+
+ public void testMergeRawContactLocalUpdateRemoteDelete() {
+ final RawContactDeltaList first = buildSet(
+ buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
+ buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(
+ buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
+
+ // Perform local update
+ final ValuesDelta phone = getPhone(first, CONTACT_MARY, PHONE_RED);
+ phone.put(Phone.NUMBER, TEST_PHONE);
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+ buildUpdateAggregationDefault());
+
+ final ContentValues phoneInsert = phone.getCompleteValues();
+ final ContentValues contactInsert = first.getByRawContactId(CONTACT_MARY).getValues()
+ .getCompleteValues();
+ contactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+
+ // Merge and verify that update turned into insert
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged,
+ buildAssertVersion(VER_SECOND),
+ buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, contactInsert),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, phoneInsert),
+ buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+ buildUpdateAggregationKeepTogether(CONTACT_BOB));
+ }
+
+ public void testMergeUsesNewVersion() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildPhone(PHONE_RED)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildPhone(PHONE_RED)));
+
+ assertEquals((Long)VER_FIRST, getVersion(first, CONTACT_BOB));
+ assertEquals((Long)VER_SECOND, getVersion(second, CONTACT_BOB));
+
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertEquals((Long)VER_SECOND, getVersion(merged, CONTACT_BOB));
+ }
+
+ public void testMergeAfterEnsureAndTrim() {
+ final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_FIRST, buildEmail(EMAIL_YELLOW)));
+ final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+ VER_SECOND, buildEmail(EMAIL_YELLOW)));
+
+ // Ensure we have at least one phone
+ final AccountType source = getAccountType();
+ final RawContactDelta bobContact = first.getByRawContactId(CONTACT_BOB);
+ RawContactModifier.ensureKindExists(bobContact, source, Phone.CONTENT_ITEM_TYPE);
+ final ValuesDelta bobPhone = bobContact.getSuperPrimaryEntry(Phone.CONTENT_ITEM_TYPE, true);
+
+ // Make sure the update would insert a row
+ assertDiffPattern(first,
+ buildAssertVersion(VER_FIRST),
+ buildUpdateAggregationSuspended(),
+ buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bobPhone, CONTACT_BOB)),
+ buildUpdateAggregationDefault());
+
+ // Trim values and ensure that we don't insert things
+ RawContactModifier.trimEmpty(bobContact, source);
+ assertDiffPattern(first);
+
+ // Now re-parent the change, which should remain no-op
+ final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+ assertDiffPattern(merged);
+ }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactDeltaTests.java b/tests/src/com/android/contacts/model/RawContactDeltaTests.java
new file mode 100644
index 000000000..f5d4181d6
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactDeltaTests.java
@@ -0,0 +1,379 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.os.Build;
+import android.os.Parcel;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+
+/**
+ * Tests for {@link RawContactDelta} and {@link ValuesDelta}. These tests
+ * focus on passing changes across {@link Parcel}, and verifying that they
+ * correctly build expected "diff" operations.
+ */
+@LargeTest
+public class RawContactDeltaTests extends AndroidTestCase {
+ public static final String TAG = "EntityDeltaTests";
+
+ public static final long TEST_CONTACT_ID = 12;
+ public static final long TEST_PHONE_ID = 24;
+
+ public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
+ public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
+
+ public static final String TEST_ACCOUNT_NAME = "TEST";
+
+ public RawContactDeltaTests() {
+ super();
+ }
+
+ @Override
+ public void setUp() {
+ mContext = getContext();
+ }
+
+ public static RawContact getRawContact(Context context, long contactId, long phoneId) {
+ // Build an existing contact read from database
+ final ContentValues contact = new ContentValues();
+ contact.put(RawContacts.VERSION, 43);
+ contact.put(RawContacts._ID, contactId);
+
+ final ContentValues phone = new ContentValues();
+ phone.put(Data._ID, phoneId);
+ phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+ phone.put(Phone.TYPE, Phone.TYPE_HOME);
+
+ final RawContact before = new RawContact(contact);
+ before.addDataItemValues(phone);
+ return before;
+ }
+
+ /**
+ * Test that {@link RawContactDelta#mergeAfter(RawContactDelta)} correctly passes
+ * any changes through the {@link Parcel} object. This enforces that
+ * {@link RawContactDelta} should be identical when serialized against the same
+ * "before" {@link RawContact}.
+ */
+ public void testParcelChangesNone() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+ final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+ // Merge modified values and assert they match
+ final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+ assertEquals("Unexpected change when merging", source, merged);
+ }
+
+ public void testParcelChangesInsert() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+ final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+ // Add a new row and pass across parcel, should be same
+ final ContentValues phone = new ContentValues();
+ phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+ phone.put(Phone.TYPE, Phone.TYPE_WORK);
+ source.addEntry(ValuesDelta.fromAfter(phone));
+
+ // Merge modified values and assert they match
+ final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+ assertEquals("Unexpected change when merging", source, merged);
+ }
+
+ public void testParcelChangesUpdate() {
+ // Update existing row and pass across parcel, should be same
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+ final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+ final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+ child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+ // Merge modified values and assert they match
+ final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+ assertEquals("Unexpected change when merging", source, merged);
+ }
+
+ public void testParcelChangesDelete() {
+ // Delete a row and pass across parcel, should be same
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+ final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+ final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+ child.markDeleted();
+
+ // Merge modified values and assert they match
+ final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+ assertEquals("Unexpected change when merging", source, merged);
+ }
+
+ public void testValuesDiffDelete() {
+ final ContentValues before = new ContentValues();
+ before.put(Data._ID, TEST_PHONE_ID);
+ before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+ final ValuesDelta values = ValuesDelta.fromBefore(before);
+ values.markDeleted();
+
+ // Should produce a delete action
+ final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+ final boolean isDelete = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+ ? builderWrapper.getBuilder().build().isDelete()
+ : builderWrapper.getType() == CompatUtils.TYPE_DELETE;
+ assertTrue("Didn't produce delete action", isDelete);
+ }
+
+ /**
+ * Test that {@link RawContactDelta#buildDiffWrapper(ArrayList)} is correctly built for
+ * insert, update, and delete cases. This only tests a subset of possible
+ * {@link Data} row changes.
+ */
+ public void testEntityDiffNone() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+ // Assert that writing unchanged produces few operations
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildDiffWrapper(diff);
+
+ assertTrue("Created changes when none needed", (diff.size() == 0));
+ }
+
+ public void testEntityDiffNoneInsert() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+ // Insert a new phone number
+ final ContentValues phone = new ContentValues();
+ phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+ phone.put(Phone.TYPE, Phone.TYPE_WORK);
+ source.addEntry(ValuesDelta.fromAfter(phone));
+
+ // Assert two operations: insert Data row and enforce version
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 4, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(3);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testEntityDiffUpdateInsert() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+ // Update parent contact values
+ source.getValues().put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED);
+
+ // Insert a new phone number
+ final ContentValues phone = new ContentValues();
+ phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+ phone.put(Phone.TYPE, Phone.TYPE_WORK);
+ source.addEntry(ValuesDelta.fromAfter(phone));
+
+ // Assert three operations: update Contact, insert Data row, enforce version
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 5, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(3);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(4);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testEntityDiffNoneUpdate() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+ // Update existing phone number
+ final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+ child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+ // Assert that version is enforced
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 4, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(3);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testEntityDiffDelete() {
+ final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+ final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+ // Delete entire entity
+ source.getValues().markDeleted();
+
+ // Assert two operations: delete Contact and enforce version
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 2, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testEntityDiffInsert() {
+ // Insert a RawContact
+ final ContentValues after = new ContentValues();
+ after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+ after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+ final ValuesDelta values = ValuesDelta.fromAfter(after);
+ final RawContactDelta source = new RawContactDelta(values);
+
+ // Assert two operations: insert Contact and enforce version
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 2, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testEntityDiffInsertInsert() {
+ // Insert a RawContact
+ final ContentValues after = new ContentValues();
+ after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+ after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+ final ValuesDelta values = ValuesDelta.fromAfter(after);
+ final RawContactDelta source = new RawContactDelta(values);
+
+ // Insert a new phone number
+ final ContentValues phone = new ContentValues();
+ phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+ phone.put(Phone.TYPE, Phone.TYPE_WORK);
+ source.addEntry(ValuesDelta.fromAfter(phone));
+
+ // Assert two operations: delete Contact and enforce version
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ source.buildAssertWrapper(diff);
+ source.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactModifierTests.java b/tests/src/com/android/contacts/model/RawContactModifierTests.java
new file mode 100644
index 000000000..594bb443f
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactModifierTests.java
@@ -0,0 +1,1200 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.os.Bundle;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Intents.Insert;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.ExchangeAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests for {@link RawContactModifier} to verify that {@link AccountType}
+ * constraints are being enforced correctly.
+ */
+@LargeTest
+public class RawContactModifierTests extends AndroidTestCase {
+ public static final String TAG = "EntityModifierTests";
+
+ // From android.content.ContentProviderOperation
+ public static final int TYPE_INSERT = 1;
+
+ public static final long VER_FIRST = 100;
+
+ private static final long TEST_ID = 4;
+ private static final String TEST_PHONE = "218-555-1212";
+ private static final String TEST_NAME = "Adam Young";
+ private static final String TEST_NAME2 = "Breanne Duren";
+ private static final String TEST_IM = "example@example.com";
+ private static final String TEST_POSTAL = "1600 Amphitheatre Parkway";
+
+ private static final String TEST_ACCOUNT_NAME = "unittest@example.com";
+ private static final String TEST_ACCOUNT_TYPE = "com.example.unittest";
+
+ private static final String EXCHANGE_ACCT_TYPE = "com.android.exchange";
+
+ @Override
+ public void setUp() {
+ mContext = getContext();
+ }
+
+ public static class MockContactsSource extends AccountType {
+
+ MockContactsSource() {
+ try {
+ this.accountType = TEST_ACCOUNT_TYPE;
+
+ final DataKind nameKind = new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+ R.string.nameLabelsGroup, -1, true);
+ nameKind.typeOverallMax = 1;
+ addKind(nameKind);
+
+ // Phone allows maximum 2 home, 1 work, and unlimited other, with
+ // constraint of 5 numbers maximum.
+ final DataKind phoneKind = new DataKind(
+ Phone.CONTENT_ITEM_TYPE, -1, 10, true);
+
+ phoneKind.typeOverallMax = 5;
+ phoneKind.typeColumn = Phone.TYPE;
+ phoneKind.typeList = Lists.newArrayList();
+ phoneKind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
+ phoneKind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
+
+ phoneKind.fieldList = Lists.newArrayList();
+ phoneKind.fieldList.add(new EditField(Phone.NUMBER, -1, -1));
+ phoneKind.fieldList.add(new EditField(Phone.LABEL, -1, -1));
+
+ addKind(phoneKind);
+
+ // Email is unlimited
+ final DataKind emailKind = new DataKind(Email.CONTENT_ITEM_TYPE, -1, 10, true);
+ emailKind.typeOverallMax = -1;
+ emailKind.fieldList = Lists.newArrayList();
+ emailKind.fieldList.add(new EditField(Email.DATA, -1, -1));
+ addKind(emailKind);
+
+ // IM is only one
+ final DataKind imKind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, 10, true);
+ imKind.typeOverallMax = 1;
+ imKind.fieldList = Lists.newArrayList();
+ imKind.fieldList.add(new EditField(Im.DATA, -1, -1));
+ addKind(imKind);
+
+ // Organization is only one
+ final DataKind orgKind = new DataKind(Organization.CONTENT_ITEM_TYPE, -1, 10, true);
+ orgKind.typeOverallMax = 1;
+ orgKind.fieldList = Lists.newArrayList();
+ orgKind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
+ orgKind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
+ addKind(orgKind);
+ } catch (DefinitionException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return false;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return true;
+ }
+ }
+
+ /**
+ * Build a {@link AccountType} that has various odd constraints for
+ * testing purposes.
+ */
+ protected AccountType getAccountType() {
+ return new MockContactsSource();
+ }
+
+ /**
+ * Build {@link AccountTypeManager} instance.
+ */
+ protected AccountTypeManager getAccountTypes(AccountType... types) {
+ return new MockAccountTypeManager(types, null);
+ }
+
+ /**
+ * Build an {@link RawContact} with the requested set of phone numbers.
+ */
+ protected RawContactDelta getRawContact(Long existingId, ContentValues... entries) {
+ final ContentValues contact = new ContentValues();
+ if (existingId != null) {
+ contact.put(RawContacts._ID, existingId);
+ }
+ contact.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+ contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
+
+ final RawContact before = new RawContact(contact);
+ for (ContentValues values : entries) {
+ before.addDataItemValues(values);
+ }
+ return RawContactDelta.fromBefore(before);
+ }
+
+ /**
+ * Assert this {@link List} contains the given {@link Object}.
+ */
+ protected void assertContains(List<?> list, Object object) {
+ assertTrue("Missing expected value", list.contains(object));
+ }
+
+ /**
+ * Assert this {@link List} does not contain the given {@link Object}.
+ */
+ protected void assertNotContains(List<?> list, Object object) {
+ assertFalse("Contained unexpected value", list.contains(object));
+ }
+
+ /**
+ * Insert various rows to test
+ * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType)}
+ */
+ public void testValidTypes() {
+ // Build a source and pull specific types
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+ final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+ final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+ List<EditType> validTypes;
+
+ // Add first home, first work
+ final RawContactDelta state = getRawContact(TEST_ID);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ RawContactModifier.insertChild(state, kindPhone, typeWork);
+
+ // Expecting home, other
+ validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+ assertContains(validTypes, typeHome);
+ assertNotContains(validTypes, typeWork);
+ assertContains(validTypes, typeOther);
+
+ // Add second home
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+ // Expecting other
+ validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+ assertNotContains(validTypes, typeHome);
+ assertNotContains(validTypes, typeWork);
+ assertContains(validTypes, typeOther);
+
+ // Add third and fourth home (invalid, but possible)
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+ // Expecting none
+ validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+ assertNotContains(validTypes, typeHome);
+ assertNotContains(validTypes, typeWork);
+ assertNotContains(validTypes, typeOther);
+ }
+
+ /**
+ * Test which valid types there are when trying to update the editor type.
+ * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType, Boolean)}
+ */
+ public void testValidTypesWhenUpdating() {
+ // Build a source and pull specific types
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+ final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+ final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+ List<EditType> validTypes;
+
+ // Add first home, first work
+ final RawContactDelta state = getRawContact(TEST_ID);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ RawContactModifier.insertChild(state, kindPhone, typeWork);
+
+ // Update editor type for home.
+ validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
+ assertContains(validTypes, typeHome);
+ assertNotContains(validTypes, typeWork);
+ assertContains(validTypes, typeOther);
+
+ // Add another 3 types. Overall limit is 5.
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ RawContactModifier.insertChild(state, kindPhone, typeOther);
+ RawContactModifier.insertChild(state, kindPhone, typeOther);
+
+ // "Other" is valid when updating the editor type.
+ validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
+ assertNotContains(validTypes, typeHome);
+ assertNotContains(validTypes, typeWork);
+ assertContains(validTypes, typeOther);
+ }
+
+ /**
+ * Test {@link RawContactModifier#canInsert(RawContactDelta, DataKind)} by
+ * inserting various rows.
+ */
+ public void testCanInsert() {
+ // Build a source and pull specific types
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+ final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+ final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+ // Add first home, first work
+ final RawContactDelta state = getRawContact(TEST_ID);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ RawContactModifier.insertChild(state, kindPhone, typeWork);
+ assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
+
+ // Add two other, which puts us just under "5" overall limit
+ RawContactModifier.insertChild(state, kindPhone, typeOther);
+ RawContactModifier.insertChild(state, kindPhone, typeOther);
+ assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
+
+ // Add second home, which should push to snug limit
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ assertFalse("Able to insert", RawContactModifier.canInsert(state, kindPhone));
+ }
+
+ /**
+ * Test
+ * {@link RawContactModifier#getBestValidType(RawContactDelta, DataKind, boolean, int)}
+ * by asserting expected best options in various states.
+ */
+ public void testBestValidType() {
+ // Build a source and pull specific types
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+ final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+ final EditType typeFaxWork = RawContactModifier.getType(kindPhone, Phone.TYPE_FAX_WORK);
+ final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+ EditType suggested;
+
+ // Default suggestion should be home
+ final RawContactDelta state = getRawContact(TEST_ID);
+ suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+ assertEquals("Unexpected suggestion", typeHome, suggested);
+
+ // Add first home, should now suggest work
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+ assertEquals("Unexpected suggestion", typeWork, suggested);
+
+ // Add work fax, should still suggest work
+ RawContactModifier.insertChild(state, kindPhone, typeFaxWork);
+ suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+ assertEquals("Unexpected suggestion", typeWork, suggested);
+
+ // Add other, should still suggest work
+ RawContactModifier.insertChild(state, kindPhone, typeOther);
+ suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+ assertEquals("Unexpected suggestion", typeWork, suggested);
+
+ // Add work, now should suggest other
+ RawContactModifier.insertChild(state, kindPhone, typeWork);
+ suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+ assertEquals("Unexpected suggestion", typeOther, suggested);
+ }
+
+ public void testIsEmptyEmpty() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+ // Test entirely empty row
+ final ContentValues after = new ContentValues();
+ final ValuesDelta values = ValuesDelta.fromAfter(after);
+
+ assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
+ }
+
+ public void testIsEmptyDirectFields() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Test row that has type values, but core fields are empty
+ final RawContactDelta state = getRawContact(TEST_ID);
+ final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+ assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
+
+ // Insert some data to trigger non-empty state
+ values.put(Phone.NUMBER, TEST_PHONE);
+
+ assertFalse("Expected non-empty", RawContactModifier.isEmpty(values, kindPhone));
+ }
+
+ public void testTrimEmptySingle() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Test row that has type values, but core fields are empty
+ final RawContactDelta state = getRawContact(TEST_ID);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+ // Build diff, expecting insert for data row and update enforcement
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+
+ // Trim empty rows and try again, expecting delete of overall contact
+ RawContactModifier.trimEmpty(state, source);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 1, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testTrimEmptySpaces() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Test row that has type values, but values are spaces
+ final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
+ VER_FIRST);
+ final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+ values.put(Phone.NUMBER, " ");
+
+ // Build diff, expecting insert for data row and update enforcement
+ RawContactDeltaListTests.assertDiffPattern(state,
+ RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+ RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+ RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+ RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+ RawContactDeltaListTests.buildUpdateAggregationDefault());
+
+ // Trim empty rows and try again, expecting delete of overall contact
+ RawContactModifier.trimEmpty(state, source);
+ RawContactDeltaListTests.assertDiffPattern(state,
+ RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+ RawContactDeltaListTests.buildDelete(RawContacts.CONTENT_URI));
+ }
+
+ public void testTrimLeaveValid() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Test row that has type values with valid number
+ final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
+ VER_FIRST);
+ final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+ values.put(Phone.NUMBER, TEST_PHONE);
+
+ // Build diff, expecting insert for data row and update enforcement
+ RawContactDeltaListTests.assertDiffPattern(state,
+ RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+ RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+ RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+ RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+ RawContactDeltaListTests.buildUpdateAggregationDefault());
+
+ // Trim empty rows and try again, expecting no differences
+ RawContactModifier.trimEmpty(state, source);
+ RawContactDeltaListTests.assertDiffPattern(state,
+ RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+ RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+ RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+ RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+ RawContactDeltaListTests.buildUpdateAggregationDefault());
+ }
+
+ public void testTrimEmptyUntouched() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Build "before" that has empty row
+ final RawContactDelta state = getRawContact(TEST_ID);
+ final ContentValues before = new ContentValues();
+ before.put(Data._ID, TEST_ID);
+ before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ state.addEntry(ValuesDelta.fromBefore(before));
+
+ // Build diff, expecting no changes
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+
+ // Try trimming existing empty, which we shouldn't touch
+ RawContactModifier.trimEmpty(state, source);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+ }
+
+ public void testTrimEmptyAfterUpdate() {
+ final AccountType source = getAccountType();
+ final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Build "before" that has row with some phone number
+ final ContentValues before = new ContentValues();
+ before.put(Data._ID, TEST_ID);
+ before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ before.put(kindPhone.typeColumn, typeHome.rawValue);
+ before.put(Phone.NUMBER, TEST_PHONE);
+ final RawContactDelta state = getRawContact(TEST_ID, before);
+
+ // Build diff, expecting no changes
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+
+ // Now update row by changing number to empty string, expecting single update
+ final ValuesDelta child = state.getEntry(TEST_ID);
+ child.put(Phone.NUMBER, "");
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+
+ // Now run trim, which should turn that update into delete
+ RawContactModifier.trimEmpty(state, source);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 1, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testTrimInsertEmpty() {
+ final AccountType accountType = getAccountType();
+ final AccountTypeManager accountTypes = getAccountTypes(accountType);
+ final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Try creating a contact without any child entries
+ final RawContactDelta state = getRawContact(null);
+ final RawContactDeltaList set = new RawContactDeltaList();
+ set.add(state);
+
+ // Build diff, expecting single insert
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 2, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+
+ // Trim empty rows and try again, expecting no insert
+ RawContactModifier.trimEmpty(set, accountTypes);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+ }
+
+ public void testTrimInsertInsert() {
+ final AccountType accountType = getAccountType();
+ final AccountTypeManager accountTypes = getAccountTypes(accountType);
+ final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Try creating a contact with single empty entry
+ final RawContactDelta state = getRawContact(null);
+ RawContactModifier.insertChild(state, kindPhone, typeHome);
+ final RawContactDeltaList set = new RawContactDeltaList();
+ set.add(state);
+
+ // Build diff, expecting two insert operations
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+
+ // Trim empty rows and try again, expecting silence
+ RawContactModifier.trimEmpty(set, accountTypes);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+ }
+
+ public void testTrimUpdateRemain() {
+ final AccountType accountType = getAccountType();
+ final AccountTypeManager accountTypes = getAccountTypes(accountType);
+ final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Build "before" with two phone numbers
+ final ContentValues first = new ContentValues();
+ first.put(Data._ID, TEST_ID);
+ first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ first.put(kindPhone.typeColumn, typeHome.rawValue);
+ first.put(Phone.NUMBER, TEST_PHONE);
+
+ final ContentValues second = new ContentValues();
+ second.put(Data._ID, TEST_ID);
+ second.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ second.put(kindPhone.typeColumn, typeHome.rawValue);
+ second.put(Phone.NUMBER, TEST_PHONE);
+
+ final RawContactDelta state = getRawContact(TEST_ID, first, second);
+ final RawContactDeltaList set = new RawContactDeltaList();
+ set.add(state);
+
+ // Build diff, expecting no changes
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+
+ // Now update row by changing number to empty string, expecting single update
+ final ValuesDelta child = state.getEntry(TEST_ID);
+ child.put(Phone.NUMBER, "");
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+
+ // Now run trim, which should turn that update into delete
+ RawContactModifier.trimEmpty(set, accountTypes);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testTrimUpdateUpdate() {
+ final AccountType accountType = getAccountType();
+ final AccountTypeManager accountTypes = getAccountTypes(accountType);
+ final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+ final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+ // Build "before" with two phone numbers
+ final ContentValues first = new ContentValues();
+ first.put(Data._ID, TEST_ID);
+ first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ first.put(kindPhone.typeColumn, typeHome.rawValue);
+ first.put(Phone.NUMBER, TEST_PHONE);
+
+ final RawContactDelta state = getRawContact(TEST_ID, first);
+ final RawContactDeltaList set = new RawContactDeltaList();
+ set.add(state);
+
+ // Build diff, expecting no changes
+ final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 0, diff.size());
+
+ // Now update row by changing number to empty string, expecting single update
+ final ValuesDelta child = state.getEntry(TEST_ID);
+ child.put(Phone.NUMBER, "");
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 3, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(1);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+ }
+ {
+ final CPOWrapper cpoWrapper = diff.get(2);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+
+ // Now run trim, which should turn into deleting the whole contact
+ RawContactModifier.trimEmpty(set, accountTypes);
+ diff.clear();
+ state.buildDiffWrapper(diff);
+ assertEquals("Unexpected operations", 1, diff.size());
+ {
+ final CPOWrapper cpoWrapper = diff.get(0);
+ final ContentProviderOperation oper = cpoWrapper.getOperation();
+ assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+ assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+ }
+ }
+
+ public void testParseExtrasExistingName() {
+ final AccountType accountType = getAccountType();
+
+ // Build "before" name
+ final ContentValues first = new ContentValues();
+ first.put(Data._ID, TEST_ID);
+ first.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ first.put(StructuredName.GIVEN_NAME, TEST_NAME);
+
+ // Parse extras, making sure we keep single name
+ final RawContactDelta state = getRawContact(TEST_ID, first);
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.NAME, TEST_NAME2);
+ RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+ final int nameCount = state.getMimeEntriesCount(StructuredName.CONTENT_ITEM_TYPE, true);
+ assertEquals("Unexpected names", 1, nameCount);
+ }
+
+ public void testParseExtrasIgnoreLimit() {
+ final AccountType accountType = getAccountType();
+
+ // Build "before" IM
+ final ContentValues first = new ContentValues();
+ first.put(Data._ID, TEST_ID);
+ first.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ first.put(Im.DATA, TEST_IM);
+
+ final RawContactDelta state = getRawContact(TEST_ID, first);
+ final int beforeCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+
+ // We should ignore data that doesn't fit account type rules, since account type
+ // only allows single Im
+ final Bundle extras = new Bundle();
+ extras.putInt(Insert.IM_PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+ extras.putString(Insert.IM_HANDLE, TEST_IM);
+ RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+ final int afterCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+ assertEquals("Broke account type rules", beforeCount, afterCount);
+ }
+
+ public void testParseExtrasIgnoreUnhandled() {
+ final AccountType accountType = getAccountType();
+ final RawContactDelta state = getRawContact(TEST_ID);
+
+ // We should silently ignore types unsupported by account type
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.POSTAL, TEST_POSTAL);
+ RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+ assertNull("Broke accoun type rules",
+ state.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
+ }
+
+ public void testParseExtrasJobTitle() {
+ final AccountType accountType = getAccountType();
+ final RawContactDelta state = getRawContact(TEST_ID);
+
+ // Make sure that we create partial Organizations
+ final Bundle extras = new Bundle();
+ extras.putString(Insert.JOB_TITLE, TEST_NAME);
+ RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+ final int count = state.getMimeEntries(Organization.CONTENT_ITEM_TYPE).size();
+ assertEquals("Expected to create organization", 1, count);
+ }
+
+ public void testMigrateNameFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+
+ ContactsMockContext context = new ContactsMockContext(getContext());
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ mockNameValues.put(StructuredName.PREFIX, "prefix");
+ mockNameValues.put(StructuredName.GIVEN_NAME, "given");
+ mockNameValues.put(StructuredName.MIDDLE_NAME, "middle");
+ mockNameValues.put(StructuredName.FAMILY_NAME, "family");
+ mockNameValues.put(StructuredName.SUFFIX, "suffix");
+ mockNameValues.put(StructuredName.PHONETIC_FAMILY_NAME, "PHONETIC_FAMILY");
+ mockNameValues.put(StructuredName.PHONETIC_MIDDLE_NAME, "PHONETIC_MIDDLE");
+ mockNameValues.put(StructuredName.PHONETIC_GIVEN_NAME, "PHONETIC_GIVEN");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateStructuredName(context, oldState, newState, kind);
+ List<ValuesDelta> list = newState.getMimeEntries(StructuredName.CONTENT_ITEM_TYPE);
+ assertEquals(1, list.size());
+
+ ContentValues output = list.get(0).getAfter();
+ assertEquals("prefix", output.getAsString(StructuredName.PREFIX));
+ assertEquals("given", output.getAsString(StructuredName.GIVEN_NAME));
+ assertEquals("middle", output.getAsString(StructuredName.MIDDLE_NAME));
+ assertEquals("family", output.getAsString(StructuredName.FAMILY_NAME));
+ assertEquals("suffix", output.getAsString(StructuredName.SUFFIX));
+ // Phonetic middle name isn't supported by Exchange.
+ assertEquals("PHONETIC_FAMILY", output.getAsString(StructuredName.PHONETIC_FAMILY_NAME));
+ assertEquals("PHONETIC_GIVEN", output.getAsString(StructuredName.PHONETIC_GIVEN_NAME));
+ }
+
+ public void testMigratePostalFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+ mockNameValues.put(StructuredPostal.FORMATTED_ADDRESS, "formatted_address");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migratePostal(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(1, list.size());
+ ContentValues outputValues = list.get(0).getAfter();
+ // FORMATTED_ADDRESS isn't supported by Exchange.
+ assertNull(outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS));
+ assertEquals("formatted_address", outputValues.getAsString(StructuredPostal.STREET));
+ }
+
+ public void testMigratePostalFromExchangeToGoogle() {
+ AccountType oldAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ AccountType newAccountType = new GoogleAccountType(getContext(), "");
+ DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+ mockNameValues.put(StructuredPostal.COUNTRY, "country");
+ mockNameValues.put(StructuredPostal.POSTCODE, "postcode");
+ mockNameValues.put(StructuredPostal.REGION, "region");
+ mockNameValues.put(StructuredPostal.CITY, "city");
+ mockNameValues.put(StructuredPostal.STREET, "street");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migratePostal(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(1, list.size());
+ ContentValues outputValues = list.get(0).getAfter();
+
+ // Check FORMATTED_ADDRESS contains all info.
+ String formattedAddress = outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+ assertNotNull(formattedAddress);
+ assertTrue(formattedAddress.contains("country"));
+ assertTrue(formattedAddress.contains("postcode"));
+ assertTrue(formattedAddress.contains("region"));
+ assertTrue(formattedAddress.contains("postcode"));
+ assertTrue(formattedAddress.contains("city"));
+ assertTrue(formattedAddress.contains("street"));
+ }
+
+ public void testMigrateEventFromGoogleToExchange1() {
+ testMigrateEventCommon(new GoogleAccountType(getContext(), ""),
+ new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE));
+ }
+
+ public void testMigrateEventFromExchangeToGoogle() {
+ testMigrateEventCommon(new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE),
+ new GoogleAccountType(getContext(), ""));
+ }
+
+ private void testMigrateEventCommon(AccountType oldAccountType, AccountType newAccountType) {
+ DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Event.START_DATE, "1972-02-08");
+ mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(1, list.size()); // Anniversary should be dropped.
+ ContentValues outputValues = list.get(0).getAfter();
+
+ assertEquals("1972-02-08", outputValues.getAsString(Event.START_DATE));
+ assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
+ }
+
+ public void testMigrateEventFromGoogleToExchange2() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ // No year format is not supported by Exchange.
+ mockNameValues.put(Event.START_DATE, "--06-01");
+ mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Event.START_DATE, "1980-08-02");
+ // Anniversary is not supported by Exchange
+ mockNameValues.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(1, list.size()); // Anniversary should be dropped.
+ ContentValues outputValues = list.get(0).getAfter();
+
+ // Default year should be used.
+ assertEquals("1990-06-01", outputValues.getAsString(Event.START_DATE));
+ assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
+ }
+
+ public void testMigrateEmailFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Email.TYPE, Email.TYPE_CUSTOM);
+ mockNameValues.put(Email.LABEL, "custom_type");
+ mockNameValues.put(Email.ADDRESS, "address1");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Email.TYPE, Email.TYPE_HOME);
+ mockNameValues.put(Email.ADDRESS, "address2");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Email.TYPE, Email.TYPE_WORK);
+ mockNameValues.put(Email.ADDRESS, "address3");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ // Exchange can have up to 3 email entries. This 4th entry should be dropped.
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Email.TYPE, Email.TYPE_OTHER);
+ mockNameValues.put(Email.ADDRESS, "address4");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Email.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(3, list.size());
+
+ ContentValues outputValues = list.get(0).getAfter();
+ assertEquals(Email.TYPE_CUSTOM, outputValues.getAsInteger(Email.TYPE).intValue());
+ assertEquals("custom_type", outputValues.getAsString(Email.LABEL));
+ assertEquals("address1", outputValues.getAsString(Email.ADDRESS));
+
+ outputValues = list.get(1).getAfter();
+ assertEquals(Email.TYPE_HOME, outputValues.getAsInteger(Email.TYPE).intValue());
+ assertEquals("address2", outputValues.getAsString(Email.ADDRESS));
+
+ outputValues = list.get(2).getAfter();
+ assertEquals(Email.TYPE_WORK, outputValues.getAsInteger(Email.TYPE).intValue());
+ assertEquals("address3", outputValues.getAsString(Email.ADDRESS));
+ }
+
+ public void testMigrateImFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ // Exchange doesn't support TYPE_HOME
+ mockNameValues.put(Im.TYPE, Im.TYPE_HOME);
+ mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_JABBER);
+ mockNameValues.put(Im.DATA, "im1");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ // Exchange doesn't support TYPE_WORK
+ mockNameValues.put(Im.TYPE, Im.TYPE_WORK);
+ mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_YAHOO);
+ mockNameValues.put(Im.DATA, "im2");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
+ mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+ mockNameValues.put(Im.CUSTOM_PROTOCOL, "custom_protocol");
+ mockNameValues.put(Im.DATA, "im3");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ // Exchange can have up to 3 IM entries. This 4th entry should be dropped.
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
+ mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+ mockNameValues.put(Im.DATA, "im4");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Im.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(3, list.size());
+
+ assertNotNull(kind.defaultValues.getAsInteger(Im.TYPE));
+
+ int defaultType = kind.defaultValues.getAsInteger(Im.TYPE);
+
+ ContentValues outputValues = list.get(0).getAfter();
+ // HOME should become default type.
+ assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+ assertEquals(Im.PROTOCOL_JABBER, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+ assertEquals("im1", outputValues.getAsString(Im.DATA));
+
+ outputValues = list.get(1).getAfter();
+ assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+ assertEquals(Im.PROTOCOL_YAHOO, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+ assertEquals("im2", outputValues.getAsString(Im.DATA));
+
+ outputValues = list.get(2).getAfter();
+ assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+ assertEquals(Im.PROTOCOL_CUSTOM, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+ assertEquals("custom_protocol", outputValues.getAsString(Im.CUSTOM_PROTOCOL));
+ assertEquals("im3", outputValues.getAsString(Im.DATA));
+ }
+
+ public void testMigratePhoneFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+ // Create 5 numbers.
+ // - "1" -- HOME
+ // - "2" -- WORK
+ // - "3" -- CUSTOM
+ // - "4" -- WORK
+ // - "5" -- WORK_MOBILE
+ // Then we convert it to Exchange account type.
+ // - "1" -- HOME
+ // - "2" -- WORK
+ // - "3" -- Because CUSTOM is not supported, it'll be changed to the default, MOBILE
+ // - "4" -- WORK
+ // - "5" -- WORK_MOBILE not suppoted again, so will be MOBILE.
+ // But then, Exchange doesn't support multiple MOBILE numbers, so "5" will be removed.
+ // i.e. the result will be:
+ // - "1" -- HOME
+ // - "2" -- WORK
+ // - "3" -- MOBILE
+ // - "4" -- WORK
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Phone.TYPE, Phone.TYPE_HOME);
+ mockNameValues.put(Phone.NUMBER, "1");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
+ mockNameValues.put(Phone.NUMBER, "2");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ // Exchange doesn't support this type. Default to MOBILE
+ mockNameValues.put(Phone.TYPE, Phone.TYPE_CUSTOM);
+ mockNameValues.put(Phone.LABEL, "custom_type");
+ mockNameValues.put(Phone.NUMBER, "3");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
+ mockNameValues.put(Phone.NUMBER, "4");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+ mockNameValues = new ContentValues();
+
+ mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
+ mockNameValues.put(Phone.NUMBER, "5");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(4, list.size());
+
+ int defaultType = Phone.TYPE_MOBILE;
+
+ ContentValues outputValues = list.get(0).getAfter();
+ assertEquals(Phone.TYPE_HOME, outputValues.getAsInteger(Phone.TYPE).intValue());
+ assertEquals("1", outputValues.getAsString(Phone.NUMBER));
+ outputValues = list.get(1).getAfter();
+ assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
+ assertEquals("2", outputValues.getAsString(Phone.NUMBER));
+ outputValues = list.get(2).getAfter();
+ assertEquals(defaultType, outputValues.getAsInteger(Phone.TYPE).intValue());
+ assertNull(outputValues.getAsInteger(Phone.LABEL));
+ assertEquals("3", outputValues.getAsString(Phone.NUMBER));
+ outputValues = list.get(3).getAfter();
+ assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
+ assertEquals("4", outputValues.getAsString(Phone.NUMBER));
+ }
+
+ public void testMigrateOrganizationFromGoogleToExchange() {
+ AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+ AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+ DataKind kind = newAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+
+ RawContactDelta oldState = new RawContactDelta();
+ ContentValues mockNameValues = new ContentValues();
+ mockNameValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ mockNameValues.put(Organization.COMPANY, "company1");
+ mockNameValues.put(Organization.DEPARTMENT, "department1");
+ oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+ RawContactDelta newState = new RawContactDelta();
+ RawContactModifier.migrateGenericWithoutTypeColumn(oldState, newState, kind);
+
+ List<ValuesDelta> list = newState.getMimeEntries(Organization.CONTENT_ITEM_TYPE);
+ assertNotNull(list);
+ assertEquals(1, list.size());
+
+ ContentValues outputValues = list.get(0).getAfter();
+ assertEquals("company1", outputValues.getAsString(Organization.COMPANY));
+ assertEquals("department1", outputValues.getAsString(Organization.DEPARTMENT));
+ }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactTest.java b/tests/src/com/android/contacts/model/RawContactTest.java
new file mode 100644
index 000000000..d9f05c9ac
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link RawContact}.
+ */
+@SmallTest
+public class RawContactTest extends TestCase {
+
+ private RawContact buildRawContact() {
+ final ContentValues values = new ContentValues();
+ values.put("key1", "value1");
+ values.put("key2", "value2");
+
+ final ContentValues dataItem = new ContentValues();
+ dataItem.put("key3", "value3");
+ dataItem.put("key4", "value4");
+
+ final RawContact contact = new RawContact(values);
+ contact.addDataItemValues(dataItem);
+
+ return contact;
+ }
+
+ private RawContact buildRawContact2() {
+ final ContentValues values = new ContentValues();
+ values.put("key11", "value11");
+ values.put("key22", "value22");
+
+ final ContentValues dataItem = new ContentValues();
+ dataItem.put("key33", "value33");
+ dataItem.put("key44", "value44");
+
+ final RawContact contact = new RawContact(values);
+ contact.addDataItemValues(dataItem);
+
+ return contact;
+ }
+
+ public void testNotEquals() {
+ final RawContact one = buildRawContact();
+ final RawContact two = buildRawContact2();
+ assertFalse(one.equals(two));
+ }
+
+ public void testEquals() {
+ assertEquals(buildRawContact(), buildRawContact());
+ }
+
+ public void testParcelable() {
+ assertParcelableEquals(buildRawContact());
+ }
+
+ private RawContact.NamedDataItem buildNamedDataItem() {
+ final ContentValues values = new ContentValues();
+ values.put("key1", "value1");
+ values.put("key2", "value2");
+ final Uri uri = Uri.fromParts("content:", "ssp", "fragment");
+
+ return new RawContact.NamedDataItem(uri, values);
+ }
+
+ private RawContact.NamedDataItem buildNamedDataItem2() {
+ final ContentValues values = new ContentValues();
+ values.put("key11", "value11");
+ values.put("key22", "value22");
+ final Uri uri = Uri.fromParts("content:", "blah", "blah");
+
+ return new RawContact.NamedDataItem(uri, values);
+ }
+
+ public void testNamedDataItemEquals() {
+ assertEquals(buildNamedDataItem(), buildNamedDataItem());
+ }
+
+ public void testNamedDataItemNotEquals() {
+ assertFalse(buildNamedDataItem().equals(buildNamedDataItem2()));
+ }
+
+ public void testNamedDataItemParcelable() {
+ assertParcelableEquals(buildNamedDataItem());
+ }
+
+ private void assertParcelableEquals(Parcelable parcelable) {
+ final Parcel parcel = Parcel.obtain();
+ try {
+ parcel.writeParcelable(parcelable, 0);
+ parcel.setDataPosition(0);
+
+ Parcelable out = parcel.readParcelable(parcelable.getClass().getClassLoader());
+ assertEquals(parcelable, out);
+ } finally {
+ parcel.recycle();
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/SimContactTests.java b/tests/src/com/android/contacts/model/SimContactTests.java
new file mode 100644
index 000000000..d234e42d7
--- /dev/null
+++ b/tests/src/com/android/contacts/model/SimContactTests.java
@@ -0,0 +1,54 @@
+/*
+ * 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.model;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SimContactTests {
+ @Test
+ public void parcelRoundtrip() {
+ assertParcelsCorrectly(new SimContact(1, "name1", "phone1",
+ new String[] { "email1a", "email1b" }));
+ assertParcelsCorrectly(new SimContact(2, "name2", "phone2", null));
+ assertParcelsCorrectly(new SimContact(3, "name3", null,
+ new String[] { "email3" }));
+ assertParcelsCorrectly(new SimContact(4, null, "phone4",
+ new String[] { "email4" }));
+ assertParcelsCorrectly(new SimContact(5, null, null, null));
+ assertParcelsCorrectly(new SimContact(6, "name6", "phone6",
+ new String[0]));
+ }
+
+ private void assertParcelsCorrectly(SimContact contact) {
+ final Parcel parcel = Parcel.obtain();
+ parcel.writeParcelable(contact, 0);
+ parcel.setDataPosition(0);
+ final SimContact unparceled = parcel.readParcelable(
+ SimContact.class.getClassLoader());
+ assertThat(unparceled, equalTo(contact));
+ parcel.recycle();
+ }
+}
diff --git a/tests/src/com/android/contacts/model/ValuesDeltaTests.java b/tests/src/com/android/contacts/model/ValuesDeltaTests.java
new file mode 100644
index 000000000..b7161d785
--- /dev/null
+++ b/tests/src/com/android/contacts/model/ValuesDeltaTests.java
@@ -0,0 +1,89 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentValues;
+import android.os.Build;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.compat.CompatUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link ValuesDelta}. These tests
+ * focus on passing changes across {@link android.os.Parcel}, and verifying that they
+ * correctly build expected "diff" operations.
+ */
+@SmallTest
+public class ValuesDeltaTests extends TestCase {
+
+ public static final long TEST_PHONE_ID = 24;
+
+ public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
+ public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
+
+ public void testValuesDiffInsert() {
+ final ContentValues after = new ContentValues();
+ after.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+ final ValuesDelta values = ValuesDelta.fromAfter(after);
+
+ // Should produce an insert action
+ final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+ final boolean isInsert = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+ ? builderWrapper.getBuilder().build().isInsert()
+ : builderWrapper.getType() == CompatUtils.TYPE_INSERT;
+ assertTrue("Didn't produce insert action", isInsert);
+ }
+
+ /**
+ * Test that {@link ValuesDelta#buildDiff(android.net.Uri)} is correctly
+ * built for insert, update, and delete cases. Note this only tests behavior
+ * for individual {@link Data} rows.
+ */
+ public void testValuesDiffNone() {
+ final ContentValues before = new ContentValues();
+ before.put(Data._ID, TEST_PHONE_ID);
+ before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+ final ValuesDelta values = ValuesDelta.fromBefore(before);
+
+ // None action shouldn't produce a builder
+ final Builder builder = values.buildDiff(Data.CONTENT_URI);
+ assertNull("None action produced a builder", builder);
+ }
+
+ public void testValuesDiffUpdate() {
+ final ContentValues before = new ContentValues();
+ before.put(Data._ID, TEST_PHONE_ID);
+ before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+ final ValuesDelta values = ValuesDelta.fromBefore(before);
+ values.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+ // Should produce an update action
+ final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+ final boolean isUpdate = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+ ? builderWrapper.getBuilder().build().isUpdate()
+ : builderWrapper.getType() == CompatUtils.TYPE_UPDATE;
+ assertTrue("Didn't produce update action", isUpdate);
+ }
+}
diff --git a/tests/src/com/android/contacts/model/account/AccountTypeTest.java b/tests/src/com/android/contacts/model/account/AccountTypeTest.java
new file mode 100644
index 000000000..7c74b21b6
--- /dev/null
+++ b/tests/src/com/android/contacts/model/account/AccountTypeTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.tests.R;
+
+/**
+ * Test case for {@link AccountType}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeTest \
+ com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountTypeTest extends InstrumentationTestCase {
+ public void testGetResourceText() {
+ // In this test we use the test package itself as an external package.
+ final String packageName = getInstrumentation().getContext().getPackageName();
+
+ final Context c = getInstrumentation().getTargetContext();
+ final String DEFAULT = "ABC";
+
+ // Package name null, resId -1, use the default
+ assertEquals(DEFAULT, AccountType.getResourceText(c, null, -1, DEFAULT));
+
+ // Resource ID -1, use the default
+ assertEquals(DEFAULT, AccountType.getResourceText(c, packageName, -1, DEFAULT));
+
+ // Load from an external package. (here, we use this test package itself)
+ final int externalResID = R.string.test_string;
+ assertEquals(getInstrumentation().getContext().getString(externalResID),
+ AccountType.getResourceText(c, packageName, externalResID, DEFAULT));
+
+ // Load from the contacts package itself.
+ final int internalResId = com.android.contacts.R.string.contactsList;
+ assertEquals(c.getString(internalResId),
+ AccountType.getResourceText(c, null, internalResId, DEFAULT));
+ }
+
+ /**
+ * Verify if {@link AccountType#getInviteContactActionLabel} correctly gets the resource ID
+ * from {@link AccountType#getInviteContactActionResId}
+ */
+ public void testGetInviteContactActionLabel() {
+ final String packageName = getInstrumentation().getContext().getPackageName();
+ final Context c = getInstrumentation().getTargetContext();
+
+ final int externalResID = R.string.test_string;
+
+ AccountType accountType = new AccountType() {
+ {
+ resourcePackageName = packageName;
+ syncAdapterPackageName = packageName;
+ }
+ @Override protected int getInviteContactActionResId() {
+ return externalResID;
+ }
+
+ @Override public boolean isGroupMembershipEditable() {
+ return false;
+ }
+
+ @Override public boolean areContactsWritable() {
+ return false;
+ }
+ };
+
+ assertEquals(getInstrumentation().getContext().getString(externalResID),
+ accountType.getInviteContactActionLabel(c));
+ }
+
+ public void testDisplayLabelComparator() {
+ final AccountTypeForDisplayLabelTest EMPTY = new AccountTypeForDisplayLabelTest("");
+ final AccountTypeForDisplayLabelTest NULL = new AccountTypeForDisplayLabelTest(null);
+ final AccountTypeForDisplayLabelTest AA = new AccountTypeForDisplayLabelTest("aa");
+ final AccountTypeForDisplayLabelTest BBB = new AccountTypeForDisplayLabelTest("bbb");
+ final AccountTypeForDisplayLabelTest C = new AccountTypeForDisplayLabelTest("c");
+
+ assertTrue(compareDisplayLabel(AA, BBB) < 0);
+ assertTrue(compareDisplayLabel(BBB, C) < 0);
+ assertTrue(compareDisplayLabel(AA, C) < 0);
+ assertTrue(compareDisplayLabel(AA, AA) == 0);
+ assertTrue(compareDisplayLabel(BBB, AA) > 0);
+
+ assertTrue(compareDisplayLabel(EMPTY, AA) < 0);
+ assertTrue(compareDisplayLabel(EMPTY, NULL) == 0);
+ }
+
+ private int compareDisplayLabel(AccountType lhs, AccountType rhs) {
+ return new AccountType.DisplayLabelComparator(
+ getInstrumentation().getTargetContext()).compare(lhs, rhs);
+ }
+
+ private class AccountTypeForDisplayLabelTest extends AccountType {
+ private final String mDisplayLabel;
+
+ public AccountTypeForDisplayLabelTest(String displayLabel) {
+ mDisplayLabel = displayLabel;
+ }
+
+ @Override
+ public CharSequence getDisplayLabel(Context context) {
+ return mDisplayLabel;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return false;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return false;
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java b/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java
new file mode 100644
index 000000000..17d815eaa
--- /dev/null
+++ b/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java
@@ -0,0 +1,249 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.test.suitebuilder.annotation.Suppress;
+
+import com.android.contacts.tests.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.base.Objects;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Test case for {@link com.android.contacts.model.account.ExternalAccountType}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.ExternalAccountTypeTest \
+ com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class ExternalAccountTypeTest extends InstrumentationTestCase {
+ private static ArrayList<String> mDefaultMimetypes = new ArrayList<>(Arrays.asList(
+ StructuredName.CONTENT_ITEM_TYPE,
+ DataKind.PSEUDO_MIME_TYPE_NAME,
+ DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+ Photo.CONTENT_ITEM_TYPE
+ ));
+
+ @Suppress
+ public void testResolveExternalResId() {
+ final Context c = getInstrumentation().getTargetContext();
+ // In this test we use the test package itself as an external package.
+ final String packageName = getInstrumentation().getContext().getPackageName();
+
+ // Resource name empty.
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, null, packageName, ""));
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "", packageName, ""));
+
+ // Name doesn't begin with '@'
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "x", packageName, ""));
+
+ // Invalid resource name
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@", packageName, ""));
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a", packageName, ""));
+ assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a/b", packageName, ""));
+
+ // Valid resource name
+ assertEquals(R.string.test_string, ExternalAccountType.resolveExternalResId(c,
+ "@string/test_string", packageName, ""));
+ }
+
+ public void testIsFromTestApp() {
+ assertTrue(ExternalAccountType.isFromTestApp("com.google.android.contacts.tests"));
+ assertFalse(ExternalAccountType.isFromTestApp("com.google.android.contacts"));
+ }
+
+ /**
+ * Initialize with an invalid package name and see if type will be initialized, but empty.
+ */
+ public void testNoPackage() {
+ final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+ "!!!no such package name!!!", false);
+ assertTrue(type.isInitialized());
+ }
+
+ /**
+ * Initialize with the test package itself and see if EditSchema is correctly parsed.
+ */
+ @Suppress
+ public void testEditSchema() {
+ final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+ getInstrumentation().getContext().getPackageName(), false);
+
+ assertTrue(type.isInitialized());
+
+ // Let's just check if the DataKinds are registered.
+ assertNotNull(type.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_NAME));
+ assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME));
+ assertNotNull(type.getKindForMimetype(Email.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Im.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Organization.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Note.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Website.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Event.CONTENT_ITEM_TYPE));
+ assertNotNull(type.getKindForMimetype(Relation.CONTENT_ITEM_TYPE));
+ }
+
+ /**
+ * Initialize with "contacts_fallback.xml" and compare the DataKinds to those of
+ * {@link com.android.contacts.model.account.FallbackAccountType}.
+ */
+ public void testEditSchema_fallback() {
+ final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+ getInstrumentation().getContext().getPackageName(), false,
+ getInstrumentation().getContext().getResources().getXml(R.xml.contacts_fallback)
+ );
+
+ assertTrue(type.isInitialized());
+
+ // Create a fallback type with the same resource package name, and compare all the data
+ // kinds to its.
+ final AccountType reference = FallbackAccountType.createWithPackageNameForTest(
+ getInstrumentation().getTargetContext(), type.resourcePackageName);
+
+ assertsDataKindEquals(reference.getSortedDataKinds(), type.getSortedDataKinds());
+ }
+
+ public void testEditSchema_mustHaveChecks() {
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_base, true);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_photo, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr2, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr3, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr4, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr5, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr6, false);
+ checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr7, false);
+ }
+
+ private void checkEditSchema_mustHaveChecks(int xmlResId, boolean expectInitialized) {
+ final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+ getInstrumentation().getContext().getPackageName(), false,
+ getInstrumentation().getContext().getResources().getXml(xmlResId)
+ );
+
+ assertEquals(expectInitialized, type.isInitialized());
+ }
+
+ /**
+ * Initialize with "contacts_readonly.xml" and see if all data kinds are correctly registered.
+ */
+ public void testReadOnlyDefinition() {
+ final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+ getInstrumentation().getContext().getPackageName(), false,
+ getInstrumentation().getContext().getResources().getXml(R.xml.contacts_readonly)
+ );
+ assertTrue(type.isInitialized());
+
+ // Shouldn't have a "null" mimetype.
+ assertTrue(type.getKindForMimetype(null) == null);
+
+ // 3 kinds are defined in XML and the rest are added by default.
+ assertEquals(3 + mDefaultMimetypes.size(), type.getSortedDataKinds().size());
+
+ // Check for the default kinds.
+ for (String mimetype : mDefaultMimetypes) {
+ assertNotNull(type.getKindForMimetype(mimetype));
+ }
+
+ // Check for type specific kinds.
+ DataKind kind = type.getKindForMimetype("vnd.android.cursor.item/a.b.c");
+ assertNotNull(kind);
+ // No check for icon -- we actually just ignore it.
+ assertEquals("data1", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+ .getColumnNameForTest());
+ assertEquals("data2", ((BaseAccountType.SimpleInflater) kind.actionBody)
+ .getColumnNameForTest());
+
+ kind = type.getKindForMimetype("vnd.android.cursor.item/d.e.f");
+ assertNotNull(kind);
+ assertEquals("data3", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+ .getColumnNameForTest());
+ assertEquals("data4", ((BaseAccountType.SimpleInflater) kind.actionBody)
+ .getColumnNameForTest());
+
+ kind = type.getKindForMimetype("vnd.android.cursor.item/xyz");
+ assertNotNull(kind);
+ assertEquals("data5", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+ .getColumnNameForTest());
+ assertEquals("data6", ((BaseAccountType.SimpleInflater) kind.actionBody)
+ .getColumnNameForTest());
+ }
+
+ private static void assertsDataKindEquals(List<DataKind> expectedKinds,
+ List<DataKind> actualKinds) {
+ final int count = Math.max(actualKinds.size(), expectedKinds.size());
+ for (int i = 0; i < count; i++) {
+ String actual = actualKinds.size() > i ? actualKinds.get(i).toString() : "(n/a)";
+ String expected = expectedKinds.size() > i ? expectedKinds.get(i).toString() : "(n/a)";
+
+ // Because assertEquals()'s output is not very friendly when comparing two similar
+ // strings, we manually do the check.
+ if (!Objects.equal(actual, expected)) {
+ final int commonPrefixEnd = findCommonPrefixEnd(actual, expected);
+ fail("Kind #" + i
+ + "\n[Actual]\n" + insertMarkerAt(actual, commonPrefixEnd)
+ + "\n[Expected]\n" + insertMarkerAt(expected, commonPrefixEnd));
+ }
+ }
+ }
+
+ private static int findCommonPrefixEnd(String s1, String s2) {
+ int i = 0;
+ for (;;) {
+ final boolean s1End = (s1.length() <= i);
+ final boolean s2End = (s2.length() <= i);
+ if (s1End || s2End) {
+ return i;
+ }
+ if (s1.charAt(i) != s2.charAt(i)) {
+ return i;
+ }
+ i++;
+ }
+ }
+
+ private static String insertMarkerAt(String s, int position) {
+ final String MARKER = "***";
+ if (position > s.length()) {
+ return s + MARKER;
+ } else {
+ return new StringBuilder(s).insert(position, MARKER).toString();
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/model/dataitem/DataItemTests.java b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
new file mode 100644
index 000000000..7b60bebca
--- /dev/null
+++ b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
@@ -0,0 +1,457 @@
+/*
+ * Copyright (C) 2014 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Contacts.Data;
+import android.provider.ContactsContract.Contacts.Entity;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.Collapser;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test case for {@link DataItem}.
+ */
+@SmallTest
+public class DataItemTests extends AndroidTestCase {
+
+ private ContentValues mValues1;
+ private ContentValues mValues2;
+ private ContentValues mValues3;
+ private ContentValues mValues4;
+ private GoogleAccountType mGoogleAccountType;
+
+ @Override
+ protected void setUp() {
+ mValues1 = new ContentValues();
+ mValues2 = new ContentValues();
+ mValues3 = new ContentValues();
+ mValues4 = new ContentValues();
+
+ mValues1.put(Data._ID, 1);
+ mValues2.put(Data._ID, 2);
+ mValues3.put(Data._ID, 3);
+ mValues4.put(Data._ID, 4);
+
+ mGoogleAccountType = new GoogleAccountType(getContext(), "packageName");
+ }
+
+ private List<DataItem> createDataItemsAndCollapse(DataKind kind, ContentValues... values) {
+ final List<DataItem> dataList = new ArrayList<>(values.length);
+ for (ContentValues value : values) {
+ final DataItem data = DataItem.createFrom(value);
+ data.setDataKind(kind);
+ dataList.add(data);
+ }
+ Collapser.collapseList(dataList, getContext());
+ return dataList;
+ }
+
+ public void testDataItemCollapsing_genericDataItemFields() {
+ mValues1.put(Data.IS_SUPER_PRIMARY, 1);
+ mValues2.put(Data.IS_PRIMARY, 0);
+
+ mValues1.put(Entity.TIMES_USED, 5);
+ mValues2.put(Entity.TIMES_USED, 4);
+
+ mValues1.put(Entity.LAST_TIME_USED, 555);
+ mValues2.put(Entity.LAST_TIME_USED, 999);
+
+ final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
+ kind.actionBody = new BaseAccountType.SimpleInflater(0);
+ kind.typeList = new ArrayList<>();
+ kind.typeList.add(new EditType(1, -1));
+ kind.typeList.add(new EditType(2, -1));
+ kind.typeColumn = Data.DATA2;
+
+ mValues1.put(kind.typeColumn, 2);
+ mValues2.put(kind.typeColumn, 1);
+
+ final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2);
+
+ assertEquals(1, dataList.size());
+ assertEquals(true, dataList.get(0).isSuperPrimary());
+ assertEquals(true, dataList.get(0).isPrimary());
+ assertEquals(9, (int) dataList.get(0).getTimesUsed());
+ assertEquals(999L, (long) dataList.get(0).getLastTimeUsed());
+ assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
+ }
+
+ public void testDataItemCollapsing_email() {
+ final String email1 = "email1@google.com";
+ final String email2 = "email2@google.com";
+
+ mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Email.ADDRESS, email1);
+ mValues2.put(Email.ADDRESS, email1);
+ mValues3.put(Email.ADDRESS, email2);
+
+ mValues1.put(Email.TYPE, Email.TYPE_MOBILE);
+ mValues2.put(Email.TYPE, Email.TYPE_HOME);
+ mValues3.put(Email.TYPE, Email.TYPE_WORK);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress());
+ assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress());
+ assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME),
+ ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind));
+ }
+
+ public void testDataItemCollapsing_event() {
+ final String date1 = "2014-01-01";
+ final String date2 = "2014-02-02";
+ final String customLabel1 = "custom label1";
+ final String customLabel2 = "custom label2";
+
+ mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+ mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Event.START_DATE, date1);
+ mValues2.put(Event.START_DATE, date1);
+ mValues3.put(Event.START_DATE, date1);
+ mValues4.put(Event.START_DATE, date2);
+
+ mValues1.put(Event.TYPE, Event.TYPE_CUSTOM);
+ mValues2.put(Event.TYPE, Event.TYPE_CUSTOM);
+ mValues3.put(Event.TYPE, Event.TYPE_CUSTOM);
+ mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
+
+ mValues1.put(Event.LABEL, customLabel1);
+ mValues2.put(Event.LABEL, customLabel1);
+ mValues3.put(Event.LABEL, customLabel2);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+ assertEquals(3, dataList.size());
+ assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel());
+ assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel());
+ assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate());
+ }
+
+ public void testDataItemCollapsing_im() {
+ final String address1 = "address 1";
+ final String address2 = "address 2";
+ final String customProtocol1 = "custom 1";
+ final String customProtocol2 = "custom 2";
+
+ mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+ mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Im.DATA, address1);
+ mValues2.put(Im.DATA, address1);
+ mValues3.put(Im.DATA, address1);
+ mValues4.put(Im.DATA, address2);
+
+ mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+ mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+ mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+ mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM);
+
+ mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1);
+ mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1);
+ mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+ assertEquals(3, dataList.size());
+ assertEquals(address1, ((ImDataItem) dataList.get(0)).getData());
+ assertEquals(address1, ((ImDataItem) dataList.get(1)).getData());
+ assertEquals(address2, ((ImDataItem) dataList.get(2)).getData());
+
+ assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol());
+ assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol());
+ assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol());
+ }
+
+ public void testDataItemCollapsing_nickname() {
+ final String nickname1 = "nickname 1";
+ final String nickname2 = "nickname 2";
+
+ mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Nickname.NAME, nickname1);
+ mValues2.put(Nickname.NAME, nickname1);
+ mValues3.put(Nickname.NAME, nickname2);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName());
+ assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName());
+ }
+
+ public void testDataItemCollapsing_note() {
+ final String note1 = "note 1";
+ final String note2 = "note 2";
+
+ mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Note.NOTE, note1);
+ mValues2.put(Note.NOTE, note1);
+ mValues3.put(Note.NOTE, note2);
+
+ DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote());
+ assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote());
+ }
+
+ public void testDataItemCollapsing_organization() {
+ final String company1 = "company1";
+ final String company2 = "company2";
+ final String title1 = "title1";
+ final String title2 = "title2";
+
+ mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+ mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Organization.COMPANY, company1);
+ mValues2.put(Organization.COMPANY, company1);
+ mValues3.put(Organization.COMPANY, company1);
+ mValues4.put(Organization.COMPANY, company2);
+
+ mValues1.put(Organization.TITLE, title1);
+ mValues2.put(Organization.TITLE, title1);
+ mValues3.put(Organization.TITLE, title2);
+ mValues4.put(Organization.TITLE, title1);
+
+ final DataKind kind =
+ mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+ assertEquals(3, dataList.size());
+ assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany());
+ assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany());
+ assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany());
+
+ assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle());
+ assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle());
+ }
+
+ public void testDataItemCollapsing_phone() {
+ final String phone1 = "111-111-1111";
+ final String phone1a = "1111111111";
+ final String phone2 = "222-222-2222";
+
+ mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Phone.NUMBER, phone1);
+ mValues2.put(Phone.NUMBER, phone1a);
+ mValues3.put(Phone.NUMBER, phone2);
+
+ mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE);
+ mValues2.put(Phone.TYPE, Phone.TYPE_HOME);
+ mValues3.put(Phone.TYPE, Phone.TYPE_WORK);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+ assertEquals(2, dataList.size());
+ assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber());
+ assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber());
+ assertEquals(Phone.TYPE_MOBILE,
+ ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind));
+ }
+
+ public void testDataItemCollapsing_relation() {
+ final String name1 = "name1";
+ final String name2 = "name2";
+ final String customRelation1 = "custom relation 1";
+ final String customRelation2 = "custom relation 2";
+
+ mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+ mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Relation.NAME, name1);
+ mValues2.put(Relation.NAME, name1);
+ mValues3.put(Relation.NAME, name1);
+ mValues4.put(Relation.NAME, name2);
+
+ mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+ mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+ mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+ mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER);
+
+ mValues1.put(Relation.LABEL, customRelation1);
+ mValues2.put(Relation.LABEL, customRelation1);
+ mValues3.put(Relation.LABEL, customRelation2);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+ assertEquals(3, dataList.size());
+ assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName());
+ assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName());
+
+ assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel());
+ assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel());
+ }
+
+ public void testDataItemCollapsing_sip() {
+ final String sip1 = "sip 1";
+ final String sip2 = "sip 2";
+
+ mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+
+ mValues1.put(SipAddress.SIP_ADDRESS, sip1);
+ mValues2.put(SipAddress.SIP_ADDRESS, sip1);
+ mValues3.put(SipAddress.SIP_ADDRESS, sip2);
+
+ mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
+ mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME);
+ mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress());
+ assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress());
+ }
+
+ public void testDataItemCollapsing_structuredName() {
+ final String displayName1 = "Display Name 1";
+ final String displayName2 = "Display Name 2";
+
+ mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+
+ mValues1.put(StructuredName.DISPLAY_NAME, displayName1);
+ mValues2.put(StructuredName.DISPLAY_NAME, displayName1);
+ mValues3.put(StructuredName.DISPLAY_NAME, displayName2);
+
+ final DataKind kind =
+ mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName());
+ assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName());
+ }
+
+ public void testDataItemCollapsing_structuredPostal() {
+ final String formattedAddress1 = "Formatted Address 1";
+ final String formattedAddress2 = "Formatted Address 2";
+
+ mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+
+ mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
+ mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
+ mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2);
+
+ final DataKind kind =
+ mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(formattedAddress1,
+ ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress());
+ assertEquals(formattedAddress2,
+ ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress());
+ }
+
+ public void testDataItemCollapsing_website() {
+ final String url1 = "www.url1.com";
+ final String url2 = "www.url2.com";
+
+ mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+ mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+ mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+
+ mValues1.put(Website.URL, url1);
+ mValues2.put(Website.URL, url1);
+ mValues3.put(Website.URL, url2);
+
+ final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE);
+
+ final List<DataItem> dataList =
+ createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+ assertEquals(2, dataList.size());
+ assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl());
+ assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl());
+ }
+}
diff --git a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
new file mode 100644
index 000000000..bea8d147a
--- /dev/null
+++ b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
@@ -0,0 +1,239 @@
+/*
+ * 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.preference;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.support.test.InstrumentationRegistry;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import junit.framework.Assert;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+
+@SmallTest
+public class ContactsPreferencesTest extends InstrumentationTestCase {
+
+ private static final String ACCOUNT_KEY = "ACCOUNT_KEY";
+
+ @Mock private Context mContext;
+ @Mock private Resources mResources;
+ @Mock private SharedPreferences mSharedPreferences;
+
+ private ContactsPreferences mContactsPreferences;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ System.setProperty("dexmaker.dexcache",
+ getInstrumentation().getTargetContext().getCacheDir().getPath());
+ MockitoAnnotations.initMocks(this);
+
+ Mockito.when(mContext.getResources()).thenReturn(mResources);
+ Mockito.when(mResources.getString(Mockito.anyInt()))
+ .thenReturn(ACCOUNT_KEY); // contact_editor_default_account_key
+
+ Mockito.when(mContext.getSharedPreferences(Mockito.anyString(), Mockito.anyInt()))
+ .thenReturn(mSharedPreferences);
+ Mockito.when(mSharedPreferences.contains(ContactsPreferences.SORT_ORDER_KEY))
+ .thenReturn(true);
+ Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
+ .thenReturn(true);
+ Mockito.when(mSharedPreferences.contains(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY))
+ .thenReturn(true);
+
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mContactsPreferences = new ContactsPreferences(mContext);
+ }
+ });
+ }
+
+ public void testGetSortOrderDefault() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ false, // R.bool.config_sort_order_user_changeable
+ true // R.bool.config_default_sort_order_primary
+ );
+ Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+ mContactsPreferences.getSortOrder());
+ }
+
+ public void testGetSortOrder() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_sort_order_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
+ Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
+ Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+ mContactsPreferences.getSortOrder());
+ }
+
+ public void testGetDisplayOrderDefault() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ false, // R.bool.config_display_order_user_changeable
+ true // R.bool.config_default_display_order_primary
+ );
+ Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+ mContactsPreferences.getDisplayOrder());
+ }
+
+ public void testGetDisplayOrder() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_display_order_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
+ Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+ Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+ mContactsPreferences.getDisplayOrder());
+ }
+
+ public void testGetPhoneticNameDisplayDefault() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ false, // R.bool.config_phonetic_name_display_user_changeable
+ true // R.bool.config_default_hide_phonetic_name_if_empty
+ );
+ Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+ mContactsPreferences.getPhoneticNameDisplayPreference());
+ }
+
+ public void testGetPhoneticNameDisplay() {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_phonetic_name_display_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(
+ Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+ Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY);
+ Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+ mContactsPreferences.getPhoneticNameDisplayPreference());
+ }
+
+ public void testRefreshPhoneticNameDisplay() throws InterruptedException {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_phonetic_name_display_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(
+ Mockito.eq(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY),
+ Mockito.anyInt())).thenReturn(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+ PhoneticNameDisplayPreference.SHOW_ALWAYS);
+
+ Assert.assertEquals(PhoneticNameDisplayPreference.HIDE_IF_EMPTY,
+ mContactsPreferences.getPhoneticNameDisplayPreference());
+ mContactsPreferences.refreshValue(ContactsPreferences.PHONETIC_NAME_DISPLAY_KEY);
+
+ Assert.assertEquals(PhoneticNameDisplayPreference.SHOW_ALWAYS,
+ mContactsPreferences.getPhoneticNameDisplayPreference());
+ }
+
+ public void testRefreshSortOrder() throws InterruptedException {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_sort_order_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
+ Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY,
+ ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+
+ Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+ mContactsPreferences.getSortOrder());
+ mContactsPreferences.refreshValue(ContactsPreferences.SORT_ORDER_KEY);
+
+ Assert.assertEquals(ContactsPreferences.SORT_ORDER_ALTERNATIVE,
+ mContactsPreferences.getSortOrder());
+ }
+
+ public void testRefreshDisplayOrder() throws InterruptedException {
+ Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+ true // R.bool.config_display_order_user_changeable
+ );
+ Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
+ Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+ ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+
+ Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+ mContactsPreferences.getDisplayOrder());
+ mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY);
+
+ Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE,
+ mContactsPreferences.getDisplayOrder());
+ }
+
+ public void testRefreshDefaultAccount() throws InterruptedException {
+ mContactsPreferences = new ContactsPreferences(mContext,
+ /* isDefaultAccountUserChangeable */ true);
+
+ Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+ .thenReturn(new AccountWithDataSet("name1", "type1", "dataset1").stringify(),
+ new AccountWithDataSet("name2", "type2", "dataset2").stringify());
+
+ Assert.assertEquals(new AccountWithDataSet("name1", "type1", "dataset1"),
+ mContactsPreferences.getDefaultAccount());
+ mContactsPreferences.refreshValue(ACCOUNT_KEY);
+
+ Assert.assertEquals(new AccountWithDataSet("name2", "type2", "dataset2"),
+ mContactsPreferences.getDefaultAccount());
+ }
+
+ public void testShouldShowAccountChangedNotificationIfAccountNotSaved() {
+ mContactsPreferences = new ContactsPreferences(mContext,
+ /* isDefaultAccountUserChangeable */ true);
+ Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+ .thenReturn(null);
+
+ assertTrue("Should prompt to change default if no default is saved",
+ mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+ new AccountWithDataSet("name1", "type1", "dataset1"),
+ new AccountWithDataSet("name2", "type2", "dataset2"))));
+ }
+
+ public void testShouldShowAccountChangedNotification() {
+ mContactsPreferences = new ContactsPreferences(mContext,
+ /* isDefaultAccountUserChangeable */ true);
+ Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+ .thenReturn(new AccountWithDataSet("name", "type", "dataset").stringify());
+
+ assertFalse("Should not prompt to change default if current default exists",
+ mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+ new AccountWithDataSet("name", "type", "dataset"),
+ new AccountWithDataSet("name1", "type1", "dataset1"))));
+
+ assertTrue("Should prompt to change default if current default does not exist",
+ mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+ new AccountWithDataSet("name1", "type1", "dataset1"),
+ new AccountWithDataSet("name2", "type2", "dataset2"))));
+ }
+
+ public void testShouldShowAccountChangedNotificationWhenThereIsOneAccount() {
+ mContactsPreferences = new ContactsPreferences(mContext,
+ /* isDefaultAccountUserChangeable */ true);
+ Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+ .thenReturn(null);
+
+ // Normally we would prompt because there is no default set but if there is just one
+ // account we should just use it.
+ assertFalse("Should not prompt to change default if there is only one account available",
+ mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+ new AccountWithDataSet("name", "type", "dataset"))));
+ }
+}
diff --git a/tests/src/com/android/contacts/test/FragmentTestActivity.java b/tests/src/com/android/contacts/test/FragmentTestActivity.java
new file mode 100644
index 000000000..d58dc8ff2
--- /dev/null
+++ b/tests/src/com/android/contacts/test/FragmentTestActivity.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2010 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.test;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+
+/**
+ * An activity that is used for testing fragments. A unit test starts this
+ * activity, adds a fragment and then tests the fragment.
+ */
+public class FragmentTestActivity extends Activity {
+
+ public final static int LAYOUT_ID = 1;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Normally fragment/activity onStart() methods will not be called when screen is locked.
+ // Use the following flags to ensure that activities can be show for testing.
+ final Window window = getWindow();
+ window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+
+ final FrameLayout layout = new FrameLayout(this);
+ layout.setId(LAYOUT_ID);
+ setContentView(layout);
+ }
+}
diff --git a/tests/src/com/android/contacts/test/IntegrationTestUtils.java b/tests/src/com/android/contacts/test/IntegrationTestUtils.java
new file mode 100644
index 000000000..60bb65b5e
--- /dev/null
+++ b/tests/src/com/android/contacts/test/IntegrationTestUtils.java
@@ -0,0 +1,192 @@
+/*
+ * 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.test;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.os.PowerManager;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.google.common.base.Preconditions;
+
+import junit.framework.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
+import javax.annotation.concurrent.GuardedBy;
+import javax.annotation.concurrent.ThreadSafe;
+
+/** Some utility methods for making integration testing smoother. */
+@ThreadSafe
+public class IntegrationTestUtils {
+ private static final String TAG = "IntegrationTestUtils";
+
+ private final Instrumentation mInstrumentation;
+ private final Object mLock = new Object();
+ @GuardedBy("mLock") private PowerManager.WakeLock mWakeLock;
+
+ public IntegrationTestUtils(Instrumentation instrumentation) {
+ mInstrumentation = instrumentation;
+ }
+
+ /**
+ * Find a view by a given resource id, from the given activity, and click it, iff it is
+ * enabled according to {@link View#isEnabled()}.
+ */
+ public void clickButton(final Activity activity, final int buttonResourceId) throws Throwable {
+ runOnUiThreadAndGetTheResult(new Callable<Void>() {
+ @Override
+ public Void call() throws Exception {
+ View view = activity.findViewById(buttonResourceId);
+ Assert.assertNotNull(view);
+ if (view.isEnabled()) {
+ view.performClick();
+ }
+ return null;
+ }
+ });
+ }
+
+ /** Returns the result of running {@link TextView#getText()} on the ui thread. */
+ public CharSequence getText(final TextView view) throws Throwable {
+ return runOnUiThreadAndGetTheResult(new Callable<CharSequence>() {
+ @Override
+ public CharSequence call() {
+ return view.getText();
+ }
+ });
+ }
+
+ // TODO: Move this class and the appropriate documentation into a test library, having checked
+ // first to see if exactly this code already exists or not.
+ /**
+ * Execute a callable on the ui thread, returning its result synchronously.
+ * <p>
+ * Waits for an idle sync on the main thread (see {@link Instrumentation#waitForIdle(Runnable)})
+ * before executing this callable.
+ */
+ public <T> T runOnUiThreadAndGetTheResult(Callable<T> callable) throws Throwable {
+ FutureTask<T> future = new FutureTask<T>(callable);
+ mInstrumentation.waitForIdle(future);
+ try {
+ return future.get();
+ } catch (ExecutionException e) {
+ // Unwrap the cause of the exception and re-throw it.
+ throw e.getCause();
+ }
+ }
+
+ /**
+ * Wake up the screen, useful in tests that want or need the screen to be on.
+ * <p>
+ * This is usually called from setUp() for tests that require it. After calling this method,
+ * {@link #releaseScreenWakeLock()} must be called, this is usually done from tearDown().
+ */
+ public void acquireScreenWakeLock(Context context) {
+ synchronized (mLock) {
+ Preconditions.checkState(mWakeLock == null, "mWakeLock was already held");
+ mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
+ .newWakeLock(
+ PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE | PowerManager.FULL_WAKE_LOCK, TAG);
+ mWakeLock.acquire();
+ }
+ }
+
+ /** Release the wake lock previously acquired with {@link #acquireScreenWakeLock(Context)}. */
+ public void releaseScreenWakeLock() {
+ synchronized (mLock) {
+ // We don't use Preconditions to force you to have acquired before release.
+ // This is because we don't want unnecessary exceptions in tearDown() since they'll
+ // typically mask the actual exception that happened during the test.
+ // The other reason is that this method is most likely to be called from tearDown(),
+ // which is invoked within a finally block, so it's not infrequently the case that
+ // the setUp() method fails before getting the lock, at which point we don't want
+ // to fail in tearDown().
+ if (mWakeLock != null) {
+ mWakeLock.release();
+ mWakeLock = null;
+ }
+ }
+ }
+
+ /**
+ * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
+ * a substring.
+ */
+ public List<TextView> getTextViewsWithString(final Activity activity, final String text)
+ throws Throwable {
+ return getTextViewsWithString(getRootView(activity), text);
+ }
+
+ /**
+ * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
+ * a substring for the given root view.
+ */
+ public List<TextView> getTextViewsWithString(final View rootView, final String text)
+ throws Throwable {
+ return runOnUiThreadAndGetTheResult(new Callable<List<TextView>>() {
+ @Override
+ public List<TextView> call() throws Exception {
+ List<TextView> matchingViews = new ArrayList<TextView>();
+ for (TextView textView : getAllViews(TextView.class, rootView)) {
+ if (textView.getText().toString().contains(text)) {
+ matchingViews.add(textView);
+ }
+ }
+ return matchingViews;
+ }
+ });
+ }
+
+ /** Find the root view for a given activity. */
+ public static View getRootView(Activity activity) {
+ return activity.findViewById(android.R.id.content).getRootView();
+ }
+
+ /**
+ * Gets a list of all views of a given type, rooted at the given parent.
+ * <p>
+ * This method will recurse down through all {@link ViewGroup} instances looking for
+ * {@link View} instances of the supplied class type. Specifically it will use the
+ * {@link Class#isAssignableFrom(Class)} method as the test for which views to add to the list,
+ * so if you provide {@code View.class} as your type, you will get every view. The parent itself
+ * will be included also, should it be of the right type.
+ * <p>
+ * This call manipulates the ui, and as such should only be called from the application's main
+ * thread.
+ */
+ private static <T extends View> List<T> getAllViews(final Class<T> clazz, final View parent) {
+ List<T> results = new ArrayList<T>();
+ if (parent.getClass().equals(clazz)) {
+ results.add(clazz.cast(parent));
+ }
+ if (parent instanceof ViewGroup) {
+ ViewGroup viewGroup = (ViewGroup) parent;
+ for (int i = 0; i < viewGroup.getChildCount(); ++i) {
+ results.addAll(getAllViews(clazz, viewGroup.getChildAt(i)));
+ }
+ }
+ return results;
+ }
+}
diff --git a/tests/src/com/android/contacts/test/LaunchPerformanceBase.java b/tests/src/com/android/contacts/test/LaunchPerformanceBase.java
new file mode 100644
index 000000000..8feb604f6
--- /dev/null
+++ b/tests/src/com/android/contacts/test/LaunchPerformanceBase.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.test;
+
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.os.Bundle;
+
+
+/**
+ * Base class for all launch performance Instrumentation classes.
+ */
+public class LaunchPerformanceBase extends Instrumentation {
+
+ public static final String LOG_TAG = "Launch Performance";
+
+ protected Bundle mResults;
+ protected Intent mIntent;
+
+ public LaunchPerformanceBase() {
+ mResults = new Bundle();
+ mIntent = new Intent(Intent.ACTION_MAIN);
+ mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ setAutomaticPerformanceSnapshots();
+ }
+
+ /**
+ * Launches intent, and waits for idle before returning.
+ *
+ * @hide
+ */
+ protected void LaunchApp() {
+ startActivitySync(mIntent);
+ waitForIdleSync();
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java b/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java
new file mode 100644
index 000000000..293f8e779
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2010 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.test.mocks;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.test.mock.MockContentResolver;
+
+/**
+ * A mock context for contacts unit tests. Forwards everything to
+ * a supplied context, except content resolver operations, which are sent
+ * to mock content providers.
+ */
+public class ContactsMockContext extends ContextWrapper {
+ private ContactsMockPackageManager mPackageManager;
+ private MockContentResolver mContentResolver;
+ private MockContentProvider mContactsProvider;
+ private MockContentProvider mSettingsProvider;
+ private Intent mIntentForStartActivity;
+
+ public ContactsMockContext(Context base) {
+ this(base, ContactsContract.AUTHORITY);
+ }
+
+ public ContactsMockContext(Context base, String authority) {
+ super(base);
+ mPackageManager = new ContactsMockPackageManager();
+ mContentResolver = new MockContentResolver();
+ mContactsProvider = new MockContentProvider();
+ mContentResolver.addProvider(authority, mContactsProvider);
+ mSettingsProvider = new MockContentProvider();
+ mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider);
+ }
+
+ @Override
+ public ContentResolver getContentResolver() {
+ return mContentResolver;
+ }
+
+ public MockContentProvider getContactsProvider() {
+ return mContactsProvider;
+ }
+
+ public MockContentProvider getSettingsProvider() {
+ return mSettingsProvider;
+ }
+
+ @Override
+ public PackageManager getPackageManager() {
+ return mPackageManager;
+ }
+
+ @Override
+ public Context getApplicationContext() {
+ return this;
+ }
+
+ /**
+ * Instead of actually sending Intent, this method just remembers what Intent was supplied last.
+ * You can check the content via {@link #getIntentForStartActivity()} for verification.
+ */
+ @Override
+ public void startActivity(Intent intent) {
+ mIntentForStartActivity = intent;
+ }
+
+ public Intent getIntentForStartActivity() {
+ return mIntentForStartActivity;
+ }
+
+ public void verify() {
+ mContactsProvider.verify();
+ mSettingsProvider.verify();
+ }
+
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java b/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java
new file mode 100644
index 000000000..275b8b78d
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2010 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.test.mocks;
+
+import android.content.ComponentName;
+import android.content.pm.ApplicationInfo;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.test.mock.MockPackageManager;
+
+/**
+ */
+public class ContactsMockPackageManager extends MockPackageManager {
+ public ContactsMockPackageManager() {
+ }
+
+ @Override
+ public Drawable getActivityLogo(ComponentName activityName) throws NameNotFoundException {
+ return new ColorDrawable();
+ }
+
+ @Override
+ public Drawable getActivityIcon(ComponentName activityName) {
+ return new ColorDrawable();
+ }
+
+ @Override
+ public Drawable getDrawable(String packageName, int resid, ApplicationInfo appInfo) {
+ // TODO: make programmable
+ return new ColorDrawable();
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
new file mode 100644
index 000000000..b6ca983c9
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
@@ -0,0 +1,206 @@
+/*
+ * 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.test.mocks;
+
+import android.content.ContentProviderClient;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentValues;
+import android.content.OperationApplicationException;
+import android.content.res.AssetFileDescriptor;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+
+/**
+ * Forwards calls to a {@link ContentProviderClient}
+ *
+ * <p>This allows mixing use of the system content providers in a
+ * {@link android.test.mock.MockContentResolver}
+ * </p>
+ */
+public class ForwardingContentProvider extends android.test.mock.MockContentProvider {
+
+ private final ContentProviderClient mClient;
+
+ public ForwardingContentProvider(ContentProviderClient client) {
+ mClient = client;
+ }
+
+ @Override
+ public synchronized Cursor query(Uri url, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder) {
+ try {
+ return mClient.query(url, projection, selection, selectionArgs, sortOrder);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized Cursor query(Uri url, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) {
+ try {
+ return mClient.query(url, projection, selection, selectionArgs, sortOrder,
+ cancellationSignal);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized String getType(Uri url) {
+ try {
+ return mClient.getType(url);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized String[] getStreamTypes(Uri url, String mimeTypeFilter) {
+ try {
+ return mClient.getStreamTypes(url, mimeTypeFilter);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized Uri insert(Uri url, ContentValues initialValues) {
+ try {
+ return mClient.insert(url, initialValues);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized int bulkInsert(Uri url, ContentValues[] initialValues) {
+ try {
+ return mClient.bulkInsert(url, initialValues);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized int delete(Uri url, String selection, String[] selectionArgs) {
+ try {
+ return mClient.delete(url, selection, selectionArgs);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized int update(Uri url, ContentValues values,
+ String selection, String[] selectionArgs) {
+ try {
+ return mClient.update(url, values, selection, selectionArgs);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized ParcelFileDescriptor openFile(Uri url, String mode) {
+ try {
+ return mClient.openFile(url, mode);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized ParcelFileDescriptor openFile(Uri url, String mode,
+ CancellationSignal signal) {
+ try {
+ return mClient.openFile(url, mode, signal);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized AssetFileDescriptor openAssetFile(Uri url, String mode) {
+ try {
+ return mClient.openAssetFile(url, mode);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized AssetFileDescriptor openAssetFile(Uri url, String mode,
+ CancellationSignal signal) {
+ try {
+ return mClient.openAssetFile(url, mode, signal);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public synchronized AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri, String mimeType,
+ Bundle opts) {
+ try {
+ return mClient.openTypedAssetFileDescriptor(uri, mimeType, opts);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public synchronized AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri, String mimeType,
+ Bundle opts, CancellationSignal signal) {
+ try {
+ return mClient.openTypedAssetFileDescriptor(uri, mimeType, opts, signal);
+ } catch (RemoteException|FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public synchronized ContentProviderResult[] applyBatch(
+ ArrayList<ContentProviderOperation> operations) {
+ try {
+ return mClient.applyBatch(operations);
+ } catch (RemoteException|OperationApplicationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Nullable
+ @Override
+ public synchronized Bundle call(String method, String arg, Bundle extras) {
+ try {
+ return mClient.call(method, arg, extras);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java b/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java
new file mode 100644
index 000000000..d5c1ccb33
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2010 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.test.mocks;
+
+import android.accounts.Account;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A mock {@link AccountTypeManager} class.
+ */
+public class MockAccountTypeManager extends AccountTypeManager {
+
+ public AccountType[] mTypes;
+ public AccountWithDataSet[] mAccounts;
+
+ public MockAccountTypeManager(AccountType[] types, AccountWithDataSet[] accounts) {
+ this.mTypes = types;
+ this.mAccounts = accounts;
+ }
+
+ @Override
+ public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+ // Add fallback accountType to mimic the behavior of AccountTypeManagerImpl
+ AccountType mFallbackAccountType = new BaseAccountType() {
+ @Override
+ public boolean areContactsWritable() {
+ return false;
+ }
+ };
+ mFallbackAccountType.accountType = "fallback";
+ for (AccountType type : mTypes) {
+ if (Objects.equal(accountTypeWithDataSet.accountType, type.accountType)
+ && Objects.equal(accountTypeWithDataSet.dataSet, type.dataSet)) {
+ return type;
+ }
+ }
+ return mFallbackAccountType;
+ }
+
+ @Override
+ public List<AccountWithDataSet> blockForWritableAccounts() {
+ return Arrays.asList(mAccounts);
+ }
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public ListenableFuture<List<AccountInfo>> filterAccountsAsync(Predicate<AccountInfo> filter) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public Account getDefaultGoogleAccount() {
+ return null;
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java b/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java
new file mode 100644
index 000000000..e0bd42585
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java
@@ -0,0 +1,72 @@
+/*
+ * 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.test.mocks;
+
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.android.contacts.ContactPhotoManager;
+
+/**
+ * A photo preloader that always uses the "no contact" picture and never executes any real
+ * db queries
+ */
+public class MockContactPhotoManager extends ContactPhotoManager {
+ @Override
+ public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
+ DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
+ defaultProvider.applyDefaultImage(view, -1, darkTheme, null);
+ }
+
+ @Override
+ public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
+ defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, null);
+ }
+
+ @Override
+ public void removePhoto(ImageView view) {
+ view.setImageDrawable(null);
+ }
+
+ @Override
+ public void cancelPendingRequests(View fragmentRootView) {
+ }
+
+ @Override
+ public void pause() {
+ }
+
+ @Override
+ public void resume() {
+ }
+
+ @Override
+ public void refreshCache() {
+ }
+
+ @Override
+ public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+ }
+
+ @Override
+ public void preloadPhotosInBackground() {
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockContentProvider.java b/tests/src/com/android/contacts/test/mocks/MockContentProvider.java
new file mode 100644
index 000000000..3b96e3a43
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockContentProvider.java
@@ -0,0 +1,699 @@
+/*
+ * Copyright (C) 2010 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.test.mocks;
+
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.support.annotation.Nullable;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
+
+import junit.framework.Assert;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * A programmable mock content provider.
+ */
+public class MockContentProvider extends android.test.mock.MockContentProvider {
+ private static final String TAG = "MockContentProvider";
+
+ public static class Query {
+
+ private final Uri mUri;
+ private UriMatcher mMatcher;
+
+ private String[] mProjection;
+ private String[] mDefaultProjection;
+ private String mSelection;
+ private String[] mSelectionArgs;
+ private String mSortOrder;
+ private List<Object> mRows = new ArrayList<>();
+ private boolean mAnyProjection;
+ private boolean mAnySelection;
+ private boolean mAnySortOrder;
+ private boolean mAnyNumberOfTimes;
+
+ private boolean mExecuted;
+
+ private Query() {
+ mUri = null;
+ }
+
+ private Query(UriMatcher matcher) {
+ mUri = null;
+ mMatcher = matcher;
+ }
+
+ public Query(Uri uri) {
+ mUri = uri;
+ }
+
+ @Override
+ public String toString() {
+ return queryToString(mUri, mProjection, mSelection, mSelectionArgs, mSortOrder);
+ }
+
+ public Query withProjection(String... projection) {
+ mProjection = projection;
+ return this;
+ }
+
+ public Query withDefaultProjection(String... projection) {
+ mDefaultProjection = projection;
+ return this;
+ }
+
+ public Query withAnyProjection() {
+ mAnyProjection = true;
+ return this;
+ }
+
+ public Query withSelection(String selection, String... selectionArgs) {
+ mSelection = selection;
+ mSelectionArgs = selectionArgs;
+ return this;
+ }
+
+ public Query withAnySelection() {
+ mAnySelection = true;
+ return this;
+ }
+
+ public Query withSortOrder(String sortOrder) {
+ mSortOrder = sortOrder;
+ return this;
+ }
+
+ public Query withAnySortOrder() {
+ mAnySortOrder = true;
+ return this;
+ }
+
+ public Query returnRow(ContentValues values) {
+ mRows.add(values);
+ return this;
+ }
+
+ public Query returnRow(Object... row) {
+ mRows.add(row);
+ return this;
+ }
+
+ public Query returnEmptyCursor() {
+ mRows.clear();
+ return this;
+ }
+
+ public Query anyNumberOfTimes() {
+ mAnyNumberOfTimes = true;
+ return this;
+ }
+
+ public boolean equals(Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder) {
+ if (mUri == null) {
+ if (mMatcher != null && mMatcher.match(uri) == UriMatcher.NO_MATCH) {
+ return false;
+ }
+ } else if (!uri.equals(mUri)) {
+ return false;
+ }
+
+ if (!mAnyProjection && !Arrays.equals(projection, mProjection)) {
+ return false;
+ }
+
+ if (!mAnySelection && !Objects.equals(selection, mSelection)) {
+ return false;
+ }
+
+ if (!mAnySelection && !Arrays.equals(selectionArgs, mSelectionArgs)) {
+ return false;
+ }
+
+ if (!mAnySortOrder && !Objects.equals(sortOrder, mSortOrder)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public Cursor getResult(String[] projection) {
+ String[] columnNames;
+ if (mAnyProjection) {
+ columnNames = projection != null ? projection : mDefaultProjection;
+ } else {
+ columnNames = mProjection != null ? mProjection : mDefaultProjection;
+ }
+
+ MatrixCursor cursor = new MatrixCursor(columnNames);
+ for (Object row : mRows) {
+ if (row instanceof Object[]) {
+ cursor.addRow((Object[]) row);
+ } else {
+ ContentValues values = (ContentValues) row;
+ Object[] columns = new Object[columnNames.length];
+ for (int i = 0; i < columnNames.length; i++) {
+ columns[i] = values.get(columnNames[i]);
+ }
+ cursor.addRow(columns);
+ }
+ }
+ return cursor;
+ }
+
+ public static Query forAnyUri() {
+ return new Query();
+ }
+
+ public static Query forUrisMatching(UriMatcher matcher) {
+ return new Query(matcher);
+ }
+
+ public static Query forUrisMatching(String authority, String... paths) {
+ final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
+ for (int i = 0; i < paths.length; i++) {
+ matcher.addURI(authority, paths[i], i);
+ }
+ return new Query(matcher);
+ }
+
+ }
+
+ public static class TypeQuery {
+ private final Uri mUri;
+ private final String mType;
+
+ public TypeQuery(Uri uri, String type) {
+ mUri = uri;
+ mType = type;
+ }
+
+ public Uri getUri() {
+ return mUri;
+ }
+
+ public String getType() {
+ return mType;
+ }
+
+ @Override
+ public String toString() {
+ return mUri + " --> " + mType;
+ }
+
+ public boolean equals(Uri uri) {
+ return getUri().equals(uri);
+ }
+ }
+
+ public static class Insert {
+ private final Uri mUri;
+ private final ContentValues mContentValues;
+ private final Uri mResultUri;
+ private boolean mAnyNumberOfTimes;
+ private boolean mIsExecuted;
+
+ /**
+ * Creates a new Insert to expect.
+ *
+ * @param uri the uri of the insertion request.
+ * @param contentValues the ContentValues to insert.
+ * @param resultUri the {@link Uri} for the newly inserted item.
+ * @throws NullPointerException if any parameter is {@code null}.
+ */
+ public Insert(Uri uri, ContentValues contentValues, Uri resultUri) {
+ mUri = Preconditions.checkNotNull(uri);
+ mContentValues = Preconditions.checkNotNull(contentValues);
+ mResultUri = Preconditions.checkNotNull(resultUri);
+ }
+
+ /**
+ * Causes this insert expectation to be useable for mutliple calls to insert, rather than
+ * just one.
+ *
+ * @return this
+ */
+ public Insert anyNumberOfTimes() {
+ mAnyNumberOfTimes = true;
+ return this;
+ }
+
+ private boolean equals(Uri uri, ContentValues contentValues) {
+ return mUri.equals(uri) && mContentValues.equals(contentValues);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Insert insert = (Insert) o;
+ return mAnyNumberOfTimes == insert.mAnyNumberOfTimes &&
+ mIsExecuted == insert.mIsExecuted &&
+ Objects.equals(mUri, insert.mUri) &&
+ Objects.equals(mContentValues, insert.mContentValues) &&
+ Objects.equals(mResultUri, insert.mResultUri);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mUri, mContentValues, mResultUri, mAnyNumberOfTimes, mIsExecuted);
+ }
+
+ @Override
+ public String toString() {
+ return "Insert{" +
+ "mUri=" + mUri +
+ ", mContentValues=" + mContentValues +
+ ", mResultUri=" + mResultUri +
+ ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
+ ", mIsExecuted=" + mIsExecuted +
+ '}';
+ }
+ }
+
+ public static class Delete {
+ private final Uri mUri;
+
+ private boolean mAnyNumberOfTimes;
+ private boolean mAnySelection;
+ @Nullable private String mSelection;
+ @Nullable private String[] mSelectionArgs;
+ private boolean mIsExecuted;
+ private int mRowsAffected;
+
+ /**
+ * Creates a new Delete to expect.
+ * @param uri the uri of the delete request.
+ * @throws NullPointerException if uri is {@code null}.
+ */
+ public Delete(Uri uri) {
+ mUri = Preconditions.checkNotNull(uri);
+ }
+
+ /**
+ * Sets the given information as expected selection arguments.
+ *
+ * @param selection The selection to expect.
+ * @param selectionArgs The selection args to expect.
+ * @return this.
+ */
+ public Delete withSelection(String selection, @Nullable String[] selectionArgs) {
+ mSelection = Preconditions.checkNotNull(selection);
+ mSelectionArgs = selectionArgs;
+ mAnySelection = false;
+ return this;
+ }
+
+ /**
+ * Sets this delete to expect any selection arguments.
+ *
+ * @return this.
+ */
+ public Delete withAnySelection() {
+ mAnySelection = true;
+ return this;
+ }
+
+ /**
+ * Sets this delete to return the given number of rows affected.
+ *
+ * @param rowsAffected The value to return when this expected delete is executed.
+ * @return this.
+ */
+ public Delete returnRowsAffected(int rowsAffected) {
+ mRowsAffected = rowsAffected;
+ return this;
+ }
+
+ /**
+ * Causes this delete expectation to be useable for multiple calls to delete, rather than
+ * just one.
+ *
+ * @return this.
+ */
+ public Delete anyNumberOfTimes() {
+ mAnyNumberOfTimes = true;
+ return this;
+ }
+
+ private boolean equals(Uri uri, String selection, String[] selectionArgs) {
+ return mUri.equals(uri) && Objects.equals(mSelection, selection)
+ && Arrays.equals(mSelectionArgs, selectionArgs);
+ }
+ }
+
+ public static class Update {
+ private final Uri mUri;
+ private final ContentValues mContentValues;
+ @Nullable private String mSelection;
+ @Nullable private String[] mSelectionArgs;
+ private boolean mAnyNumberOfTimes;
+ private boolean mIsExecuted;
+ private int mRowsAffected;
+
+ /**
+ * Creates a new Update to expect.
+ *
+ * @param uri the uri of the update request.
+ * @param contentValues the ContentValues to update.
+ *
+ * @throws NullPointerException if any parameter is {@code null}.
+ */
+ public Update(Uri uri,
+ ContentValues contentValues,
+ @Nullable String selection,
+ @Nullable String[] selectionArgs) {
+ mUri = Preconditions.checkNotNull(uri);
+ mContentValues = Preconditions.checkNotNull(contentValues);
+ mSelection = selection;
+ mSelectionArgs = selectionArgs;
+ }
+
+ /**
+ * Causes this update expectation to be useable for mutliple calls to update, rather than
+ * just one.
+ *
+ * @return this
+ */
+ public Update anyNumberOfTimes() {
+ mAnyNumberOfTimes = true;
+ return this;
+ }
+
+ /**
+ * Sets this update to return the given number of rows affected.
+ *
+ * @param rowsAffected The value to return when this expected update is executed.
+ * @return this.
+ */
+ public Update returnRowsAffected(int rowsAffected) {
+ mRowsAffected = rowsAffected;
+ return this;
+ }
+
+ private boolean equals(Uri uri,
+ ContentValues contentValues,
+ @Nullable String selection,
+ @Nullable String[] selectionArgs) {
+ return mUri.equals(uri) && mContentValues.equals(contentValues) &&
+ Objects.equals(mSelection, selection) &&
+ Arrays.equals(mSelectionArgs, selectionArgs);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Update update = (Update) o;
+ return mAnyNumberOfTimes == update.mAnyNumberOfTimes &&
+ mIsExecuted == update.mIsExecuted &&
+ Objects.equals(mUri, update.mUri) &&
+ Objects.equals(mContentValues, update.mContentValues) &&
+ Objects.equals(mSelection, update.mSelection) &&
+ Arrays.equals(mSelectionArgs, update.mSelectionArgs);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mUri, mContentValues, mAnyNumberOfTimes, mIsExecuted, mSelection,
+ Arrays.hashCode(mSelectionArgs));
+ }
+
+ @Override
+ public String toString() {
+ return "Update{" +
+ "mUri=" + mUri +
+ ", mContentValues=" + mContentValues +
+ ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
+ ", mIsExecuted=" + mIsExecuted +
+ ", mSelection=" + mSelection +
+ ", mSelectionArgs=" + Arrays.toString(mSelectionArgs) +
+ '}';
+ }
+ }
+
+ private List<Query> mExpectedQueries = new ArrayList<>();
+ private Map<Uri, String> mExpectedTypeQueries = Maps.newHashMap();
+ private List<Insert> mExpectedInserts = new ArrayList<>();
+ private List<Delete> mExpectedDeletes = new ArrayList<>();
+ private List<Update> mExpectedUpdates = new ArrayList<>();
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ public Query expect(Query query) {
+ mExpectedQueries.add(query);
+ return query;
+ }
+
+ public Query expectQuery(Uri contentUri) {
+ return expect(new Query(contentUri));
+ }
+
+ public Query expectQuery(String contentUri) {
+ return expectQuery(Uri.parse(contentUri));
+ }
+
+ public void expectTypeQuery(Uri uri, String type) {
+ mExpectedTypeQueries.put(uri, type);
+ }
+
+ public void expectInsert(Uri contentUri, ContentValues contentValues, Uri resultUri) {
+ mExpectedInserts.add(new Insert(contentUri, contentValues, resultUri));
+ }
+
+ public Update expectUpdate(Uri contentUri,
+ ContentValues contentValues,
+ @Nullable String selection,
+ @Nullable String[] selectionArgs) {
+ Update update = new Update(contentUri, contentValues, selection, selectionArgs);
+ mExpectedUpdates.add(update);
+ return update;
+ }
+
+ public Delete expectDelete(Uri contentUri) {
+ Delete delete = new Delete(contentUri);
+ mExpectedDeletes.add(delete);
+ return delete;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+ if (mExpectedQueries.isEmpty()) {
+ Assert.fail("Unexpected query: Actual:"
+ + queryToString(uri, projection, selection, selectionArgs, sortOrder));
+ }
+
+ for (Iterator<Query> iterator = mExpectedQueries.iterator(); iterator.hasNext();) {
+ Query query = iterator.next();
+ if (query.equals(uri, projection, selection, selectionArgs, sortOrder)) {
+ query.mExecuted = true;
+ if (!query.mAnyNumberOfTimes) {
+ iterator.remove();
+ }
+ return query.getResult(projection);
+ }
+ }
+
+ Assert.fail("Incorrect query. Expected one of: " + mExpectedQueries + ". Actual: " +
+ queryToString(uri, projection, selection, selectionArgs, sortOrder));
+ return null;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ if (mExpectedTypeQueries.isEmpty()) {
+ Assert.fail("Unexpected getType query: " + uri);
+ }
+
+ String mimeType = mExpectedTypeQueries.get(uri);
+ if (mimeType != null) {
+ return mimeType;
+ }
+
+ Assert.fail("Unknown mime type for: " + uri);
+ return null;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ if (mExpectedInserts.isEmpty()) {
+ Assert.fail("Unexpected insert. Actual: " + insertToString(uri, values));
+ }
+ for (Iterator<Insert> iterator = mExpectedInserts.iterator(); iterator.hasNext(); ) {
+ Insert insert = iterator.next();
+ if (insert.equals(uri, values)) {
+ insert.mIsExecuted = true;
+ if (!insert.mAnyNumberOfTimes) {
+ iterator.remove();
+ }
+ return insert.mResultUri;
+ }
+ }
+
+ Assert.fail("Incorrect insert. Expected one of: " + mExpectedInserts + ". Actual: "
+ + insertToString(uri, values));
+ return null;
+ }
+
+ private String insertToString(Uri uri, ContentValues contentValues) {
+ return "Insert { uri=" + uri + ", contentValues=" + contentValues + '}';
+ }
+
+ @Override
+ public int update(Uri uri,
+ ContentValues values,
+ @Nullable String selection,
+ @Nullable String[] selectionArgs) {
+ if (mExpectedUpdates.isEmpty()) {
+ Assert.fail("Unexpected update. Actual: "
+ + updateToString(uri, values, selection, selectionArgs));
+ }
+ for (Iterator<Update> iterator = mExpectedUpdates.iterator(); iterator.hasNext(); ) {
+ Update update = iterator.next();
+ if (update.equals(uri, values, selection, selectionArgs)) {
+ update.mIsExecuted = true;
+ if (!update.mAnyNumberOfTimes) {
+ iterator.remove();
+ }
+ return update.mRowsAffected;
+ }
+ }
+
+ Assert.fail("Incorrect update. Expected one of: " + mExpectedUpdates + ". Actual: "
+ + updateToString(uri, values, selection, selectionArgs));
+ return - 1;
+ }
+
+ private String updateToString(Uri uri,
+ ContentValues contentValues,
+ @Nullable String selection,
+ @Nullable String[] selectionArgs) {
+ return "Update { uri=" + uri + ", contentValues=" + contentValues + ", selection=" +
+ selection + ", selectionArgs" + Arrays.toString(selectionArgs) + '}';
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ if (mExpectedDeletes.isEmpty()) {
+ Assert.fail("Unexpected delete. Actual: " + deleteToString(uri, selection,
+ selectionArgs));
+ }
+ for (Iterator<Delete> iterator = mExpectedDeletes.iterator(); iterator.hasNext(); ) {
+ Delete delete = iterator.next();
+ if (delete.equals(uri, selection, selectionArgs)) {
+ delete.mIsExecuted = true;
+ if (!delete.mAnyNumberOfTimes) {
+ iterator.remove();
+ }
+ return delete.mRowsAffected;
+ }
+ }
+ Assert.fail("Incorrect delete. Expected one of: " + mExpectedDeletes + ". Actual: "
+ + deleteToString(uri, selection, selectionArgs));
+ return -1;
+ }
+
+ private String deleteToString(Uri uri, String selection, String[] selectionArgs) {
+ return "Delete { uri=" + uri + ", selection=" + selection + ", selectionArgs"
+ + Arrays.toString(selectionArgs) + '}';
+ }
+
+ private static String queryToString(Uri uri, String[] projection, String selection,
+ String[] selectionArgs, String sortOrder) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(uri == null ? "<Any Uri>" : uri).append(" ");
+ if (projection != null) {
+ sb.append(Arrays.toString(projection));
+ } else {
+ sb.append("[]");
+ }
+ if (selection != null) {
+ sb.append(" selection: '").append(selection).append("'");
+ if (selectionArgs != null) {
+ sb.append(Arrays.toString(selectionArgs));
+ } else {
+ sb.append("[]");
+ }
+ }
+ if (sortOrder != null) {
+ sb.append(" sort: '").append(sortOrder).append("'");
+ }
+ return sb.toString();
+ }
+
+ public void verify() {
+ verifyQueries();
+ verifyInserts();
+ verifyDeletes();
+ }
+
+ private void verifyQueries() {
+ List<Query> missedQueries = new ArrayList<>();
+ for (Query query : mExpectedQueries) {
+ if (!query.mExecuted) {
+ missedQueries.add(query);
+ }
+ }
+ Assert.assertTrue("Not all expected queries have been called: " + missedQueries,
+ missedQueries.isEmpty());
+ }
+
+ private void verifyInserts() {
+ List<Insert> missedInserts = new ArrayList<>();
+ for (Insert insert : mExpectedInserts) {
+ if (!insert.mIsExecuted) {
+ missedInserts.add(insert);
+ }
+ }
+ Assert.assertTrue("Not all expected inserts have been called: " + missedInserts,
+ missedInserts.isEmpty());
+ }
+
+ private void verifyDeletes() {
+ List<Delete> missedDeletes = new ArrayList<>();
+ for (Delete delete : mExpectedDeletes) {
+ if (!delete.mIsExecuted) {
+ missedDeletes.add(delete);
+ }
+ }
+ Assert.assertTrue("Not all expected deletes have been called: " + missedDeletes,
+ missedDeletes.isEmpty());
+ }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java b/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java
new file mode 100644
index 000000000..787b9052c
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2010 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.test.mocks;
+
+import android.content.SharedPreferences;
+
+import com.google.common.collect.Maps;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * A programmable mock content provider.
+ */
+public class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor {
+
+ private HashMap<String, Object> mValues = Maps.newHashMap();
+ private HashMap<String, Object> mTempValues = Maps.newHashMap();
+
+ public Editor edit() {
+ return this;
+ }
+
+ public boolean contains(String key) {
+ return mValues.containsKey(key);
+ }
+
+ public Map<String, ?> getAll() {
+ return new HashMap<String, Object>(mValues);
+ }
+
+ public boolean getBoolean(String key, boolean defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Boolean)mValues.get(key)).booleanValue();
+ }
+ return defValue;
+ }
+
+ public float getFloat(String key, float defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Float)mValues.get(key)).floatValue();
+ }
+ return defValue;
+ }
+
+ public int getInt(String key, int defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Integer)mValues.get(key)).intValue();
+ }
+ return defValue;
+ }
+
+ public long getLong(String key, long defValue) {
+ if (mValues.containsKey(key)) {
+ return ((Long)mValues.get(key)).longValue();
+ }
+ return defValue;
+ }
+
+ public String getString(String key, String defValue) {
+ if (mValues.containsKey(key))
+ return (String)mValues.get(key);
+ return defValue;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Set<String> getStringSet(String key, Set<String> defValues) {
+ if (mValues.containsKey(key)) {
+ return (Set<String>) mValues.get(key);
+ }
+ return defValues;
+ }
+
+ public void registerOnSharedPreferenceChangeListener(
+ OnSharedPreferenceChangeListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void unregisterOnSharedPreferenceChangeListener(
+ OnSharedPreferenceChangeListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Editor putBoolean(String key, boolean value) {
+ mTempValues.put(key, Boolean.valueOf(value));
+ return this;
+ }
+
+ public Editor putFloat(String key, float value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putInt(String key, int value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putLong(String key, long value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putString(String key, String value) {
+ mTempValues.put(key, value);
+ return this;
+ }
+
+ public Editor putStringSet(String key, Set<String> values) {
+ mTempValues.put(key, values);
+ return this;
+ }
+
+ public Editor remove(String key) {
+ mTempValues.remove(key);
+ return this;
+ }
+
+ public Editor clear() {
+ mTempValues.clear();
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public boolean commit() {
+ mValues = (HashMap<String, Object>)mTempValues.clone();
+ return true;
+ }
+
+ public void apply() {
+ commit();
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/AccountsTestHelper.java b/tests/src/com/android/contacts/tests/AccountsTestHelper.java
new file mode 100644
index 000000000..2b2c16ef3
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/AccountsTestHelper.java
@@ -0,0 +1,139 @@
+/*
+ * 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.tests;
+
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.Build;
+import android.provider.ContactsContract.RawContacts;
+import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
+import android.support.test.InstrumentationRegistry;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@SuppressWarnings("MissingPermission")
+public class AccountsTestHelper {
+ private static final String TAG = "AccountsTestHelper";
+
+ public static final String TEST_ACCOUNT_TYPE = "com.android.contacts.tests.testauth.basic";
+
+ private final Context mContext;
+ private final AccountManager mAccountManager;
+ private final ContentResolver mResolver;
+
+ private List<Account> mAddedAccounts;
+
+ public AccountsTestHelper() {
+ // Use context instead of target context because the test package has the permissions needed
+ // to add and remove accounts.
+ this(InstrumentationRegistry.getContext());
+ }
+
+ public AccountsTestHelper(Context context) {
+ mContext = context;
+ mAccountManager = AccountManager.get(mContext);
+ mResolver = mContext.getContentResolver();
+ mAddedAccounts = new ArrayList<>();
+ }
+
+ public void addTestAccount(AccountWithDataSet account) {
+ Account newAccount = new Account(account.name, account.type);
+ assertTrue(mAccountManager.addAccountExplicitly(newAccount, null, null));
+ mAddedAccounts.add(newAccount);
+ }
+
+ public AccountWithDataSet addTestAccount() {
+ return addTestAccount(generateAccountName());
+ }
+
+ public AccountWithDataSet addTestAccount(@NonNull String name) {
+ // remember the most recent one. If the caller wants to add multiple accounts they will
+ // have to keep track of them themselves.
+ final AccountWithDataSet account = new AccountWithDataSet(name, TEST_ACCOUNT_TYPE, null);
+ addTestAccount(account);
+ return account;
+ }
+
+ public String generateAccountName(String prefix) {
+ return prefix + "_t" + System.nanoTime();
+ }
+
+ public String generateAccountName() {
+ return generateAccountName("test");
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public void removeTestAccount(AccountWithDataSet account) {
+ final Account remove = account.getAccountOrNull();
+ mAccountManager.removeAccountExplicitly(remove);
+ mAddedAccounts.remove(remove);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public void removeTestAccount(String accountName) {
+ removeTestAccount(new AccountWithDataSet(accountName, TEST_ACCOUNT_TYPE, null));
+ }
+
+ public boolean hasTestAccount(String name) {
+ final List<Account> accounts = Arrays.asList(
+ mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE));
+ return accounts.contains(new Account(name, TEST_ACCOUNT_TYPE));
+ }
+
+ public void removeContactsForAccount(AccountWithDataSet account) {
+ mResolver.delete(RawContacts.CONTENT_URI,
+ RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
+ new String[] { account.name, account.type });
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public void cleanup() {
+ // Note that we don't need to cleanup up the contact data associated with the account.
+ // CP2 will eventually do that automatically so as long as we're using unique account
+ // names we should be safe. Note that cleanup is not done synchronously when the account
+ // is removed so if multiple tests are using the same account name then the data should
+ // be manually deleted after each test run.
+
+ for (Account account : mAddedAccounts) {
+ mAccountManager.removeAccountExplicitly(account);
+ }
+ mAddedAccounts.clear();
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public static void removeAccountsWithPrefix(Context context, String prefix) {
+ final AccountManager accountManager =
+ (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
+ final Account[] accounts = accountManager.getAccountsByType(TEST_ACCOUNT_TYPE);
+ for (Account account : accounts) {
+ if (account.name.startsWith(prefix)) {
+ accountManager.removeAccountExplicitly(account);
+ }
+ }
+
+
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/AdbHelpers.java b/tests/src/com/android/contacts/tests/AdbHelpers.java
new file mode 100644
index 000000000..59fc7231d
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/AdbHelpers.java
@@ -0,0 +1,100 @@
+/*
+ * 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.tests;
+
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.support.annotation.RequiresApi;
+import android.support.test.InstrumentationRegistry;
+import android.util.Log;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.SharedPreferenceUtil;
+
+/**
+ * Contains utility methods that can be invoked directly from adb using RunMethodInstrumentation.
+ *
+ * Example usage:
+ * adb shell am instrument -e method addTestAccount -e accountName fooAccount\
+ * -w com.android.contacts.tests/com.android.contacts.RunMethodInstrumentation
+ */
+public class AdbHelpers {
+ private static final String TAG = "AdbHelpers";
+
+ public static void addTestAccount(Context context, Bundle args) {
+ final String accountName = args.getString("name");
+ if (accountName == null) {
+ Log.e(TAG, "args must contain extra \"name\"");
+ return;
+ }
+
+ new AccountsTestHelper(context).addTestAccount(accountName);
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+ public static void removeTestAccount(Context context, Bundle args) {
+ final String accountName = args.getString("name");
+ if (accountName == null) {
+ Log.e(TAG, "args must contain extra \"name\"");
+ return;
+ }
+
+ final AccountWithDataSet account = new AccountWithDataSet(accountName,
+ AccountsTestHelper.TEST_ACCOUNT_TYPE, null);
+ new AccountsTestHelper(context).removeTestAccount(account);
+ }
+
+ public static void setDefaultAccount(Context context, Bundle args) {
+ final String name = args.getString("name");
+ final String type = args.getString("type");
+
+ if (name == null || type == null) {
+ Log.e(TAG, "args must contain extras \"name\" and \"type\"");
+ return;
+ }
+
+ new ContactsPreferences(context).setDefaultAccount(
+ new AccountWithDataSet(name, type, null));
+ }
+
+ public static void clearDefaultAccount(Context context) {
+ new ContactsPreferences(context).clearDefaultAccount();
+ }
+
+ public static void clearPreferences(Context context) {
+ SharedPreferenceUtil.clear(context);
+ }
+
+ public static void dumpPreferences(Context context) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "preferences=" + getAppContext().getSharedPreferences(
+ getAppContext().getPackageName(), Context.MODE_PRIVATE).getAll());
+ }
+ }
+
+ public static void clearSimCard(Context context)
+ throws RemoteException, OperationApplicationException {
+ new SimContactsTestHelper(context).deleteAllSimContacts();
+ }
+
+ private static Context getAppContext() {
+ return InstrumentationRegistry.getTargetContext();
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/ContactsMatchers.java b/tests/src/com/android/contacts/tests/ContactsMatchers.java
new file mode 100644
index 000000000..77aed117f
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/ContactsMatchers.java
@@ -0,0 +1,147 @@
+/*
+ * 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.tests;
+
+import static org.hamcrest.Matchers.allOf;
+
+import android.database.Cursor;
+import android.provider.ContactsContract;
+
+import com.android.contacts.model.SimContact;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+
+/**
+ * Has useful {@link org.hamcrest.Matchers}s for the Contacts app
+ */
+public class ContactsMatchers {
+
+ private ContactsMatchers() {
+ }
+
+ /**
+ * Matchers for {@link Cursor}s returned by queries to
+ * {@link android.provider.ContactsContract.Data#CONTENT_URI}
+ */
+ public static class DataCursor {
+
+ public static Matcher<Cursor> hasMimeType(String type) {
+ return hasValueForColumn(ContactsContract.Data.MIMETYPE, type);
+ }
+
+ public static Matcher<Cursor> hasName(final String name) {
+ return hasRowMatching(allOf(
+ hasMimeType(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE),
+ hasValueForColumn(
+ ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)));
+ }
+
+ public static Matcher<Cursor> hasPhone(final String phone) {
+ return hasRowMatching(allOf(
+ hasMimeType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE),
+ hasValueForColumn(
+ ContactsContract.CommonDataKinds.Phone.NUMBER, phone)));
+ }
+
+ public static Matcher<Cursor> hasEmail(final String email) {
+ return hasRowMatching(allOf(
+ hasMimeType(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE),
+ hasValueForColumn(
+ ContactsContract.CommonDataKinds.Email.ADDRESS, email)));
+ }
+ }
+
+ public static Matcher<Cursor> hasCount(final int count) {
+ return new BaseMatcher<Cursor>() {
+ @Override
+ public boolean matches(Object o) {
+ if (!(o instanceof Cursor)) return false;
+ return ((Cursor)o).getCount() == count;
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("Cursor with " + count + " rows");
+ }
+ };
+ }
+
+ public static Matcher<Cursor> hasValueForColumn(final String column, final String value) {
+ return new BaseMatcher<Cursor>() {
+
+ @Override
+ public boolean matches(Object o) {
+ if (!(o instanceof Cursor)) return false;
+ final Cursor cursor = (Cursor)o;
+
+ final int index = cursor.getColumnIndexOrThrow(column);
+ return value.equals(cursor.getString(index));
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("Cursor with " + column + "=" + value);
+ }
+ };
+ }
+
+ public static Matcher<Cursor> hasRowMatching(final Matcher<Cursor> rowMatcher) {
+ return new BaseMatcher<Cursor>() {
+ @Override
+ public boolean matches(Object o) {
+ if (!(o instanceof Cursor)) return false;
+ final Cursor cursor = (Cursor)o;
+
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ if (rowMatcher.matches(cursor)) return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("Cursor with row matching ");
+ rowMatcher.describeTo(description);
+ }
+ };
+ }
+
+ public static Matcher<SimContact> isSimContactWithNameAndPhone(final String name,
+ final String phone) {
+ return new BaseMatcher<SimContact>() {
+ @Override
+ public boolean matches(Object o) {
+ if (!(o instanceof SimContact)) return false;
+
+ SimContact other = (SimContact) o;
+
+ return name.equals(other.getName())
+ && phone.equals(other.getPhone());
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("SimContact with name=" + name + " and phone=" +
+ phone);
+ }
+ };
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/FakeAccountType.java b/tests/src/com/android/contacts/tests/FakeAccountType.java
new file mode 100644
index 000000000..966c29f92
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/FakeAccountType.java
@@ -0,0 +1,98 @@
+/*
+ * 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.tests;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.PixelFormat;
+import android.graphics.drawable.Drawable;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+public class FakeAccountType extends AccountType {
+ public boolean areContactsWritable = false;
+ public boolean isGroupMembershipEditable = false;
+ public String displayLabel = "The Default Label";
+ public Drawable displayIcon = new Drawable() {
+ @Override
+ public void draw(Canvas canvas) {
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter colorFilter) {
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.OPAQUE;
+ }
+ };
+
+ public FakeAccountType() {
+ }
+
+ public FakeAccountType(String type) {
+ accountType = type;
+ }
+
+ @Override
+ public Drawable getDisplayIcon(Context context) {
+ return displayIcon;
+ }
+
+ @Override
+ public String getDisplayLabel(Context context) {
+ return displayLabel;
+ }
+
+ @Override
+ public boolean areContactsWritable() {
+ return areContactsWritable;
+ }
+
+ @Override
+ public boolean isGroupMembershipEditable() {
+ return isGroupMembershipEditable;
+ }
+
+ public static FakeAccountType create(String accountType, String label) {
+ final FakeAccountType result = new FakeAccountType();
+ result.accountType = accountType;
+ result.displayLabel = label;
+ return result;
+ }
+
+ public static FakeAccountType create(String accountType, String label, Drawable icon) {
+ final FakeAccountType result = new FakeAccountType();
+ result.accountType = accountType;
+ result.displayIcon = icon;
+ result.displayLabel = label;
+ return result;
+ }
+
+ public static AccountType create(AccountWithDataSet account, String label, Drawable icon) {
+ final FakeAccountType result = create(account.type, label, icon);
+ result.accountType = account.type;
+ result.dataSet = account.dataSet;
+ return result;
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java b/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java
new file mode 100644
index 000000000..9ed95956d
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java
@@ -0,0 +1,73 @@
+/*
+ * 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.tests;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class FakeDeviceAccountTypeFactory implements DeviceLocalAccountTypeFactory {
+
+ private final Map<String, AccountType> mDeviceAccountTypes = new HashMap<>();
+ private final Map<String, AccountType> mSimAccountTypes = new HashMap<>();
+
+ @Override
+ public int classifyAccount(String accountType) {
+ if (mDeviceAccountTypes.containsKey(accountType)) {
+ return TYPE_DEVICE;
+ } else if (mSimAccountTypes.containsKey(accountType)) {
+ return TYPE_SIM;
+ } else {
+ return TYPE_OTHER;
+ }
+ }
+
+ @Override
+ public AccountType getAccountType(String accountType) {
+ final AccountType type = mDeviceAccountTypes.get(accountType);
+ return type == null ? mSimAccountTypes.get(accountType) : type;
+ }
+
+ public FakeDeviceAccountTypeFactory withSimTypes(String... types) {
+ for (String type : types) {
+ mSimAccountTypes.put(type, new FakeAccountType(type));
+ }
+ return this;
+ }
+
+ public FakeDeviceAccountTypeFactory withSimTypes(AccountType... types) {
+ for (AccountType type : types) {
+ mSimAccountTypes.put(type.accountType, type);
+ }
+ return this;
+ }
+
+ public FakeDeviceAccountTypeFactory withDeviceTypes(String... types) {
+ for (String type : types) {
+ mDeviceAccountTypes.put(type, new FakeAccountType(type));
+ }
+ return this;
+ }
+
+ public FakeDeviceAccountTypeFactory withDeviceTypes(AccountType... types) {
+ for (AccountType type : types) {
+ mDeviceAccountTypes.put(type.accountType, type);
+ }
+ return this;
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/FakeSimContactDao.java b/tests/src/com/android/contacts/tests/FakeSimContactDao.java
new file mode 100644
index 000000000..c40ab2548
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/FakeSimContactDao.java
@@ -0,0 +1,114 @@
+/*
+ * 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.tests;
+
+import android.content.ContentProviderResult;
+import android.content.OperationApplicationException;
+import android.os.RemoteException;
+
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Fake implementation of SimContactDao for testing
+ */
+public class FakeSimContactDao extends SimContactDao {
+
+ public boolean canReadSimContacts = true;
+ public List<SimCard> simCards;
+ public Map<SimCard, ArrayList<SimContact>> simContacts;
+ public ContentProviderResult[] importResult;
+ public Map<AccountWithDataSet, Set<SimContact>> existingSimContacts;
+
+ public FakeSimContactDao() {
+ simCards = new ArrayList<>();
+ simContacts = new HashMap<>();
+ importResult = new ContentProviderResult[0];
+ existingSimContacts = new HashMap<>();
+ }
+
+ @Override
+ public boolean canReadSimContacts() {
+ return canReadSimContacts;
+ }
+
+ @Override
+ public List<SimCard> getSimCards() {
+ return simCards;
+ }
+
+ @Override
+ public ArrayList<SimContact> loadContactsForSim(SimCard sim) {
+ return simContacts.get(sim);
+ }
+
+ @Override
+ public ContentProviderResult[] importContacts(List<SimContact> contacts,
+ AccountWithDataSet targetAccount)
+ throws RemoteException, OperationApplicationException {
+ return importResult;
+ }
+
+ @Override
+ public void persistSimStates(List<SimCard> simCards) {
+ this.simCards = simCards;
+ }
+
+ @Override
+ public SimCard getSimBySubscriptionId(int subscriptionId) {
+ if (subscriptionId == SimCard.NO_SUBSCRIPTION_ID) {
+ return simCards.get(0);
+ }
+ for (SimCard sim : simCards) {
+ if (sim.getSubscriptionId() == subscriptionId) {
+ return sim;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+ List<SimContact> contacts) {
+ return existingSimContacts;
+ }
+
+ public FakeSimContactDao addSim(SimCard sim, SimContact... contacts) {
+ simCards.add(sim);
+ simContacts.put(sim, new ArrayList<>(Arrays.asList(contacts)));
+ return this;
+ }
+
+ public static FakeSimContactDao singleSimWithContacts(SimCard sim, SimContact... contacts) {
+ return new FakeSimContactDao().addSim(sim, contacts);
+ }
+
+ public static FakeSimContactDao noSim() {
+ FakeSimContactDao result = new FakeSimContactDao();
+ result.canReadSimContacts = false;
+ return result;
+ }
+
+}
diff --git a/tests/src/com/android/contacts/tests/PhoneNumberTestService.java b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
index d5fee9242..d8ba9b2ec 100644
--- a/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
+++ b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
@@ -17,12 +17,12 @@
package com.android.contacts.tests;
import android.app.IntentService;
-import android.content.Context;
import android.content.Intent;
import android.telephony.PhoneNumberUtils;
import android.util.Log;
-import com.android.contacts.common.GeoUtil;
+import com.android.contacts.GeoUtil;
+
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
diff --git a/tests/src/com/android/contacts/tests/SimContactsTestHelper.java b/tests/src/com/android/contacts/tests/SimContactsTestHelper.java
new file mode 100644
index 000000000..ab10ed550
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/SimContactsTestHelper.java
@@ -0,0 +1,179 @@
+/*
+ * 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.tests;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assume.assumeThat;
+import static org.junit.Assume.assumeTrue;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.support.annotation.NonNull;
+import android.support.test.InstrumentationRegistry;
+import android.telephony.TelephonyManager;
+
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.database.SimContactDaoImpl;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SimContactsTestHelper {
+
+ private final Context mContext;
+ private final TelephonyManager mTelephonyManager;
+ private final ContentResolver mResolver;
+ private final SimContactDao mSimDao;
+
+ public SimContactsTestHelper() {
+ this(InstrumentationRegistry.getTargetContext());
+ }
+
+ public SimContactsTestHelper(Context context) {
+ mContext = context;
+ mResolver = context.getContentResolver();
+ mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ mSimDao = SimContactDao.create(context);
+ }
+
+ public int getSimContactCount() {
+ Cursor cursor = mContext.getContentResolver().query(SimContactDaoImpl.ICC_CONTENT_URI,
+ null, null, null, null);
+ try {
+ return cursor.getCount();
+ } finally {
+ cursor.close();
+ }
+ }
+
+ public Uri addSimContact(String name, String number) {
+ ContentValues values = new ContentValues();
+ // Oddly even though it's called name when querying we have to use "tag" for it to work
+ // when inserting.
+ if (name != null) {
+ values.put("tag", name);
+ }
+ if (number != null) {
+ values.put(SimContactDaoImpl.NUMBER, number);
+ }
+ return mResolver.insert(SimContactDaoImpl.ICC_CONTENT_URI, values);
+ }
+
+ public ContentProviderResult[] deleteAllSimContacts()
+ throws RemoteException, OperationApplicationException {
+ final List<SimCard> sims = mSimDao.getSimCards();
+ if (sims.isEmpty()) {
+ throw new IllegalStateException("Expected SIM card");
+ }
+ final List<SimContact> contacts = mSimDao.loadContactsForSim(sims.get(0));
+ ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+ for (SimContact contact : contacts) {
+ ops.add(ContentProviderOperation
+ .newDelete(SimContactDaoImpl.ICC_CONTENT_URI)
+ .withSelection(getWriteSelection(contact), null)
+ .build());
+ }
+ return mResolver.applyBatch(SimContactDaoImpl.ICC_CONTENT_URI.getAuthority(), ops);
+ }
+
+ public ContentProviderResult[] restore(ArrayList<ContentProviderOperation> restoreOps)
+ throws RemoteException, OperationApplicationException {
+ if (restoreOps == null) return null;
+
+ // Remove SIM contacts because we assume that caller wants the data to be in the exact
+ // state as when the restore ops were captured.
+ deleteAllSimContacts();
+ return mResolver.applyBatch(SimContactDaoImpl.ICC_CONTENT_URI.getAuthority(), restoreOps);
+ }
+
+ public ArrayList<ContentProviderOperation> captureRestoreSnapshot() {
+ final List<SimCard> sims = mSimDao.getSimCards();
+ if (sims.isEmpty()) {
+ throw new IllegalStateException("Expected SIM card");
+ }
+ final ArrayList<SimContact> contacts = mSimDao.loadContactsForSim(sims.get(0));
+
+ final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+ for (SimContact contact : contacts) {
+ final String[] emails = contact.getEmails();
+ if (emails != null && emails.length > 0) {
+ throw new IllegalStateException("Cannot restore emails." +
+ " Please manually remove SIM contacts with emails.");
+ }
+ ops.add(ContentProviderOperation
+ .newInsert(SimContactDaoImpl.ICC_CONTENT_URI)
+ .withValue("tag", contact.getName())
+ .withValue("number", contact.getPhone())
+ .build());
+ }
+ return ops;
+ }
+
+ public String getWriteSelection(SimContact simContact) {
+ return "tag='" + simContact.getName() + "' AND " + SimContactDaoImpl.NUMBER + "='" +
+ simContact.getPhone() + "'";
+ }
+
+ public int deleteSimContact(@NonNull String name, @NonNull String number) {
+ // IccProvider doesn't use the selection args.
+ final String selection = "tag='" + name + "' AND " +
+ SimContactDaoImpl.NUMBER + "='" + number + "'";
+ return mResolver.delete(SimContactDaoImpl.ICC_CONTENT_URI, selection, null);
+ }
+
+ public boolean isSimReady() {
+ return mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
+ }
+
+ public boolean doesSimHaveContacts() {
+ return isSimReady() && getSimContactCount() > 0;
+ }
+
+ public boolean isSimWritable() {
+ if (!isSimReady()) return false;
+ final String name = "writabeProbe" + System.nanoTime();
+ final Uri uri = addSimContact(name, "15095550101");
+ return uri != null && deleteSimContact(name, "15095550101") == 1;
+ }
+
+ public void assumeSimReady() {
+ assumeTrue(isSimReady());
+ }
+
+ public void assumeHasSimContacts() {
+ assumeTrue(doesSimHaveContacts());
+ }
+
+ public void assumeSimCardAbsent() {
+ assumeThat(mTelephonyManager.getSimState(), equalTo(TelephonyManager.SIM_STATE_ABSENT));
+ }
+
+ // The emulator reports SIM_STATE_READY but writes are ignored. This verifies that the
+ // device will actually persist writes to the SIM card.
+ public void assumeSimWritable() {
+ assumeSimReady();
+ assumeTrue(isSimWritable());
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/StringableCursor.java b/tests/src/com/android/contacts/tests/StringableCursor.java
new file mode 100644
index 000000000..dbe3fca2d
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/StringableCursor.java
@@ -0,0 +1,42 @@
+/*
+ * 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.tests;
+
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.database.DatabaseUtils;
+
+/**
+ * Wrapper around a cursor with a custom toString that dumps the entire cursor data
+ *
+ * This is for providing more useful info during debugging and testing.
+ */
+public class StringableCursor extends CursorWrapper {
+ public StringableCursor(Cursor cursor) {
+ super(cursor);
+ }
+
+ @Override
+ public String toString() {
+ final Cursor wrapped = getWrappedCursor();
+
+ if (wrapped.getCount() == 0) {
+ return "Empty Cursor";
+ }
+
+ return DatabaseUtils.dumpCursorToString(wrapped);
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index f0b285b7a..ba18d6f7a 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -35,6 +35,7 @@ import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Groups;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.RawContacts;
@@ -43,6 +44,8 @@ import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
+import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.UiIntentActions;
import com.android.contacts.tests.R;
import com.android.contacts.tests.quickcontact.QuickContactTestsActivity;
@@ -65,7 +68,6 @@ public class AllIntentsActivity extends ListActivity
"com.android.contacts.activities.PeopleActivity";
public enum ContactsIntent {
- VIEW_CONTACT_WITHOUT_ID,
ACTION_PICK_CONTACT,
ACTION_PICK_CONTACT_LEGACY,
ACTION_PICK_PHONE,
@@ -85,10 +87,12 @@ public class AllIntentsActivity extends ListActivity
ACTION_INSERT_OR_EDIT,
ACTION_INSERT_OR_EDIT_PHONE_NUMBER,
ACTION_INSERT_OR_EDIT_EMAIL_ADDRESS,
+ ACTION_INSERT_GROUP,
ACTION_SEARCH_CALL,
ACTION_SEARCH_CONTACT,
ACTION_SEARCH_EMAIL,
ACTION_SEARCH_PHONE,
+ ACTION_SEARCH_GENERAL,
SEARCH_SUGGESTION_CLICKED_CONTACT,
EDIT_CONTACT,
EDIT_CONTACT_LOOKUP,
@@ -101,12 +105,23 @@ public class AllIntentsActivity extends ListActivity
EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA,
EDIT_NEW_RAW_CONTACT,
EDIT_NEW_LEGACY,
+ EDIT_GROUP,
+ VIEW_CONTACT_WITHOUT_ID,
+ VIEW_PERSON_WITHOUT_ID,
VIEW_CONTACT,
VIEW_CONTACT_LOOKUP,
VIEW_CONTACT_LOOKUP_ID,
VIEW_RAW_CONTACT,
VIEW_LEGACY,
- QUICK_CONTACT_TESTS_ACTIVITY;
+ VIEW_GROUP,
+ QUICK_CONTACT_TESTS_ACTIVITY,
+ LIST_DEFAULT,
+ LIST_CONTACTS,
+ LIST_ALL_CONTACTS,
+ LIST_CONTACTS_WITH_PHONES,
+ LIST_STARRED,
+ LIST_FREQUENT,
+ LIST_STREQUENT;
public static ContactsIntent get(int ordinal) {
return values()[ordinal];
@@ -238,6 +253,12 @@ public class AllIntentsActivity extends ListActivity
startActivity(intent);
break;
}
+ case ACTION_INSERT_GROUP: {
+ final Intent intent = new Intent(Intent.ACTION_INSERT);
+ intent.setType(Groups.CONTENT_TYPE);
+ startActivity(intent);
+ break;
+ }
case ACTION_SEARCH_CALL: {
Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.putExtra(SearchManager.ACTION_MSG, "call");
@@ -264,6 +285,12 @@ public class AllIntentsActivity extends ListActivity
startSearchResultActivity(intent);
break;
}
+ case ACTION_SEARCH_GENERAL: {
+ Intent intent = new Intent(Intent.ACTION_SEARCH);
+ intent.putExtra(SearchManager.QUERY, "a");
+ startSearchResultActivity(intent);
+ break;
+ }
case SEARCH_SUGGESTION_CLICKED_CONTACT: {
long contactId = findArbitraryContactWithPhoneNumber();
if (contactId != -1) {
@@ -358,6 +385,13 @@ public class AllIntentsActivity extends ListActivity
startActivity(new Intent(Intent.ACTION_INSERT, legacyContentUri));
break;
}
+ case EDIT_GROUP: {
+ final Intent intent = findArbitraryGroupIntent(Intent.ACTION_EDIT);
+ if (intent != null) {
+ startActivity(intent);
+ }
+ break;
+ }
case VIEW_CONTACT: {
final long contactId = findArbitraryContactWithPhoneNumber();
if (contactId != -1) {
@@ -371,6 +405,12 @@ public class AllIntentsActivity extends ListActivity
startActivity(new Intent(Intent.ACTION_VIEW, Contacts.CONTENT_URI));
break;
}
+ case VIEW_PERSON_WITHOUT_ID: {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setType("vnd.android.cursor.dir/person");
+ startActivity(intent);
+ break;
+ }
case VIEW_CONTACT_LOOKUP: {
final long contactId = findArbitraryContactWithPhoneNumber();
if (contactId != -1) {
@@ -420,10 +460,45 @@ public class AllIntentsActivity extends ListActivity
}
break;
}
+ case VIEW_GROUP: {
+ final Intent intent = findArbitraryGroupIntent(Intent.ACTION_VIEW);
+ if (intent != null) {
+ startActivity(intent);
+ }
+ break;
+ }
case QUICK_CONTACT_TESTS_ACTIVITY: {
startActivity(new Intent(this, QuickContactTestsActivity.class));
break;
}
+ case LIST_DEFAULT: {
+ startActivity(new Intent(UiIntentActions.LIST_DEFAULT));
+ break;
+ }
+ case LIST_CONTACTS: {
+ startActivity(new Intent(UiIntentActions.LIST_CONTACTS));
+ break;
+ }
+ case LIST_ALL_CONTACTS: {
+ startActivity(new Intent(UiIntentActions.LIST_ALL_CONTACTS_ACTION));
+ break;
+ }
+ case LIST_CONTACTS_WITH_PHONES: {
+ startActivity(new Intent(UiIntentActions.LIST_CONTACTS_WITH_PHONES_ACTION));
+ break;
+ }
+ case LIST_STARRED: {
+ startActivity(new Intent(UiIntentActions.LIST_STARRED_ACTION));
+ break;
+ }
+ case LIST_FREQUENT: {
+ startActivity(new Intent(UiIntentActions.LIST_FREQUENT_ACTION));
+ break;
+ }
+ case LIST_STREQUENT: {
+ startActivity(new Intent(UiIntentActions.LIST_STREQUENT_ACTION));
+ break;
+ }
default: {
Toast.makeText(this, "Sorry, we forgot to write this...", Toast.LENGTH_LONG).show();
@@ -496,6 +571,34 @@ public class AllIntentsActivity extends ListActivity
return -1;
}
+ private Intent findArbitraryGroupIntent(String action) {
+ final long groupId = findArbitraryGroup();
+ if (groupId == -1) return null;
+ final Intent intent = new Intent(action) ;
+ intent.setData(ContentUris.withAppendedId(Groups.CONTENT_URI, groupId));
+ // TODO: ContactsProvider2#getType does handle the group mimetype
+ intent.setClassName("com.google.android.contacts",
+ "com.android.contacts.activities.PeopleActivity");
+ return intent;
+ }
+
+ private long findArbitraryGroup() {
+ final Cursor cursor = getContentResolver().query(Groups.CONTENT_URI,
+ new String[] { Groups._ID },
+ GroupUtil.DEFAULT_SELECTION,
+ null,
+ "RANDOM() LIMIT 1");
+ try {
+ if (cursor.moveToFirst()) {
+ return cursor.getLong(0);
+ }
+ } finally {
+ cursor.close();
+ }
+ Toast.makeText(this, "Failed to find any group. Aborting.", Toast.LENGTH_SHORT).show();
+ return -1;
+ }
+
@Override
public void onAccountChosen(Account account, String dataSet, int tag) {
switch (ContactsIntent.get(tag)) {
diff --git a/tests/src/com/android/contacts/tests/allintents/SelectAccountDialogFragment.java b/tests/src/com/android/contacts/tests/allintents/SelectAccountDialogFragment.java
index f0c2df4d2..10661db8b 100644
--- a/tests/src/com/android/contacts/tests/allintents/SelectAccountDialogFragment.java
+++ b/tests/src/com/android/contacts/tests/allintents/SelectAccountDialogFragment.java
@@ -35,7 +35,7 @@ import android.widget.TextView;
* Does not perform any action by itself.
*/
public class SelectAccountDialogFragment extends DialogFragment {
- public static final String TAG = "SelectAccountDialogFragment";
+ public static final String TAG = "SelectAccountDialog";
private static final String EXTRA_TAG = "tag";
diff --git a/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java b/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java
new file mode 100644
index 000000000..bcc3f5441
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestAuthenticationService.java
@@ -0,0 +1,53 @@
+/*
+ * 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.tests.testauth;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+public abstract class TestAuthenticationService extends Service {
+
+ private TestAuthenticator mAuthenticator;
+
+ @Override
+ public void onCreate() {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, this + " Service started.");
+ }
+ mAuthenticator = new TestAuthenticator(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, this + " Service stopped.");
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, this + " getBinder() intent=" + intent);
+ }
+ return mAuthenticator.getIBinder();
+ }
+
+ public static class Basic extends TestAuthenticationService {
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java b/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java
new file mode 100644
index 000000000..9afcb9ed9
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestAuthenticator.java
@@ -0,0 +1,145 @@
+/*
+ * 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.tests.testauth;
+
+import android.accounts.AbstractAccountAuthenticator;
+import android.accounts.Account;
+import android.accounts.AccountAuthenticatorResponse;
+import android.accounts.AccountManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+/**
+ * Simple authenticator. It has no "login" dialogs/activities. When you add a new account, it'll
+ * just create a new account with a unique name.
+ */
+class TestAuthenticator extends AbstractAccountAuthenticator {
+ private static final String PASSWORD = "xxx"; // any string will do.
+
+ // To remember the last user-ID.
+ private static final String PREF_KEY_LAST_USER_ID = "TestAuthenticator.PREF_KEY_LAST_USER_ID";
+
+ private final Context mContext;
+
+ public TestAuthenticator(Context context) {
+ super(context);
+ mContext = context.getApplicationContext();
+ }
+
+ /**
+ * @return a new, unique username.
+ */
+ private String newUniqueUserName() {
+ final SharedPreferences prefs =
+ PreferenceManager.getDefaultSharedPreferences(mContext);
+ final int nextId = prefs.getInt(PREF_KEY_LAST_USER_ID, 0) + 1;
+ prefs.edit().putInt(PREF_KEY_LAST_USER_ID, nextId).apply();
+
+ return "User-" + nextId;
+ }
+
+ /**
+ * Create a new account with the name generated by {@link #newUniqueUserName()}.
+ */
+ @Override
+ public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
+ String authTokenType, String[] requiredFeatures, Bundle options) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "addAccount() type=" + accountType);
+ }
+ final Bundle bundle = new Bundle();
+
+ final Account account = new Account(newUniqueUserName(), accountType);
+
+ // Create an account.
+ AccountManager.get(mContext).addAccountExplicitly(account, PASSWORD, null);
+
+ // And return it.
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
+ return bundle;
+ }
+
+ /**
+ * Just return the user name as the authtoken.
+ */
+ @Override
+ public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
+ String authTokenType, Bundle loginOptions) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "getAuthToken() account=" + account);
+ }
+ final Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
+ bundle.putString(AccountManager.KEY_AUTHTOKEN, account.name);
+
+ return bundle;
+ }
+
+ @Override
+ public Bundle confirmCredentials(
+ AccountAuthenticatorResponse response, Account account, Bundle options) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "confirmCredentials()");
+ }
+ return null;
+ }
+
+ @Override
+ public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "editProperties()");
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getAuthTokenLabel(String authTokenType) {
+ // null means we don't support multiple authToken types
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "getAuthTokenLabel()");
+ }
+ return null;
+ }
+
+ @Override
+ public Bundle hasFeatures(
+ AccountAuthenticatorResponse response, Account account, String[] features) {
+ // This call is used to query whether the Authenticator supports
+ // specific features. We don't expect to get called, so we always
+ // return false (no) for any queries.
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "hasFeatures()");
+ }
+ final Bundle result = new Bundle();
+ result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
+ return result;
+ }
+
+ @Override
+ public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
+ String authTokenType, Bundle loginOptions) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "updateCredentials()");
+ }
+ return null;
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java b/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java
new file mode 100644
index 000000000..859864b13
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestSyncAdapter.java
@@ -0,0 +1,110 @@
+/*
+ * 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.tests.testauth;
+
+import android.accounts.Account;
+import android.content.AbstractThreadedSyncAdapter;
+import android.content.ContentProviderClient;
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.SyncResult;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * Simple (minimal) sync adapter.
+ *
+ */
+public class TestSyncAdapter extends AbstractThreadedSyncAdapter {
+
+ private static final String TEXT_CONTENT_ITEM_TYPE =
+ "vnd.android.cursor.item/vnd.contactstest.profile";
+
+ private final Context mContext;
+
+ public TestSyncAdapter(Context context, boolean autoInitialize) {
+ super(context, autoInitialize);
+ mContext = context.getApplicationContext();
+ }
+
+ /**
+ * Doesn't actually sync, but sweep up all existing local-only contacts.
+ */
+ @Override
+ public void onPerformSync(Account account, Bundle extras, String authority,
+ ContentProviderClient provider, SyncResult syncResult) {
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "TestSyncAdapter.onPerformSync() account=" + account);
+ }
+
+ final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+
+ final ContentResolver contentResolver = mContext.getContentResolver();
+ final Cursor cursor = contentResolver.query(RawContacts.CONTENT_URI,
+ new String[] { RawContacts._ID },
+ RawContacts.ACCOUNT_NAME + " IS NULL AND " + RawContacts.ACCOUNT_TYPE + " IS NULL",
+ null, null);
+ try {
+ while (cursor.moveToNext()) {
+ final String rawContactId = Long.toString(cursor.getLong(0));
+
+ // Claim all local-only contacts for the test account
+ ops.add(ContentProviderOperation.newUpdate(RawContacts.CONTENT_URI)
+ .withValue(RawContacts.ACCOUNT_NAME, account.name)
+ .withValue(RawContacts.ACCOUNT_TYPE, account.type)
+ .withSelection(RawContacts._ID+"=?", new String[] { rawContactId })
+ .build());
+
+ // Create custom QuickContact action data rows
+ final Uri dataUri = Data.CONTENT_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
+ .build();
+ ops.add(ContentProviderOperation.newInsert(dataUri)
+ .withValue(Data.RAW_CONTACT_ID, rawContactId)
+ .withValue(Data.MIMETYPE, TEXT_CONTENT_ITEM_TYPE)
+ .withValue(Data.DATA3, "Contacts test action")
+ .withValue(Data.DATA5, "view")
+ .build());
+ }
+ } finally {
+ cursor.close();
+ }
+ if (ops.isEmpty()) return;
+
+ // TODO: Clear isDirty flag
+ // TODO: Remove isDeleted raw contacts
+
+ if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
+ Log.v(TestauthConstants.LOG_TAG, "Claiming " + ops.size() + " local raw contacts");
+ for (ContentProviderOperation op : ops) {
+ Log.v(TestauthConstants.LOG_TAG, op.toString());
+ }
+ }
+ try {
+ contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
+ } catch (Exception e ) {
+ Log.e(TestauthConstants.LOG_TAG, "Failed to claim local raw contacts", e);
+ }
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestSyncService.java b/tests/src/com/android/contacts/tests/testauth/TestSyncService.java
new file mode 100644
index 000000000..99287771c
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestSyncService.java
@@ -0,0 +1,40 @@
+/*
+ * 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.tests.testauth;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public abstract class TestSyncService extends Service {
+
+ private static TestSyncAdapter sSyncAdapter;
+
+ @Override
+ public void onCreate() {
+ if (sSyncAdapter == null) {
+ sSyncAdapter = new TestSyncAdapter(getApplicationContext(), true);
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return sSyncAdapter.getSyncAdapterBinder();
+ }
+
+ public static class Basic extends TestSyncService {
+ }
+}
diff --git a/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java b/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java
new file mode 100644
index 000000000..717ed354a
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/testauth/TestauthConstants.java
@@ -0,0 +1,21 @@
+/*
+ * 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.tests.testauth;
+
+class TestauthConstants {
+ public static final String LOG_TAG = "Testauth";
+}
diff --git a/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java b/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java
new file mode 100644
index 000000000..ca6d16538
--- /dev/null
+++ b/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java
@@ -0,0 +1,204 @@
+/*
+ * 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.util;
+
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.PixelFormat;
+import android.graphics.drawable.Drawable;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.tests.FakeAccountType;
+import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+@SmallTest
+public class AccountDisplayInfoFactoryTests extends AndroidTestCase {
+
+ private Map<AccountWithDataSet, AccountType> mKnownTypes;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mKnownTypes = new HashMap<>();
+ }
+
+ public void test_displayableAccount_hasIconFromAccountType() {
+ final Drawable comExampleIcon = someDrawable();
+
+ addTypeMapping(account("user", "com.example"), "title", comExampleIcon);
+ addTypeMapping(account(null, null), "device", someDrawable());
+ addTypeMapping(account("foo", "bar.type"), "bar", someDrawable());
+ addTypeMapping(account("user2", "com.example"), "title", comExampleIcon);
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("user", "com.example"));
+ assertEquals(comExampleIcon, displayable.getIcon());
+ }
+
+ public void test_displayableAccount_hasNameFromAccount() {
+ final Drawable comExampleIcon = someDrawable();
+
+ addTypeMapping(account("user@example.com", "com.example"), "title", comExampleIcon);
+ addTypeMapping(account(null, null), "device", someDrawable());
+ addTypeMapping(account("foo", "bar.type"), "bar", someDrawable());
+ addTypeMapping(account("user2@example.com", "com.example"), "title", comExampleIcon);
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("user@example.com", "com.example"));
+ assertEquals("user@example.com", displayable.getNameLabel());
+ }
+
+ public void test_displayableAccountForNullAccount_hasNameFromAccountType() {
+ addSomeKnownAccounts();
+ addTypeMapping(account(null, null), "Device Display Label", someDrawable());
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes();
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account(null, null));
+ assertEquals("Device Display Label", displayable.getNameLabel());
+ }
+
+ public void test_displayableAccountForDeviceAccount_hasNameFromAccountType() {
+ addSomeKnownAccounts();
+ addTypeMapping(account("some.device.account.name", "device.account.type"), "Device Label",
+ someDrawable());
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
+ new FakeDeviceAccountTypeFactory().withDeviceTypes("device.account.type"));
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("some.device.account.name", "device.account.type"));
+ assertEquals("Device Label", displayable.getNameLabel());
+ }
+
+ public void test_displayableAccountForDeviceAccountWhenMultiple_hasNameFromAccount() {
+ addSomeKnownAccounts();
+ addTypeMapping(account("first.device.account.name", "a.device.account.type"),
+ "Device Display Label", someDrawable());
+ addTypeMapping(account("second.device.account.name", "b.device.account.type"),
+ "Device Display Label", someDrawable());
+ addTypeMapping(account("another.device.account.name", "a.device.account.type"),
+ "Device Display Label", someDrawable());
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
+ new FakeDeviceAccountTypeFactory().withDeviceTypes("a.device.account.type",
+ "b.device.account.type"));
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("first.device.account.name", "a.device.account.type"));
+ assertEquals("first.device.account.name", displayable.getNameLabel());
+
+ final AccountDisplayInfo displayable2 = sut.getAccountDisplayInfo(
+ account("second.device.account.name", "b.device.account.type"));
+ assertEquals("second.device.account.name", displayable2.getNameLabel());
+ }
+
+ public void test_displayableAccountForSimAccount_hasNameFromAccountType() {
+ addSomeKnownAccounts();
+ addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable());
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
+ new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type"));
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("sim.account.name", "sim.account.type"));
+ assertEquals("SIM", displayable.getNameLabel());
+ }
+
+ public void test_displayableAccountForSimAccountWhenMultiple_hasNameFromAccount() {
+ addSomeKnownAccounts();
+ addTypeMapping(account("sim.account.name", "sim.account.type"), "SIM", someDrawable());
+ addTypeMapping(account("sim2.account.name", "sim.account.type"), "SIM", someDrawable());
+
+ final AccountDisplayInfoFactory sut = createFactoryForKnownTypes(
+ new FakeDeviceAccountTypeFactory().withSimTypes("sim.account.type"));
+
+ final AccountDisplayInfo displayable = sut.getAccountDisplayInfo(
+ account("sim.account.name", "sim.account.type"));
+ assertEquals("sim.account.name", displayable.getNameLabel());
+ }
+
+ private void addSomeKnownAccounts() {
+ final Drawable comExampleIcon = someDrawable();
+ addTypeMapping(account("user@example.com", "com.example"), "Example Title", comExampleIcon);
+ addTypeMapping(account("foo", "bar.type"), "Bar", someDrawable());
+ addTypeMapping(account("user2@example.com", "com.example"), "Example Title", comExampleIcon);
+ addTypeMapping(account("user", "com.example.two"), "Some Account", someDrawable());
+ }
+
+ private AccountDisplayInfoFactory createFactoryForKnownTypes() {
+ return createFactoryForKnownTypes(new DeviceLocalAccountTypeFactory.Default(getContext()));
+ }
+
+ private AccountDisplayInfoFactory createFactoryForKnownTypes(DeviceLocalAccountTypeFactory
+ typeFactory) {
+ return new AccountDisplayInfoFactory(getContext(),
+ createFakeAccountTypeManager(mKnownTypes), typeFactory,
+ new ArrayList<>(mKnownTypes.keySet()));
+ }
+
+ private AccountWithDataSet account(String name, String type) {
+ return new AccountWithDataSet(name, type, /* dataSet */ null);
+ }
+
+ private void addTypeMapping(AccountWithDataSet account, String label, Drawable icon) {
+ mKnownTypes.put(account, FakeAccountType.create(account, label, icon));
+ }
+
+ private AccountTypeManager createFakeAccountTypeManager(
+ final Map<AccountWithDataSet, AccountType> mapping) {
+ return new MockAccountTypeManager(mapping.values().toArray(new AccountType[mapping.size()]),
+ mapping.keySet().toArray(new AccountWithDataSet[mapping.size()]));
+ }
+
+ private Drawable someDrawable() {
+ return new Drawable() {
+ @Override
+ public void draw(Canvas canvas) {
+ }
+
+ @Override
+ public void setAlpha(int i) {
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter colorFilter) {
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.OPAQUE;
+ }
+ };
+ }
+
+}
diff --git a/tests/src/com/android/contacts/util/BitmapUtilTests.java b/tests/src/com/android/contacts/util/BitmapUtilTests.java
new file mode 100644
index 000000000..ee7ebc06e
--- /dev/null
+++ b/tests/src/com/android/contacts/util/BitmapUtilTests.java
@@ -0,0 +1,121 @@
+/*
+ * 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.util;
+
+import android.graphics.Bitmap;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * Tests for {@link com.android.contacts.util.BitmapUtil}.
+ */
+@SmallTest
+public class BitmapUtilTests extends AndroidTestCase {
+ public void testGetSmallerExtentFromBytes1() throws Exception {
+ assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(100, 100)));
+ assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(100, 100)));
+ }
+
+ public void testGetSmallerExtentFromBytes2() throws Exception {
+ assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(200, 50)));
+ assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(200, 50)));
+ }
+
+ public void testGetSmallerExtentFromBytes3() throws Exception {
+ assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(40, 150)));
+ assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(40, 150)));
+ }
+
+ public void testFindOptimalSampleSizeExact() throws Exception {
+ assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 512));
+ }
+
+ public void testFindOptimalSampleSizeBigger() throws Exception {
+ assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 1024));
+ }
+
+ public void testFindOptimalSampleSizeSmaller1() throws Exception {
+ assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 256));
+ }
+
+ public void testFindOptimalSampleSizeSmaller2() throws Exception {
+ assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 230));
+ }
+
+ public void testFindOptimalSampleSizeSmaller3() throws Exception {
+ assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 129));
+ }
+
+ public void testFindOptimalSampleSizeSmaller4() throws Exception {
+ assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 128));
+ }
+
+ public void testFindOptimalSampleSizeUnknownOriginal() throws Exception {
+ assertEquals(1, BitmapUtil.findOptimalSampleSize(-1, 128));
+ }
+
+ public void testFindOptimalSampleSizeUnknownTarget() throws Exception {
+ assertEquals(1, BitmapUtil.findOptimalSampleSize(128, -1));
+ }
+
+ public void testDecodeWithSampleSize1() throws IOException {
+ assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 1));
+ assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 1));
+ }
+
+ public void testDecodeWithSampleSize2() throws IOException {
+ assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 2));
+ assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 2));
+ }
+
+ public void testDecodeWithSampleSize2a() throws IOException {
+ assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(50, 40), 2));
+ assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createPngRawData(50, 40), 2));
+ }
+
+ public void testDecodeWithSampleSize4() throws IOException {
+ assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 4));
+ assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 4));
+ }
+
+ private void assertBitmapSize(int expectedWidth, int expectedHeight, Bitmap bitmap) {
+ assertEquals(expectedWidth, bitmap.getWidth());
+ assertEquals(expectedHeight, bitmap.getHeight());
+ }
+
+ private byte[] createJpegRawData(int sourceWidth, int sourceHeight) throws IOException {
+ return createRawData(Bitmap.CompressFormat.JPEG, sourceWidth, sourceHeight);
+ }
+
+ private byte[] createPngRawData(int sourceWidth, int sourceHeight) throws IOException {
+ return createRawData(Bitmap.CompressFormat.PNG, sourceWidth, sourceHeight);
+ }
+
+ private byte[] createRawData(Bitmap.CompressFormat format, int sourceWidth,
+ int sourceHeight) throws IOException {
+ // Create a temp bitmap as our source
+ Bitmap b = Bitmap.createBitmap(sourceWidth, sourceHeight, Bitmap.Config.ARGB_8888);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ b.compress(format, 50, outputStream);
+ final byte[] data = outputStream.toByteArray();
+ outputStream.close();
+ return data;
+ }
+}
diff --git a/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java
new file mode 100644
index 000000000..88c9e29a2
--- /dev/null
+++ b/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java
@@ -0,0 +1,202 @@
+/*
+ * 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.util;
+
+import static android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.R;
+import com.android.contacts.preference.ContactsPreferences;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Unit tests for (@link ContactDisplayUtils}
+ */
+@SmallTest
+public class ContactDisplayUtilTests extends AndroidTestCase {
+
+ private static final String NAME_PRIMARY = "Name Primary";
+ private static final String NAME_ALTERNATIVE = "Name Alternative";
+
+ @Mock private ContactsPreferences mContactsPreferences;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ MockitoAnnotations.initMocks(this);
+ }
+
+ public void testIsCustomPhoneTypeReturnsTrue() {
+ assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
+ assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
+ }
+
+ public void testIsCustomPhoneTypeReturnsFalse() {
+ assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_HOME));
+ assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_FAX_WORK));
+ assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_MOBILE));
+ assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_OTHER));
+ }
+
+ public void testGetLabelForCallOrSmsReturnsCustomLabel() {
+ final CharSequence smsResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
+ "expected sms label", ContactDisplayUtils.INTERACTION_SMS, getContext());
+ assertEquals("expected sms label", smsResult);
+
+ final CharSequence callResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
+ "expected call label", ContactDisplayUtils.INTERACTION_CALL, getContext());
+ assertEquals("expected call label", callResult);
+ }
+
+ public void testGetLabelForCallOrSmsReturnsCallLabels() {
+ CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
+ ContactDisplayUtils.INTERACTION_CALL, getContext());
+ CharSequence expected = getContext().getResources().getText(R.string.call_home);
+ assertEquals(expected, result);
+
+ result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
+ ContactDisplayUtils.INTERACTION_CALL, getContext());
+ expected = getContext().getResources().getText(R.string.call_mobile);
+ assertEquals(expected, result);
+ }
+
+ public void testGetLabelForCallOrSmsReturnsSmsLabels() {
+ CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
+ ContactDisplayUtils.INTERACTION_SMS, getContext());
+ CharSequence expected = getContext().getResources().getText(R.string.sms_home);
+ assertEquals(expected, result);
+
+ result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
+ ContactDisplayUtils.INTERACTION_SMS, getContext());
+ expected = getContext().getResources().getText(R.string.sms_mobile);
+ assertEquals(expected, result);
+ }
+
+ public void testGetPhoneLabelResourceIdReturnsOther() {
+ assertEquals(R.string.call_other, ContactDisplayUtils.getPhoneLabelResourceId(null));
+ }
+
+ public void testGetPhoneLabelResourceIdReturnsMatchHome() {
+ assertEquals(R.string.call_home, ContactDisplayUtils.getPhoneLabelResourceId(
+ Phone.TYPE_HOME));
+ }
+
+ public void testGetSmsLabelResourceIdReturnsOther() {
+ assertEquals(R.string.sms_other, ContactDisplayUtils.getSmsLabelResourceId(null));
+ }
+
+ public void testGetSmsLabelResourceIdReturnsMatchHome() {
+ assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
+ }
+
+ public void testGetPreferredDisplayName_NullContactsPreferences() {
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, null));
+ }
+
+ public void testGetPreferredDisplayName_NullContactsPreferences_NullAlternative() {
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, null,
+ null));
+ }
+
+ public void testGetPreferredDisplayName_NullContactsPreferences_NullPrimary() {
+ assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(null,
+ NAME_ALTERNATIVE, null));
+ }
+
+ public void testGetPreferredDisplayName_NullContactsPreferences_BothNull() {
+ assertNull(ContactDisplayUtils.getPreferredDisplayName(null, null, null));
+ }
+
+ public void testGetPreferredDisplayName_EmptyAlternative() {
+ Mockito.when(mContactsPreferences.getDisplayOrder())
+ .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, "",
+ mContactsPreferences));
+ }
+
+ public void testGetPreferredDisplayName_InvalidPreference() {
+ Mockito.when(mContactsPreferences.getDisplayOrder()).thenReturn(-1);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+
+ public void testGetPreferredDisplayName_Primary() {
+ Mockito.when(mContactsPreferences.getDisplayOrder())
+ .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+
+ public void testGetPreferredDisplayName_Alternative() {
+ Mockito.when(mContactsPreferences.getDisplayOrder())
+ .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+ assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+
+ public void testGetPreferredSortName_NullContactsPreferences() {
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, null));
+ }
+
+ public void testGetPreferredSortName_NullContactsPreferences_NullAlternative() {
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, null,
+ null));
+ }
+
+ public void testGetPreferredSortName_NullContactsPreferences_NullPrimary() {
+ assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(null,
+ NAME_ALTERNATIVE, null));
+ }
+
+ public void testGetPreferredSortName_NullContactsPreferences_BothNull() {
+ assertNull(ContactDisplayUtils.getPreferredSortName(null, null, null));
+ }
+
+ public void testGetPreferredSortName_EmptyAlternative() {
+ Mockito.when(mContactsPreferences.getSortOrder())
+ .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, "",
+ mContactsPreferences));
+ }
+
+ public void testGetPreferredSortName_InvalidPreference() {
+ Mockito.when(mContactsPreferences.getSortOrder()).thenReturn(-1);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+
+ public void testGetPreferredSortName_Primary() {
+ Mockito.when(mContactsPreferences.getSortOrder())
+ .thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
+ assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+
+ public void testGetPreferredSortName_Alternative() {
+ Mockito.when(mContactsPreferences.getSortOrder())
+ .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+ assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+ NAME_ALTERNATIVE, mContactsPreferences));
+ }
+}
diff --git a/tests/src/com/android/contacts/util/SearchUtilTest.java b/tests/src/com/android/contacts/util/SearchUtilTest.java
new file mode 100644
index 000000000..e2156ca80
--- /dev/null
+++ b/tests/src/com/android/contacts/util/SearchUtilTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.util;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link SearchUtil}.
+ */
+@SmallTest
+public class SearchUtilTest extends TestCase {
+
+ public void testFindMatchingLine() {
+ final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+ "test@google.com\nhello\nblah\n'leading punc";
+
+ SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(actual, "poten");
+ assertEquals("With potentially many lines.", matched.line);
+ assertEquals(5, matched.startIndex);
+
+ // Full line match.
+ matched = SearchUtil.findMatchingLine(actual, "hello");
+ assertEquals("hello", matched.line);
+ assertEquals(0, matched.startIndex);
+
+ // First line match
+ matched = SearchUtil.findMatchingLine(actual, "this");
+ assertEquals("this is a long test string.", matched.line);
+ assertEquals(0, matched.startIndex);
+
+ // Last line match
+ matched = SearchUtil.findMatchingLine(actual, "punc");
+ assertEquals("'leading punc", matched.line);
+ assertEquals(9, matched.startIndex);
+ }
+
+ public void testContains() {
+ final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+ "test@google.com\nhello\nblah\n'leading punc";
+ assertEquals(0, SearchUtil.contains(actual, "this"));
+ assertEquals(10, SearchUtil.contains(actual, "lon"));
+
+ assertEquals(1, SearchUtil.contains("'leading punc", "lead"));
+ assertEquals(9, SearchUtil.contains("'leading punc", "punc"));
+
+ }
+
+ public void testContainsNotFound() {
+ final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+ "test@google.com\nhello\nblah\n'leading punc";
+
+ // Non-prefix
+ assertEquals(-1, SearchUtil.contains(actual, "ith"));
+ assertEquals(-1, SearchUtil.contains(actual, "ing"));
+
+ // Complete misses
+ assertEquals(-1, SearchUtil.contains(actual, "thisx"));
+ assertEquals(-1, SearchUtil.contains(actual, "manyx"));
+ assertEquals(-1, SearchUtil.contains(actual, "hellox"));
+
+ // Test for partial match of start of query to end of line
+ assertEquals(-1, SearchUtil.contains(actual, "punctual"));
+ }
+
+ public void testFindNextTokenStart() {
+ final String actual = "....hello.kitty";
+ // 012345678901234
+
+ // Find first token.
+ assertEquals(4, SearchUtil.findNextTokenStart(actual, 0));
+ assertEquals(4, SearchUtil.findNextTokenStart(actual, 1));
+ assertEquals(4, SearchUtil.findNextTokenStart(actual, 2));
+ assertEquals(4, SearchUtil.findNextTokenStart(actual, 3));
+
+ // Find second token.
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 4));
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 5));
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 6));
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 7));
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 8));
+ assertEquals(10, SearchUtil.findNextTokenStart(actual, 9));
+
+ // No token.
+ assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 10));
+ assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 11));
+ assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 12));
+ assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 13));
+ assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 14));
+ }
+
+ public void testCleanStartAndEndOfSearchQuery() {
+ assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("...test..."));
+ assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" test "));
+ assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" ||test"));
+ assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("test.."));
+ }
+
+}
diff --git a/tests/src/com/android/contacts/util/SyncUtilTests.java b/tests/src/com/android/contacts/util/SyncUtilTests.java
new file mode 100644
index 000000000..508ff04a0
--- /dev/null
+++ b/tests/src/com/android/contacts/util/SyncUtilTests.java
@@ -0,0 +1,48 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * Tests for SyncUtil.
+ */
+@SmallTest
+public class SyncUtilTests extends AndroidTestCase {
+ private static final String TAG = "SyncUtilTests";
+
+ private static final String GOOGLE_TYPE = "com.google";
+ private static final String NOT_GOOGLE_TYPE = "com.abc";
+ private static final String ACCOUNT_NAME = "ACCOUNT_NAME";
+
+ private final Account mGoogleAccount;
+ private final Account mOtherAccount;
+
+ public SyncUtilTests() {
+ mGoogleAccount = new Account(ACCOUNT_NAME, GOOGLE_TYPE);
+ mOtherAccount = new Account(ACCOUNT_NAME, NOT_GOOGLE_TYPE);
+ }
+
+ public void testIsUnsyncableGoogleAccount() throws Exception {
+ // The account names of mGoogleAccount and mOtherAccount are not valid, so both accounts
+ // are not syncable.
+ assertTrue(SyncUtil.isUnsyncableGoogleAccount(mGoogleAccount));
+ assertFalse(SyncUtil.isUnsyncableGoogleAccount(mOtherAccount));
+ assertFalse(SyncUtil.isUnsyncableGoogleAccount(null));
+ }
+}
diff --git a/tests/src/com/android/contacts/widget/CompositeListAdapterTest.java b/tests/src/com/android/contacts/widget/CompositeListAdapterTest.java
index f7dc08e27..a46a17c6b 100644
--- a/tests/src/com/android/contacts/widget/CompositeListAdapterTest.java
+++ b/tests/src/com/android/contacts/widget/CompositeListAdapterTest.java
@@ -18,6 +18,7 @@ package com.android.contacts.widget;
import android.content.Context;
import android.database.DataSetObserver;
import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
@@ -32,6 +33,7 @@ import java.util.List;
/**
* Tests for {@link CompositeListAdapter}.
*/
+@SmallTest
public class CompositeListAdapterTest extends AndroidTestCase {
private final class MockAdapter extends ArrayAdapter<String> {